X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=git-debrebase;h=421a1cb25f3406981e26f498b6bad8840498147d;hb=32264794f3d4b03366998e469cdb42ddeb979a5a;hp=4a1ea570d9ed299692153b132033abab379539fd;hpb=17dce7274cfdba60a0c5c4c37045a4a37c070146;p=dgit.git diff --git a/git-debrebase b/git-debrebase index 4a1ea570..421a1cb2 100755 --- a/git-debrebase +++ b/git-debrebase @@ -87,8 +87,11 @@ use POSIX; use Data::Dumper; use Getopt::Long qw(:config posix_default gnu_compat bundling); use Dpkg::Version; +use File::FnMatch qw(:fnmatch); -our ($opt_force); +our ($opt_force, $opt_noop_ok); + +our $us = qw(git-debrebase); sub badusage ($) { my ($m) = @_; @@ -252,25 +255,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 +945,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 +1141,8 @@ sub cmd_downstream_rebase_launder_v0 () { } GetOptions("D+" => \$debuglevel, + 'noop-ok', => \$opt_noop_ok, + 'f=s' => \@fproblem_force_opts, 'force!') or die badusage "bad options\n"; initdebug('git-debrebase '); enabledebug if $debuglevel;