chiark
/
gitweb
/
~ianmdlvl
/
dgit.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Dgit.pm: runcmd: Break out from dgit
[dgit.git]
/
Debian
/
Dgit.pm
diff --git
a/Debian/Dgit.pm
b/Debian/Dgit.pm
index 5a7b59d750e65893212d40c32f5a3a783604c7ad..5b5591d5499695def37c47f023a00f854bfa1738 100644
(file)
--- a/
Debian/Dgit.pm
+++ b/
Debian/Dgit.pm
@@
-36,7
+36,7
@@
BEGIN {
$VERSION = 1.00;
@ISA = qw(Exporter);
$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
dep14_version_mangle
debiantags debiantag_old debiantag_new
server_branch server_ref
@@
-45,12
+45,12
@@
BEGIN {
fail ensuredir executable_on_path
waitstatusmsg failedcmd_waitstatus
failedcmd_report_cmd failedcmd
fail ensuredir executable_on_path
waitstatusmsg failedcmd_waitstatus
failedcmd_report_cmd failedcmd
- cmdoutput cmdoutput_errok
+
runcmd
cmdoutput cmdoutput_errok
git_rev_parse git_cat_file
git_get_ref git_for_each_ref
git_for_each_tag_referring is_fast_fwd
$package_re $component_re $deliberately_re
git_rev_parse git_cat_file
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 $series_filename_re
$branchprefix
initdebug enabledebug enabledebuglevel
printdebug debugcmd
$branchprefix
initdebug enabledebug enabledebuglevel
printdebug debugcmd
@@
-67,7
+67,9
@@
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 $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';
our $branchprefix = 'dgit';
+our $series_filename_re = qr{(?:^|\.)series(?!\n)$}s;
# policy hook exit status bits
# see dgit-repos-server head comment for documentation
# policy hook exit status bits
# see dgit-repos-server head comment for documentation
@@
-80,10
+82,21
@@
sub NOCOMMITCHECK () { return 0x8; }
our $debugprefix;
our $debuglevel = 0;
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 () {
sub setup_sigwarn () {
-
our $sigwarn_mainprocess = $$
;
+
forkcheck_setup()
;
$SIG{__WARN__} = sub {
$SIG{__WARN__} = sub {
- die $_[0]
unless getppid == $sigwarn
_mainprocess;
+ die $_[0]
if forkcheck
_mainprocess;
};
}
};
}
@@
-125,6
+138,7
@@
sub messagequote ($) {
sub shellquote {
my @out;
local $_;
sub shellquote {
my @out;
local $_;
+ defined or confess 'internal error' foreach @_;
foreach my $a (@_) {
$_ = $a;
if (!length || m{[^-=_./:0-9a-z]}i) {
foreach my $a (@_) {
$_ = $a;
if (!length || m{[^-=_./:0-9a-z]}i) {
@@
-262,6
+276,12
@@
sub failedcmd {
fail failedcmd_waitstatus();
}
fail failedcmd_waitstatus();
}
+sub runcmd {
+ debugcmd "+",@_;
+ $!=0; $?=-1;
+ failedcmd @_ if system @_;
+}
+
sub cmdoutput_errok {
confess Dumper(\@_)." ?" if grep { !defined } @_;
debugcmd "|",@_;
sub cmdoutput_errok {
confess Dumper(\@_)." ?" if grep { !defined } @_;
debugcmd "|",@_;
@@
-313,6
+333,7
@@
sub git_rev_parse ($) {
sub git_cat_file ($) {
my ($objname) = @_;
# => ($type, $data) or ('missing', undef)
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);
our ($gcf_pid, $gcf_i, $gcf_o);
if (!$gcf_pid) {
my @cmd = qw(git cat-file --batch);