Skip to content

Commit

Permalink
cvsimport: use rev-parse to support packed refs
Browse files Browse the repository at this point in the history
Previously, if refs were packed, git-cvsimport would assume
that particular refs did not exist. This could lead to, for
example, overwriting previous 'origin' commits that were
packed.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Jeff King authored and Junio C Hamano committed Nov 28, 2007
1 parent 795c7c0 commit 9da0dab
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 15 deletions.
25 changes: 10 additions & 15 deletions git-cvsimport.perl
Original file line number Diff line number Diff line change
Expand Up @@ -526,18 +526,12 @@ sub is_sha1 {
return $s =~ /^[a-f0-9]{40}$/;
}

sub get_headref ($$) {
my $name = shift;
my $git_dir = shift;

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): $!";
return $r;
}
die "unable to open $f: $!" unless $! == POSIX::ENOENT;
return undef;
sub get_headref ($) {
my $name = shift;
my $r = `git rev-parse --verify '$name' 2>/dev/null`;
return undef unless $? == 0;
chomp $r;
return $r;
}

-d $git_tree
Expand Down Expand Up @@ -697,7 +691,8 @@ ()
$ignorebranch{'#CVSPS_NO_BRANCH'} = 1;

sub commit {
if ($branch eq $opt_o && !$index{branch} && !get_headref($branch, $git_dir)) {
if ($branch eq $opt_o && !$index{branch} &&
!get_headref("$remote/$branch")) {
# looks like an initial commit
# use the index primed by git-init
$ENV{GIT_INDEX_FILE} = "$git_dir/index";
Expand All @@ -721,7 +716,7 @@ sub commit {
update_index(@old, @new);
@old = @new = ();
my $tree = write_tree();
my $parent = get_headref($last_branch, $git_dir);
my $parent = get_headref("$remote/$last_branch");
print "Parent ID " . ($parent ? $parent : "(empty)") . "\n" if $opt_v;

my @commit_args;
Expand All @@ -732,7 +727,7 @@ sub commit {
foreach my $rx (@mergerx) {
next unless $logmsg =~ $rx && $1;
my $mparent = $1 eq 'HEAD' ? $opt_o : $1;
if (my $sha1 = get_headref($mparent, $git_dir)) {
if (my $sha1 = get_headref("$remote/$mparent")) {
push @commit_args, '-p', $mparent;
print "Merge parent branch: $mparent\n" if $opt_v;
}
Expand Down
2 changes: 2 additions & 0 deletions t/t9600-cvsimport.sh
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,8 @@ test_expect_success 'import a trivial module' '
'

test_expect_success 'pack refs' 'cd module-git && git gc && cd ..'

test_expect_success 'update cvs module' '
cd module-cvs &&
Expand Down

0 comments on commit 9da0dab

Please sign in to comment.