Advertisement
Guest User

test case of a git find-similar-branch function

a guest
Feb 22nd, 2013
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 2.81 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. set -e
  4.  
  5. root=/tmp/gittest
  6. mkdir -p $root
  7.  
  8. a=$root/a
  9. b=$root/b
  10.  
  11. rm -RfI $a $b || true
  12.  
  13. genTestRepo() {
  14.   local isB="$1"
  15.   local r="$2"
  16.  
  17.   mkdir $r
  18.   cd $r
  19.   git init
  20.  
  21.   echo "abc def" > a.txt
  22.   echo "xyz" > b.txt
  23.   git add a.txt b.txt
  24.   GIT_AUTHOR_DATE='Fri Feb 22 10:00:00 2013 +0100' git commit -m "commit 1 - $r"
  25.   sleep 1
  26.  
  27.   if [ -z "$isB" ]; then # make some garbage
  28.     echo "1 2 3" >>z.txt
  29.     git add z.txt
  30.     GIT_AUTHOR_DATE='Fri Feb 22 11:00:00 2013 +0100' git commit -m "commit 1b * $r"
  31.     sleep 1
  32.   fi
  33.  
  34.   echo "123" > c.txt
  35.   git add c.txt
  36.   GIT_AUTHOR_DATE='Fri Feb 22 12:00:00 2013 +0100' git commit -m "commit 2 - $r"
  37.   sleep 1
  38.  
  39.   if [ -n "$isB" ]; then # make some garbage
  40.     echo "A B C" >>x.txt
  41.     git add x.txt
  42.     GIT_AUTHOR_DATE='Fri Feb 22 13:00:00 2013 +0100' git commit -m "commit 2b * $r"
  43.     sleep 1
  44.   fi
  45.  
  46.   rm b.txt
  47.   git rm b.txt
  48.   GIT_AUTHOR_DATE='Fri Feb 22 14:00:00 2013 +0100' git commit -m "commit 3 - $r"
  49.   sleep 1
  50.  
  51.   rm a.txt
  52.   echo "another line" >a.txt
  53.   git add a.txt
  54.   GIT_AUTHOR_DATE='Fri Feb 22 15:00:00 2013 +0100' git commit -m "last common commit"
  55.   sleep 1
  56.  
  57.   if [ -n "$isB" ]; then # make this branch newer
  58.     echo "2nd line" >>a.txt
  59.     git add a.txt
  60.     GIT_AUTHOR_DATE='Fri Feb 22 16:00:00 2013 +0100' git commit -m "commit 4 * $b"
  61.     sleep 1
  62.  
  63.     echo "xxx" >d.txt
  64.     git add d.txt
  65.     GIT_AUTHOR_DATE='Fri Feb 22 17:00:00 2013 +0100' git commit -m "commit 5 * $b"
  66.     sleep 1
  67.   fi
  68.  
  69.   git log | cat
  70. }
  71.  
  72. genTestRepo ""  "$a"
  73. genTestRepo "1" "$b"
  74.  
  75. echo "== rebase new master =="
  76. cd $b
  77. git branch -m master master_tmpnew
  78. git remote add origin file://$a
  79. git fetch origin master:refs/remotes/origin/master
  80. git checkout master
  81.  
  82. #echo "== rebase new master (easy way) =="
  83. #git checkout master_tmpnew
  84. #git rebase master
  85.  
  86. echo "== rebase new master (safe way) =="
  87. echo "  find:"
  88. lastbr=
  89. lastrest=
  90. revU=  # Update
  91. revB=  # Base
  92. rm -f rev.*.tmp
  93. (
  94.   git log --format='format:b %H %at %an %ae %f' master
  95.   echo
  96.   git log --format='format:u %H %at %an %ae %f' master_tmpnew
  97. ) | sort -r -t' ' -k3 | while read br rev rest; do
  98.   echo "? $br $rev $rest"
  99.   [ "$br" != "u" ] || revU="$rev"
  100.   [ "$br" != "b" ] || revB="$rev"
  101.   if [ "$lastrest" = "$rest" -a "$lastbr" != "$br" ]; then
  102.     echo "found match: base $revB  updae $revU"
  103.     echo "$revB" >rev.base.tmp
  104.     echo "$revU" >rev.update.tmp
  105.     break
  106.   fi
  107.   lastrest="$rest"
  108.   lastbr="$br"
  109. done
  110. echo "  do:"
  111. if [ ! -f rev.base.tmp ]; then
  112.   echo "No matching revision found"
  113.   exit 1
  114. fi
  115. revB="`cat rev.base.tmp`"
  116. revU="`cat rev.update.tmp`"
  117. git rebase --onto $revB $revU master_tmpnew
  118.  
  119. echo "== merge =="
  120. git checkout master
  121. git merge --ff-only master_tmpnew
  122.  
  123. echo "== log =="
  124. #echo "== push =="
  125. #git push origin master
  126. git log | cat
  127.  
  128. echo "done."
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement