X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=git-debrebase;h=a9f510c8f112327b41b19adefcaff4060491be6b;hb=954dc1be0a631c5a0728328f7241f94ceada8afd;hp=4a1ea570d9ed299692153b132033abab379539fd;hpb=17dce7274cfdba60a0c5c4c37045a4a37c070146;p=dgit.git diff --git a/git-debrebase b/git-debrebase index 4a1ea570..a9f510c8 100755 --- a/git-debrebase +++ b/git-debrebase @@ -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,25 +254,41 @@ 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, or --force)", + $us, $fproblems_tripped; } } } +sub any_fproblems () { + return $fproblems_forced || $fproblems_tripped; +} # classify returns an info hash like this # CommitId => $objid @@ -926,7 +944,7 @@ sub cmd_new_upstream_v0 () { in_workarea sub { my @upstream_merge_parents; - if (!$fproblems) { + if (!any_fproblems()) { push @upstream_merge_parents, $old_upstream->{CommitId}; } @@ -1122,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;