use warnings;
use POSIX;
+use IO::Handle;
BEGIN {
use Exporter ();
@ISA = qw(Exporter);
@EXPORT = qw(debiantag server_branch server_ref
stat_exists git_for_each_ref
- $package_re $branchprefix);
+ $package_re $component_re $branchprefix
+ initdebug enabledebug printdebug debugcmd
+ $debugprefix $debuglevel
+ shellquote printcmd);
%EXPORT_TAGS = ( policyflags => [qw(NOFFCHECK FRESHREPO)] );
@EXPORT_OK = @{ $EXPORT_TAGS{policyflags} };
}
our @EXPORT_OK;
our $package_re = '[0-9a-z][-+.0-9a-z]*';
+our $component_re = '[0-9a-zA-Z][-+.0-9a-zA-Z]*';
our $branchprefix = 'dgit';
# policy hook exit status bits
# see dgit-repos-server head comment for documentation
# 1 is reserved in case something fails with `exit 1'
-sub NOFFCHECK () { return 2; }
-sub FRESHREPO () { return 4; }
-# 128 is reserved
+sub NOFFCHECK () { return 0x2; }
+sub FRESHREPO () { return 0x4; }
+# 0x80 is reserved
sub debiantag ($) {
my ($v) = @_;
});
}
+our $debugprefix;
+our $debuglevel = 0;
+
+sub initdebug ($) {
+ ($debugprefix) = @_;
+ open ::DEBUG, ">/dev/null" or die $!;
+}
+
+sub enabledebug () {
+ open ::DEBUG, ">&STDERR" or die $!;
+ ::DEBUG->autoflush(1);
+ $debuglevel ||= 1;
+}
+
+sub printdebug {
+ print ::DEBUG $debugprefix, @_ or die $! if $debuglevel>0;
+}
+
+sub shellquote {
+ my @out;
+ local $_;
+ foreach my $a (@_) {
+ $_ = $a;
+ if (m{[^-=_./0-9a-z]}i) {
+ s{['\\]}{'\\$&'}g;
+ push @out, "'$_'";
+ } else {
+ push @out, $_;
+ }
+ }
+ return join ' ', @out;
+}
+
+sub printcmd {
+ my $fh = shift @_;
+ my $intro = shift @_;
+ print $fh $intro," " or die $!;
+ print $fh shellquote @_ or die $!;
+ print $fh "\n" or die $!;
+}
+
+sub debugcmd {
+ my $extraprefix = shift @_;
+ printcmd(\*::DEBUG,$debugprefix.$extraprefix,@_) if $debuglevel>0;
+}
+
1;