threads / patch / 3075

patchcvsimport: ease migration from CVSROOT/users format

Subject: [PATCH] cvsimport: ease migration from CVSROOT/users format

## tl;dr

2 messages between Jan 15, 2006 and Jan 15, 2006. Diffs are folded; open one to read it.

replies: 1people: 2as markdown or json

Junio C Hamano· Jan 15, 2006, 11:30 UTC · lore

This fixes a minor bug, which caused the author email to be doubly enclosed in a <> pair (the code gave enclosing <> to GIT_AUTHOR_EMAIL and GIT_COMMITTER_EMAIL environment variable).

The read_author_info() subroutine is taught to also understand the user list in CVSROOT/users format. This is primarily done to ease migration for CVS users, who can use the -A option to read from existing CVSROOT/users file. write_author_info() always writes in the git-cvsimport's native format ('=' delimited and value without quotes).

Signed-off-by: Junio C Hamano <junkio@cox.net>
---
 * Andreas, I also tweaked the regexp to parse the native format
   from /^([^ \t=]*)[ \t=]*([^<]*)(<.*$)\s*/
   to /^(\S+?)\s*=\s*(.+?)\s*<(.+)>\s*$/.  I think this tweak is
   correct, but I would appreciate if you can proofread and ACK
   on it.  The differences are:
   - We did not require '=' anywhere, but accepted "= = =".
   - We had funny '$' in the middle; probably a typo. 
   - We first slurped author name with trailing whitespaces, only 
     to strip that separately in later steps.
   - We grabbed <> pairs and stored in author_email (this is a
     bugfix).
 git-cvsimport.perl |   29 ++++++++++++++++++++---------
 1 files changed, 20 insertions(+), 9 deletions(-)
1b23ed3d1f9f3d83ea8b94ebc37c99e0ca32a09b
Show changes to git-cvsimport.perl +20 −9
diff --git a/git-cvsimport.perl b/git-cvsimport.perl
index 8d493c2..3ddbdfa 100755
--- a/git-cvsimport.perl
+++ b/git-cvsimport.perl
@@ -48,16 +48,28 @@ sub read_author_info($) {
 	open my $f, '<', "$file" or die("Failed to open $file: $!\n");
 
 	while (<$f>) {
-		chomp;
-		# Expected format is this;
+		# Expected format is this:
 		#   exon=Andreas Ericsson <ae@op5.se>
-		if (m/^([^ \t=]*)[ \t=]*([^<]*)(<.*$)\s*/) {
+		if (m/^(\S+?)\s*=\s*(.+?)\s*<(.+)>\s*$/) {
 			$user = $1;
-			$conv_author_name{$1} = $2;
-			$conv_author_email{$1} = $3;
-			# strip trailing whitespace from author name
-			$conv_author_name{$1} =~ s/\s*$//;
+			$conv_author_name{$user} = $2;
+			$conv_author_email{$user} = $3;
 		}
+		# However, we also read from CVSROOT/users format
+		# to ease migration.
+		elsif (/^(\w+):(['"]?)(.+?)\2\s*$/) {
+			my $mapped;
+			($user, $mapped) = ($1, $3);
+			if ($mapped =~ /^\s*(.*?)\s*<(.*)>\s*$/) {
+				$conv_author_name{$user} = $1;
+				$conv_author_email{$user} = $2;
+			}
+			elsif ($mapped =~ /^<?(.*)>?$/) {
+				$conv_author_name{$user} = $user;
+				$conv_author_email{$user} = $1;
+			}
+		}
+		# NEEDSWORK: Maybe warn on unrecognized lines?
 	}
 	close ($f);
 }
@@ -68,8 +80,7 @@ sub write_author_info($) {
 	  die("Failed to open $file for writing: $!");
 
 	foreach (keys %conv_author_name) {
-		print $f "$_=" . $conv_author_name{$_} .
-		  " " . $conv_author_email{$_} . "\n";
+		print $f "$_=$conv_author_name{$_} <$conv_author_email{$_}>\n";
 	}
 	close ($f);
 }
-- 
1.1.2-gd425
Andreas Ericsson· Jan 15, 2006, 20:50 UTC · re: Junio C Hamano · lore

Re: [PATCH] cvsimport: ease migration from CVSROOT/users format

Junio C Hamano wrote:
Show 7 quoted lines
> 
>  * Andreas, I also tweaked the regexp to parse the native format
>    from /^([^ \t=]*)[ \t=]*([^<]*)(<.*$)\s*/
>    to /^(\S+?)\s*=\s*(.+?)\s*<(.+)>\s*$/.  I think this tweak is
>    correct, but I would appreciate if you can proofread and ACK
>    on it.  The differences are:
> 
It looks correct and seems to do the trick.
>    - We grabbed <> pairs and stored in author_email (this is a
>      bugfix).
> 

gitk showed them as a single such even though theye were passed double. Perhaps some other tool stripped it along the way? Good catch anyways.

> +		}
> +		# NEEDSWORK: Maybe warn on unrecognized lines?
>  	}

I don't think so. I think it's safe to assume that people will check and double-check that everything's correct before removing the CVS repo, so it should be easy enough to redo the import (although possibly time-consuming).

-- 
Andreas Ericsson                   andreas.ericsson@op5.se
OP5 AB                             www.op5.se
Tel: +46 8-230225                  Fax: +46 8-230231

← back to recent threads