summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xgit-debrebase65
1 files changed, 34 insertions, 31 deletions
diff --git a/git-debrebase b/git-debrebase
index 1e205c6..3d4bb60 100755
--- a/git-debrebase
+++ b/git-debrebase
@@ -50,9 +50,11 @@ usages:
See git-debrebase(1), git-debrebase(5), dgit-maint-debrebase(7) (in dgit).
END
-our ($opt_force, $opt_noop_ok, @opt_anchors);
+our ($opt_force, $opt_careful, $opt_noop_ok, @opt_anchors);
our ($opt_defaultcmd_interactive);
+$opt_careful = 1;
+
our $us = qw(git-debrebase);
our $wrecknoteprefix = 'refs/debrebase/wreckage';
@@ -1434,17 +1436,11 @@ sub walk ($;$$$) {
in_workarea sub {
mkdir $rd or $!==EEXIST or die $!;
my $current_method;
- runcmd @git, qw(read-tree), $build;
-
- my $read_tree_upstream = sub {
- my ($treeish) = @_;
- read_tree_upstream $treeish, 0, $build;
- };
+ my $want_tree_debian = $build;
+ my $want_tree_upstream = $build;
- my $read_tree_debian = sub {
- my ($treeish) = @_;
- read_tree_debian($treeish);
- };
+ my $read_tree_upstream = sub { ($want_tree_upstream) = @_; };
+ my $read_tree_debian = sub { ($want_tree_debian) = @_; };
foreach my $cl (qw(Debian), (reverse @brw_cl),
{ SpecialMethod => 'RecordBreakwaterTip' },
@@ -1533,27 +1529,34 @@ sub walk ($;$$$) {
printdebug "WALK REWRITING NOW cl=$cl procd=$procd\n";
}
}
- my $newtree = cmdoutput @git, qw(write-tree);
- my $ch = $cl->{Hdr};
- $ch =~ s{^tree .*}{tree $newtree}m or confess "$ch ?";
- $ch =~ s{^parent .*\n}{}mg;
- $ch =~ s{(?=^author)}{
- join '', map { "parent $_\n" } @parents
- }me or confess "$ch ?";
- if ($rewriting) {
- $ch =~ s{^committer .*$}{$committer_authline}m
- or confess "$ch ?";
+ if ($rewriting || $opt_careful) {
+ read_tree_upstream $want_tree_upstream, 0, $want_tree_debian;
+
+ my $newtree = cmdoutput @git, qw(write-tree);
+ my $ch = $cl->{Hdr};
+ $ch =~ s{^tree .*}{tree $newtree}m or confess "$ch ?";
+ $ch =~ s{^parent .*\n}{}mg;
+ $ch =~ s{(?=^author)}{
+ join '', map { "parent $_\n" } @parents
+ }me or confess "$ch ?";
+ if ($rewriting) {
+ $ch =~ s{^committer .*$}{$committer_authline}m
+ or confess "$ch ?";
+ }
+ my $cf = "$rd/m$rewriting";
+ open CD, ">", $cf or die $!;
+ print CD $ch, "\n", $cl->{Msg} or die $!;
+ close CD or die $!;
+ my @cmd = (@git, qw(hash-object));
+ push @cmd, qw(-w) if $rewriting;
+ push @cmd, qw(-t commit), $cf;
+ my $newcommit = cmdoutput @cmd;
+ confess "$ch ?" unless $rewriting
+ or $newcommit eq $cl->{CommitId};
+ $build = $newcommit;
+ } else {
+ $build = $cl->{CommitId};
}
- my $cf = "$rd/m$rewriting";
- open CD, ">", $cf or die $!;
- print CD $ch, "\n", $cl->{Msg} or die $!;
- close CD or die $!;
- my @cmd = (@git, qw(hash-object));
- push @cmd, qw(-w) if $rewriting;
- push @cmd, qw(-t commit), $cf;
- my $newcommit = cmdoutput @cmd;
- confess "$ch ?" unless $rewriting or $newcommit eq $cl->{CommitId};
- $build = $newcommit;
if (grep { $method eq $_ } qw(DgitImportUpstreamUpdate)) {
$last_anchor = $cur;
}