my @overwritten = grep { $_->{Differs} } @p;
confess "internal error $objid ?" unless @overwritten==1;
return $classify->(qw(Pseudomerge),
- Overwritten => $overwritten[0],
+ Overwritten => [ $overwritten[0] ],
Contributor => $identical[0]);
}
if (@p == 2 && @identical == 2) {
} @p;
return $classify->(qw(Pseudomerge),
SubType => qw(Ambiguous),
- Overwritten => $bytime[0],
+ Overwritten => [ $bytime[0] ],
Contributor => $bytime[1]);
}
foreach my $p (@p) {
# suite intended by the non-dgit NMUer, and later
# pseudomerges may represent in-archive copies.
my $ovwrs = $pm->{Overwritten};
- printf $report " PM=%s \@Overwr:%d", $pm, (scalar @$ovwrs)
+ printf $report " PM=%s \@Overwr:%d",
+ $pm->{CommitId}, (scalar @$ovwrs)
if $report;
if (@$ovwrs != 1) {
printdebug "*** WALK BOMB DgitImportUnpatched\n";
%$cl,
SpecialMethod => 'DgitImportDebianUpdate',
$xmsg->("convert dgit import: debian changes")
+ }, {
+ %$cl,
+ SpecialMethod => 'DgitImportUpstreamUpdate',
+ $xmsg->("convert dgit import: upstream update",
+ " breakwater")
};
- my $differs = (get_differs $ovwr, $cl->{Tree});
- printf $report " Differs=%#x", $differs if $report;
- if ($differs & D_UPS) {
- printf $report " D_UPS" if $report;
- # This will also trigger if a non-dgit git-based NMU
- # deleted .gitignore (which is a thing that some of
- # the existing git tools do if the user doesn't
- # somehow tell them not to). Ah well.
- push @brw_cl, {
- %$cl,
- SpecialMethod => 'DgitImportUpstreamUpdate',
- $xmsg->("convert dgit import: upstream changes",
- " breakwater")
- };
- }
$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 {
runcmd @git, qw(read-tree), $treeish;
$read_tree_debian->($build);
};
+
+ $#upp_cl = $upp_limit if defined $upp_limit;
my $committer_authline = calculate_committer_authline();
next;
} elsif ($method eq 'DgitImportDebianUpdate') {
$read_tree_debian->($cltree);
- rm_subdir_cached qw(debian/patches);
} elsif ($method eq 'DgitImportUpstreamUpdate') {
+ confess unless $rewriting;
+ my $differs = (get_differs $build, $cltree);
+ next unless $differs & D_UPS;
$read_tree_upstream->($cltree);
push @parents, map { $_->{CommitId} } @{ $cl->{OrigParents} };
} else {
my $newtree = cmdoutput @git, qw(write-tree);
my $ch = $cl->{Hdr};
$ch =~ s{^tree .*}{tree $newtree}m or confess "$ch ?";
- $ch =~ s{^parent .*\n}{}m;
+ $ch =~ s{^parent .*\n}{}mg;
$ch =~ s{(?=^author)}{
join '', map { "parent $_\n" } @parents
}me or confess "$ch ?";
if (!$prev) {
fail "No ffq-prev to stitch." unless $opt_noop_ok;
}
- $prose = ", $prose" if length $prose;
- runcmd @git, qw(merge -s ours --no-edit -m), <<END;
-Declare fast forward / record previous work
-
-[git-debrebase pseudomerge: stitch$prose]
+ fresh_workarea();
+ my $old_head = get_head();
+ my $new_head = make_commit [ $old_head, $ffq_prev ], [
+ 'Declare fast forward / record previous work',
+ "[git-debrebase pseudomerge: stitch$prose]",
+ ];
+ my @upd_cmd = (@git, qw(update-ref --stdin));
+ debugcmd '>|', @upd_cmd;
+ open U, "|-", @upd_cmd or die $!;
+ my $u = <<END;
+update HEAD $new_head $old_head
+delete $ffq_prev $prev
END
- # xxx should delete old ffq-prev
- # xxx should avoid making pseudomerge if not needed
- # xxx should make pseudomerge in temp tree so can do atomic update
+ printdebug ">= ", $_, "\n" foreach split /\n/, $u;
+ print U $u;
+ printdebug ">\$\n";
+ close U or failedcmd @upd_cmd;
}
sub cmd_gbp2debrebase () {