Re: [PATCH 2/3] cvsimport: use show-ref to support packed refs
- From
Jeff King <peff@peff.net>
- Date
- Nov 28, 2007, 19:44 UTC
- Message-ID
- <20071128194423.GB11396@coredump.intra.peff.net>
- In-Reply-To
- <Pine.LNX.4.64.0711281916140.27959@racer.site>
On Wed, Nov 28, 2007 at 07:16:36PM +0000, Johannes Schindelin wrote:
Show 21 quoted lines
> > -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 show-ref -s '$name'`;
> > + return undef unless $? == 0;
> > + chomp $r;
> > + return $r;
> > }
>
> Where has $remote gone?Gah, thank you. Obviously I deleted it without looking when I removed the now-unnecessary $git_dir. However, let me put a curse on whoever is responsible for randomly using "$remote" as a global in this function, when all of the other parameters (including the obvious-candidate-for-a-global $git_dir) are passed in.
Since get_headref is useful in contexts where "$remote" is not always prepended (see patch 3/3), I think the best solution is:
diff --git a/git-cvsimport.perl b/git-cvsimport.perl index 1b5f187..bbf9799 100755 --- a/git-cvsimport.perl +++ b/git-cvsimport.perl @@ -692,7 +692,8 @@ my (@old,@new,@skipped,%ignorebranch); $ignorebranch{'#CVSPS_NO_BRANCH'} = 1; sub commit { - if ($branch eq $opt_o && !$index{branch} && !get_headref($branch)) { + 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"; @@ -716,7 +717,7 @@ sub commit { update_index(@old, @new); @old = @new = (); my $tree = write_tree(); - my $parent = get_headref($last_branch); + my $parent = get_headref("$remote/$last_branch"); print "Parent ID " . ($parent ? $parent : "(empty)") . "\n" if $opt_v; my @commit_args; @@ -727,7 +728,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)) { + if (my $sha1 = get_headref("$remote/$mparent")) { push @commit_args, '-p', $mparent; print "Merge parent branch: $mparent\n" if $opt_v; }