#!/bin/sh # # Copyright (c) 2006 Eric Wong global test_description := ''git svn commit-diff clobber'' source ./lib-git-svn.sh test_expect_success 'initialize repo' ' mkdir import && ( cd import && echo initial >file && svn_cmd import -m "initial" . "$svnrepo" ) && echo initial > file && git update-index --add file && git commit -a -m "initial" ' test_expect_success 'commit change from svn side' ' svn_cmd co "$svnrepo" t.svn && ( cd t.svn && echo second line from svn >>file && poke file && svn_cmd commit -m "second line from svn" ) && rm -rf t.svn ' test_expect_success 'commit conflicting change from git' ' echo second line from git >> file && git commit -a -m "second line from git" && test_must_fail git svn commit-diff -r1 HEAD~1 HEAD "$svnrepo" ' test_expect_success 'commit complementing change from git' ' git reset --hard HEAD~1 && echo second line from svn >> file && git commit -a -m "second line from svn" && echo third line from git >> file && git commit -a -m "third line from git" && git svn commit-diff -r2 HEAD~1 HEAD "$svnrepo" ' test_expect_success 'dcommit fails to commit because of conflict' ' git svn init "$svnrepo" && git svn fetch && git reset --hard refs/remotes/git-svn && svn_cmd co "$svnrepo" t.svn && ( cd t.svn && echo fourth line from svn >>file && poke file && svn_cmd commit -m "fourth line from svn" ) && rm -rf t.svn && echo "fourth line from git" >> file && git commit -a -m "fourth line from git" && test_must_fail git svn dcommit ' test_expect_success 'dcommit does the svn equivalent of an index merge' " git reset --hard refs/remotes/git-svn && echo 'index merge' > file2 && git update-index --add file2 && git commit -a -m 'index merge' && echo 'more changes' >> file2 && git update-index file2 && git commit -a -m 'more changes' && git svn dcommit " test_expect_success 'commit another change from svn side' ' svn_cmd co "$svnrepo" t.svn && ( cd t.svn && echo third line from svn >>file && poke file && svn_cmd commit -m "third line from svn" ) && rm -rf t.svn ' test_expect_success 'multiple dcommit from git svn will not clobber svn' " git reset --hard refs/remotes/git-svn && echo new file >> new-file && git update-index --add new-file && git commit -a -m 'new file' && echo clobber > file && git commit -a -m 'clobber' && test_must_fail git svn dcommit " test_expect_success 'check that rebase really failed' ' test -d .git/rebase-apply ' test_expect_success 'resolve, continue the rebase and dcommit' " echo clobber and I really mean it > file && git update-index file && git rebase --continue && git svn dcommit " test_done (CommandList children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:test_description) op: Equal rhs: {(SQ <"git svn commit-diff clobber">)} spids: [9] ) ] spids: [9] ) (C {(.)} {(./lib-git-svn.sh)}) (C {(test_expect_success)} {(SQ <"initialize repo">)} { (SQ <"\n"> <"\tmkdir import &&\n"> <"\t(\n"> <"\t\tcd import &&\n"> <"\t\techo initial >file &&\n"> <"\t\tsvn_cmd import -m \"initial\" . \"$svnrepo\"\n"> <"\t) &&\n"> <"\techo initial > file &&\n"> <"\tgit update-index --add file &&\n"> <"\tgit commit -a -m \"initial\"\n"> <"\t"> ) } ) (C {(test_expect_success)} {(SQ <"commit change from svn side">)} { (SQ <"\n"> <"\tsvn_cmd co \"$svnrepo\" t.svn &&\n"> <"\t(\n"> <"\t\tcd t.svn &&\n"> <"\t\techo second line from svn >>file &&\n"> <"\t\tpoke file &&\n"> <"\t\tsvn_cmd commit -m \"second line from svn\"\n"> <"\t) &&\n"> <"\trm -rf t.svn\n"> <"\t"> ) } ) (C {(test_expect_success)} {(SQ <"commit conflicting change from git">)} { (SQ <"\n"> <"\techo second line from git >> file &&\n"> <"\tgit commit -a -m \"second line from git\" &&\n"> <"\ttest_must_fail git svn commit-diff -r1 HEAD~1 HEAD \"$svnrepo\"\n"> ) } ) (C {(test_expect_success)} {(SQ <"commit complementing change from git">)} { (SQ <"\n"> <"\tgit reset --hard HEAD~1 &&\n"> <"\techo second line from svn >> file &&\n"> <"\tgit commit -a -m \"second line from svn\" &&\n"> <"\techo third line from git >> file &&\n"> <"\tgit commit -a -m \"third line from git\" &&\n"> <"\tgit svn commit-diff -r2 HEAD~1 HEAD \"$svnrepo\"\n"> <"\t"> ) } ) (C {(test_expect_success)} {(SQ <"dcommit fails to commit because of conflict">)} { (SQ <"\n"> <"\tgit svn init \"$svnrepo\" &&\n"> <"\tgit svn fetch &&\n"> <"\tgit reset --hard refs/remotes/git-svn &&\n"> <"\tsvn_cmd co \"$svnrepo\" t.svn &&\n"> <"\t(\n"> <"\t\tcd t.svn &&\n"> <"\t\techo fourth line from svn >>file &&\n"> <"\t\tpoke file &&\n"> <"\t\tsvn_cmd commit -m \"fourth line from svn\"\n"> <"\t) &&\n"> <"\trm -rf t.svn &&\n"> <"\techo \"fourth line from git\" >> file &&\n"> <"\tgit commit -a -m \"fourth line from git\" &&\n"> <"\ttest_must_fail git svn dcommit\n"> <"\t"> ) } ) (C {(test_expect_success)} {(SQ <"dcommit does the svn equivalent of an index merge">)} { (DQ ("\n") ("\tgit reset --hard refs/remotes/git-svn &&\n") ("\techo 'index merge' > file2 &&\n") ("\tgit update-index --add file2 &&\n") ("\tgit commit -a -m 'index merge' &&\n") ("\techo 'more changes' >> file2 &&\n") ("\tgit update-index file2 &&\n") ("\tgit commit -a -m 'more changes' &&\n") ("\tgit svn dcommit\n") ("\t") ) } ) (C {(test_expect_success)} {(SQ <"commit another change from svn side">)} { (SQ <"\n"> <"\tsvn_cmd co \"$svnrepo\" t.svn &&\n"> <"\t(\n"> <"\t\tcd t.svn &&\n"> <"\t\techo third line from svn >>file &&\n"> <"\t\tpoke file &&\n"> <"\t\tsvn_cmd commit -m \"third line from svn\"\n"> <"\t) &&\n"> <"\trm -rf t.svn\n"> <"\t"> ) } ) (C {(test_expect_success)} {(SQ <"multiple dcommit from git svn will not clobber svn">)} { (DQ ("\n") ("\tgit reset --hard refs/remotes/git-svn &&\n") ("\techo new file >> new-file &&\n") ("\tgit update-index --add new-file &&\n") ("\tgit commit -a -m 'new file' &&\n") ("\techo clobber > file &&\n") ("\tgit commit -a -m 'clobber' &&\n") ("\ttest_must_fail git svn dcommit\n") ("\t") ) } ) (C {(test_expect_success)} {(SQ <"check that rebase really failed">)} {(SQ <"\n"> <"\ttest -d .git/rebase-apply\n">)} ) (C {(test_expect_success)} {(SQ <"resolve, continue the rebase and dcommit">)} { (DQ ("\n") ("\techo clobber and I really mean it > file &&\n") ("\tgit update-index file &&\n") ("\tgit rebase --continue &&\n") ("\tgit svn dcommit\n") ("\t") ) } ) (C {(test_done)}) ] )