my @updates;
merge_wreckage_cleaning \@updates;
+ run_ref_updates_now "merge failed", \@updates;
+
+ @updates = ();
keys %$wrecknotes;
while (my ($k,$v) = each %$wrecknotes) {
push @updates, "create $wrecknoteprefix/$k $v";
$wrecknotes->{$reftail} = $commitish;
}
+sub merge_attempt_cmd {
+ my $wrecknotes = shift @_;
+ debugcmd '+', @_;
+ $!=0; $?=-1;
+ if (system @_) {
+ merge_failed $wrecknotes,
+ failedcmd_waitstatus(),
+ "failed command: @_";
+ }
+}
+
+sub merge_series_patchqueue_convert ($$$);
+
sub merge_series ($$$;@) {
my ($newbase, $wrecknotes, $base_q, @input_qs) = @_;
# $base_q{SeriesBase} $input_qs[]{SeriesBase}
# $prereq{<patch filename>}{<possible prereq} exists or not (later)
# $prereq{<patch filename>} exists or not (even later)
- my $result;
+ my $merged_pq;
my $mwrecknote = sub { &mwrecknote($wrecknotes, @_); };
- my $attempt_cmd = sub {
- debugcmd '+', @_;
- $!=0; $?=-1;
- if (system @_) {
- merge_failed $wrecknotes,
- failedcmd_waitstatus(),
- "failed command: @_";
- }
- };
+ my $attempt_cmd = sub { &merge_attempt_cmd($wrecknotes, @_); };
local $workarea;
fresh_workarea "merge";
runcmd @git, qw(add), $seriesfile;
runcmd @git, qw(commit --quiet -m), 'Merged patch queue form';
- $mwrecknote->('merged-patchqueue', git_rev_parse 'HEAD');
+ $merged_pq = git_rev_parse 'HEAD';
+ $mwrecknote->('merged-patchqueue', $merged_pq);
+ };
+ return merge_series_patchqueue_convert
+ $wrecknotes, $newbase, $merged_pq;
+}
+
+sub merge_series_patchqueue_convert ($$$) {
+ my ($wrecknotes, $newbase, $merged_pq) = @_;
+ my $result;
+ in_workarea sub {
+ playtree_setup();
printdebug "merge_series series gbp pq import\n";
+ runcmd @git, qw(checkout -q -b mergec), $merged_pq;
- $attempt_cmd->(qw(gbp pq import));
+ merge_attempt_cmd($wrecknotes, qw(gbp pq import));
# OK now we are on patch-queue/merge, and we need to rebase
# onto the intended parent and drop the patches from each one
printdebug "merge_series series ok, building...\n";
my $build = $newbase;
- my @lcmd = (@git, qw(rev-list --reverse merge..patch-queue/merge));
+ my @lcmd = (@git, qw(rev-list --reverse mergec..patch-queue/mergec));
foreach my $c (grep /./, split /\n/, cmdoutput @lcmd) {
my $commit = git_cat_file $c, 'commit';
printdebug "merge_series series ok, building $c\n";
$build = cmdoutput @git, qw(hash-object -w -t commit ../mcommit);
}
$result = $build;
- $mwrecknote->('merged-result', $result);
+ mwrecknote($wrecknotes, 'merged-result', $result);
runcmd @git, qw(update-ref refs/heads/result), $result;
runcmd @git, qw(commit --allow-empty -q -m M-WORKTREE);
my $mdebug = git_rev_parse 'HEAD';
printdebug sprintf "merge_series done debug=%s\n", $mdebug;
- $mwrecknote->('merged-debug', $mdebug);
+ mwrecknote($wrecknotes, 'merged-debug', $mdebug);
};
printdebug "merge_series returns $result\n";
return $result;
@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},