chiark / gitweb /
changelog: start 6.8
[dgit.git] / git-debrebase
index 9d0bda0b41b4cc6ccce0c1f6bd87144bb36dd77d..4bfe0952518214203c5e3ac397b27c53ceb93354 100755 (executable)
@@ -439,6 +439,48 @@ sub record_gdrlast ($$;$) {
     push @deferred_updates, "update $gdrlast $newvalue $oldvalue";
 }
 
+sub fail_unprocessable ($) {
+    my ($msg) = @_;
+    changedir $maindir;
+    my ($ffqs, $ffqm, $symref, $ffq_prev, $gdrlast) = ffq_prev_branchinfo();
+
+    my $mangled = <<END;
+Branch/history seems mangled - no longer in gdr format.
+See ILLEGAL OPERATIONS in git-debrebase(5).
+END
+    chomp $mangled;
+
+    if (defined $ffqm) {
+       fail <<END;
+$msg
+Is this meant to be a gdr branch?  $ffqm
+END
+    } elsif (git_get_ref $ffq_prev) {
+       fail <<END;
+$msg
+$mangled
+Consider git-debrebase scrap, to throw away your recent work.
+END
+    } elsif (!git_get_ref $gdrlast) {
+       fail <<END;
+$msg
+Branch does not seem to be meant to be a git-debrebase branch?
+Wrong branch, or maybe you needed git-debrebase convert-from-*.
+END
+    } elsif (is_fast_fwd $gdrlast, git_rev_parse 'HEAD') {
+       fail <<END;
+$msg
+$mangled
+END
+    } else {
+       fail <<END;
+$msg
+Branch/history mangled, and diverged since last git-debrebase.
+Maybe you reset to, or rebased from, somewhere inappropriate.
+END
+    }
+};
+
 sub gbp_pq_export ($$$) {
     my ($bname, $base, $tip) = @_;
     # must be run in a workarea.  $bname and patch-queue/$bname
@@ -1054,7 +1096,7 @@ sub keycommits ($;$$$$$) {
     my $clogonly;
     my $cl;
     my $found_pm;
-    $fatal //= sub { fail $_[1]; };
+    $fatal //= sub { fail_unprocessable $_[1]; };
     my $x = sub {
        my ($cb, $tagsfx, $mainwhy, $xwhy) = @_;
        my $why = $mainwhy.$xwhy;
@@ -1179,7 +1221,7 @@ sub walk ($;$$$) {
        if ($nogenerate) {
            return (undef,undef);
        }
-       fail "found unprocessable commit, cannot cope".
+       fail_unprocessable "found unprocessable commit, cannot cope".
            (defined $cl->{Why} ? "; $cl->{Why}:": ':').
            " (commit $cur) (d.".
            (join ' ', map { sprintf "%#x", $_->{Differs} }