chiark / gitweb /
Dgit: forkcheck_*: break out from setup_sigwarn
[dgit.git] / Debian / Dgit.pm
index 5a7b59d750e65893212d40c32f5a3a783604c7ad..5e0bbd5e63ce0b8f8ddac59b63bbd34476cb9d03 100644 (file)
@@ -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);