|  | #!/bin/sh | 
|  | # | 
|  | # this script sets up a Subversion repository for Makefile in the | 
|  | # first ever git merge, as if it were done with svnmerge (SVN 1.5+) | 
|  | # | 
|  |  | 
|  | rm -rf foo.svn foo | 
|  | set -e | 
|  |  | 
|  | mkdir foo.svn | 
|  | svnadmin create foo.svn | 
|  | svn co file://`pwd`/foo.svn foo | 
|  |  | 
|  | commit() { | 
|  | i=$(( $1 + 1 )) | 
|  | shift; | 
|  | svn commit -m "(r$i) $*" >/dev/null || exit 1 | 
|  | echo $i | 
|  | } | 
|  |  | 
|  | say() { | 
|  | echo "[1m * $*[0m" | 
|  | } | 
|  |  | 
|  | i=0 | 
|  | cd foo | 
|  | mkdir trunk | 
|  | mkdir branches | 
|  | mkdir tags | 
|  | svn add trunk branches tags | 
|  | i=$(commit $i "Setup trunk, branches, and tags") | 
|  |  | 
|  | git cat-file blob 6683463e:Makefile > trunk/Makefile | 
|  | svn add trunk/Makefile | 
|  |  | 
|  | say "Committing ANCESTOR" | 
|  | i=$(commit $i "ancestor") | 
|  | svn cp trunk branches/left | 
|  |  | 
|  | say "Committing BRANCH POINT" | 
|  | i=$(commit $i "make left branch") | 
|  | svn cp trunk branches/right | 
|  |  | 
|  | say "Committing other BRANCH POINT" | 
|  | i=$(commit $i "make right branch") | 
|  |  | 
|  | say "Committing LEFT UPDATE" | 
|  | git cat-file blob 5873b67e:Makefile > branches/left/Makefile | 
|  | i=$(commit $i "left update 1") | 
|  |  | 
|  | git cat-file blob 75118b13:Makefile > branches/right/Makefile | 
|  | say "Committing RIGHT UPDATE" | 
|  | pre_right_update_1=$i | 
|  | i=$(commit $i "right update 1") | 
|  |  | 
|  | say "Making more commits on LEFT" | 
|  | git cat-file blob ff5ebe39:Makefile > branches/left/Makefile | 
|  | i=$(commit $i "left update 2") | 
|  | git cat-file blob b5039db6:Makefile > branches/left/Makefile | 
|  | i=$(commit $i "left update 3") | 
|  |  | 
|  | say "Making a LEFT SUB-BRANCH" | 
|  | svn cp branches/left branches/left-sub | 
|  | sub_left_make=$i | 
|  | i=$(commit $i "make left sub-branch") | 
|  |  | 
|  | say "Making a commit on LEFT SUB-BRANCH" | 
|  | echo "crunch" > branches/left-sub/README | 
|  | svn add branches/left-sub/README | 
|  | i=$(commit $i "left sub-branch update 1") | 
|  |  | 
|  | say "Merging LEFT to TRUNK" | 
|  | svn update | 
|  | cd trunk | 
|  | svn merge ../branches/left --accept postpone | 
|  | git cat-file blob b5039db6:Makefile > Makefile | 
|  | svn resolved Makefile | 
|  | i=$(commit $i "Merge left to trunk 1") | 
|  | cd .. | 
|  |  | 
|  | say "Making more commits on LEFT and RIGHT" | 
|  | echo "touche" > branches/left/zlonk | 
|  | svn add branches/left/zlonk | 
|  | i=$(commit $i "left update 4") | 
|  | echo "thwacke" > branches/right/bang | 
|  | svn add branches/right/bang | 
|  | i=$(commit $i "right update 2") | 
|  |  | 
|  | say "Squash merge of RIGHT tip 2 commits onto TRUNK" | 
|  | svn update | 
|  | cd trunk | 
|  | svn merge -r$pre_right_update_1:$i ../branches/right | 
|  | i=$(commit $i "Cherry-pick right 2 commits to trunk") | 
|  | cd .. | 
|  |  | 
|  | say "Merging RIGHT to TRUNK" | 
|  | svn update | 
|  | cd trunk | 
|  | svn merge ../branches/right --accept postpone | 
|  | git cat-file blob b51ad431:Makefile > Makefile | 
|  | svn resolved Makefile | 
|  | i=$(commit $i "Merge right to trunk 1") | 
|  | cd .. | 
|  |  | 
|  | say "Making more commits on RIGHT and TRUNK" | 
|  | echo "whamm" > branches/right/urkkk | 
|  | svn add branches/right/urkkk | 
|  | i=$(commit $i "right update 3") | 
|  | echo "pow" > trunk/vronk | 
|  | svn add trunk/vronk | 
|  | i=$(commit $i "trunk update 1") | 
|  |  | 
|  | say "Merging RIGHT to LEFT SUB-BRANCH" | 
|  | svn update | 
|  | cd branches/left-sub | 
|  | svn merge ../right --accept postpone | 
|  | git cat-file blob b51ad431:Makefile > Makefile | 
|  | svn resolved Makefile | 
|  | i=$(commit $i "Merge right to left sub-branch") | 
|  | cd ../.. | 
|  |  | 
|  | say "Making more commits on LEFT SUB-BRANCH and LEFT" | 
|  | echo "zowie" > branches/left-sub/wham_eth | 
|  | svn add branches/left-sub/wham_eth | 
|  | pre_sub_left_update_2=$i | 
|  | i=$(commit $i "left sub-branch update 2") | 
|  | sub_left_update_2=$i | 
|  | echo "eee_yow" > branches/left/glurpp | 
|  | svn add branches/left/glurpp | 
|  | i=$(commit $i "left update 5") | 
|  |  | 
|  | say "Cherry pick LEFT SUB-BRANCH commit to LEFT" | 
|  | svn update | 
|  | cd branches/left | 
|  | svn merge -r$pre_sub_left_update_2:$sub_left_update_2 ../left-sub | 
|  | i=$(commit $i "Cherry-pick left sub-branch commit to left") | 
|  | cd ../.. | 
|  |  | 
|  | say "Merging LEFT SUB-BRANCH back to LEFT" | 
|  | svn update | 
|  | cd branches/left | 
|  | # it's only a merge because the previous merge cherry-picked the top commit | 
|  | svn merge -r$sub_left_make:$sub_left_update_2 ../left-sub --accept postpone | 
|  | i=$(commit $i "Merge left sub-branch to left") | 
|  | cd ../.. | 
|  |  | 
|  | say "Merging EVERYTHING to TRUNK" | 
|  | svn update | 
|  | cd trunk | 
|  | svn merge ../branches/left --accept postpone | 
|  | svn resolved bang | 
|  | i=$(commit $i "Merge left to trunk 2") | 
|  | # this merge, svn happily updates the mergeinfo, but there is actually | 
|  | # nothing to merge.  git-svn will not make a meaningless merge commit. | 
|  | svn merge ../branches/right --accept postpone | 
|  | i=$(commit $i "non-merge right to trunk 2") | 
|  | cd .. | 
|  |  | 
|  | say "Branching b1 from trunk" | 
|  | svn update | 
|  | svn cp trunk branches/b1 | 
|  | i=$(commit $i "make b1 branch from trunk") | 
|  |  | 
|  | say "Branching b2 from trunk" | 
|  | svn update | 
|  | svn cp trunk branches/b2 | 
|  | i=$(commit $i "make b2 branch from trunk") | 
|  |  | 
|  | say "Make a commit to b2" | 
|  | svn update | 
|  | cd branches/b2 | 
|  | echo "b2" > b2file | 
|  | svn add b2file | 
|  | i=$(commit $i "b2 update 1") | 
|  | cd ../.. | 
|  |  | 
|  | say "Make a commit to b1" | 
|  | svn update | 
|  | cd branches/b1 | 
|  | echo "b1" > b1file | 
|  | svn add b1file | 
|  | i=$(commit $i "b1 update 1") | 
|  | cd ../.. | 
|  |  | 
|  | say "Merge b1 to trunk" | 
|  | svn update | 
|  | cd trunk | 
|  | svn merge ../branches/b1/ --accept postpone | 
|  | i=$(commit $i "Merge b1 to trunk") | 
|  | cd .. | 
|  |  | 
|  | say "Make a commit to trunk before merging trunk to b2" | 
|  | svn update | 
|  | cd trunk | 
|  | echo "trunk" > trunkfile | 
|  | svn add trunkfile | 
|  | i=$(commit $i "trunk commit before merging trunk to b2") | 
|  | cd .. | 
|  |  | 
|  | say "Merge trunk to b2" | 
|  | svn update | 
|  | cd branches/b2 | 
|  | svn merge ../../trunk/ --accept postpone | 
|  | i=$(commit $i "Merge trunk to b2") | 
|  | cd ../.. | 
|  |  | 
|  | say "Merge b2 to trunk" | 
|  | svn update | 
|  | cd trunk | 
|  | svn merge ../branches/b2/ --accept postpone | 
|  | svn resolved b1file | 
|  | svn resolved trunkfile | 
|  | i=$(commit $i "Merge b2 to trunk") | 
|  | cd .. | 
|  |  | 
|  | say "Creating f1 from trunk with a new file" | 
|  | svn update | 
|  | svn cp trunk branches/f1 | 
|  | cd branches/f1 | 
|  | echo "f1" > f1file | 
|  | svn add f1file | 
|  | cd ../.. | 
|  | i=$(commit $i "make f1 branch from trunk with a new file") | 
|  |  | 
|  | say "Creating f2 from trunk with a new file" | 
|  | svn update | 
|  | svn cp trunk branches/f2 | 
|  | cd branches/f2 | 
|  | echo "f2" > f2file | 
|  | svn add f2file | 
|  | cd ../.. | 
|  | i=$(commit $i "make f2 branch from trunk with a new file") | 
|  |  | 
|  | say "Merge f1 and f2 to trunk in one go" | 
|  | svn update | 
|  | cd trunk | 
|  | svn merge ../branches/f1/ --accept postpone | 
|  | svn merge ../branches/f2/ --accept postpone | 
|  | i=$(commit $i "Merge f1 and f2 to trunk") | 
|  | cd .. | 
|  |  | 
|  | say "Adding subdirectory to LEFT" | 
|  | svn update | 
|  | cd branches/left | 
|  | mkdir subdir | 
|  | echo "Yeehaw" > subdir/cowboy | 
|  | svn add subdir | 
|  | i=$(commit $i "add subdirectory to left branch") | 
|  | cd ../../ | 
|  |  | 
|  | say "Merging LEFT to TRUNK" | 
|  | svn update | 
|  | cd trunk | 
|  | svn merge ../branches/left --accept postpone | 
|  | i=$(commit $i "merge left to trunk") | 
|  | cd .. | 
|  |  | 
|  | say "Make PARTIAL branch" | 
|  | svn update | 
|  | svn cp trunk/subdir branches/partial | 
|  | i=$(commit $i "make partial branch") | 
|  |  | 
|  | say "Make a commit to PARTIAL" | 
|  | svn update | 
|  | cd branches/partial | 
|  | echo "racecar" > palindromes | 
|  | svn add palindromes | 
|  | i=$(commit $i "partial update") | 
|  | cd ../../ | 
|  |  | 
|  | say "Merge PARTIAL to TRUNK" | 
|  | svn update | 
|  | cd trunk/subdir | 
|  | svn merge ../../branches/partial --accept postpone | 
|  | i=$(commit $i "merge partial to trunk") | 
|  | cd ../../ | 
|  |  | 
|  | say "Tagging trunk" | 
|  | svn update | 
|  | svn cp trunk tags/v1.0 | 
|  | i=$(commit $i "tagging v1.0") | 
|  |  | 
|  | say "Branching BUGFIX from v1.0" | 
|  | svn update | 
|  | svn cp tags/v1.0 branches/bugfix | 
|  | i=$(commit $i "make bugfix branch from tag") | 
|  |  | 
|  | say "Make a commit to BUGFIX" | 
|  | svn update | 
|  | cd branches/bugfix/ | 
|  | echo "kayak" >> subdir/palindromes | 
|  | i=$(commit $i "commit to bugfix") | 
|  | cd ../../ | 
|  |  | 
|  | say "Merge BUGFIX to TRUNK" | 
|  | svn update | 
|  | cd trunk | 
|  | svn merge ../branches/bugfix/ --accept postpone | 
|  | i=$(commit $i "Merge BUGFIX to TRUNK") | 
|  | cd .. | 
|  |  | 
|  | cd .. | 
|  | svnadmin dump foo.svn > svn-mergeinfo.dump | 
|  |  | 
|  | rm -rf foo foo.svn |