die $@ if $@;
}
-sub fresh_workarea () {
- $workarea = fresh_playground "$playprefix/work";
+sub fresh_workarea (;$) {
+ my ($subdir) = @_;
+ $subdir //= 'work';
+ $workarea = fresh_playground "$playprefix/$subdir";
in_workarea sub { playtree_setup };
}
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 ($$$;@) {
my ($newbase, $wrecknotes, $base_q, @input_qs) = @_;
# $base_q{SeriesBase} $input_qs[]{SeriesBase}
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_playground "$playprefix/merge";
+ local $workarea;
+ fresh_workarea "merge";
my $seriesfile = "debian/patches/series";
in_workarea sub {
playtree_setup();
printdebug "merge_series series gbp pq import\n";
- $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
$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;