X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=git-cvsimport-script;h=dffd134e63b2f37fb59631d2884afaa13a7625d3;hb=a92bebe6978edaea2885a627e7bef6f7f8b208c2;hp=0d205c55aa60a65e1157d3cf508c0835bde1c272;hpb=465416694a98a8f071abf6290c9a2a48d9789a98;p=git.git diff --git a/git-cvsimport-script b/git-cvsimport-script index 0d205c55..dffd134e 100755 --- a/git-cvsimport-script +++ b/git-cvsimport-script @@ -26,34 +26,53 @@ use POSIX qw(strftime dup2); $SIG{'PIPE'}="IGNORE"; $ENV{'TZ'}="UTC"; -our($opt_h,$opt_o,$opt_v,$opt_d); +our($opt_h,$opt_o,$opt_v,$opt_d,$opt_p,$opt_C); sub usage() { print STDERR <; + chomp $opt_d; + close $f; + $ENV{"CVSROOT"} = $opt_d; } elsif($ENV{"CVSROOT"}) { $opt_d = $ENV{"CVSROOT"}; } else { die "CVSROOT needs to be set"; } $opt_o ||= "origin"; +my $git_tree = $opt_C; $git_tree ||= "."; +my $cvs_tree; +if ($#ARGV == 0) { + $cvs_tree = $ARGV[0]; +} elsif (-f 'CVS/Repository') { + open my $f, '<', 'CVS/Repository' or + die 'Failed to open CVS/Repository'; + $cvs_tree = <$f>; + chomp $cvs_tree; + close $f +} else { + usage(); +} + select(STDERR); $|=1; select(STDOUT); @@ -182,7 +201,7 @@ sub _file { $self->{'socketo'}->write("Argument $self->{'subdir'}/$fn\n") or return undef; $self->{'socketo'}->write("Directory .\n") or return undef; $self->{'socketo'}->write("$self->{'repo'}\n") or return undef; - $self->{'socketo'}->write("Sticky T1.1\n") or return undef; + # $self->{'socketo'}->write("Sticky T1.0\n") or return undef; $self->{'socketo'}->write("co\n") or return undef; $self->{'socketo'}->flush() or return undef; $self->{'lines'} = 0; @@ -338,6 +357,11 @@ unless(-d $git_dir) { $last_branch = $opt_o; $orig_branch = ""; } else { + -f "$git_dir/refs/head/$opt_o" + or die "Branch '$opt_o' does not exist.\n". + "Either use the correct '-o branch' option,\n". + "or import to a new repository.\n"; + $last_branch = basename(readlink("$git_dir/HEAD")); unless($last_branch) { warn "Cannot read the last branch name: $! -- assuming 'master'\n"; @@ -370,7 +394,9 @@ unless(-d $git_dir) { my $pid = open(CVS,"-|"); die "Cannot fork: $!\n" unless defined $pid; unless($pid) { - exec("cvsps","-A","--cvs-direct",$cvs_tree); + my @opt; + @opt = split(/,/,$opt_p) if defined $opt_p; + exec("cvsps",@opt,"-x","-A","--cvs-direct",'--root',$opt_d,$cvs_tree); die "Could not start cvsps: $!\n"; } @@ -397,10 +423,28 @@ my($patchset,$date,$author,$branch,$ancestor,$tag,$logmsg); my(@old,@new); my $commit = sub { my $pid; - system("git-update-cache","--force-remove","--",@old) if @old; - die "Cannot remove files: $?\n" if $?; - system("git-update-cache","--add","--",@new) if @new; - die "Cannot add files: $?\n" if $?; + while(@old) { + my @o2; + if(@old > 55) { + @o2 = splice(@old,0,50); + } else { + @o2 = @old; + @old = (); + } + system("git-update-cache","--force-remove","--",@o2); + die "Cannot remove files: $?\n" if $?; + } + while(@new) { + my @n2; + if(@new > 55) { + @n2 = splice(@new,0,50); + } else { + @n2 = @new; + @new = (); + } + system("git-update-cache","--add","--",@n2); + die "Cannot add files: $?\n" if $?; + } $pid = open(C,"-|"); die "Cannot fork: $!" unless defined $pid; @@ -450,7 +494,12 @@ my $commit = sub { } $pw->writer(); $pr->reader(); - print $pw $logmsg + + # compatibility with git2cvs + substr($logmsg,32767) = "" if length($logmsg) > 32767; + $logmsg =~ s/[\s\n]+\z//; + + print $pw "$logmsg\n" or die "Error writing to git-commit-tree: $!\n"; $pw->close(); @@ -480,9 +529,6 @@ my $commit = sub { or die "Cannot write tag $branch: $!\n"; print "Created tag '$tag' on '$branch'\n" if $opt_v; } - - @old = (); - @new = (); }; while() { @@ -514,7 +560,7 @@ while() { } elsif($state == 5 and s/^Ancestor branch:\s+//) { s/\s+$//; $ancestor = $_; - $ancestor = $opt_o if $ancestor == "HEAD"; + $ancestor = $opt_o if $ancestor eq "HEAD"; $state = 6; } elsif($state == 5) { $ancestor = undef;