From 6751d0fc1a0a3228fb62ef65206aebcc57b2acdf Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Thu, 15 Jun 2017 00:14:29 +0100 Subject: [PATCH] git-debrebase: abolish recursion --- git-debrebase | 35 +++++++++++++++-------------------- 1 file changed, 15 insertions(+), 20 deletions(-) diff --git a/git-debrebase b/git-debrebase index 7eefe72a..35787156 100755 --- a/git-debrebase +++ b/git-debrebase @@ -314,22 +314,21 @@ sub classify ($) { return $unknown->("complex merge"); } -sub walk ($;$$$$); +sub walk ($;$$); sub walk { my ($input, - $nogenerate,$report, - $wantbrwonly,$depth) = @_; + $nogenerate,$report) = @_; # => ($tip, $breakwater_tip) + # (or nothing, if $nogenerate) # go through commits backwards # we generate two lists of commits to apply: # breakwater branch and upstream patches my (@brw_cl, @upp_cl, @processed); my %found; + my $upp_limit; my @pseudomerges; - $depth //= 0; - my $cl; my $xmsg = sub { my ($appendinfo) = @_; @@ -385,10 +384,9 @@ sub walk { push @brw_cl, $cl; $cur = $p0; next; - } elsif ($ty eq 'Packaging') { - push @brw_cl, $cl; - $cur = $p0; - next; + } elsif ($ty eq 'BreakwaterStart') { + push @brw_cl, { ExactlyParents => [$cur] }; + last; } elsif ($ty eq 'Upstream') { push @upp_cl, $cl; $cur = $p0; @@ -402,6 +400,7 @@ sub walk { $queue->(\@brw_cl, "debian"); $queue->(\@upp_cl, "upstream"); $rewrite_from_here->(); + $cur = $p0; next; } elsif ($ty eq 'Pseudomerge') { print $report " Contributor=$ty->{Contributor}" if $report; @@ -462,25 +461,21 @@ sub walk { $xmsg->("convert dgit import: upstream changes") }; } - $prline->("Import"); - $prprdelim->(); - my ($dummy,$basis) = walk - $ovwr, - $nogenerate, $report, - 1, $depth+1; - push @brw_cl, { ExactlyParents => [$basis] }; + $prline->(" Import"); $rewrite_from_here->(); - last; + $upp_limit //= $#upp; # further, deeper, patches discarded + $cur = $ovwr; + next; } else { # Everything is from this import. This kind of import # is already in valid breakwater format, with the # patches as commits. printf $report " NoPM" if $report; - push @brw_cl, { ExactlyParents => [$cur] }; + $prline->(" ImportOrigin"); # last thing we processed will have been the first patch, # if there is one; which is fine, so no need to rewrite # on account of this import - $prline->("ImportOrigin"); + push @brw_cl, { ExactlyParents => [$cur] }; last; } die "$ty ?"; @@ -489,7 +484,7 @@ sub walk { } } $prprdelim->(); - return () if $nogenerate; + return if $nogenerate; # Now we build it back up again -- 2.30.2