#!/bin/sh # # Copyright (c) 2012 Peter Baumann # global test_description := ''git svn reset clears memoized caches'' source ./lib-git-svn.sh global svn_ver := $[svn --version --quiet] matchstr $svn_ver { 0.* | 1.[0-4].* { global skip_all := ""skipping git-svn test - SVN too old ($svn_ver)"" test_done } } # ... a - b - m <- trunk # \ / # ... c <- branch1 # # SVN Commits not interesting for this test are abbreviated with "..." # test_expect_success 'initialize source svn repo' ' svn_cmd mkdir -m "create trunk" "$svnrepo"/trunk && svn_cmd mkdir -m "create branches" "$svnrepo/branches" && svn_cmd co "$svnrepo"/trunk "$SVN_TREE" && ( cd "$SVN_TREE" && touch foo && svn_cmd add foo && svn_cmd commit -m "a" && svn_cmd cp -m branch "$svnrepo"/trunk "$svnrepo"/branches/branch1 && svn_cmd switch "$svnrepo"/branches/branch1 && touch bar && svn_cmd add bar && svn_cmd commit -m b && svn_cmd switch "$svnrepo"/trunk && touch baz && svn_cmd add baz && svn_cmd commit -m c && svn_cmd up && svn_cmd merge "$svnrepo"/branches/branch1 && svn_cmd commit -m "m" ) && rm -rf "$SVN_TREE" ' test_expect_success 'fetch to merge-base (a)' ' git svn init -s "$svnrepo" && git svn fetch --revision BASE:3 ' # git svn rebase looses the merge commit # # ... a - b - m <- trunk # \ # ... c # test_expect_success 'rebase looses SVN merge (m)' ' git svn rebase && git svn fetch && test 1 = $(git cat-file -p master|grep parent|wc -l) ' # git svn fetch creates correct history with merge commit # # ... a - b - m <- trunk # \ / # ... c <- branch1 # test_expect_success 'reset and fetch gets the SVN merge (m) correctly' ' git svn reset -r 3 && git reset --hard origin/trunk && git svn fetch && test 2 = $(git cat-file -p origin/trunk|grep parent|wc -l) ' test_done (CommandList children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:test_description) op: Equal rhs: {(SQ <"git svn reset clears memoized caches">)} spids: [13] ) ] spids: [13] ) (C {(.)} {(./lib-git-svn.sh)}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:svn_ver) op: Equal rhs: { (DQ (CommandSubPart command_list: (CommandList children:[(C {(svn)} {(--version)} {(--quiet)})]) left_token: spids: [25 31] ) ) } spids: [23] ) ] spids: [23] ) (Case to_match: {($ VSub_Name "$svn_ver")} arms: [ (case_arm pat_list: [ {(0.) (Lit_Other "*")} {(1.) (Lit_Other "[") (0-4) (Lit_Other "]") (.) (Lit_Other "*")} ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:skip_all) op: Equal rhs: {(DQ ("skipping git-svn test - SVN too old (") ($ VSub_Name "$svn_ver") (")"))} spids: [54] ) ] spids: [54] ) (C {(test_done)}) ] spids: [40 51 65 -1] ) ] spids: [34 38 67] ) (C {(test_expect_success)} {(SQ <"initialize source svn repo">)} { (SQ <"\n"> <"\tsvn_cmd mkdir -m \"create trunk\" \"$svnrepo\"/trunk &&\n"> <"\tsvn_cmd mkdir -m \"create branches\" \"$svnrepo/branches\" &&\n"> <"\tsvn_cmd co \"$svnrepo\"/trunk \"$SVN_TREE\" &&\n"> <"\t(\n"> <"\t\tcd \"$SVN_TREE\" &&\n"> <"\t\ttouch foo &&\n"> <"\t\tsvn_cmd add foo &&\n"> <"\t\tsvn_cmd commit -m \"a\" &&\n"> <"\t\tsvn_cmd cp -m branch \"$svnrepo\"/trunk \"$svnrepo\"/branches/branch1 &&\n"> <"\t\tsvn_cmd switch \"$svnrepo\"/branches/branch1 &&\n"> <"\t\ttouch bar &&\n"> <"\t\tsvn_cmd add bar &&\n"> <"\t\tsvn_cmd commit -m b &&\n"> <"\t\tsvn_cmd switch \"$svnrepo\"/trunk &&\n"> <"\t\ttouch baz &&\n"> <"\t\tsvn_cmd add baz &&\n"> <"\t\tsvn_cmd commit -m c &&\n"> <"\t\tsvn_cmd up &&\n"> <"\t\tsvn_cmd merge \"$svnrepo\"/branches/branch1 &&\n"> <"\t\tsvn_cmd commit -m \"m\"\n"> <"\t) &&\n"> <"\trm -rf \"$SVN_TREE\"\n"> ) } ) (C {(test_expect_success)} {(SQ <"fetch to merge-base (a)">)} {(SQ <"\n"> <"\tgit svn init -s \"$svnrepo\" &&\n"> <"\tgit svn fetch --revision BASE:3\n">)} ) (C {(test_expect_success)} {(SQ <"rebase looses SVN merge (m)">)} { (SQ <"\n"> <"\tgit svn rebase &&\n"> <"\tgit svn fetch &&\n"> <"\ttest 1 = $(git cat-file -p master|grep parent|wc -l)\n"> ) } ) (C {(test_expect_success)} {(SQ <"reset and fetch gets the SVN merge (m) correctly">)} { (SQ <"\n"> <"\tgit svn reset -r 3 &&\n"> <"\tgit reset --hard origin/trunk &&\n"> <"\tgit svn fetch &&\n"> <"\ttest 2 = $(git cat-file -p origin/trunk|grep parent|wc -l)\n"> ) } ) (C {(test_done)}) ] )