summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Jackson <ijackson@chiark.greenend.org.uk>2015-05-31 11:59:48 +0100
committerIan Jackson <ijackson@chiark.greenend.org.uk>2015-05-31 11:59:48 +0100
commit03894a4813bd99f86c188de61d72c0a05833e5cb (patch)
tree4c7af104cf5ca15b72672eb6b34dccf656ebbf57
parent2f169a239c0ad428328fa2415649dc05318618bb (diff)
Dgit.pm: git_for_each_tag_referring provides referred-to object id too
-rw-r--r--Debian/Dgit.pm12
-rwxr-xr-xdgit2
-rwxr-xr-xinfra/dgit-repos-server2
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);
});
}
diff --git a/dgit b/dgit
index 9b401a2..1e348f3 100755
--- a/dgit
+++ b/dgit
@@ -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) {