chiark / gitweb /
WIP Debian policy
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 21 Mar 2015 14:53:34 +0000 (14:53 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 22 Mar 2015 15:19:54 +0000 (15:19 +0000)
Reorg taint tag a bit

infra/dgit-repos-policy-debian

index 66bf8be..0f9d70f 100755 (executable)
@@ -168,11 +168,11 @@ sub getpackage () {
     $pkg_secret = !!(~(stat _)[2] & 05);
 }
 
-sub add_taint ($$) {
-    my ($gitobjid, $gitobjtype, $reason) = @_;
+sub add_taint_by_tag ($$$) {
+    my ($tagname, $refobjid, $refobjtype) = @_;
 
     my $tf = new File::Temp or die $!;
-    print $tf "$gitobjid\n" or die $!;
+    print $tf "$refobjid^0\n" or die $!;
 
     my $gcfpid = open GCF, "-|";
     defined $gcfpid or die $!;
@@ -185,14 +185,22 @@ sub add_taint ($$) {
     close $tf or die $!;
     $_ = <GCF>;
     m/^(\w+) (\w+) (\d+)\n/ or die "$objline ?";
-    $1 eq $gitobjid or die "$! $gitobjid ?";
-    $2 eq $gitobjtype or die "$! $gitobjtype ?";
+    my $gitobjid = $1;
+    my $gitobjtype = $2;
     my $bytes = $3;
 
     my $gitobjdata;
-    $!=0; read GCF, $gitobjdata, $bytes == $bytes or die "$gitobjid $bytes $!";
+    if ($gitobjtype eq 'commit' or $gitobjtype eq 'tag') {
+       $!=0; read GCF, $gitobjdata, $bytes == $bytes
+           or die "$gitobjid $bytes $!";
+    }
     close GCF;
 
+    my $reason =
+       "tag $tagname referred to this object in git tree but all".
+       " previously pushed versions were found to have been".
+       " removed from NEW (ie, rejected) (or never arrived)";
+
     $poldbh->do("INSERT INTO taints".
                " (package, gitobjid, gitobjtype, gitobjdata, time, comment)",
                " VALUES (?,?,?,?,?,?)", {},
@@ -223,10 +231,7 @@ sub action__check_package () {
 
     git_for_each_ref('refs/tags', sub {
        my ($objid,$objtype,$fullrefname,$tagname) = @_;
-       add_taint($objid,$objtype,
-                 "tag $tagname referred to this object in git tree but all".
-                 " previously pushed versions were found to have been".
-                 " removed from NEW (ie, rejected) (or never arrived)");
+       add_taint_by_tag($tagname,$objid,$objtype);
     });
     $?=0; $!=0; close TAGL or die "git for-each-ref $? $!";