X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=dgit.git;a=blobdiff_plain;f=git-debrebase;h=563fb9970fa4f7bb8f7ac46c4d7b583e8d68f36a;hp=d101742114246a8bd61f63c102bad234252b1eac;hb=3411945b1ae36797de420b0e6e5bcf75e1e28c7f;hpb=c1e0f468347b80d739d6eefa9eb9d614b18c3c15 diff --git a/git-debrebase b/git-debrebase index d1017421..563fb997 100755 --- a/git-debrebase +++ b/git-debrebase @@ -131,6 +131,21 @@ sub fresh_workarea () { in_workarea sub { playtree_setup }; } +sub run_ref_updates_now ($$) { + my ($mrest, $updates) = @_; + # @$updates is a list of lines for git-update-ref, without \ns + + my @upd_cmd = (git_update_ref_cmd "debrebase: $mrest", qw(--stdin)); + debugcmd '>|', @upd_cmd; + open U, "|-", @upd_cmd or die $!; + foreach (@$updates) { + printdebug ">= ", $_, "\n"; + print U $_, "\n" or die $!; + } + printdebug ">\$\n"; + close U or failedcmd @upd_cmd; +} + our $snags_forced = 0; our $snags_tripped = 0; our $snags_summarised = 0; @@ -145,16 +160,7 @@ sub run_deferred_updates ($) { confess 'dangerous internal error' unless all_snags_summarised(); - my @upd_cmd = (git_update_ref_cmd "debrebase: $mrest", qw(--stdin)); - debugcmd '>|', @upd_cmd; - open U, "|-", @upd_cmd or die $!; - foreach (@deferred_updates) { - printdebug ">= ", $_, "\n"; - print U $_, "\n" or die $!; - } - printdebug ">\$\n"; - close U or failedcmd @upd_cmd; - + run_ref_updates_now $mrest, \@deferred_updates; print $_, "\n" foreach @deferred_update_messages; @deferred_updates = (); @@ -362,6 +368,12 @@ sub gbp_pq_export ($$$) { # our own patch identification algorithm? # this is an alternative strategy +sub mwrecknote ($$$) { + my ($wrecknotes, $reftail, $commitish) = @_; + confess unless defined $commitish; + $wrecknotes->{$reftail} = $commitish; +} + sub merge_series ($$$;@) { my ($newbase, $wrecknotes, $base_q, @input_qs) = @_; # $base_q{SeriesBase} $input_qs[]{SeriesBase} @@ -388,10 +400,7 @@ sub merge_series ($$$;@) { my $result; - my $mwrecknote = sub { - my ($reftail, $commitish) = @_; - $wrecknotes->{$reftail} = $commitish; - }; + my $mwrecknote = sub { &mwrecknote($wrecknotes, @_); }; local $workarea = fresh_playground "$playprefix/merge"; my $seriesfile = "debian/patches/series"; @@ -446,7 +455,7 @@ sub merge_series ($$$;@) { printdebug "pec' $pec\n"; runcmd @git, qw(reset -q --hard), $pec; $q->{MR}{PEC} = $pec; - $mwrecknote->("$q->{LeftRight}-patchqueue"); + $mwrecknote->("$q->{LeftRight}-patchqueue", $pec); } # now, because of reverse, we are on $input_q->{MR}{OQC} runcmd @git, qw(checkout -q -b merge); @@ -1039,15 +1048,13 @@ sub walk ($;$$$) { fail "something useful about failed merge attempt @_ xxx".Dumper($cl); }; - my $mwrecknote = sub { - my ($reftail, $commitish) = @_; - $cl->{MergeWreckNotes}{$reftail} = $commitish; - }; + my $mwrecknote = sub { &mwrecknote($cl->{MergeWreckNotes}, @_); }; my $last_anchor; for (;;) { $cl = classify $cur; + $cl->{MergeWreckNotes} //= {}; my $ty = $cl->{Type}; my $st = $cl->{SubType}; $prline->("$cl->{CommitId} $cl->{Type}");