our $us = qw(git-debrebase);
our $wrecknoteprefix = 'refs/debrebase/wreckage';
+our $merge_cache_ref = 'refs/debrebase/merge-resolutions';
$|=1;
read_tree_debian($cltree);
@parents = map { $_->{Breakwater} } @{ $cl->{Parents} };
} elsif ($method eq 'MergeMergeSeries') {
- print "Running merge resolution for $cl->{CommitId}...\n";
- $mwrecknote->('new-base', $build);
- $build = merge_series
- $build, $cl->{MergeWreckNotes},
- $cl->{MergeInterchangeBaseInfo},
- @{ $cl->{Parents} };
+ my $cachehit = reflog_cache_lookup
+ $merge_cache_ref, "vanilla-merge $cl->{CommitId}";
+ if ($cachehit) {
+ print "Using supplied resolution for $cl->{CommitId}...\n";
+ $build = $cachehit;
+ $mwrecknote->('cached-resolution', $build);
+ } else {
+ print "Running merge resolution for $cl->{CommitId}...\n";
+ $mwrecknote->('new-base', $build);
+ $build = merge_series
+ $build, $cl->{MergeWreckNotes},
+ $cl->{MergeInterchangeBaseInfo},
+ @{ $cl->{Parents} };
+ }
$last_anchor = $cl->{MergeBestAnchor};
# Check for mismerges:
"update $gdrlast $ffq_prev_commitish $git_null_obj",
"update $ffq_prev $git_null_obj $ffq_prev_commitish";
}
+ if (git_get_ref $merge_cache_ref) {
+ push @deferred_updates,
+ "delete $merge_cache_ref";
+ }
if (!@deferred_updates) {
fail "No ongoing git-debrebase session." unless $opt_noop_ok;
finish 0;
sub cmd_record_resolved_merge () {
badusage "record-resolved-merge takes no further arguments" if @ARGV;
+ # xxx needs documentation
my $new = get_head();
my $method;
my $maybe = sub { print "Seems to be $method.\n"; };
my $yes = sub {
my ($key, $ref) = @_;
+ reflog_cache_insert $merge_cache_ref, $key, $ref;
print "OK. You can switch branches and try git-debrebase again.\n";
- confess "todo $ref"; # xxx
1;
};