diff options
author | Ian Jackson <ijackson@chiark.greenend.org.uk> | 2013-11-06 23:52:20 +0000 |
---|---|---|
committer | Ian Jackson <ijackson@chiark.greenend.org.uk> | 2013-11-06 23:52:20 +0000 |
commit | 86ad8bd4c1026392b4b758e8c0cfd6b39c3cfc03 (patch) | |
tree | 2b123eef75c6ee31557bf205e518eab626b45ec0 /dgit | |
parent | f5cc5221e5f7298d88c384af112b33a3287a2a1a (diff) |
Do not grobble around in .git/refs/; instead, use git-show-ref. This avoids breaking when git makes packed refs. Closes:728893.
Diffstat (limited to 'dgit')
-rwxr-xr-x | dgit | 28 |
1 files changed, 18 insertions, 10 deletions
@@ -358,6 +358,23 @@ sub parsechangelog { return $c; } +sub git_get_ref ($) { + my ($refname) = @_; + my $got = cmdoutput_errok @git, qw(show-ref --), $refname; + if (!defined $got) { + $?==256 or fail "git show-ref failed (status $?)"; + print DEBUG "ref $refname= [show-ref exited 1]\n"; + return ''; + } + if ($got =~ m/^(\w+) \Q$refname\E$/m) { + print DEBUG "ref $refname=$1\n"; + return $1; + } else { + print DEBUG "ref $refname= [no match]\n"; + return ''; + } +} + our %rmad; sub archive_query ($) { @@ -724,16 +741,7 @@ sub fetch_from_archive () { print "no version available from the archive\n"; } - my $lrref_fn = ".git/".lrref(); - if (open H, $lrref_fn) { - $lastpush_hash = <H>; - chomp $lastpush_hash; - die "$lrref_fn $lastpush_hash ?" unless $lastpush_hash =~ m/^\w+$/; - } elsif ($! == &ENOENT) { - $lastpush_hash = ''; - } else { - die "$lrref_fn $!"; - } + $lastpush_hash = git_get_ref(lrref()); print DEBUG "previous reference hash=$lastpush_hash\n"; my $hash; if (defined $dsc_hash) { |