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: Provide messagequote
[dgit.git]
/
Debian
/
Dgit.pm
diff --git
a/Debian/Dgit.pm
b/Debian/Dgit.pm
index 48aae188560ddc825351b2cd09d0d8cebc0e475d..9216dee879d04eb285cb028072b4a1b47dbc8bfe 100644
(file)
--- a/
Debian/Dgit.pm
+++ b/
Debian/Dgit.pm
@@
-15,7
+15,8
@@
BEGIN {
$VERSION = 1.00;
@ISA = qw(Exporter);
$VERSION = 1.00;
@ISA = qw(Exporter);
- @EXPORT = qw(debiantag server_branch server_ref
+ @EXPORT = qw(setup_sigwarn
+ debiantag server_branch server_ref
stat_exists fail ensuredir waitstatusmsg failedcmd
cmdoutput cmdoutput_errok
git_rev_parse git_get_ref git_for_each_ref
stat_exists fail ensuredir waitstatusmsg failedcmd
cmdoutput cmdoutput_errok
git_rev_parse git_get_ref git_for_each_ref
@@
-25,7
+26,7
@@
BEGIN {
initdebug enabledebug enabledebuglevel
printdebug debugcmd
$debugprefix *debuglevel *DEBUG
initdebug enabledebug enabledebuglevel
printdebug debugcmd
$debugprefix *debuglevel *DEBUG
- shellquote printcmd);
+ shellquote printcmd
messagequote
);
# implicitly uses $main::us
%EXPORT_TAGS = ( policyflags => [qw(NOFFCHECK FRESHREPO)] );
@EXPORT_OK = @{ $EXPORT_TAGS{policyflags} };
# implicitly uses $main::us
%EXPORT_TAGS = ( policyflags => [qw(NOFFCHECK FRESHREPO)] );
@EXPORT_OK = @{ $EXPORT_TAGS{policyflags} };
@@
-48,6
+49,13
@@
sub FRESHREPO () { return 0x4; }
our $debugprefix;
our $debuglevel = 0;
our $debugprefix;
our $debuglevel = 0;
+sub setup_sigwarn () {
+ our $sigwarn_mainprocess = $$;
+ $SIG{__WARN__} = sub {
+ die $_[0] unless getppid == $sigwarn_mainprocess;
+ };
+}
+
sub initdebug ($) {
($debugprefix) = @_;
open DEBUG, ">/dev/null" or die $!;
sub initdebug ($) {
($debugprefix) = @_;
open DEBUG, ">/dev/null" or die $!;
@@
-73,6
+81,16
@@
sub printdebug {
print DEBUG $debugprefix, @_ or die $! if $debuglevel>0;
}
print DEBUG $debugprefix, @_ or die $! if $debuglevel>0;
}
+sub messagequote ($) {
+ local ($_) = @_;
+ s{\\}{\\\\}g;
+ s{\n}{\\n}g;
+ s{\x08}{\\b}g;
+ s{\t}{\\t}g;
+ s{[\000-\037\177]}{ sprintf "\\x%02x", ord $& }ge;
+ $_;
+}
+
sub shellquote {
my @out;
local $_;
sub shellquote {
my @out;
local $_;
@@
-101,10
+119,10
@@
sub debugcmd {
printcmd(\*DEBUG,$debugprefix.$extraprefix,@_) if $debuglevel>0;
}
printcmd(\*DEBUG,$debugprefix.$extraprefix,@_) if $debuglevel>0;
}
-sub debiantag ($) {
- my ($v) = @_;
+sub debiantag ($
$
) {
+ my ($v
,$distro
) = @_;
$v =~ y/~:/_%/;
$v =~ y/~:/_%/;
- return "
debian
/$v";
+ return "
$distro
/$v";
}
sub server_branch ($) { return "$branchprefix/$_[0]"; }
}
sub server_branch ($) { return "$branchprefix/$_[0]"; }
@@
-173,8
+191,13
@@
sub cmdoutput_errok {
die $! if P->error;
if (!close P) { printdebug "=>!$?\n"; return undef; }
chomp $d;
die $! if P->error;
if (!close P) { printdebug "=>!$?\n"; return undef; }
chomp $d;
- $d =~ m/^.*/;
- printdebug "=> \`$&'",(length $' ? '...' : ''),"\n" if $debuglevel>0; #';
+ if ($debuglevel > 0) {
+ $d =~ m/^.*/;
+ my $dd = $&;
+ my $more = (length $' ? '...' : ''); #');
+ $dd =~ s{[^\n -~]|\\}{ sprintf "\\x%02x", ord $& }ge;
+ printdebug "=> \`$dd'",$more,"\n";
+ }
return $d;
}
return $d;
}
@@
-211,7
+234,7
@@
sub git_for_each_ref ($$;$) {
sub git_get_ref ($) {
# => '' if no such ref
my ($refname) = @_;
sub git_get_ref ($) {
# => '' if no such ref
my ($refname) = @_;
-
my
$_ = $refname;
+
local
$_ = $refname;
s{^refs/}{[r]efs/} or die "$refname $_ ?";
return cmdoutput qw(git for-each-ref --format=%(objectname)), $_;
}
s{^refs/}{[r]efs/} or die "$refname $_ ?";
return cmdoutput qw(git for-each-ref --format=%(objectname)), $_;
}