- 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_upstream, 0, $want_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};