X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=dgit.git;a=blobdiff_plain;f=git-debrebase;h=a6a02b113e7d3c9eb21e4a169cdee6f15e9d998e;hp=7c69c4c0b2b970eeeee8eb09edae9488dbc3a6bc;hb=c57fd0c0dac97a1a3c683e479cc2d4d0fdc89060;hpb=8c4cbc9eafaff67f8029512a0b5e710fb5278390 diff --git a/git-debrebase b/git-debrebase index 7c69c4c0..a6a02b11 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,13 @@ sub gbp_pq_export ($$$) { # our own patch identification algorithm? # this is an alternative strategy +sub mwrecknote ($$$) { + my ($wrecknotes, $reftail, $commitish) = @_; + confess unless defined $commitish; + printdebug "mwrecknote $reftail $commitish\n"; + $wrecknotes->{$reftail} = $commitish; +} + sub merge_series ($$$;@) { my ($newbase, $wrecknotes, $base_q, @input_qs) = @_; # $base_q{SeriesBase} $input_qs[]{SeriesBase} @@ -388,10 +401,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"; @@ -423,7 +433,7 @@ sub merge_series ($$$;@) { " $q->{SeriesTip}]" ]; printdebug "merge_series pec $pec "; - runcmd @git, qw(rm -q --cached), $seriesfile; + runcmd @git, qw(rm -q --ignore-unmatch --cached), $seriesfile; $pec = make_commit [ $pec ], [ "Drop series file from $s to avoid merge trouble", "[git-debrebase merge-innards patch-queue prep:". @@ -446,7 +456,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 +1049,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}");