All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] cvsimport: add support for new style remote layout
@ 2007-05-30  0:56 Andy Whitcroft
  2007-05-30 13:24 ` James Bowes
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Andy Whitcroft @ 2007-05-30  0:56 UTC (permalink / raw)
  To: git


cvsimport creates any branches found in the remote CVS repository
in the refs/heads namespace.  This makes sense for a repository
conversion.  When using git as a sane interface to a remote CVS
repository, that repository may well remain as the 'master'
respository.  In this model it makes sense to import the CVS
repository into the refs/remotes namespace.

Add a new option '-r <remote>' to set the remote name for
this import.  When this option is specified branches are named
refs/remotes/<remote>/branch, with HEAD named as master matching
git-clone separate remotes layout.  Without branches are placed
ion refs/heads, with HEAD named origin as before.

Signed-off-by: Andy Whitcroft <apw@shadowen.org>
---

	Given that separate remotes is the default for 1.5
	it could be argued that this the default should be the
	equivalent of '-r origin'.  This patch does not do that.
---
diff --git a/git-cvsimport.perl b/git-cvsimport.perl
index f68afe7..f16ac3d 100755
--- a/git-cvsimport.perl
+++ b/git-cvsimport.perl
@@ -29,7 +29,7 @@ use IPC::Open2;
 $SIG{'PIPE'}="IGNORE";
 $ENV{'TZ'}="UTC";
 
-our ($opt_h,$opt_o,$opt_v,$opt_k,$opt_u,$opt_d,$opt_p,$opt_C,$opt_z,$opt_i,$opt_P, $opt_s,$opt_m,$opt_M,$opt_A,$opt_S,$opt_L, $opt_a);
+our ($opt_h,$opt_o,$opt_v,$opt_k,$opt_u,$opt_d,$opt_p,$opt_C,$opt_z,$opt_i,$opt_P, $opt_s,$opt_m,$opt_M,$opt_A,$opt_S,$opt_L, $opt_a, $opt_r);
 my (%conv_author_name, %conv_author_email);
 
 sub usage(;$) {
@@ -114,7 +114,7 @@ sub read_repo_config {
     }
 }
 
-my $opts = "haivmkuo:d:p:C:z:s:M:P:A:S:L:";
+my $opts = "haivmkuo:d:p:r:C:z:s:M:P:A:S:L:";
 read_repo_config($opts);
 getopts($opts) or usage();
 usage if $opt_h;
@@ -134,13 +134,21 @@ if ($opt_d) {
 } else {
 	usage("CVSROOT needs to be set");
 }
-$opt_o ||= "origin";
 $opt_s ||= "-";
 $opt_a ||= 0;
 
 my $git_tree = $opt_C;
 $git_tree ||= ".";
 
+my $remote;
+if (defined $opt_r) {
+	$remote = 'refs/remotes/' . $opt_r;
+	$opt_o ||= "master";
+} else {
+	$opt_o ||= "origin";
+	$remote = 'refs/heads';
+}
+
 my $cvs_tree;
 if ($#ARGV == 0) {
 	$cvs_tree = $ARGV[0];
@@ -522,7 +530,7 @@ sub get_headref ($$) {
     my $name    = shift;
     my $git_dir = shift; 
     
-    my $f = "$git_dir/refs/heads/$name";
+    my $f = "$git_dir/$remote/$name";
     if (open(my $fh, $f)) {
 	    chomp(my $r = <$fh>);
 	    is_sha1($r) or die "Cannot get head id for $name ($r): $!";
@@ -573,12 +581,12 @@ unless (-d $git_dir) {
 
 	# Get the last import timestamps
 	my $fmt = '($ref, $author) = (%(refname), %(author));';
-	open(H, "git-for-each-ref --perl --format='$fmt' refs/heads |") or
+	open(H, "git-for-each-ref --perl --format='$fmt' $remote |") or
 		die "Cannot run git-for-each-ref: $!\n";
 	while (defined(my $entry = <H>)) {
 		my ($ref, $author);
 		eval($entry) || die "cannot eval refs list: $@";
-		my ($head) = ($ref =~ m|^refs/heads/(.*)|);
+		my ($head) = ($ref =~ m|^$remote/(.*)|);
 		$author =~ /^.*\s(\d+)\s[-+]\d{4}$/;
 		$branch_date{$head} = $1;
 	}
@@ -701,9 +709,9 @@ sub commit {
 		$index{$branch} = tmpnam();
 		$ENV{GIT_INDEX_FILE} = $index{$branch};
 		if ($ancestor) {
-		    system("git-read-tree", $ancestor);
+		    system("git-read-tree", "$remote/$ancestor");
 		} else {
-		    system("git-read-tree", $branch);
+		    system("git-read-tree", "$remote/$branch");
 		}
 		die "read-tree failed: $?\n" if $?;
 	    }
@@ -762,7 +770,7 @@ sub commit {
 	waitpid($pid,0);
 	die "Error running git-commit-tree: $?\n" if $?;
 
-	system("git-update-ref refs/heads/$branch $cid") == 0
+	system("git-update-ref $remote/$branch $cid") == 0
 		or die "Cannot write branch $branch for update: $!\n";
 
 	if ($tag) {
@@ -883,12 +891,12 @@ while (<CVS>) {
 				print STDERR "Branch $branch erroneously stems from itself -- changed ancestor to $opt_o\n";
 				$ancestor = $opt_o;
 			}
-			if (-f "$git_dir/refs/heads/$branch") {
+			if (-f "$git_dir/$remote/$branch") {
 				print STDERR "Branch $branch already exists!\n";
 				$state=11;
 				next;
 			}
-			unless (open(H,"$git_dir/refs/heads/$ancestor")) {
+			unless (open(H,"$git_dir/$remote/$ancestor")) {
 				print STDERR "Branch $ancestor does not exist!\n";
 				$ignorebranch{$branch} = 1;
 				$state=11;
@@ -896,7 +904,7 @@ while (<CVS>) {
 			}
 			chomp(my $id = <H>);
 			close(H);
-			unless (open(H,"> $git_dir/refs/heads/$branch")) {
+			unless (open(H,"> $git_dir/$remote/$branch")) {
 				print STDERR "Could not create branch $branch: $!\n";
 				$ignorebranch{$branch} = 1;
 				$state=11;
@@ -1010,13 +1018,13 @@ if ($orig_branch) {
 		die "Fast-forward update failed: $?\n" if $?;
 	}
 	else {
-		system(qw(git-merge cvsimport HEAD), "refs/heads/$opt_o");
+		system(qw(git-merge cvsimport HEAD), "$remote/$opt_o");
 		die "Could not merge $opt_o into the current branch.\n" if $?;
 	}
 } else {
 	$orig_branch = "master";
 	print "DONE; creating $orig_branch branch\n" if $opt_v;
-	system("git-update-ref", "refs/heads/master", "refs/heads/$opt_o")
+	system("git-update-ref", "refs/heads/master", "$remote/$opt_o")
 		unless -f "$git_dir/refs/heads/master";
 	system('git-update-ref', 'HEAD', "$orig_branch");
 	unless ($opt_i) {

^ permalink raw reply related	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2007-06-06 11:51 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-05-30  0:56 [PATCH] cvsimport: add support for new style remote layout Andy Whitcroft
2007-05-30 13:24 ` James Bowes
2007-06-03 22:00 ` Junio C Hamano
2007-06-04  8:58   ` Andy Whitcroft
2007-06-04  9:01     ` [PATCH 1/2] cvsimport: update documentation to include separate remotes option Andy Whitcroft
2007-06-04  9:01     ` [PATCH 2/2] cvsimport: add <remote>/HEAD reference in separate remotes more Andy Whitcroft
2007-06-06 11:52 ` [PATCH] cvsimport: add support for new style remote layout Jeffrey C. Ollie

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.