Skip to content

Commit

Permalink
cvsimport: add test illustrating a bug in cvsps
Browse files Browse the repository at this point in the history
Some cvs repositories may have time deviations in their recorded commits.
This is a test for one of such cases. These kind of repositories can happen
if the system time of cvs clients is not fully synchronised.

Consider the following sequence of events:

 * client A commits file a r1.1
 * client A commits file a r1.2, b r1.1
 * client B commits file b r1.2 using the same timestamp as a r1.1

This can be resolved but due to cvsps ordering its patchsets solely based
on the timestamp. It only takes revision odering into account if there
is no difference in the timestamp.

I hit this bug when importing from a real repository which was originally
converted from another rcs based scm. Other import tools can handle this
correctly, e.g. parsecvs.

Signed-off-by: Heiko Voigt <hvoigt@hvoigt.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Heiko Voigt authored and Junio C Hamano committed Mar 21, 2009
1 parent 0dc0621 commit 9291ccf
Show file tree
Hide file tree
Showing 4 changed files with 115 additions and 0 deletions.
33 changes: 33 additions & 0 deletions t/t9603-cvsimport-patchsets.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
#!/bin/sh

# Structure of the test cvs repository
#
# Message File:Content Commit Time
# Rev 1 a: 1.1 2009-02-21 19:11:43 +0100
# Rev 2 a: 1.2 b: 1.1 2009-02-21 19:11:14 +0100
# Rev 3 b: 1.2 2009-02-21 19:11:43 +0100
#
# As you can see the commit of Rev 3 has the same time as
# Rev 1 this leads to a broken import because of a cvsps
# bug.

test_description='git cvsimport testing for correct patchset estimation'
. ./lib-cvs.sh

CVSROOT="$TEST_DIRECTORY"/t9603/cvsroot
export CVSROOT

test_expect_failure 'import with criss cross times on revisions' '
git cvsimport -p"-x" -C module-git module &&
cd module-git &&
git log --pretty=format:%s > ../actual &&
echo "" >> ../actual &&
cd .. &&
echo "Rev 3
Rev 2
Rev 1" > expect &&
test_cmp actual expect
'

test_done
2 changes: 2 additions & 0 deletions t/t9603/cvsroot/CVSROOT/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
history
val-tags
40 changes: 40 additions & 0 deletions t/t9603/cvsroot/module/a,v
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
head 1.2;
access;
symbols;
locks; strict;
comment @# @;


1.2
date 2009.02.21.18.11.14; author tester; state Exp;
branches;
next 1.1;

1.1
date 2009.02.21.18.11.43; author tester; state Exp;
branches;
next ;


desc
@@


1.2
log
@Rev 2
@
text
@1.2
@


1.1
log
@Rev 1
@
text
@d1 1
a1 1
1.1
@
40 changes: 40 additions & 0 deletions t/t9603/cvsroot/module/b,v
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
head 1.2;
access;
symbols;
locks; strict;
comment @# @;


1.2
date 2009.02.21.18.11.43; author tester; state Exp;
branches;
next 1.1;

1.1
date 2009.02.21.18.11.14; author tester; state Exp;
branches;
next ;


desc
@@


1.2
log
@Rev 3
@
text
@1.2
@


1.1
log
@Rev 2
@
text
@d1 1
a1 1
1.1
@

0 comments on commit 9291ccf

Please sign in to comment.