X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=git-debrebase;h=b70f8d91ff1f0824dd24cdd0fc3c1c643ddabf20;hb=aceda86bc2122516ff910858f7851df38f99a279;hp=b57e42833cee4a5562d2cf8510d62620ad6c44e0;hpb=e2ac59451c647d10669a87a5189802f2ab572b7e;p=dgit.git diff --git a/git-debrebase b/git-debrebase index b57e4283..b70f8d91 100755 --- a/git-debrebase +++ b/git-debrebase @@ -116,7 +116,7 @@ sub dd ($) { sub get_commit ($) { my ($objid) = @_; - my $data = git_cat_file $objid, 'commit'; + my $data = (git_cat_file $objid, 'commit'); $data =~ m/(?<=\n)\n/ or die "$objid ($data) ?"; return ($`,$'); } @@ -200,8 +200,8 @@ sub get_differs ($$) { if ($mode eq 'A' && !m/\.series$/s) { $ok = 1; } elsif ($mode eq 'M' && $_ eq 'series') { - my $x_s = git_cat_file "$x:debian/patches/series", 'blob'; - my $y_s = git_cat_file "$y:debian/patches/series", 'blob'; + my $x_s = (git_cat_file "$x:debian/patches/series", 'blob'); + my $y_s = (git_cat_file "$y:debian/patches/series", 'blob'); chomp $x_s; $x_s .= "\n"; $ok = $x_s eq substr($y_s, 0, length $x_s); } else { @@ -252,6 +252,26 @@ sub make_commit ($$) { return cmdoutput @cmd; } +our $fproblems; +sub fproblem ($) { + my ($msg) = @_; + $fproblems++; + print STDERR "git-debrebase: safety catch tripped: $msg\n"; +} +sub fproblems_maybe_bail () { + if ($fproblems) { + if ($opt_force) { + printf STDERR + "safety catch trips (%d) overriden by --force\n", + $fproblems; + } else { + fail sprintf + "safety catch trips (%d) (you could --force)", + $fproblems; + } + } +} + # classify returns an info hash like this # CommitId => $objid # Hdr => # commit headers, including 1 final newline @@ -853,18 +873,11 @@ sub cmd_new_upstream_v0 () { my $old_upstream = parsecommit $old_upstream_update_cl->{OrigParents}[0]{CommitId}; - my $problems = 0; - my $problem = sub { - my ($msg) = @_; - $problems++; - print STDERR "preflight check failed: $msg\n"; - }; - $piece->('', Old => $old_upstream->{CommitId}); if ($old_upstream->{Msg} =~ m{^\[git-debrebase }m) { if ($old_upstream->{Msg} =~ - m{^\[git-debrebase new-upstream combine \.((?: $extra_orig_namepart_re)+)\]} + m{^\[git-debrebase (?:\w*-)?upstream combine \.((?: $extra_orig_namepart_re)+)\]} ) { my @oldpieces = ('', split / /, $1); my $parentix = -1 + scalar @{ $old_upstream->{Parents} }; @@ -873,35 +886,25 @@ sub cmd_new_upstream_v0 () { $piece->($n, Old => $old_upstream->{CommitId}.'^'.$parentix); } } else { - $problem->("previous upstream $old_upstream->{CommitId} is from". - " git-debrebase but not a \`new-upstream combine' commit"); + fproblem "previous upstream $old_upstream->{CommitId} is from". + " git-debrebase but not an \`upstream combine' commit"; } } foreach my $pc (values %pieces) { if (!$pc->{Old}) { - $problem->("introducing upstream piece \`$pc->{Name}'"); + fproblem "introducing upstream piece \`$pc->{Name}'"; } elsif (!$pc->{New}) { - $problem->("dropping upstream piece \`$pc->{Name}'"); + fproblem "dropping upstream piece \`$pc->{Name}'"; } elsif (!is_fast_fwd $pc->{Old}, $pc->{New}) { - $problem->("not fast forward: $pc->{Name} $pc->{Old}..$pc->{New}"); + fproblem "not fast forward: $pc->{Name} $pc->{Old}..$pc->{New}"; } } printdebug "%pieces = ", (dd \%pieces), "\n"; printdebug "\@newpieces = ", (dd \@newpieces), "\n"; - if ($problems) { - if ($opt_force) { - printf STDERR - "preflight check failures (%d) overriden by --force\n", - $problems; - } else { - fail sprintf - "preflight check failures (%d) (you could --force)", - $problems; - } - } + fproblems_maybe_bail(); my $new_bw; @@ -909,7 +912,7 @@ sub cmd_new_upstream_v0 () { in_workarea sub { my @upstream_merge_parents; - if (!$problems) { + if (!$fproblems) { push @upstream_merge_parents, $old_upstream->{CommitId}; }