Re: cvsimport still not working with cvsnt

2 messages, 2 authors, 2016-06-15 · open the first message on its own page

Re: cvsimport still not working with cvsnt

From: Junio C Hamano <hidden>
Date: 2016-06-15 22:50:36

Guy Rouillier [off-list ref] writes:
...  I'm new to all this and I thought 
perhaps one of the listed committers had to submit the official patch.  
There is no _listed committers_ ;-)  I was hoping either you as the original
author of the patch or Martin as the area expert would respond, but as
long as the result looks correct and explained well, it doesn't matter
either way.

Just one hopefully final question.

After stripping "/<version number><space>" from the beginning of the line
in order to treat newer .cvspass file format and the original file format
the same way, the code splits the remainder into two fields (cvsroot and
lightly-scrambled password).  It used to split only at a whitespace, which
seems to be in line with the source of CVS 1.12.13 I looked at (it is in
password_entry_parseline() function, src/login.c).  You new code however
also allows '=' to be a delimiter to be used for this split.

Is this change intentional?  If so please explain why it is necessary in
the commit log message.

Re: cvsimport still not working with cvsnt

From: Guy Rouillier <hidden>
Date: 2016-06-15 22:50:36

On 2/18/2011 1:34 PM, Junio C Hamano wrote:
Guy Rouillier [off-list ref] writes:
quoted
...  I'm new to all this and I thought 
perhaps one of the listed committers had to submit the official patch.  
There is no _listed committers_ ;-)  I was hoping either you as the original
author of the patch or Martin as the area expert would respond, but as
long as the result looks correct and explained well, it doesn't matter
either way.

Just one hopefully final question.

After stripping "/<version number><space>" from the beginning of the line
in order to treat newer .cvspass file format and the original file format
the same way, the code splits the remainder into two fields (cvsroot and
lightly-scrambled password).  It used to split only at a whitespace, which
seems to be in line with the source of CVS 1.12.13 I looked at (it is in
password_entry_parseline() function, src/login.c).  You new code however
also allows '=' to be a delimiter to be used for this split.

Is this change intentional?  If so please explain why it is necessary in
the commit log message.
Thanks to everyone here for the gracious patience with newcomers.

Yes, the change is intentional.  I've added an additional commit comment to
explain why.
From 0fdfbdc0dbd0a0280d987640890f7b5ff566d6ef Mon Sep 17 00:00:00 2001
From: Guy Rouillier <redacted>
Date: Sat, 19 Feb 2011 01:56:15 -0500
Subject: [PATCH] Look for password in both CVS and CVSNT password files.

The existing code looks for the CVS reposity password only in
the CVS password file in HOME/.cvspass. Accommodate the CVS
alternative CVSNT by also looking in HOME/.cvs/cvspass.  Die
if both files are found, and ask the user to remove one.

The two clients use a different delimiter to separate the CVS
repository name from the user password.  The original CVS
client separates the two entries with a space character, while
CVSNT separates them with an equal (=) character.  Hence,
the regular expression used to split these two tokens is
altered to accept either delimiter.

Signed-off-by: Guy Rouillier <redacted>
---
 git-cvsimport.perl |   32 ++++++++++++++++++++------------
 1 files changed, 20 insertions(+), 12 deletions(-)
diff --git a/git-cvsimport.perl b/git-cvsimport.perl
index 8e683e5..76b4765 100755
--- a/git-cvsimport.perl
+++ b/git-cvsimport.perl
@@ -259,19 +259,27 @@ sub conn {
 		if ($pass) {
 			$pass = $self->_scramble($pass);
 		} else {
-			open(H,$ENV{'HOME'}."/.cvspass") and do {
-				# :pserver:cvs@mea.tmt.tele.fi:/cvsroot/zmailer Ah<Z
-				while (<H>) {
-					chomp;
-					s/^\/\d+\s+//;
-					my ($w,$p) = split(/\s/,$_,2);
-					if ($w eq $rr or $w eq $rr2) {
-						$pass = $p;
-						last;
+			my @cvspasslocations = ($ENV{'HOME'}."/.cvspass", $ENV{'HOME'}."/.cvs/cvspass");
+			my $filecount = 0;
+			foreach my $cvspass (@cvspasslocations) {
+
+				open(H, $cvspass) and do {
+					# :pserver:cvs@mea.tmt.tele.fi:/cvsroot/zmailer Ah<Z
+					$filecount++;
+					while (<H>) {
+						chomp;
+						s/^\/\d+\s+//;
+						my ($w,$p) = split(/[\s=]/,$_,2);
+						if ($w eq $rr or $w eq $rr2) {
+							$pass = $p;
+							last;
+						}
 					}
-				}
-			};
-			$pass = "A" unless $pass;
+				};
+			}
+
+			die("Two CVS password files found: @cvspasslocations, please remove one") if $filecount > 1;
+			die("Password not found for CVSROOT: $opt_d\n") unless $pass;
 		}

 		my ($s, $rep);
--
1.7.4.rc1.5.ge17aa

-- 
Guy Rouillier
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help