chiark / gitweb /
git-debrebase: Break out ff_check (for reuse by convert-from-gbp)
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 7 Jul 2018 21:44:09 +0000 (22:44 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 8 Jul 2018 18:31:15 +0000 (19:31 +0100)
No functional change.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
git-debrebase

index ddb7840cf997236d4d604c6468f84923209a2e53..b029e5cff9d1789673d4be8cbb359b85da1043dc 100755 (executable)
@@ -980,19 +980,19 @@ sub ffq_prev_branchinfo () {
     return gdr_ffq_prev_branchinfo($current);
 }
 
     return gdr_ffq_prev_branchinfo($current);
 }
 
-sub record_ffq_prev_deferred () {
-    # => ('status', "message")
-    # 'status' may be
-    #    deferred          message is undef
+sub ffq_check ($$$) {
+    # calls $ff and/or $notff zero or more times
+    # then returns either (status,message) where status is
     #    exists
     #    detached
     #    weird-symref
     #    notbranch
     #    exists
     #    detached
     #    weird-symref
     #    notbranch
-    # if not ff from some branch we should be ff from, is an snag
-    # if "deferred", will have added something about that to
-    #   @deferred_update_messages, and also maybe printed (already)
-    #   some messages about ff checks
-    my $currentval = get_head();
+    # or (undef,undef, $ffq_prev,$gdrlast)
+    # $ff and $notff are called like this:
+    #   $ff->("message for stdout\n");
+    #   $notff->('snag-name', $message);
+    # normally $currentval should be HEAD
+    my ($currentval, $ff, $notff) =@_;
 
     my ($status, $message, $current, $ffq_prev, $gdrlast)
        = ffq_prev_branchinfo();
 
     my ($status, $message, $current, $ffq_prev, $gdrlast)
        = ffq_prev_branchinfo();
@@ -1024,14 +1024,14 @@ sub record_ffq_prev_deferred () {
        return unless length $lrval;
 
        if (is_fast_fwd $lrval, $currentval) {
        return unless length $lrval;
 
        if (is_fast_fwd $lrval, $currentval) {
-           print "OK, you are ahead of $lrref\n" or die $!;
+           $ff->("OK, you are ahead of $lrref\n");
            $checked{$lrref} = 1;
        } elsif (is_fast_fwd $currentval, $lrval) {
            $checked{$lrref} = -1;
            $checked{$lrref} = 1;
        } elsif (is_fast_fwd $currentval, $lrval) {
            $checked{$lrref} = -1;
-           snag 'behind', "you are behind $lrref, divergence risk";
+           $notff->('behind', "you are behind $lrref, divergence risk");
        } else {
            $checked{$lrref} = -1;
        } else {
            $checked{$lrref} = -1;
-           snag 'diverged', "you have diverged from $lrref";
+           $notff->('diverged', "you have diverged from $lrref");
        }
     };
 
        }
     };
 
@@ -1056,6 +1056,26 @@ sub record_ffq_prev_deferred () {
     } elsif ($branch =~ m{^master$}) {
        $check->("refs/remotes/dgit/dgit/sid", 'remote dgit branch for sid');
     }
     } elsif ($branch =~ m{^master$}) {
        $check->("refs/remotes/dgit/dgit/sid", 'remote dgit branch for sid');
     }
+    return (undef, undef, $ffq_prev, $gdrlast);
+}
+
+sub record_ffq_prev_deferred () {
+    # => ('status', "message")
+    # 'status' may be
+    #    deferred          message is undef
+    #    exists
+    #    detached
+    #    weird-symref
+    #    notbranch
+    # if not ff from some branch we should be ff from, is an snag
+    # if "deferred", will have added something about that to
+    #   @deferred_update_messages, and also maybe printed (already)
+    #   some messages about ff checks
+    my $currentval = get_head();
+
+    my ($status,$message, $ffq_prev,$gdrlast) =
+       ffq_check $currentval, sub { print $_[0] or die $!; }, \&snag;
+    return ($status,$message) if defined $status;
 
     snags_maybe_bail();
 
 
     snags_maybe_bail();