diff options
-rw-r--r-- | Debian/Dgit.pm | 12 | ||||
-rwxr-xr-x | dgit | 2 | ||||
-rwxr-xr-x | infra/dgit-repos-server | 2 |
3 files changed, 10 insertions, 6 deletions
diff --git a/Debian/Dgit.pm b/Debian/Dgit.pm index f20f1bc..a53cb82 100644 --- a/Debian/Dgit.pm +++ b/Debian/Dgit.pm @@ -200,14 +200,18 @@ sub git_for_each_ref ($$) { sub git_for_each_tag_referring ($$) { my ($objreferring, $func) = @_; - # calls $func->($objid,$fullrefname,$tagname); + # calls $func->($tagobjid,$refobjid,$fullrefname,$tagname); printdebug "git_for_each_tag_referring ", ($objreferring // 'UNDEF'),"\n"; git_for_each_ref('refs/tags', sub { - my ($objid,$objtype,$fullrefname,$tagname) = @_; + my ($tagobjid,$objtype,$fullrefname,$tagname) = @_; return unless $objtype eq 'tag'; - return if defined $objreferring and $objid ne $objreferring; - $func->($objid,$fullrefname,$tagname); + my $refobjid = git_rev_parse $tagobjid; + return unless + !defined $objreferring # caller wants them all + or $tagobjid eq $objreferring + or $refobjid eq $objreferring; + $func->($tagobjid,$refobjid,$fullrefname,$tagname); }); } @@ -1667,7 +1667,7 @@ sub dopush ($) { if ($forceflag && defined $lastpush_hash) { git_for_each_tag_referring($lastpush_hash, sub { - my ($objid,$fullrefname,$tagname) = @_; + my ($objid,$refobjid,$fullrefname,$tagname) = @_; responder_send_command("supersedes $fullrefname=$objid"); $supersedes{$fullrefname} = $objid; }); diff --git a/infra/dgit-repos-server b/infra/dgit-repos-server index 2616406..f700df8 100755 --- a/infra/dgit-repos-server +++ b/infra/dgit-repos-server @@ -680,7 +680,7 @@ sub checktagnoreplay () { my @problems; git_for_each_tag_referring($onlyreferring, sub { - my ($objid,$fullrefname,$tagname) = @_; + my ($objid,$refobjid,$fullrefname,$tagname) = @_; printdebug "checktagnoreplay - overwriting $fullrefname=$objid\n"; my $supers = $supersedes{$fullrefname}; if (!defined $supers) { |