summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Jackson <ijackson@chiark.greenend.org.uk>2013-11-06 23:52:20 +0000
committerIan Jackson <ijackson@chiark.greenend.org.uk>2013-11-06 23:52:20 +0000
commit86ad8bd4c1026392b4b758e8c0cfd6b39c3cfc03 (patch)
tree2b123eef75c6ee31557bf205e518eab626b45ec0
parentf5cc5221e5f7298d88c384af112b33a3287a2a1a (diff)
Do not grobble around in .git/refs/; instead, use git-show-ref. This avoids breaking when git makes packed refs. Closes:728893.
-rw-r--r--debian/changelog7
-rwxr-xr-xdgit28
2 files changed, 25 insertions, 10 deletions
diff --git a/debian/changelog b/debian/changelog
index c1f58d3..9f31f38 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,10 @@
+dgit (0.17) unstable; urgency=high
+
+ * Do not grobble around in .git/refs/; instead, use git-show-ref.
+ This avoids breaking when git makes packed refs. Closes:728893.
+
+ --
+
dgit (0.16) unstable; urgency=high
* Format `(3.0) quilt' fixup does not mind extraneous other files
diff --git a/dgit b/dgit
index ba5f1ba..16bf56d 100755
--- a/dgit
+++ b/dgit
@@ -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) {