git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH] git-cvsimport-script: leave working directory alone.

From
SVSven Verdoolaege <skimo@kotnet.org>
Date
Jul 4, 2005, 12:13 UTC
Message-ID
<20050704121309.GI18608MdfPADPa@garage.linux.student.kuleuven.ac.be>
In-Reply-To
<20050703103517.GJ5992MdfPADPa@garage.linux.student.kuleuven.ac.be>
git-cvsimport-script: leave working directory alone.

--- commit 2eb6d82eaa869a1faf4ba3326fd628f76f9f93a8 tree 3e59c8c298e51a8ae20102b4b139c84c79fa54a0 parent 866d13108e969773347828daa9b7f3476ec70cb8 author Sven Verdoolaege <skimo@kotnet.org> Mon, 04 Jul 2005 00:43:26 +0200 committer Sven Verdoolaege <skimo@kotnet.org> Mon, 04 Jul 2005 00:43:26 +0200

 git-cvsimport-script |   81 ++++++++++++++++++++++++++++++--------------------
 1 files changed, 48 insertions(+), 33 deletions(-)
diff --git a/git-cvsimport-script b/git-cvsimport-script
--- a/git-cvsimport-script
+++ b/git-cvsimport-script
@@ -80,6 +80,8 @@ package CVSconn;
 # Basic CVS dialog.
 # We're only interested in connecting and downloading, so ...
 
+use File::Spec;
+use File::Temp qw(tempfile);
 use POSIX qw(strftime dup2);
 
 sub new {
@@ -231,11 +233,11 @@ sub _file {
 sub _line {
 	# Read a line from the server.
 	# ... except that 'line' may be an entire file. ;-)
-	my($self) = @_;
+	my($self, $fh) = @_;
 	die "Not in lines" unless defined $self->{'lines'};
 
 	my $line;
-	my $res="";
+	my $res=0;
 	while(defined($line = $self->readline())) {
 		# M U gnupg-cvs-rep/AUTHORS
 		# Updated gnupg-cvs-rep/
@@ -255,16 +257,18 @@ sub _line {
 			chomp $cnt;
 			die "Duh: Filesize $cnt" if $cnt !~ /^\d+$/;
 			$line="";
-			$res="";
+			$res=0;
 			while($cnt) {
 				my $buf;
 				my $num = $self->{'socketi'}->read($buf,$cnt);
 				die "Server: Filesize $cnt: $num: $!\n" if not defined $num or $num<=0;
-				$res .= $buf;
+				print $fh $buf;
+				$res += $num;
 				$cnt -= $num;
 			}
 		} elsif($line =~ s/^ //) {
-			$res .= $line;
+			print $fh $line;
+			$res += length($line);
 		} elsif($line =~ /^M\b/) {
 			# output, do nothing
 		} elsif($line =~ /^Mbinary\b/) {
@@ -277,7 +281,8 @@ sub _line {
 				my $buf;
 				my $num = $self->{'socketi'}->read($buf,$cnt);
 				die "S: Mbinary $cnt: $num: $!\n" if not defined $num or $num<=0;
-				$res .= $buf;
+				print $fh $buf;
+				$res += $num;
 				$cnt -= $num;
 			}
 		} else {
@@ -297,18 +302,21 @@ sub file {
 	my($self,$fn,$rev) = @_;
 	my $res;
 
-	if ($self->_file($fn,$rev)) {
-		$res = $self->_line();
-		return $res if defined $res;
+	my ($fh, $name) = tempfile('gitcvs.XXXXXX', 
+		    DIR => File::Spec->tmpdir(), UNLINK => 1);
+
+	$self->_file($fn,$rev) and $res = $self->_line($fh);
+
+	if (!defined $res) {
+	    # retry
+	    $self->conn();
+	    $self->_file($fn,$rev)
+		    or die "No file command send\n";
+	    $res = $self->_line($fh);
+	    die "No input: $fn $rev\n" unless defined $res;
 	}
 
-	# retry
-	$self->conn();
-	$self->_file($fn,$rev)
-		or die "No file command send\n";
-	$res = $self->_line();
-	die "No input: $fn $rev\n" unless defined $res;
-	return $res;
+	return ($name, $res);
 }
 
 
@@ -457,13 +465,14 @@ my $commit = sub {
 	}
 	while(@new) {
 		my @n2;
-		if(@new > 55) {
-			@n2 = splice(@new,0,50);
+		if(@new > 12) {
+			@n2 = splice(@new,0,10);
 		} else {
 			@n2 = @new;
 			@new = ();
 		}
-		system("git-update-cache","--add","--",@n2);
+		system("git-update-cache","--add",
+			(map { ('--cacheinfo', @$_) } @n2));
 		die "Cannot add files: $?\n" if $?;
 	}
 
@@ -631,7 +640,7 @@ while(<CVS>) {
 		}
 		if(($ancestor || $branch) ne $last_branch) {
 			print "Switching from $last_branch to $branch\n" if $opt_v;
-			system("git-read-tree","-m","-u","$last_branch","$branch");
+			system("git-read-tree","-m","$last_branch","$branch");
 			die "read-tree failed: $?\n" if $?;
 		}
 		if($branch ne $last_branch) {
@@ -648,17 +657,16 @@ while(<CVS>) {
 		my $fn = $1;
 		my $rev = $3;
 		$fn =~ s#^/+##;
-		my $data = $cvs->file($fn,$rev);
-		print "".($init ? "New" : "Update")." $fn: ".length($data)." bytes.\n" if $opt_v;
-		mkpath(dirname($fn),$opt_v);
-		open(F,"> ./$fn")
-			or die "Cannot create '$fn': $!\n";
-		print F $data
-			or die "Cannot write to '$fn': $!\n";
-		close(F)
-			or die "Cannot write to '$fn': $!\n";
-		chmod(pmode($cvs->{'mode'}), $fn);
-		push(@new,$fn); # may be resurrected!
+		my ($tmpname, $size) = $cvs->file($fn,$rev);
+		print "".($init ? "New" : "Update")." $fn: $size bytes.\n" if $opt_v;
+		open my $F, '-|', "git-write-blob $tmpname"
+			or die "Cannot create object: $!\n";
+		my $sha = <$F>;
+		chomp $sha;
+		close $F;
+		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*$/) {
 		my $fn = $1;
 		$fn =~ s#^/+##;
@@ -688,8 +696,15 @@ if($orig_branch) {
 		unless -f "$git_dir/refs/heads/master";
 }
 
-system("git-read-tree","-m","-u","$last_branch","$orig_branch");
-die "read-tree failed: $?\n" if $?;
+if ($orig_branch) {
+	system("git-read-tree",$last_branch);
+	die "read-tree failed: $?\n" if $?;
+} else {
+	system('git-read-tree', $orig_branch);
+	die "read-tree failed: $?\n" if $?;
+	system('git-checkout-cache', '-a');
+	die "checkout-cache failed: $?\n" if $?;
+}
 
 unlink("$git_dir/HEAD");
 symlink("refs/heads/$orig_branch","$git_dir/HEAD");
Previous: Wolfgang DenkNext: Sven Verdoolaege
Message 33 of 49 in “cvsimport: rewritten in Perl”
  1. cvsimport: rewritten in PerlMatthias Urlichs, Jun 28, 2005
  2. Nicolas PitreJun 29, 2005
  3. Matthias UrlichsJun 29, 2005
  4. Matthias UrlichsJun 30, 2005
  5. Nicolas PitreJun 30, 2005
  6. cvsimport-in-Perl: Limit the number of arguments to git-update-cacheMatthias Urlichs, Jun 30, 2005
  7. Nicolas PitreJun 30, 2005
  8. Nicolas PitreJun 30, 2005
  9. Matthias UrlichsJun 30, 2005
  10. cvsimport: perform string comparison on "HEAD"Sven Verdoolaege, Jun 30, 2005
  11. Matthias UrlichsJun 30, 2005
  12. cvsimport: Limit the log string to 32kMatthias Urlichs, Jun 30, 2005
  13. Sven VerdoolaegeJun 30, 2005
  14. Matthias UrlichsJun 30, 2005
  15. Sven VerdoolaegeJun 30, 2005
  16. Matthias UrlichsJun 30, 2005
  17. Sven VerdoolaegeJun 30, 2005
  18. Matthias UrlichsJun 30, 2005
  19. Nicolas PitreJun 30, 2005
  20. Matthias UrlichsJul 1, 2005
  21. Sven VerdoolaegeJul 3, 2005
  22. Make specification of CVS module to convert optional.Sven Verdoolaege, Jul 3, 2005
  23. git-cvsimport-script: clean up documentationSven Verdoolaege, Jul 3, 2005
  24. git-cvsimport-script: Honour CVS_SERVER.Sven Verdoolaege, Jul 3, 2005
  25. git-cvsimport-script: Support :ext: access method.Sven Verdoolaege, Jul 3, 2005
  26. Sven VerdoolaegeJul 3, 2005
  27. Matthias UrlichsJul 3, 2005
  28. Wolfgang DenkJul 5, 2005
  29. Linus TorvaldsJul 6, 2005
  30. Sven VerdoolaegeJul 6, 2005
  31. Matthias UrlichsJul 6, 2005
  32. Wolfgang DenkJul 6, 2005
  33. git-cvsimport-script: leave working directory alone.Sven Verdoolaege, Jul 4, 2005
  34. git-cvsimport-script: use private index.Sven Verdoolaege, Jul 4, 2005
  35. git-cvsimport-script: fix branch switchingSven Verdoolaege, Jul 4, 2005
  36. git-cvsimport-script: update cvsps cache instead of rebuilding itSven Verdoolaege, Jul 4, 2005
  37. Sven VerdoolaegeJun 30, 2005
  38. Matthias UrlichsJun 30, 2005
  39. Sven VerdoolaegeJul 1, 2005
  40. Matthias UrlichsJul 1, 2005
  41. Sven VerdoolaegeJul 4, 2005
  42. Matthias UrlichsJul 4, 2005
  43. Sven VerdoolaegeJul 4, 2005
  44. Matthias UrlichsJul 4, 2005
  45. Sven VerdoolaegeJul 4, 2005
  46. Sven VerdoolaegeJul 3, 2005
  47. Matthias UrlichsJul 4, 2005
  48. Sven VerdoolaegeJul 4, 2005
  49. Stephen C. TweedieJun 30, 2005

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.