summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Urlichs <smurf@smurf.noris.de>2005-08-15 09:28:19 (GMT)
committerJunio C Hamano <junkio@cox.net>2005-08-16 19:09:33 (GMT)
commit8b8840e046923f34d6b3e76adc44106f9e63ab4c (patch)
tree2b765ef63a98e8c8d5e8db960da316ecc957b020
parent8c5989029215227230cccc9b5da54e798e2f2029 (diff)
downloadgit-8b8840e046923f34d6b3e76adc44106f9e63ab4c.zip
git-8b8840e046923f34d6b3e76adc44106f9e63ab4c.tar.gz
git-8b8840e046923f34d6b3e76adc44106f9e63ab4c.tar.bz2
[PATCH] cvsgit fixes: spaces in filenames and CVS server dialog woes
Problems found while importing dasher's CVS: * Allow spaces in filenames. * cvsps may create unnamed branches with revisions that don't really exist, which causes the CVS server to return something we haven't hitherto expected. * Report deleted files when being verbose. * Also, report the commit date. Signed-off-by: Junio C Hamano <junkio@cox.net>
-rwxr-xr-xgit-cvsimport-script34
1 files changed, 23 insertions, 11 deletions
diff --git a/git-cvsimport-script b/git-cvsimport-script
index 8f57396..3b1fb05 100755
--- a/git-cvsimport-script
+++ b/git-cvsimport-script
@@ -294,6 +294,12 @@ sub _line {
return $res;
} elsif($line =~ s/^E //) {
# print STDERR "S: $line\n";
+ } elsif($line =~ /^Remove-entry /i) {
+ $line = $self->readline(); # filename
+ $line = $self->readline(); # OK
+ chomp $line;
+ die "Unknown: $line" if $line ne "ok";
+ return -1;
} else {
die "Unknown: $line\n";
}
@@ -561,7 +567,7 @@ my $commit = sub {
or die "Error writing to git-commit-tree: $!\n";
$pw->close();
- print "Committed patch $patchset ($branch)\n" if $opt_v;
+ print "Committed patch $patchset ($branch ".strftime("%Y-%m-%d %H:%M:%S",gmtime($date)).")\n" if $opt_v;
chomp(my $cid = <$pr>);
length($cid) == 40
or die "Cannot get commit id ($cid): $!\n";
@@ -675,26 +681,32 @@ while(<CVS>) {
$state = 9;
} elsif($state == 8) {
$logmsg .= "$_\n";
- } elsif($state == 9 and /^\s+(\S+):(INITIAL|\d+(?:\.\d+)+)->(\d+(?:\.\d+)+)\s*$/) {
+ } elsif($state == 9 and /^\s+(.+?):(INITIAL|\d+(?:\.\d+)+)->(\d+(?:\.\d+)+)\s*$/) {
# VERSION:1.96->1.96.2.1
my $init = ($2 eq "INITIAL");
my $fn = $1;
my $rev = $3;
$fn =~ s#^/+##;
my ($tmpname, $size) = $cvs->file($fn,$rev);
- print "".($init ? "New" : "Update")." $fn: $size bytes.\n" if $opt_v;
- open my $F, '-|', "git-hash-object -w $tmpname"
- or die "Cannot create object: $!\n";
- my $sha = <$F>;
- chomp $sha;
- close $F;
+ if($size == -1) {
+ push(@old,$fn);
+ print "Drop $fn\n" if $opt_v;
+ } else {
+ print "".($init ? "New" : "Update")." $fn: $size bytes\n" if $opt_v;
+ open my $F, '-|', "git-hash-object -w $tmpname"
+ or die "Cannot create object: $!\n";
+ my $sha = <$F>;
+ chomp $sha;
+ close $F;
+ my $mode = pmode($cvs->{'mode'});
+ push(@new,[$mode, $sha, $fn]); # may be resurrected!
+ }
unlink($tmpname);
- my $mode = pmode($cvs->{'mode'});
- push(@new,[$mode, $sha, $fn]); # may be resurrected!
- } elsif($state == 9 and /^\s+(\S+):\d(?:\.\d+)+->(\d(?:\.\d+)+)\(DEAD\)\s*$/) {
+ } elsif($state == 9 and /^\s+(.+?):\d(?:\.\d+)+->(\d(?:\.\d+)+)\(DEAD\)\s*$/) {
my $fn = $1;
$fn =~ s#^/+##;
push(@old,$fn);
+ print "Delete $fn\n" if $opt_v;
} elsif($state == 9 and /^\s*$/) {
$state = 10;
} elsif(($state == 9 or $state == 10) and /^-+$/) {