# where AUTH-SPEC is one of
# a
# mDM.TXT
+# (With --cron AUTH-SPEC is not used and may be the empty string.)
use strict;
$SIG{__WARN__} = sub { die $_[0]; };
#
# check-list and check-package are invoked via the --cron option.
# First, without any locking, check-list is called. It should produce
-# a list of package names. Then check-package will be invoked for
-# each named package, in each case after taking an appropriate lock.
+# a list of package names (one per line). Then check-package will be
+# invoked for each named package, in each case after taking an
+# appropriate lock.
#
# If policy hook wants to run dgit (or something else in the dgit
# package), it should use DGIT-LIVE-DIR/dgit (etc.)
use POSIX;
use Fcntl qw(:flock);
use File::Path qw(rmtree);
+use File::Temp qw(tempfile);
use Debian::Dgit qw(:DEFAULT :policyflags);
}
sub stunthook () {
- debug "stunthook";
+ debug "stunthook in $workrepo";
chdir $workrepo or die "chdir $workrepo: $!";
mkdir "dgit-tmp" or $!==EEXIST or die $!;
readupdates();
sub main__git_upload_pack () {
my $lfh = locksometree($destrepo);
+ debug "git-upload-pack in $destrepo";
chdir $destrepo or die "$destrepo: $!";
close $lfh;
runcmd qw(git upload-pack), ".";
&$mainfunc;
}
+sub mode_cron () {
+ die if @ARGV;
+
+ my $listfh = tempfile();
+ open STDOUT, ">&", $listfh or die $!;
+ policyhook(0,'check-list');
+ open STDOUT, ">&STDERR" or die $!;
+
+ seek $listfh, 0, 0 or die $!;
+ while (<$listfh>) {
+ chomp or die;
+ next if m/^\s*\#/;
+ next unless m/\S/;
+ die unless m/^($package_re)$/;
+
+ $package = $1;
+ policy_checkpackage();
+ }
+ die $! if $listfh->error;
+}
+
sub parseargsdispatch () {
die unless @ARGV;
}
if ($ARGV[0] eq '--pre-receive-hook') {
- if ($debug) { $debug.="="; }
+ if ($debug) {
+ $debug.="=";
+ debug "in stunthook @ARGV";
+ foreach my $k (sort keys %ENV) {
+ debug "$k=$ENV{$k}" if $k =~ m/^DGIT/;
+ }
+ }
shift @ARGV;
@ARGV == 1 or die;
$package = shift @ARGV;