summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Jackson <ijackson@chiark.greenend.org.uk>2015-07-04 19:19:40 +0100
committerIan Jackson <ijackson@chiark.greenend.org.uk>2015-07-04 21:38:47 +0100
commit8c95b29b79a159e5153f51affece9cf9314b4d84 (patch)
tree9085eabb92eb0df989490ec546661a5bf04369ed
parente7cfaa23447394d52d83cf2d71636f6d41d4da72 (diff)
dgit: Be more careful about tag updates during fetch: only update tags referring to uploads to distro we are trying to fetch from.
-rw-r--r--debian/changelog2
-rwxr-xr-xdgit33
2 files changed, 29 insertions, 6 deletions
diff --git a/debian/changelog b/debian/changelog
index ef2c842..b798cbd 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -91,6 +91,8 @@ dgit (0.23~) unstable; urgency=low
* Change realpath dependency to `coreutils (>= 8.23-1~) | realpath'
(Closes:#786955.)
* For non-Debian distros, debiantag() uses distro name a la DEP-14.
+ * dgit: Be more careful about tag updates during fetch: only update
+ tags referring to uploads to distro we are trying to fetch from.
--
diff --git a/dgit b/dgit
index 47e05f7..ea96524 100755
--- a/dgit
+++ b/dgit
@@ -1343,12 +1343,33 @@ sub ensure_we_have_orig () {
}
sub git_fetch_us () {
- runcmd_ordryrun_local @git, qw(fetch),access_giturl(),fetchspec();
- if (deliberately_not_fast_forward) {
- runcmd_ordryrun_local @git, qw(fetch -p), access_giturl(),
- map { "+refs/$_/*:".lrfetchrefs."/$_/*" }
- qw(tags heads);
- }
+ my @specs = (fetchspec());
+ push @specs,
+ map { "+refs/$_/*:".lrfetchrefs."/$_/*" }
+ qw(tags heads);
+ runcmd_ordryrun_local @git, qw(fetch -p -n), access_giturl(), @specs;
+
+ my %here;
+ my $tagpat = debiantag('*',access_basedistro);
+
+ git_for_each_ref("refs/tags/".$tagpat, sub {
+ my ($objid,$objtype,$fullrefname,$reftail) = @_;
+ printdebug "currently $fullrefname=$objid\n";
+ $here{$fullrefname} = $objid;
+ });
+ git_for_each_ref(lrfetchrefs."/tags/".$tagpat, sub {
+ my ($objid,$objtype,$fullrefname,$reftail) = @_;
+ my $lref = "refs".substr($fullrefname, length lrfetchrefs);
+ printdebug "offered $lref=$objid\n";
+ if (!defined $here{$lref}) {
+ my @upd = (@git, qw(update-ref), $lref, $objid, '');
+ runcmd_ordryrun_local @upd;
+ } elsif ($here{$lref} eq $objid) {
+ } else {
+ print STDERR \
+ "Not updateting $lref from $here{$lref} to $objid.\n";
+ }
+ });
}
sub fetch_from_archive () {