chiark / gitweb /
Bugfixes (now tests/tests/drs-clone-nogit works)
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 22 Mar 2015 16:57:51 +0000 (16:57 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 22 Mar 2015 16:57:51 +0000 (16:57 +0000)
Debian/Dgit.pm
infra/dgit-repos-server
tests/drs-git-ext
tests/lib

index e177a83..268439a 100644 (file)
@@ -16,8 +16,8 @@ BEGIN {
     @EXPORT      = qw(debiantag server_branch server_ref
                       stat_exists git_for_each_ref
                       $package_re $branchprefix);
-    %EXPORT_TAGS = ( policyflags => [qw()] );
-    @EXPORT_OK   = qw();
+    %EXPORT_TAGS = ( policyflags => [qw(NOFFCHECK FRESHREPO)] );
+    @EXPORT_OK   = @{ $EXPORT_TAGS{policyflags} };
 }
 
 our @EXPORT_OK;
index acff172..f391b08 100755 (executable)
@@ -148,6 +148,7 @@ open DEBUG, ">/dev/null" or die $!;
 our $func;
 our $dgitrepos;
 our $package;
+our $distro;
 our $suitesfile;
 our $policyhook;
 our $realdestrepo;
@@ -253,9 +254,9 @@ sub policyhook {
     my ($policyallowbits, @polargs) = @_;
     # => ($exitstatuspolicybitmap);
     die if $policyallowbits & ~0x3e;
-    my @cmd = ($policyhook,$distro,$repos,@polargs);
-    debugcmd @_;
-    my $r = system @_;
+    my @cmd = ($policyhook,$distro,$dgitrepos,@polargs);
+    debugcmd @cmd;
+    my $r = system @cmd;
     die "system: $!" if $r < 0;
     die "hook (@cmd) failed ($?)" if $r & ~($policyallowbits << 8);
     return $r >> 8;
@@ -295,17 +296,6 @@ sub movetogarbage () {
        or die "$garbagerepo $!";
 }
 
-sub onwardpush () {
-    my @cmd = (qw(git send-pack), $destrepo);
-    push @cmd, qw(--force) if $policy & NOFFCHECK;
-    push @cmd, "$commit:refs/dgit/$suite",
-              "$tagval:refs/tags/$tagname");
-    debugcmd @cmd;
-    $!=0;
-    my $r = system @cmd;
-    !$r or die "onward push to $destrepo failed: $r $!";
-}
-
 #----- git-receive-pack -----
 
 sub fixmissing__git_receive_pack () {
@@ -463,12 +453,14 @@ sub parsetag () {
     $version = $2;
     die "$3 != $suite " unless $3 eq $suite;
 
+    my $copyl = $_;
     for (;;) {
-       print PT or die $!;
+       print PT $copyl or die $!;
        $!=0; $_=<T>; defined or die "missing signature? $!";
+       $copyl = $_;
        if (m/^\[dgit ([^"].*)\]$/) { # [dgit "something"] is for future
            $_ = $1." ";
-           for (;;) {
+           while (length) {
                if (s/^distro\=(\S+) //) {
                    die "$1 != $distro" unless $1 eq $distro;
                } elsif (s/^(--deliberately-$package_re) //) {
@@ -478,13 +470,14 @@ sub parsetag () {
                    $supersedes{$1} = $2;
                } elsif (s/^[-+.=0-9a-z]\S* //) {
                } else {
-                   die "unknown dgit info in tag";
+                   die "unknown dgit info in tag ($_)";
                }
            }
            next;
        }
        last if m/^-----BEGIN PGP/;
     }
+    $_ = $copyl;
     for (;;) {
        print DS or die $!;
        $!=0; $_=<T>;
@@ -650,7 +643,7 @@ sub checktagnoreplay () {
 
     my @problems;
 
-    git_for_each_tag_referring($objreferring, sub {
+    git_for_each_tag_referring($onlyreferring, sub {
        my ($objid,$fullrefname,$tagname) = @_;
        debug "checktagnoreplay - overwriting $fullrefname=$objid";
        my $supers = $supersedes{$fullrefname};
@@ -697,7 +690,7 @@ sub checks () {
     lockrealtree();
 
     my @policy_args = ($package,$version,$suite,$tagname,
-                      join(",",@delberatelies));
+                      join(",",@deliberatelies));
     $policy = policyhook(NOFFCHECK|FRESHREPO, 'push', @policy_args);
 
     checktagnoreplay();
@@ -731,6 +724,17 @@ sub checks () {
     policyhook(0, 'push-confirm', @policy_args);
 }
 
+sub onwardpush () {
+    my @cmd = (qw(git send-pack), $destrepo);
+    push @cmd, qw(--force) if $policy & NOFFCHECK;
+    push @cmd, "$commit:refs/dgit/$suite",
+              "$tagval:refs/tags/$tagname";
+    debugcmd @cmd;
+    $!=0;
+    my $r = system @cmd;
+    !$r or die "onward push to $destrepo failed: $r $!";
+}
+
 sub stunthook () {
     debug "stunthook";
     chdir $workrepo or die "chdir $workrepo: $!";
@@ -805,7 +809,7 @@ sub parseargsdispatch () {
        exit 0;
     }
 
-    $ENV{'DGIT_DRS_DISTRO'} = argval();
+    $ENV{'DGIT_DRS_DISTRO'} = $distro = argval();
     $ENV{'DGIT_DRS_SUITES'} = argval();
     $ENV{'DGIT_DRS_KEYRINGS'} = argval();
     $dgitrepos = argval();
index 52e7817..73dcfa2 100755 (executable)
@@ -2,12 +2,14 @@
 set -e
 tmp=$DGIT_TEST_TMP
 
+export DGIT_DRS_DEBUG=1
 echo >&2 '(((((((((((((((((((((((((((((((((((((((('
 set -x
 export SSH_ORIGINAL_COMMAND="$*"
-${DGIT_REPOS_SERVER_TEST-dgit-repos-server} \
+${DGIT_REPOS_SERVER_TEST-dgit-repos-server} test-dummy \
        $tmp/suites \
        $tmp/dd.gpg,a:$tmp/dm.gpg,m$tmp/dm.txt \
        $tmp/git \
+       $tmp/policy \
        --ssh
 : '))))))))))))))))))))))))))))))))))))))))'
index adbd79f..6aab152 100644 (file)
--- a/tests/lib
+++ b/tests/lib
@@ -261,6 +261,7 @@ t-drs () {
  t-git-config dgit-distro.test-dummy.git-create true
        cp $root/tests/gnupg/{dd.gpg,dm.gpg,dm.txt} $tmp/.
        cp $root/tests/suites $tmp/.
+       ln -s /bin/true $tmp/policy
 }
 
 t-dss () {