{"thread":{"id":"20389","subject":"[PATCH 12/13] Add simple test cases of git-vcs-cvs functionality","startedAt":"2009-08-05T05:02:22Z","lastAt":"2009-08-05T05:02:22Z","messageCount":1,"participants":["Daniel Barkalow"],"isPatch":true,"patchVersion":1,"patchTotal":13},"messages":[{"id":"119569","messageId":"alpine.LNX.2.00.0908050056150.2147@iabervon.org","threadId":"20389","inReplyTo":null,"subject":"[PATCH 12/13] Add simple test cases of git-vcs-cvs functionality","fromName":"Daniel Barkalow","fromEmail":"barkalow@iabervon.org","sentAt":"2009-08-05T05:02:22Z","receivedAt":"2009-08-05T05:02:22Z","isPatch":true,"sender":{"key":"barkalow@iabervon.org","avatar":"https://avatars.githubusercontent.com/u/55364219?v=4"},"body":"From: Johan Herland <johan@herland.net>\n\nSigned-off-by: Johan Herland <johan@herland.net>\n---\n t/t9800-foreign-vcs-cvs-basic.sh |  518 ++++++++++++++++++++++++++++++++++++++\n t/t9801-foreign-vcs-cvs-fetch.sh |  291 +++++++++++++++++++++\n t/test-lib.sh                    |    1 +\n 3 files changed, 810 insertions(+), 0 deletions(-)\n create mode 100755 t/t9800-foreign-vcs-cvs-basic.sh\n create mode 100755 t/t9801-foreign-vcs-cvs-fetch.sh\n\ndiff --git a/t/t9800-foreign-vcs-cvs-basic.sh b/t/t9800-foreign-vcs-cvs-basic.sh\nnew file mode 100755\nindex 0000000..78f5a98\n--- /dev/null\n+++ b/t/t9800-foreign-vcs-cvs-basic.sh\n@@ -0,0 +1,518 @@\n+#!/bin/sh\n+\n+test_description='git vcs-cvs basic tests'\n+. ./test-lib.sh\n+\n+if ! test_have_prereq PYTHON; then\n+\tsay 'skipping CVS foreign-vcs helper tests, python not available'\n+\ttest_done\n+fi\n+\n+CVS_EXEC=cvs\n+CVS_OPTS=\"-f -q\"\n+CVS=\"$CVS_EXEC $CVS_OPTS\"\n+\n+CVSROOT=$(pwd)/cvsroot\n+export CVSROOT\n+unset CVS_SERVER\n+\n+CVSMODULE=cvsmodule\n+GITREMOTE=cvsremote\n+\n+if ! type $CVS_EXEC >/dev/null 2>&1\n+then\n+\tsay 'skipping vcs-cvs tests, $CVS_EXEC not found'\n+\ttest_done\n+fi\n+\n+test_expect_success 'setup cvsroot' '$CVS init'\n+\n+test_expect_success '#1: setup a cvs module' '\n+\n+\tmkdir \"$CVSROOT/$CVSMODULE\" &&\n+\t$CVS co -d module-cvs $CVSMODULE &&\n+\t(\n+\t\tcd module-cvs &&\n+\t\tcat <<EOF >o_fortuna &&\n+O Fortuna\n+velut luna\n+statu variabilis,\n+\n+semper crescis\n+aut decrescis;\n+vita detestabilis\n+\n+nunc obdurat\n+et tunc curat\n+ludo mentis aciem,\n+\n+egestatem,\n+potestatem\n+dissolvit ut glaciem.\n+EOF\n+\t\t$CVS add o_fortuna &&\n+\t\tcat <<EOF >message &&\n+add \"O Fortuna\" lyrics\n+\n+These public domain lyrics make an excellent sample text.\n+EOF\n+\t\t$CVS commit -f -F message o_fortuna\n+\t)\n+'\n+\n+test_expect_success 'set up CVS repo as a foreign remote' '\n+\n+\tgit config \"user.name\" \"Test User\"\n+\tgit config \"user.email\" \"test@example.com\"\n+\tgit config \"remote.$GITREMOTE.vcs\" cvs\n+\tgit config \"remote.$GITREMOTE.cvsRoot\" \"$CVSROOT\"\n+\tgit config \"remote.$GITREMOTE.cvsModule\" \"$CVSMODULE\"\n+\tgit config \"remote.$GITREMOTE.fetch\" \\\n+\t\t\"+refs/cvs/$GITREMOTE/*:refs/remotes/$GITREMOTE/*\"\n+\n+'\n+\n+test_expect_success '#1: git-vcs-cvs \"capabilities\" command' '\n+\n+\techo \"capabilities\" | git vcs-cvs \"$GITREMOTE\" > actual &&\n+\tcat <<EOF >expect &&\n+marks .git/info/cvs/$GITREMOTE/marks\n+\n+EOF\n+\ttest_cmp expect actual\n+\n+'\n+\n+test_expect_success '#1: git-vcs-cvs \"list\" command' '\n+\n+\techo \"list\" | git vcs-cvs \"$GITREMOTE\" > actual &&\n+\tcat <<EOF >expect &&\n+refs/cvs/$GITREMOTE/HEAD changed\n+\n+EOF\n+\ttest_cmp expect actual\n+\n+'\n+\n+test_expect_success '#1: git-vcs-cvs \"import\" command' '\n+\n+\techo \"import refs/cvs/$GITREMOTE/HEAD\" | git vcs-cvs \"$GITREMOTE\" > actual &&\n+\tcat <<EOF >expect &&\n+# Importing CVS revision o_fortuna:1.1\n+blob\n+mark :1\n+data 180\n+O Fortuna\n+velut luna\n+statu variabilis,\n+\n+semper crescis\n+aut decrescis;\n+vita detestabilis\n+\n+nunc obdurat\n+et tunc curat\n+ludo mentis aciem,\n+\n+egestatem,\n+potestatem\n+dissolvit ut glaciem.\n+\n+commit refs/cvs/$GITREMOTE/HEAD\n+mark :2\n+data 82\n+add \"O Fortuna\" lyrics\n+\n+These public domain lyrics make an excellent sample text.\n+\n+M 644 :1 o_fortuna\n+\n+# Importing note for object 2\n+blob\n+mark :3\n+data 14\n+o_fortuna:1.1\n+\n+commit refs/notes/cvs/$GITREMOTE\n+mark :4\n+data 43\n+Annotate commits imported by \"git vcs-cvs\"\n+\n+N :3 :2\n+\n+blob\n+mark :5\n+data 32\n+1 o_fortuna:1.1\n+2 o_fortuna:1.1\n+\n+blob\n+mark :6\n+data 16\n+blob 1\n+commit 2\n+\n+commit refs/cvs/$GITREMOTE/_metadata\n+mark :7\n+data 39\n+Updated metadata used by \"git vcs-cvs\"\n+\n+M 644 :5 CVS/marks\n+M 644 :6 o_fortuna/1.1\n+\n+EOF\n+\tgrep -v \"^committer \" actual > actual.filtered &&\n+\ttest_cmp expect actual.filtered\n+\n+'\n+\n+test_expect_success '#1: Passing git-vcs-cvs output to git-fast-import' '\n+\n+\tgit fast-import --quiet \\\n+\t\t--export-marks=\".git/info/cvs/$GITREMOTE/marks\" \\\n+\t\t< actual &&\n+\tgit gc\n+\n+'\n+\n+test_expect_success '#1: Verifying correctness of import' '\n+\n+\techo \"verify HEAD\" | git vcs-cvs \"$GITREMOTE\"\n+\n+'\n+\n+test_expect_success '#2: update cvs module' '\n+\n+\t(\n+\t\tcd module-cvs &&\n+\t\tcat <<EOF >o_fortuna &&\n+O Fortune,\n+like the moon\n+you are changeable,\n+\n+ever waxing\n+and waning;\n+hateful life\n+\n+first oppresses\n+and then soothes\n+as fancy takes it;\n+\n+poverty\n+and power\n+it melts them like ice.\n+EOF\n+\t\tcat <<EOF >message &&\n+translate to English\n+\n+My Latin is terrible.\n+EOF\n+\t\t$CVS commit -f -F message o_fortuna\n+\t)\n+'\n+\n+test_expect_success '#2: git-vcs-cvs \"capabilities\" command' '\n+\n+\techo \"capabilities\" | git vcs-cvs \"$GITREMOTE\" > actual &&\n+\tcat <<EOF >expect &&\n+marks .git/info/cvs/$GITREMOTE/marks\n+\n+EOF\n+\ttest_cmp expect actual\n+\n+'\n+\n+test_expect_success '#2: git-vcs-cvs \"list\" command' '\n+\n+\techo \"list\" | git vcs-cvs \"$GITREMOTE\" > actual &&\n+\tcat <<EOF >expect &&\n+refs/cvs/$GITREMOTE/HEAD changed\n+\n+EOF\n+\ttest_cmp expect actual\n+\n+'\n+\n+test_expect_success '#2: git-vcs-cvs \"import\" command' '\n+\n+\techo \"import refs/cvs/$GITREMOTE/HEAD\" | git vcs-cvs \"$GITREMOTE\" > actual &&\n+\tcat <<EOF >expect &&\n+# Importing CVS revision o_fortuna:1.2\n+blob\n+mark :8\n+data 179\n+O Fortune,\n+like the moon\n+you are changeable,\n+\n+ever waxing\n+and waning;\n+hateful life\n+\n+first oppresses\n+and then soothes\n+as fancy takes it;\n+\n+poverty\n+and power\n+it melts them like ice.\n+\n+commit refs/cvs/$GITREMOTE/HEAD\n+mark :9\n+data 44\n+translate to English\n+\n+My Latin is terrible.\n+\n+from refs/cvs/$GITREMOTE/HEAD^0\n+M 644 :8 o_fortuna\n+\n+# Importing note for object 9\n+blob\n+mark :10\n+data 14\n+o_fortuna:1.2\n+\n+commit refs/notes/cvs/$GITREMOTE\n+mark :11\n+data 43\n+Annotate commits imported by \"git vcs-cvs\"\n+\n+from refs/notes/cvs/$GITREMOTE^0\n+N :10 :9\n+\n+blob\n+mark :12\n+data 32\n+8 o_fortuna:1.2\n+9 o_fortuna:1.2\n+\n+blob\n+mark :13\n+data 94\n+\n+blob\n+mark :14\n+data 16\n+blob 8\n+commit 9\n+\n+commit refs/cvs/$GITREMOTE/_metadata\n+mark :15\n+data 39\n+Updated metadata used by \"git vcs-cvs\"\n+\n+from refs/cvs/$GITREMOTE/_metadata^0\n+M 644 :12 CVS/marks\n+M 644 :13 o_fortuna/1.1\n+M 644 :14 o_fortuna/1.2\n+\n+EOF\n+\tgrep -v -e \"^committer \" -e \"\\b[0-9a-f]\\{40\\}\\b\" actual > actual.filtered &&\n+\ttest_cmp expect actual.filtered\n+\n+'\n+\n+test_expect_success '#2: Passing git-vcs-cvs output to git-fast-import' '\n+\n+\tgit fast-import --quiet \\\n+\t\t--import-marks=\".git/info/cvs/$GITREMOTE/marks\" \\\n+\t\t--export-marks=\".git/info/cvs/$GITREMOTE/marks\" \\\n+\t\t< actual &&\n+\tgit gc\n+\n+'\n+\n+test_expect_success '#2: Verifying correctness of import' '\n+\n+\techo \"verify HEAD\" | git vcs-cvs \"$GITREMOTE\"\n+\n+'\n+\n+test_expect_success '#3: update cvs module' '\n+\n+\t(\n+\t\tcd module-cvs &&\n+\t\techo 1 >tick &&\n+\t\t$CVS add tick &&\n+\t\t$CVS commit -f -m 1 tick\n+\t)\n+\n+'\n+\n+test_expect_success '#3: git-vcs-cvs \"capabilities\" command' '\n+\n+\techo \"capabilities\" | git vcs-cvs \"$GITREMOTE\" > actual &&\n+\tcat <<EOF >expect &&\n+marks .git/info/cvs/$GITREMOTE/marks\n+\n+EOF\n+\ttest_cmp expect actual\n+\n+'\n+\n+test_expect_success '#3: git-vcs-cvs \"list\" command' '\n+\n+\techo \"list\" | git vcs-cvs \"$GITREMOTE\" > actual &&\n+\tcat <<EOF >expect &&\n+refs/cvs/$GITREMOTE/HEAD changed\n+\n+EOF\n+\ttest_cmp expect actual\n+\n+'\n+\n+test_expect_success '#3: git-vcs-cvs \"import\" command' '\n+\n+\techo \"import refs/cvs/$GITREMOTE/HEAD\" | git vcs-cvs \"$GITREMOTE\" > actual &&\n+\tcat <<EOF >expect &&\n+# Importing CVS revision tick:1.1\n+blob\n+mark :16\n+data 2\n+1\n+\n+commit refs/cvs/$GITREMOTE/HEAD\n+mark :17\n+data 2\n+1\n+\n+from refs/cvs/$GITREMOTE/HEAD^0\n+M 644 :16 tick\n+\n+# Importing note for object 17\n+blob\n+mark :18\n+data 23\n+o_fortuna:1.2\n+tick:1.1\n+\n+commit refs/notes/cvs/$GITREMOTE\n+mark :19\n+data 43\n+Annotate commits imported by \"git vcs-cvs\"\n+\n+from refs/notes/cvs/$GITREMOTE^0\n+N :18 :17\n+\n+blob\n+mark :20\n+data 41\n+16 tick:1.1\n+17 tick:1.1\n+17 o_fortuna:1.2\n+\n+blob\n+mark :21\n+data 104\n+commit 17\n+\n+blob\n+mark :22\n+data 18\n+blob 16\n+commit 17\n+\n+commit refs/cvs/$GITREMOTE/_metadata\n+mark :23\n+data 39\n+Updated metadata used by \"git vcs-cvs\"\n+\n+from refs/cvs/$GITREMOTE/_metadata^0\n+M 644 :20 CVS/marks\n+M 644 :21 o_fortuna/1.2\n+M 644 :22 tick/1.1\n+\n+EOF\n+\tgrep -v -e \"^committer \" -e \"\\b[0-9a-f]\\{40\\}\\b\" actual > actual.filtered &&\n+\ttest_cmp expect actual.filtered\n+\n+'\n+\n+test_expect_success '#3: Passing git-vcs-cvs output to git-fast-import' '\n+\n+\tgit fast-import --quiet \\\n+\t\t--import-marks=\".git/info/cvs/$GITREMOTE/marks\" \\\n+\t\t--export-marks=\".git/info/cvs/$GITREMOTE/marks\" \\\n+\t\t< actual &&\n+\tgit gc\n+\n+'\n+\n+test_expect_success '#3: Verifying correctness of import' '\n+\n+\techo \"verify HEAD\" | git vcs-cvs \"$GITREMOTE\"\n+\n+'\n+\n+test_expect_success '#4: git-vcs-cvs \"capabilities\" command' '\n+\n+\techo \"capabilities\" | git vcs-cvs \"$GITREMOTE\" > actual &&\n+\tcat <<EOF >expect &&\n+marks .git/info/cvs/$GITREMOTE/marks\n+\n+EOF\n+\ttest_cmp expect actual\n+\n+'\n+\n+test_expect_success '#4: git-vcs-cvs \"list\" command' '\n+\n+\techo \"list\" | git vcs-cvs \"$GITREMOTE\" > actual &&\n+\tcat <<EOF >expect &&\n+refs/cvs/$GITREMOTE/HEAD unchanged\n+\n+EOF\n+\ttest_cmp expect actual\n+\n+'\n+\n+test_expect_success '#4: git-vcs-cvs \"import\" command' '\n+\n+\techo \"import refs/cvs/$GITREMOTE/HEAD\" | git vcs-cvs \"$GITREMOTE\" > actual &&\n+\tcat <<EOF >expect &&\n+blob\n+mark :24\n+data 0\n+\n+blob\n+mark :25\n+data 142\n+\n+blob\n+mark :26\n+data 94\n+\n+commit refs/cvs/$GITREMOTE/_metadata\n+mark :27\n+data 39\n+Updated metadata used by \"git vcs-cvs\"\n+\n+from refs/cvs/$GITREMOTE/_metadata^0\n+M 644 :24 CVS/marks\n+M 644 :25 o_fortuna/1.2\n+M 644 :26 tick/1.1\n+\n+EOF\n+\tgrep -v -e \"^committer \" -e \"\\b[0-9a-f]\\{40\\}\\b\" actual > actual.filtered &&\n+\ttest_cmp expect actual.filtered\n+\n+'\n+\n+test_expect_success '#4: Passing git-vcs-cvs output to git-fast-import' '\n+\n+\tgit fast-import --quiet \\\n+\t\t--import-marks=\".git/info/cvs/$GITREMOTE/marks\" \\\n+\t\t--export-marks=\".git/info/cvs/$GITREMOTE/marks\" \\\n+\t\t< actual &&\n+\tgit gc\n+\n+'\n+\n+test_expect_success '#4: Verifying correctness of import' '\n+\n+\techo \"verify HEAD\" | git vcs-cvs \"$GITREMOTE\"\n+\n+'\n+\n+test_done\ndiff --git a/t/t9801-foreign-vcs-cvs-fetch.sh b/t/t9801-foreign-vcs-cvs-fetch.sh\nnew file mode 100755\nindex 0000000..62a2325\n--- /dev/null\n+++ b/t/t9801-foreign-vcs-cvs-fetch.sh\n@@ -0,0 +1,291 @@\n+#!/bin/sh\n+\n+test_description='git vcs-cvs basic tests'\n+. ./test-lib.sh\n+\n+if ! test_have_prereq PYTHON; then\n+\tsay 'skipping CVS foreign-vcs helper tests, python not available'\n+\ttest_done\n+fi\n+\n+CVS_EXEC=cvs\n+CVS_OPTS=\"-f -q\"\n+CVS=\"$CVS_EXEC $CVS_OPTS\"\n+\n+CVSROOT=$(pwd)/cvsroot\n+export CVSROOT\n+unset CVS_SERVER\n+\n+CVSMODULE=cvsmodule\n+GITREMOTE=cvsremote\n+\n+if ! type $CVS_EXEC >/dev/null 2>&1\n+then\n+\tsay 'skipping vcs-cvs tests, $CVS_EXEC not found'\n+\ttest_done\n+fi\n+\n+verify () {\n+\tgit log --reverse --format=\"--- %T%n%s%n%n%b\" \"$GITREMOTE/$1\" >actual &&\n+\ttest_cmp \"expect.$1\" actual &&\n+\techo \"verify $1\" | git vcs-cvs \"$GITREMOTE\"\n+}\n+\n+test_expect_success 'setup CVS repo' '$CVS init'\n+\n+test_expect_success 'create CVS module with initial commit' '\n+\n+\tmkdir \"$CVSROOT/$CVSMODULE\" &&\n+\t$CVS co -d module-cvs $CVSMODULE &&\n+\t(\n+\t\tcd module-cvs &&\n+\t\tcat <<EOF >o_fortuna &&\n+O Fortuna\n+velut luna\n+statu variabilis,\n+\n+semper crescis\n+aut decrescis;\n+vita detestabilis\n+\n+nunc obdurat\n+et tunc curat\n+ludo mentis aciem,\n+\n+egestatem,\n+potestatem\n+dissolvit ut glaciem.\n+EOF\n+\t\t$CVS add o_fortuna &&\n+\t\tcat <<EOF >message &&\n+add \"O Fortuna\" lyrics\n+\n+These public domain lyrics make an excellent sample text.\n+EOF\n+\t\t$CVS commit -f -F message o_fortuna\n+\t)\n+'\n+\n+test_expect_success 'set up CVS repo/module as a foreign remote' '\n+\n+\tgit config \"user.name\" \"Test User\"\n+\tgit config \"user.email\" \"test@example.com\"\n+\tgit config \"remote.$GITREMOTE.vcs\" cvs\n+\tgit config \"remote.$GITREMOTE.cvsRoot\" \"$CVSROOT\"\n+\tgit config \"remote.$GITREMOTE.cvsModule\" \"$CVSMODULE\"\n+\tgit config \"remote.$GITREMOTE.fetch\" \\\n+\t\t\"+refs/cvs/$GITREMOTE/*:refs/remotes/$GITREMOTE/*\"\n+\n+'\n+\n+test_expect_success 'initial fetch from CVS remote' '\n+\n+\tcat <<EOF >expect.HEAD &&\n+--- 0e06d780dedab23e683c686fb041daa9a84c936c\n+add \"O Fortuna\" lyrics\n+\n+These public domain lyrics make an excellent sample text.\n+\n+EOF\n+\tgit fetch \"$GITREMOTE\" &&\n+\tverify HEAD\n+\n+'\n+\n+test_expect_success 'CVS commit' '\n+\n+\t(\n+\t\tcd module-cvs &&\n+\t\tcat <<EOF >o_fortuna &&\n+O Fortune,\n+like the moon\n+you are changeable,\n+\n+ever waxing\n+and waning;\n+hateful life\n+\n+first oppresses\n+and then soothes\n+as fancy takes it;\n+\n+poverty\n+and power\n+it melts them like ice.\n+EOF\n+\t\tcat <<EOF >message &&\n+translate to English\n+\n+My Latin is terrible.\n+EOF\n+\t\t$CVS commit -f -F message o_fortuna\n+\t) &&\n+\tcat <<EOF >>expect.HEAD &&\n+--- daa87269a5e00388135ad9542dc16ab6754466e5\n+translate to English\n+\n+My Latin is terrible.\n+\n+EOF\n+\tgit fetch \"$GITREMOTE\" &&\n+\tverify HEAD\n+\n+'\n+\n+test_expect_success 'CVS commit with new file' '\n+\n+\t(\n+\t\tcd module-cvs &&\n+\t\techo 1 >tick &&\n+\t\t$CVS add tick &&\n+\t\t$CVS commit -f -m 1 tick\n+\t) &&\n+\tcat <<EOF >>expect.HEAD &&\n+--- 486935b4fccecea9b64cbed3a797ebbcbe2b7461\n+1\n+\n+\n+EOF\n+\tgit fetch \"$GITREMOTE\" &&\n+\tverify HEAD\n+\n+'\n+\n+test_expect_success 'fetch without CVS changes' '\n+\n+\tgit fetch \"$GITREMOTE\" &&\n+\tverify HEAD\n+\n+'\n+\n+test_expect_success 'add 2 CVS commits' '\n+\n+\t(\n+\t\tcd module-cvs &&\n+\t\techo 2 >tick &&\n+\t\t$CVS commit -f -m 2 tick &&\n+\t\techo 3 >tick &&\n+\t\t$CVS commit -f -m 3 tick\n+\t) &&\n+\tcat <<EOF >>expect.HEAD &&\n+--- 83437ab3e57bf0a42915de5310e3419792b5a36f\n+2\n+\n+\n+--- 60fc50406a82dc6bd32dc6e5f7bd23e4c3cdf7ef\n+3\n+\n+\n+EOF\n+\tgit fetch \"$GITREMOTE\" &&\n+\tverify HEAD\n+\n+'\n+\n+test_expect_success 'CVS commit with removed file' '\n+\n+\t(\n+\t\tcd module-cvs &&\n+\t\t$CVS remove -f tick &&\n+\t\t$CVS commit -f -m \"remove file\" tick\n+\t) &&\n+\tcat <<EOF >>expect.HEAD &&\n+--- daa87269a5e00388135ad9542dc16ab6754466e5\n+remove file\n+\n+\n+EOF\n+\tgit fetch \"$GITREMOTE\" &&\n+\tverify HEAD\n+\n+'\n+\n+test_expect_success 'CVS commit with several new files' '\n+\n+\t(\n+\t\tcd module-cvs &&\n+\t\techo spam >spam &&\n+\t\techo sausage >sausage &&\n+\t\techo eggs >eggs &&\n+\t\t$CVS add spam sausage eggs &&\n+\t\t$CVS commit -f -m \"spam, sausage, and eggs\" spam sausage eggs\n+\t) &&\n+\tcat <<EOF >>expect.HEAD &&\n+--- 3190dfce44a6d5e9916b4870dbf8f37d1ca4ddaf\n+spam, sausage, and eggs\n+\n+\n+EOF\n+\tgit fetch \"$GITREMOTE\" &&\n+\tverify HEAD\n+\n+'\n+\n+test_expect_success 'new CVS branch' '\n+\n+\t(\n+\t\tcd module-cvs &&\n+\t\t$CVS tag -b foo\n+\t) &&\n+\tcp expect.HEAD expect.foo &&\n+\tgit fetch \"$GITREMOTE\" &&\n+\tverify HEAD &&\n+\tverify foo\n+\n+'\n+\n+test_expect_success 'CVS commit on branch' '\n+\n+\t(\n+\t\tcd module-cvs &&\n+\t\t$CVS up -r foo &&\n+\t\techo \"spam spam spam\" >spam &&\n+\t\t$CVS commit -f -m \"commit on branch foo\" spam\n+\t) &&\n+\tcat <<EOF >>expect.foo &&\n+--- 1aba123e5c83898ce3a8b976cc6064d60246aef4\n+commit on branch foo\n+\n+\n+EOF\n+\tgit fetch \"$GITREMOTE\" &&\n+\tverify HEAD &&\n+\tverify foo\n+\n+'\n+\n+test_expect_success 'create CVS tag' '\n+\n+\t(\n+\t\tcd module-cvs &&\n+\t\t$CVS tag bar\n+\t) &&\n+\tcp expect.foo expect.bar &&\n+\tgit fetch \"$GITREMOTE\" &&\n+\tverify HEAD &&\n+\tverify foo &&\n+\tverify bar\n+\n+'\n+\n+test_expect_success 'another CVS commit on branch' '\n+\n+\t(\n+\t\tcd module-cvs &&\n+\t\techo \"spam spam spam spam spam spam\" >> spam &&\n+\t\t$CVS commit -f -m \"another commit on branch foo\" spam\n+\t) &&\n+\tcat <<EOF >>expect.foo &&\n+--- 15a2635e76e8e5a5a8746021643de317452f2340\n+another commit on branch foo\n+\n+\n+EOF\n+\tgit fetch \"$GITREMOTE\" &&\n+\tverify HEAD &&\n+\tverify foo &&\n+\tverify bar\n+\n+'\n+\n+test_done\ndiff --git a/t/test-lib.sh b/t/test-lib.sh\nindex 5fdc5d9..8eb8b95 100644\n--- a/t/test-lib.sh\n+++ b/t/test-lib.sh\n@@ -706,6 +706,7 @@ case $(uname -s) in\n esac\n \n test -z \"$NO_PERL\" && test_set_prereq PERL\n+test -z \"$NO_PYTHON\" && test_set_prereq PYTHON\n \n # test whether the filesystem supports symbolic links\n ln -s x y 2>/dev/null && test -h y 2>/dev/null && test_set_prereq SYMLINKS\n-- \n1.6.4.rc3.27.g95032.dirty\n"}]}