X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=dgit.git;a=blobdiff_plain;f=Debian%2FDgit.pm;h=5e0bbd5e63ce0b8f8ddac59b63bbd34476cb9d03;hp=5a7b59d750e65893212d40c32f5a3a783604c7ad;hb=3fad6db8d44a435d456e9d79e2c6811ac2bc0364;hpb=76c7db35e2ddaa0c517128fae11cd5893099fffc diff --git a/Debian/Dgit.pm b/Debian/Dgit.pm index 5a7b59d7..5e0bbd5e 100644 --- a/Debian/Dgit.pm +++ b/Debian/Dgit.pm @@ -36,7 +36,7 @@ BEGIN { $VERSION = 1.00; @ISA = qw(Exporter); - @EXPORT = qw(setup_sigwarn + @EXPORT = qw(setup_sigwarn forkcheck_setup forkcheck_mainprocess dep14_version_mangle debiantags debiantag_old debiantag_new server_branch server_ref @@ -50,7 +50,7 @@ BEGIN { git_get_ref git_for_each_ref git_for_each_tag_referring is_fast_fwd $package_re $component_re $deliberately_re - $distro_re + $distro_re $versiontag_re $branchprefix initdebug enabledebug enabledebuglevel printdebug debugcmd @@ -67,6 +67,7 @@ our $package_re = '[0-9a-z][-+.0-9a-z]*'; our $component_re = '[0-9a-zA-Z][-+.0-9a-zA-Z]*'; our $deliberately_re = "(?:TEST-)?$package_re"; our $distro_re = $component_re; +our $versiontag_re = qr{[-+.\%_0-9a-zA-Z/]+}; our $branchprefix = 'dgit'; # policy hook exit status bits @@ -80,10 +81,21 @@ sub NOCOMMITCHECK () { return 0x8; } our $debugprefix; our $debuglevel = 0; +our $forkcheck_mainprocess; + +sub forkcheck_setup () { + $forkcheck_mainprocess = $$; +} + +sub forkcheck_mainprocess () { + # You must have called forkcheck_setup or setup_sigwarn already + getppid != $forkcheck_mainprocess; +} + sub setup_sigwarn () { - our $sigwarn_mainprocess = $$; + forkcheck_setup(); $SIG{__WARN__} = sub { - die $_[0] unless getppid == $sigwarn_mainprocess; + die $_[0] if forkcheck_mainprocess; }; } @@ -313,6 +325,7 @@ sub git_rev_parse ($) { sub git_cat_file ($) { my ($objname) = @_; # => ($type, $data) or ('missing', undef) + # in scalar context, just the data our ($gcf_pid, $gcf_i, $gcf_o); if (!$gcf_pid) { my @cmd = qw(git cat-file --batch);