From: Ian Jackson Date: Sat, 4 Jul 2015 18:19:40 +0000 (+0100) Subject: dgit: Be more careful about tag updates during fetch: only update tags referring... X-Git-Tag: debian/0.30~19 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=dgit.git;a=commitdiff_plain;h=8c95b29b79a159e5153f51affece9cf9314b4d84 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/debian/changelog b/debian/changelog index ef2c8423..b798cbd6 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 47e05f79..ea965243 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 () {