X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=dgit.git;a=blobdiff_plain;f=Debian%2FDgit.pm;h=c2b7f670012ee2293ac57b72ce36b683f4c2c26f;hp=f20f1bc44c719d918ea0cb8cf689b13cdaeb4223;hb=991b8c9a6bba8aeec02cb1b3d39e3f9e8d941a29;hpb=2f169a239c0ad428328fa2415649dc05318618bb diff --git a/Debian/Dgit.pm b/Debian/Dgit.pm index f20f1bc4..c2b7f670 100644 --- a/Debian/Dgit.pm +++ b/Debian/Dgit.pm @@ -16,7 +16,7 @@ BEGIN { $VERSION = 1.00; @ISA = qw(Exporter); @EXPORT = qw(debiantag server_branch server_ref - stat_exists fail waitstatusmsg failedcmd + stat_exists fail ensuredir waitstatusmsg failedcmd cmdoutput cmdoutput_errok git_rev_parse git_for_each_ref git_for_each_tag_referring is_fast_fwd @@ -128,6 +128,13 @@ sub fail { die $s; } +sub ensuredir ($) { + my ($dir) = @_; # does not create parents + return if mkdir $dir; + return if $! == EEXIST; + die "mkdir $dir: $!"; +} + our @signames = split / /, $Config{sig_name}; sub waitstatusmsg () { @@ -200,14 +207,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); }); }