summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Jackson <ijackson@chiark.greenend.org.uk>2022-12-28 12:53:30 +0000
committerIan Jackson <ijackson@chiark.greenend.org.uk>2022-12-28 20:08:38 +0000
commit3cb09a47af3a55f646d7808cd3bb78d0b907b36e (patch)
tree20eee87918a70281323e4738f03f46c96593b261
parentf1112d968a030f9948f3172341611a47bfbb2b44 (diff)
tainted-objects: Move message construction to module
This will allow us to reuse it. Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
-rw-r--r--Debian/Dgit.pm39
-rwxr-xr-xinfra/dgit-repos-policy-debian31
2 files changed, 48 insertions, 22 deletions
diff --git a/Debian/Dgit.pm b/Debian/Dgit.pm
index 829725c..25a149f 100644
--- a/Debian/Dgit.pm
+++ b/Debian/Dgit.pm
@@ -82,6 +82,7 @@ BEGIN {
$negate_harmful_gitattrs
changedir git_slurp_config_src
gdr_ffq_prev_branchinfo
+ tainted_objects_message
parsecontrolfh parsecontrol parsechangelog
getfield parsechangelog_loop
playtree_setup playtree_write_gbp_conf);
@@ -951,6 +952,44 @@ sub reflog_cache_lookup ($$) {
return undef;
}
+sub tainted_objects_message ($$) {
+ my ($ti, $override_status) = @_;
+ # $override_status:
+ # undef, not overriddeable
+ # '', not overridden
+ # $deliberately, overridden
+
+ my $msg = '';
+
+ my $timeshow = defined $ti->{time}
+ ? " at time ".strftime("%Y-%m-%d %H:%M:%S Z", gmtime $ti->{time})
+ : "";
+
+ my $pkgshow = length $ti->{package}
+ ? "package $ti->{package}"
+ : "any package";
+
+ $msg .= <<END;
+
+History contains tainted $ti->{gitobjtype} $ti->{gitobjid}
+Taint recorded$timeshow for $pkgshow
+Reason: $ti->{comment}
+END
+
+ $msg .=
+ !defined $override_status ? <<END
+Uncorrectable error. If confused, consult administrator.
+END
+ : !length $override_status ? <<END
+Could be forced using --deliberately. Consult documentation.
+END
+ : <<END;
+Forcing due to $override_status
+END
+
+ return $msg;
+}
+
# ========== playground handling ==========
# terminology:
diff --git a/infra/dgit-repos-policy-debian b/infra/dgit-repos-policy-debian
index 467a417..fc7f1b1 100755
--- a/infra/dgit-repos-policy-debian
+++ b/infra/dgit-repos-policy-debian
@@ -471,46 +471,33 @@ END
my $ti = $taintinfoq->fetchrow_hashref();
die "($taintid)" unless $ti;
- my $timeshow = defined $ti->{time}
- ? " at time ".strftime("%Y-%m-%d %H:%M:%S Z", gmtime $ti->{time})
- : "";
- my $pkgshow = length $ti->{package}
- ? "package $ti->{package}"
- : "any package";
-
- $stderr .= <<END;
-
-History contains tainted $objtype $objid
-Taint recorded$timeshow for $pkgshow
-Reason: $ti->{comment}
-END
-
printdebug "SQL overrides: @overridesv $taintid /\n$overridesstmt\n";
$overridesq ||= $poldbh->prepare($overridesstmt);
$overridesq->execute(@overridesv, $taintid);
my ($ovwhy) = $overridesq->fetchrow_array();
+ my $ovstatus;
if (!defined $ovwhy) {
$overridesanyq ||= $poldbh->prepare(<<END);
SELECT 1 FROM taintoverrides WHERE taint_id = ? LIMIT 1
END
$overridesanyq->execute($taintid);
my ($ovany) = $overridesanyq->fetchrow_array();
- $stderr .= $ovany ? <<END : <<END;
-Could be forced using --deliberately. Consult documentation.
-END
-Uncorrectable error. If confused, consult administrator.
-END
+ $ovwhy = $ovany ? '' : undef;
$mustreject = 1;
} else {
- $stderr .= <<END;
-Forcing due to $ovwhy
-END
$untaintq ||= $poldbh->prepare(<<END);
DELETE FROM taints WHERE taint_id = ?
END
$untaintq->execute($taintid);
}
+
+ $stderr .= tainted_objects_message {
+ %$ti,
+ gitobjid => $objid,
+ gitobjtype => $objtype,
+ }, $ovstatus;
+
}
close CHKOUT;