Code

cvsexportcommit: avoid racy CVS problem.
authorRobin Rosenberg <robin.rosenberg.lists@dewire.com>
Tue, 24 Jul 2007 22:56:20 +0000 (00:56 +0200)
committerJunio C Hamano <gitster@pobox.com>
Wed, 25 Jul 2007 00:28:10 +0000 (17:28 -0700)
If git cvsexportcommit is executed fast enough in sequence, the CVS
timestamps could end up being the same. CVS tries to fix this
by sleeping until the CPU clock changes seconds. Unfortunately,
the CPU clock and the file system clock are not necessarily the same, so
the timestamps could be the same anyway. When that happens CVS may not
recognize changed files and cvs will forget to commit some files.

Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
git-cvsexportcommit.perl

index e9832d2bb913d61ce8a92ddf32e009ad59659d53..a33fa8d4c86da54a4d741cf921d1cf7b2138d186 100755 (executable)
@@ -281,6 +281,11 @@ if ($opt_c) {
 # clean up
 unlink(".cvsexportcommit.diff");
 
+# CVS version 1.11.x and 1.12.x sleeps the wrong way to ensure the timestamp
+# used by CVS and the one set by subsequence file modifications are different.
+# If they are not different CVS will not detect changes.
+sleep(1);
+
 sub usage {
        print STDERR <<END;
 Usage: GIT_DIR=/path/to/.git ${\basename $0} [-h] [-p] [-v] [-c] [-f] [-m msgprefix] [ parent ] commit