Skip to content

Commit

Permalink
Merge branch 'gr/cvsimport-alternative-cvspass-location'
Browse files Browse the repository at this point in the history
* gr/cvsimport-alternative-cvspass-location:
  Look for password in both CVS and CVSNT password files.
  • Loading branch information
gitster committed May 6, 2011
2 parents 6975eca + 58fdef0 commit 2da61dc
Showing 1 changed file with 41 additions and 12 deletions.
53 changes: 41 additions & 12 deletions git-cvsimport.perl
Expand Up @@ -227,6 +227,31 @@ sub new {
return $self;
}

sub find_password_entry {
my ($cvspass, @cvsroot) = @_;
my ($file, $delim) = @$cvspass;
my $pass;
local ($_);

if (open(my $fh, $file)) {
# :pserver:cvs@mea.tmt.tele.fi:/cvsroot/zmailer Ah<Z
CVSPASSFILE:
while (<$fh>) {
chomp;
s/^\/\d+\s+//;
my ($w, $p) = split($delim,$_,2);
for my $cvsroot (@cvsroot) {
if ($w eq $cvsroot) {
$pass = $p;
last CVSPASSFILE;
}
}
}
close($fh);
}
return $pass;
}

sub conn {
my $self = shift;
my $repo = $self->{'fullrep'};
Expand Down Expand Up @@ -259,19 +284,23 @@ 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 @cvspass = ([$ENV{'HOME'}."/.cvspass", qr/\s/],
[$ENV{'HOME'}."/.cvs/cvspass", qr/=/]);
my @loc = ();
foreach my $cvspass (@cvspass) {
my $p = find_password_entry($cvspass, $rr, $rr2);
if ($p) {
push @loc, $cvspass->[0];
$pass = $p;
}
};
$pass = "A" unless $pass;
}

if (1 < @loc) {
die("Multiple cvs password files have ".
"entries for CVSROOT $opt_d: @loc");
} elsif (!$pass) {
$pass = "A";
}
}

my ($s, $rep);
Expand Down

0 comments on commit 2da61dc

Please sign in to comment.