summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xinfra/dgit-repos-policy-debian15
-rwxr-xr-xinfra/dgit-repos-server28
2 files changed, 41 insertions, 2 deletions
diff --git a/infra/dgit-repos-policy-debian b/infra/dgit-repos-policy-debian
index 41a5551..3c7c006 100755
--- a/infra/dgit-repos-policy-debian
+++ b/infra/dgit-repos-policy-debian
@@ -373,6 +373,21 @@ END
return 0;
}
+sub action_check_list () {
+ opendir L, "$repos" or die "$repos $!";
+ while (defined (my $dent = readdir L)) {
+ next unless $dent =~ m/^($package_re)\.git$/;
+ $pkg = $1;
+ statpackage();
+ next unless $pkg_exists;
+ next unless $pkg_secret;
+ print "$pkg\n" or die $!;
+ }
+ closedir L or die $!;
+ close STDOUT or die $!;
+ return 0;
+}
+
$action =~ y/-/_/;
my $fn = ${*::}{"action_$action"};
if (!$fn) {
diff --git a/infra/dgit-repos-server b/infra/dgit-repos-server
index 2be40c5..f6ac507 100755
--- a/infra/dgit-repos-server
+++ b/infra/dgit-repos-server
@@ -25,6 +25,7 @@
# 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]; };
@@ -154,8 +155,9 @@ $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.)
@@ -164,6 +166,7 @@ $SIG{__WARN__} = sub { die $_[0]; };
use POSIX;
use Fcntl qw(:flock);
use File::Path qw(rmtree);
+use File::Temp qw(tempfile);
use Debian::Dgit qw(:DEFAULT :policyflags);
@@ -864,6 +867,27 @@ sub mode_ssh () {
&$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;