X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;ds=sidebyside;f=Debian%2FDgit.pm;h=a4ec3774099192941153e4557b3eb7520a992c71;hb=942637ea633f1c9dc0be2534a660296a76b87e27;hp=abcf123652e6db4917b9305cbdb5245d8802499e;hpb=e07f113726f46b8ab921ceecd4e282d93b39c2a2;p=dgit.git diff --git a/Debian/Dgit.pm b/Debian/Dgit.pm index abcf1236..a4ec3774 100644 --- a/Debian/Dgit.pm +++ b/Debian/Dgit.pm @@ -49,10 +49,11 @@ BEGIN { failedcmd_report_cmd failedcmd runcmd cmdoutput cmdoutput_errok git_rev_parse git_cat_file - git_get_ref git_for_each_ref + git_get_ref git_get_symref git_for_each_ref git_for_each_tag_referring is_fast_fwd $package_re $component_re $deliberately_re $distro_re $versiontag_re $series_filename_re + $extra_orig_namepart_re $branchprefix initdebug enabledebug enabledebuglevel printdebug debugcmd @@ -80,6 +81,7 @@ our $distro_re = $component_re; our $versiontag_re = qr{[-+.\%_0-9a-zA-Z/]+}; our $branchprefix = 'dgit'; our $series_filename_re = qr{(?:^|\.)series(?!\n)$}s; +our $extra_orig_namepart_re = qr{[-0-9a-z]+}; # policy hook exit status bits # see dgit-repos-server head comment for documentation @@ -108,7 +110,7 @@ sub forkcheck_mainprocess () { sub setup_sigwarn () { forkcheck_setup(); $SIG{__WARN__} = sub { - die $_[0] if forkcheck_mainprocess; + confess $_[0] if forkcheck_mainprocess; }; } @@ -381,6 +383,19 @@ sub git_cat_file ($;$) { return $chk->($type, $data); } +sub git_get_symref (;$) { + my ($symref) = @_; $symref //= 'HEAD'; + # => undef if not a symref, otherwise refs/... + my @cmd = (qw(git symbolic-ref -q HEAD)); + my $branch = cmdoutput_errok @cmd; + if (!defined $branch) { + $?==256 or failedcmd @cmd; + } else { + chomp $branch; + } + return $branch; +} + sub git_for_each_ref ($$;$) { my ($pattern,$func,$gitdir) = @_; # calls $func->($objid,$objtype,$fullrefname,$reftail);