See
git-debrebase: Prep for avoid read-tree in walk when not rewriting
for the motivation.
Here we try to check that the commit we would make, if we were
actually calling read-tree, write-tree and hash-object, would be
identical to the one we are reusing.
In particular, we check that the upstream files, and the debian/
directory, have the contents we would feed to read-tree. And we check
that the parent list is the same.
With these checks this new algorithm is, I think, safe enough to just
use always. So set $opt_careful to 0. We will abolish this
variable in a moment.
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
* git-debrebase: scrap works properly when it does only rebase --abort.
* dgit(1): Encourage --overwrite rather than --overwrite=version.
* test suite: unset GIT_EDITOR, so it works if user has that set.
* git-debrebase: scrap works properly when it does only rebase --abort.
* dgit(1): Encourage --overwrite rather than --overwrite=version.
* test suite: unset GIT_EDITOR, so it works if user has that set.
+ * git-debrebase: Improve laundry performance. Closes:#905995.
our ($opt_force, $opt_careful, $opt_noop_ok, @opt_anchors);
our ($opt_defaultcmd_interactive);
our ($opt_force, $opt_careful, $opt_noop_ok, @opt_anchors);
our ($opt_defaultcmd_interactive);
our $us = qw(git-debrebase);
our $us = qw(git-debrebase);
$build = $newcommit;
} else {
$build = $cl->{CommitId};
$build = $newcommit;
} else {
$build = $cl->{CommitId};
+ trees_diff_walk "$want_upstream:", "$build:", sub {
+ my ($n) = @_;
+ no warnings qw(exiting);
+ next if $n eq 'debian/';
+ confess "mismatch @_ ?";
+ };
+ trees_diff_walk "$want_debian:debian", "$build:debian", sub {
+ confess "mismatch @_ ?";
+ };
+ my @old_parents = map { $_->{CommitId} } @{ $cl->{Parents} };
+ confess "mismatch @parents != @old_parents ?"
+ unless "@parents" eq "@old_parents";
}
if (grep { $method eq $_ } qw(DgitImportUpstreamUpdate)) {
$last_anchor = $cur;
}
if (grep { $method eq $_ } qw(DgitImportUpstreamUpdate)) {
$last_anchor = $cur;