Import of a trivial CVS repository fails due to a cvsps bug. Given the following series of commits: timestamp a b c message ------------------- --- --- --- ------- 2012/12/12 21:09:39 1.1 changes are done 2012/12/12 21:09:44 1.1 changes 2012/12/12 21:09:46 1.2 changes 2012/12/12 21:09:50 1.1 1.3 changes are done cvsps mangles the commit ordering (edited for brevity): --------------------- PatchSet 1 Date: 2012/12/12 15:09:39 Log: changes are done Members: a:INITIAL->1.1 b:INITIAL->1.1 c:1.2->1.3 --------------------- PatchSet 2 Date: 2012/12/12 15:09:44 Log: changes Members: c:INITIAL->1.1 --------------------- PatchSet 3 Date: 2012/12/12 15:09:46 Log: changes Members: c:1.1->1.2 This is seen in cvsps versions 2.x and up through at least 3.7. Signed-off-by: Chris Rorvick <chris@xxxxxxxxxxx> --- Ran into this recently. No branching and no "criss cross" timestamps, just lazy commit messages. And it magically backed out a bug fix. This applies on top of master. With minor modifications I've tested it with Eric's latest code and confirmed the bug still exists. Chris t/t9605-cvsimport-commit-order.sh | 25 +++++++++++++++ t/t9605/cvsroot/.gitattributes | 1 + t/t9605/cvsroot/CVSROOT/.gitignore | 2 ++ t/t9605/cvsroot/module/a,v | 24 +++++++++++++++ t/t9605/cvsroot/module/b,v | 24 +++++++++++++++ t/t9605/cvsroot/module/c,v | 62 ++++++++++++++++++++++++++++++++++++++ 6 files changed, 138 insertions(+) create mode 100755 t/t9605-cvsimport-commit-order.sh create mode 100644 t/t9605/cvsroot/.gitattributes create mode 100644 t/t9605/cvsroot/CVSROOT/.gitignore create mode 100644 t/t9605/cvsroot/module/a,v create mode 100644 t/t9605/cvsroot/module/b,v create mode 100644 t/t9605/cvsroot/module/c,v diff --git a/t/t9605-cvsimport-commit-order.sh b/t/t9605-cvsimport-commit-order.sh new file mode 100755 index 0000000..ab4042e --- /dev/null +++ b/t/t9605-cvsimport-commit-order.sh @@ -0,0 +1,25 @@ +#!/bin/sh + +test_description='git cvsimport commit order' +. ./lib-cvs.sh + +setup_cvs_test_repository t9605 + +test_expect_success 'checkout with CVS' ' + + echo CVSROOT=$CVSROOT && + cvs checkout -d module-cvs module +' + +test_expect_failure 'import into git (commit order mangled)' ' + + git cvsimport -R -a -p"-x" -C module-git module && + ( + cd module-git && + git merge origin + ) && + test_cmp module-cvs/c module-git/c && +false +' + +test_done diff --git a/t/t9605/cvsroot/.gitattributes b/t/t9605/cvsroot/.gitattributes new file mode 100644 index 0000000..562b12e --- /dev/null +++ b/t/t9605/cvsroot/.gitattributes @@ -0,0 +1 @@ +* -whitespace diff --git a/t/t9605/cvsroot/CVSROOT/.gitignore b/t/t9605/cvsroot/CVSROOT/.gitignore new file mode 100644 index 0000000..3bb9b34 --- /dev/null +++ b/t/t9605/cvsroot/CVSROOT/.gitignore @@ -0,0 +1,2 @@ +history +val-tags diff --git a/t/t9605/cvsroot/module/a,v b/t/t9605/cvsroot/module/a,v new file mode 100644 index 0000000..6455911 --- /dev/null +++ b/t/t9605/cvsroot/module/a,v @@ -0,0 +1,24 @@ +head 1.1; +access; +symbols; +locks; strict; +comment @# @; + + +1.1 +date 2012.12.12.21.09.39; author tester; state Exp; +branches; +next ; + + +desc +@@ + + +1.1 +log +@changes are done +@ +text +@file a +@ diff --git a/t/t9605/cvsroot/module/b,v b/t/t9605/cvsroot/module/b,v new file mode 100644 index 0000000..55545c8 --- /dev/null +++ b/t/t9605/cvsroot/module/b,v @@ -0,0 +1,24 @@ +head 1.1; +access; +symbols; +locks; strict; +comment @# @; + + +1.1 +date 2012.12.12.21.09.50; author tester; state Exp; +branches; +next ; + + +desc +@@ + + +1.1 +log +@changes are done +@ +text +@file b +@ diff --git a/t/t9605/cvsroot/module/c,v b/t/t9605/cvsroot/module/c,v new file mode 100644 index 0000000..d3eac77 --- /dev/null +++ b/t/t9605/cvsroot/module/c,v @@ -0,0 +1,62 @@ +head 1.3; +access; +symbols; +locks; strict; +comment @# @; + + +1.3 +date 2012.12.12.21.09.50; author tester; state Exp; +branches; +next 1.2; + +1.2 +date 2012.12.12.21.09.46; author tester; state Exp; +branches; +next 1.1; + +1.1 +date 2012.12.12.21.09.44; author tester; state Exp; +branches; +next ; + + +desc +@@ + + +1.3 +log +@changes are done +@ +text +@file c +line two +line three +line four +line five +@ + + +1.2 +log +@changes +@ +text +@d2 4 +a5 4 +line 2 +line 3 +line 4 +line 5 +@ + + +1.1 +log +@changes +@ +text +@d2 4 +@ + -- 1.8.1.rc3.335.g88a67d6 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html