summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Jackson <ijackson@chiark.greenend.org.uk>2018-04-22 23:27:26 +0100
committerIan Jackson <ijackson@chiark.greenend.org.uk>2018-06-16 22:40:13 +0100
commitacec8e4b8dc36601d94159bdac169b8f13e64913 (patch)
treee41a7b5e694de28438998655a65fe789f37c26c7
parentb33a6ea64a28a1122d75ce3a0d4808211e0734d3 (diff)
git-debrebase: Defend against missing snags_maybe_bail calls
Almost the only thing gdr does as an output is to update HEAD and other refs. That's done with run_deferred_updates. So, there, check that (i) we have called snags_maybe_bail at least once; (ii) we have not had any snags since. Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
-rwxr-xr-xgit-debrebase11
1 files changed, 9 insertions, 2 deletions
diff --git a/git-debrebase b/git-debrebase
index 6259dfe..6211fb6 100755
--- a/git-debrebase
+++ b/git-debrebase
@@ -99,12 +99,18 @@ sub fresh_workarea () {
in_workarea sub { playtree_setup };
}
+our $snags_forced;
+our $snags_tripped;
+our $snags_checked;
our @deferred_updates;
our @deferred_update_messages;
sub run_deferred_updates ($) {
my ($mrest) = @_;
+ confess 'dangerous internal error' if
+ !$snags_checked || $snags_tripped || $snags_forced;
+
my @upd_cmd = (@git, qw(update-ref --stdin -m), "debrebase: $mrest");
debugcmd '>|', @upd_cmd;
open U, "|-", @upd_cmd or die $!;
@@ -227,8 +233,6 @@ sub make_commit ($$) {
}
our @snag_force_opts;
-our $snags_forced;
-our $snags_tripped;
sub snag ($$) {
my ($tag,$msg) = @_;
if (grep { $_ eq $tag } @snag_force_opts) {
@@ -241,16 +245,19 @@ sub snag ($$) {
}
sub snags_maybe_bail () {
+ $snags_checked++;
if ($snags_forced) {
printf STDERR
"%s: snags: %d overriden by individual -f options\n",
$us, $snags_forced;
+ $snags_forced=0;
}
if ($snags_tripped) {
if ($opt_force) {
printf STDERR
"%s: snags: %d overriden by global --force\n",
$us, $snags_tripped;
+ $snags_tripped=0;
} else {
fail sprintf
"%s: snags: %d blockers (you could -f<tag>, or --force)",