From: Ian Jackson Date: Sun, 19 Aug 2018 15:44:56 +0000 (+0100) Subject: git-debrebase: Actually avoid read-tree in walk when not rewriting X-Git-Tag: archive/debian/6.7~51 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=dgit.git;a=commitdiff_plain;h=e64f34c55170943aa35bb806700c8ba3e99c50a7 git-debrebase: Actually avoid read-tree in walk when not rewriting 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 --- diff --git a/debian/changelog b/debian/changelog index f678131d..58b934ec 100644 --- a/debian/changelog +++ b/debian/changelog @@ -7,6 +7,7 @@ dgit (6.7~) unstable; urgency=medium * 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. -- diff --git a/git-debrebase b/git-debrebase index d04f2a3a..c240d88b 100755 --- a/git-debrebase +++ b/git-debrebase @@ -53,7 +53,7 @@ END our ($opt_force, $opt_careful, $opt_noop_ok, @opt_anchors); our ($opt_defaultcmd_interactive); -$opt_careful = 1; +$opt_careful = 0; our $us = qw(git-debrebase); @@ -1612,6 +1612,18 @@ sub walk ($;$$$) { $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;