summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xgit-debrebase44
1 files changed, 32 insertions, 12 deletions
diff --git a/git-debrebase b/git-debrebase
index ddb7840..b029e5c 100755
--- a/git-debrebase
+++ b/git-debrebase
@@ -980,19 +980,19 @@ sub ffq_prev_branchinfo () {
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
- # 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();
@@ -1024,14 +1024,14 @@ sub record_ffq_prev_deferred () {
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;
- snag 'behind', "you are behind $lrref, divergence risk";
+ $notff->('behind', "you are behind $lrref, divergence risk");
} 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');
}
+ 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();