chiark / gitweb /
git-debrebase: provide -f<tag>
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 10 Feb 2018 18:14:44 +0000 (18:14 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 16 Jun 2018 11:25:49 +0000 (12:25 +0100)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
git-debrebase

index 11a1896217e10ef51a1288d99c647904f3a5817d..a9f510c8f112327b41b19adefcaff4060491be6b 100755 (executable)
@@ -90,6 +90,8 @@ use Dpkg::Version;
 
 our ($opt_force);
 
+our $us = qw(git-debrebase);
+
 sub badusage ($) {
     my ($m) = @_;
     die "bad usage: $m\n";
@@ -252,27 +254,40 @@ sub make_commit ($$) {
     return cmdoutput @cmd;
 }
 
-our $fproblems;
+our @fproblem_force_opts;
+our $fproblems_forced;
+our $fproblems_tripped;
 sub fproblem ($$) {
     my ($tag,$msg) = @_;
-    $fproblems++;
-    print STDERR "git-debrebase: safety catch tripped: $msg\n";
+    if (grep { $_ eq $tag } @fproblem_force_opts) {
+       $fproblems_forced++;
+       print STDERR "git-debrebase: safety catch overridden (-f$tag): $msg\n";
+    } else {
+       $fproblems_tripped++;
+       print STDERR "git-debrebase: safety catch tripped (-f$tag): $msg\n";
+    }
 }
+
 sub fproblems_maybe_bail () {
-    if ($fproblems) {
+    if ($fproblems_forced) {
+       printf STDERR
+           "%s: safety catch trips: %d overriden by individual -f options\n",
+           $us, $fproblems_forced;
+    }
+    if ($fproblems_tripped) {
        if ($opt_force) {
            printf STDERR
-               "safety catch trips (%d) overriden by --force\n",
-               $fproblems;
+               "%s: safety catch trips: %d overriden by global --force\n",
+               $us, $fproblems_tripped;
        } else {
            fail sprintf
-               "safety catch trips (%d) (you could --force)",
-               $fproblems;
+  "%s: safety catch trips: %d blockers (you could -f<tag>, or --force)",
+               $us, $fproblems_tripped;
        }
     }
 }
 sub any_fproblems () {
-    return !!$fproblems;
+    return $fproblems_forced || $fproblems_tripped;
 }
 
 # classify returns an info hash like this
@@ -1125,6 +1140,7 @@ sub cmd_downstream_rebase_launder_v0 () {
 }
 
 GetOptions("D+" => \$debuglevel,
+          'f=s' => \@fproblem_force_opts,
           'force!') or die badusage "bad options\n";
 initdebug('git-debrebase ');
 enabledebug if $debuglevel;