use File::Temp qw(tempfile);
use DBI;
use IPC::Open2;
+use Data::Dumper;
use Debian::Dgit qw(:DEFAULT :policyflags);
use Debian::Dgit::Policy::Debian;
+initdebug('%');
+enabledebuglevel $ENV{'DGIT_DRS_DEBUG'};
+
our $distro = shift @ARGV // die "need DISTRO";
our $repos = shift @ARGV // die "need DGIT-REPOS-DIR";
our $dgitlive = shift @ARGV // die "need DGIT-LIVE-DIR";
our $action = shift @ARGV // die "need ACTION";
our $publicmode = 02775;
-our $new_upload_propagation_slop = 3600*4 + 100;
+our $new_upload_propagation_slop = 3600*4 + 100;# fixme config;
our $poldbh;
our $pkg;
sub apiquery ($) {
my ($subpath) = @_;
local $/=undef;
- my $cmd = "$dgitlive/dgit -d $distro ".
- "\$DGIT_TEST_OPTS \$DGIT_TEST_DEBUG archive-api-query $subpath";
+ my $cmd = "$dgitlive/dgit -d$distro \$DGIT_TEST_OPTS";
+ $cmd .= " -".("D" x $debuglevel) if $debuglevel;
+ $cmd .= " archive-api-query $subpath";
+ printdebug "apiquery $cmd\n";
$!=0; $?=0; my $json = `$cmd`;
defined $json or die "$subpath $! $?";
- return decode_json $json;
+ my $r = decode_json $json;
+ my $d = new Data::Dumper([$r], [qw(r)]);
+ printdebug "apiquery $subpath | ", $d->Dump(), "\n" if $debuglevel>=2;
+ return $r;
}
sub specific_suite_has_vsn_in_our_history ($) {
sub statpackage () {
$pkgdir = "$repos/$pkg.git";
if (!stat_exists $pkgdir) {
+ printdebug "statpackage $pkg => ENOENT\n";
$pkg_exists = 0;
} else {
$pkg_exists = 1;
$pkg_secret = !!(~(stat _)[2] & 05);
+ printdebug "statpackage $pkg => exists, secret=$pkg_secret.\n";
}
}
" removed from NEW (ie, rejected) (or never arrived)");
}
-sub action__check_package () {
+sub action_check_package () {
getpackage();
return 0 unless $pkg_exists;
return 0 unless $pkg_secret;
sub action_push_confirm () {
getpackage();
- die unless @ARGV;
- my $freshrepo = shift @ARGV;
+ die unless @ARGV >= 5;
+ my $freshrepo = $ARGV[4];
my $initq = $poldbh->prepare(<<END);
SELECT taint_id, gitobjid FROM taints t
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;
+ printdebug "$pkg\n" or die $!;
+ }
+ closedir L or die $!;
+ close STDOUT or die $!;
+ return 0;
+}
+
$action =~ y/-/_/;
my $fn = ${*::}{"action_$action"};
if (!$fn) {
+ printdebug "dgit-repos-policy-debian: unknown action $action\n";
exit 0;
}