summaryrefslogtreecommitdiff
path: root/git-debrebase
diff options
context:
space:
mode:
authorIan Jackson <ijackson@chiark.greenend.org.uk>2017-06-15 00:14:29 +0100
committerIan Jackson <ijackson@chiark.greenend.org.uk>2018-06-16 12:25:49 +0100
commit6751d0fc1a0a3228fb62ef65206aebcc57b2acdf (patch)
tree95af2386ae36cdbaa4181b873738594ea9ee022a /git-debrebase
parentfa03cb0dbaedddf41b3fa7c5e61b6d358540e5d3 (diff)
git-debrebase: abolish recursion
Diffstat (limited to 'git-debrebase')
-rwxr-xr-xgit-debrebase35
1 files changed, 15 insertions, 20 deletions
diff --git a/git-debrebase b/git-debrebase
index 7eefe72..3578715 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