sub read_tree_subdir ($$) {
my ($subdir, $new_tree_object) = @_;
rm_subdir_cached $subdir;
- runcmd @git, qw(read-tree), "--prefix=$subdir/";
+ runcmd @git, qw(read-tree), "--prefix=$subdir/", $new_tree_object;
}
# classify returns an info hash like this
sub walk ($;$$) {
my ($input,
$nogenerate,$report) = @_;
- # => ($tip, $breakwater_tip)
+ # => ($tip, $breakwater_tip, $last_upstream_merge_in_breakwater)
# (or nothing, if $nogenerate)
# go through commits backwards
no warnings qw(exiting); last;
};
+ my $last_upstream_update;
+
for (;;) {
$cl = classify $cur;
my $ty = $cl->{Type};
$cur = $p0;
next;
} elsif ($ty eq 'BreakwaterStart') {
+ $last_upstream_update = $cur;
$build_start->('FirstPackaging', $cur);
} elsif ($ty eq 'Upstream') {
push @upp_cl, $cl;
$cur = $contrib;
next;
} elsif ($ty eq 'BreakwaterUpstreamMerge') {
+ $last_upstream_update = $cur;
$build_start->("PreviousBreakwater", $cur);
} elsif ($ty eq 'DgitImportUnpatched') {
my $pm = $pseudomerges[-1];
$prline->(" Import");
$rewrite_from_here->();
$upp_limit //= $#upp_cl; # further, deeper, patches discarded
+ die 'BUG $upp_limit is not used anywhere?';
$cur = $ovwr;
next;
} else {
my $read_tree_debian = sub {
my ($treeish) = @_;
read_tree_subdir 'debian', "$treeish:debian";
+ rm_subdir_cached 'debian/patches';
};
my $read_tree_upstream = sub {
my ($treeish) = @_;
my $newcommit = cmdoutput @cmd;
confess "$ch ?" unless $rewriting or $newcommit eq $cl->{CommitId};
$build = $newcommit;
+ if (grep { $method eq $_ } qw(DgitImportUpstreamUpdate)) {
+ $last_upstream_update = $cur;
+ }
}
};
die sprintf "internal error %#x %s %s", $final_check, $build, $input
if $final_check & ~D_PAT_ADD;
- return ($build, $breakwater);
+ return ($build, $breakwater, $last_upstream_update);
}
sub get_head () { return git_rev_parse qw(HEAD); }
# now we need to investigate the branch this generates the
# laundered version but we don't switch to it yet
my $old_head = get_head();
- my ($old_laundered_tip,$old_bw) = walk $old_head;
+ my ($old_laundered_tip,$old_bw,$old_upstream_update) = walk $old_head;
my $old_bw_cl = classify $old_bw;
- my $old_upstream = parsecommit $old_bw_cl->{OrigParents}[0]{CommitId};
+ my $old_upstream_update_cl = classify $old_upstream_update;
+ confess unless $old_upstream_update_cl->{OrigParents};
+ my $old_upstream = parsecommit
+ $old_upstream_update_cl->{OrigParents}[0]{CommitId};
my $problems = 0;
my $problem = sub {