chiark
/
gitweb
/
~ianmdlvl
/
dgit.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
git-debrebase: merge: Split off merge_series_patchqueue_convert
[dgit.git]
/
git-debrebase
diff --git
a/git-debrebase
b/git-debrebase
index 7f96749626f94cd7e0848eb9b75aa8613a3c3b9c..0dea5d5e1f5f1945d969787818d25d7f302057ed 100755
(executable)
--- a/
git-debrebase
+++ b/
git-debrebase
@@
-128,8
+128,10
@@
sub in_workarea ($) {
die $@ if $@;
}
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 };
}
in_workarea sub { playtree_setup };
}
@@
-389,6
+391,9
@@
sub merge_failed ($$;@) {
my @updates;
merge_wreckage_cleaning \@updates;
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";
keys %$wrecknotes;
while (my ($k,$v) = each %$wrecknotes) {
push @updates, "create $wrecknoteprefix/$k $v";
@@
-412,6
+417,19
@@
sub mwrecknote ($$$) {
$wrecknotes->{$reftail} = $commitish;
}
$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}
sub merge_series ($$$;@) {
my ($newbase, $wrecknotes, $base_q, @input_qs) = @_;
# $base_q{SeriesBase} $input_qs[]{SeriesBase}
@@
-436,21
+454,14
@@
sub merge_series ($$$;@) {
# $prereq{<patch filename>}{<possible prereq} exists or not (later)
# $prereq{<patch filename>} exists or not (even later)
# $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 $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();
my $seriesfile = "debian/patches/series";
in_workarea sub {
playtree_setup();
@@
-583,18
+594,30
@@
sub merge_series ($$$;@) {
runcmd @git, qw(add), $seriesfile;
runcmd @git, qw(commit --quiet -m), 'Merged patch queue form';
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";
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;
# 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 merge
c..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";
foreach my $c (grep /./, split /\n/, cmdoutput @lcmd) {
my $commit = git_cat_file $c, 'commit';
printdebug "merge_series series ok, building $c\n";
@@
-608,7
+631,7
@@
sub merge_series ($$$;@) {
$build = cmdoutput @git, qw(hash-object -w -t commit ../mcommit);
}
$result = $build;
$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(update-ref refs/heads/result), $result;
@@
-618,7
+641,7
@@
sub merge_series ($$$;@) {
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;
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;
};
printdebug "merge_series returns $result\n";
return $result;
@@
-1458,6
+1481,7
@@
sub walk ($;$$$) {
@parents = map { $_->{Breakwater} } @{ $cl->{Parents} };
} elsif ($method eq 'MergeMergeSeries') {
print "Running merge resolution for $cl->{CommitId}...\n";
@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},
$build = merge_series
$build, $cl->{MergeWreckNotes},
$cl->{MergeInterchangeBaseInfo},