X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=Debian%2FDgit.pm;h=5953490e41bb919db1eb8ab1405d75e2094bb784;hb=3c47422924b4a4263ff72c523cbf706eb7945b6c;hp=5c079a68d3abfa8e4ce89b969027337244d4c53b;hpb=c7bbe8b90ccd78ed753c7dba2dc3942528e7b478;p=dgit.git diff --git a/Debian/Dgit.pm b/Debian/Dgit.pm index 5c079a68..5953490e 100644 --- a/Debian/Dgit.pm +++ b/Debian/Dgit.pm @@ -16,8 +16,11 @@ BEGIN { @ISA = qw(Exporter); @EXPORT = qw(debiantag server_branch server_ref stat_exists git_for_each_ref + git_for_each_tag_referring $package_re $component_re $branchprefix - initdebug enabledebug printdebug $debugprefix $debug + initdebug enabledebug enabledebuglevel + printdebug debugcmd + $debugprefix *debuglevel *DEBUG shellquote printcmd); %EXPORT_TAGS = ( policyflags => [qw(NOFFCHECK FRESHREPO)] ); @EXPORT_OK = @{ $EXPORT_TAGS{policyflags} }; @@ -57,12 +60,12 @@ sub git_for_each_ref ($$) { # calls $func->($objid,$objtype,$fullrefname,$reftail); # $reftail is RHS of ref after refs/\w+/ # breaks if $pattern matches any ref `refs/blah' where blah has no `/' - my $fh = new IO::File "-|", qw(git for-each-ref), $pattern or die $!; - while (<$fh>) { + open GFER, "-|", qw(git for-each-ref), $pattern or die $!; + while () { m#^(\w+)\s+(\w+)\s+(refs/\w+/(\S+))\s# or die "$_ ?"; $func->($1,$2,$3,$4); } - $!=0; $?=0; close $fh or die "$pattern $? $!"; + $!=0; $?=0; close GFER or die "$pattern $? $!"; } sub git_for_each_tag_referring ($$) { @@ -77,21 +80,31 @@ sub git_for_each_tag_referring ($$) { } our $debugprefix; -our $debug = 0; +our $debuglevel = 0; sub initdebug ($) { ($debugprefix) = @_; - open ::DEBUG, ">/dev/null" or die $!; + open DEBUG, ">/dev/null" or die $!; } sub enabledebug () { - open ::DEBUG, ">&STDERR" or die $!; - ::DEBUG->autoflush(1); - $debug ||= 1; + open DEBUG, ">&STDERR" or die $!; + DEBUG->autoflush(1); + $debuglevel ||= 1; +} + +sub enabledebuglevel ($) { + my ($newlevel) = @_; # may be undef (eg from env var) + die if $debuglevel; + $newlevel //= 0; + $newlevel += 0; + return unless $newlevel; + $debuglevel = $newlevel; + enabledebug(); } sub printdebug { - print ::DEBUG $debugprefix, @_ or die $!; + print DEBUG $debugprefix, @_ or die $! if $debuglevel>0; } sub shellquote { @@ -99,7 +112,7 @@ sub shellquote { local $_; foreach my $a (@_) { $_ = $a; - if (m{[^-=_./0-9a-z]}i) { + if (!length || m{[^-=_./0-9a-z]}i) { s{['\\]}{'\\$&'}g; push @out, "'$_'"; } else { @@ -117,4 +130,9 @@ sub printcmd { print $fh "\n" or die $!; } +sub debugcmd { + my $extraprefix = shift @_; + printcmd(\*DEBUG,$debugprefix.$extraprefix,@_) if $debuglevel>0; +} + 1;