chiark / gitweb /
git-debrebase: conclude, quick: uncleanness after laundry is fatal
[dgit.git] / git-debrebase
index e3fea7c84a1d2824c23fd933fdb2a7c3ab1e9ebe..ce348e291e78cec0d2f86725a6290b4fa69f55f5 100755 (executable)
@@ -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)",
@@ -901,6 +908,7 @@ sub do_launder_head ($) {
     my $old = get_head();
     record_ffq_auto();
     my ($tip,$breakwater) = walk $old;
+    snags_maybe_bail();
     update_head_postlaunder $old, $tip, $reflogmsg;
     return ($tip,$breakwater);
 }
@@ -1094,6 +1102,7 @@ sub do_stitch ($;$) {
     my $dangling_head = get_head();
 
     keycommits $dangling_head, $unclean,$unclean,$unclean;
+    snags_maybe_bail();
 
     stitch($dangling_head, $ffq_prev, $gdrlast, $ffq_prev_commitish, $prose);
 }
@@ -1323,7 +1332,7 @@ sub cmd_prepush () { cmd_stitch(); }
 sub cmd_quick () {
     badusage "no arguments allowed" if @ARGV;
     do_launder_head 'launder for git-debrebase quick';
-    do_stitch 'quick', \&snag;
+    do_stitch 'quick';
 }
 
 sub cmd_conclude () {
@@ -1336,7 +1345,7 @@ sub cmd_conclude () {
     
     badusage "no arguments allowed" if @ARGV;
     do_launder_head 'launder for git-debrebase quick';
-    do_stitch 'quick', \&snag;
+    do_stitch 'quick';
 }
 
 sub cmd_convert_from_gbp () {
@@ -1429,6 +1438,7 @@ sub cmd_convert_to_gbp () {
        push @deferred_updates, "delete $ffq";
        push @deferred_updates, "delete $gdrlast";
     }
+    snags_maybe_bail();
     update_head_checkout $head, $out, "convert to gbp (v0)";
     print <<END or die $!;
 git-debrebase: converted to git-buildpackage branch format