X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=dgit.git;a=blobdiff_plain;f=infra%2Fdgit-repos-policy-debian;h=ce98cd72e46bfa104cf57182037dfb09d8f8a51b;hp=cdfa80e702f9efdf66a84aca3b38c56cb8449950;hb=ef676d2d2e300a8b81166929ab836ba7e50a1356;hpb=08350aa0ad7092bd26e7fff5a563dec7a4e682e7 diff --git a/infra/dgit-repos-policy-debian b/infra/dgit-repos-policy-debian index cdfa80e7..ce98cd72 100755 --- a/infra/dgit-repos-policy-debian +++ b/infra/dgit-repos-policy-debian @@ -9,17 +9,21 @@ use JSON; 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; @@ -79,11 +83,16 @@ our %deliberately; 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 ($) { @@ -123,10 +132,12 @@ sub good_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"; } } @@ -188,7 +199,7 @@ sub add_taint_by_tag ($$) { " 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; @@ -247,6 +258,10 @@ sub action_push () { } sub action_push_confirm () { + getpackage(); + die unless @ARGV >= 5; + my $freshrepo = $ARGV[4]; + my $initq = $poldbh->prepare(<> 1)); + printdebug sprintf "chmod %#o (was %#o) %s\n", + $newmode, $oldmode, $freshrepo; + chmod $newmode, $freshrepo or die $!; + } + } + + 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; }