# must be run in a workarea. $bname and patch-queue/$bname
# ought not to exist. Leaves you on patch-queue/$bname with
# the patches staged but not committed.
+ # returns 1 if there were any patches
printdebug "gbp_pq_export $bname $base $tip\n";
runcmd @git, qw(checkout -q -b), $bname, $base;
runcmd @git, qw(checkout -q -b), "patch-queue/$bname", $tip;
{ local ($!,$?); copy('../gbp-pq-err', \*STDERR); }
failedcmd @gbp_cmd;
}
- runcmd @git, qw(add -f debian/patches) if stat_exists 'debian/patches';
+ return 0 unless stat_exists 'debian/patches';
+ runcmd @git, qw(add -f debian/patches);
+ return 1;
}
playtree_setup();
foreach my $q ($base_q, reverse @input_qs) {
my $s = $q->{MR}{S};
- gbp_pq_export "p-$s", $q->{SeriesBase}, $q->{SeriesTip};
+ my $any = gbp_pq_export "p-$s", $q->{SeriesBase}, $q->{SeriesTip};
my @earlier;
- if (open S, $seriesfile) {
+ if ($any) {
+ open S, $seriesfile or die "$seriesfile $!";
while (my $patch = <S>) {
chomp $patch or die $!;
$prereq{$patch} //= {};
}
S->error and die "$seriesfile $!";
close S;
- } else {
- die "$seriesfile $!" unless $!==ENOENT;
}
read_tree_upstream $newbase, 1;
my $pec = make_commit [ grep { defined } $base_q->{MR}{PEC} ], [
my ($head, $furniture, $unclean, $trouble, $fatal, $claimed_bw) = @_;
# => ($anchor, $breakwater)
- # $unclean->("unclean-$tagsfx", $msg, $cl)
# $furniture->("unclean-$tagsfx", $msg, $cl)
- # $dgitimport->("unclean-$tagsfx", $msg, $cl))
+ # $unclean->("unclean-$tagsfx", $msg, $cl)
# is callled for each situation or commit that
# wouldn't be found in a laundered branch
# $furniture is for furniture commits such as might be found on an
my ($prose, $info) = @_;
my $ms = $cl->{Msg};
chomp $ms;
- $info //= '';
- $ms .= "\n\n[git-debrebase$info: $prose]\n";
+ confess unless defined $info;
+ $ms .= "\n\n[git-debrebase $info: $prose]\n";
return (Msg => $ms);
};
my $rewrite_from_here = sub {
} elsif ($ty eq 'Mixed') {
my $queue = sub {
my ($q, $wh) = @_;
- my $cls = { %$cl, $xmsg->("split mixed commit: $wh part") };
+ my $cls = { %$cl, $xmsg->("mixed commit: $wh part",'split') };
push @$q, $cls;
};
$queue->(\@brw_cl, "debian");
push @brw_cl, {
%$cl,
SpecialMethod => 'DgitImportDebianUpdate',
- $xmsg->("convert dgit import: debian changes")
+ $xmsg->("debian changes", 'convert dgit import')
}, {
%$cl,
SpecialMethod => 'DgitImportUpstreamUpdate',
$xmsg->("convert dgit import: upstream update",
- " anchor")
+ "anchor")
};
$prline->(" Import");
$rewrite_from_here->(\@brw_cl);
%$cl,
SpecialMethod => 'MergeCreateMergedBreakwaters',
$xmsg->('constructed from vanilla merge',
- ' merged-breakwater'),
+ 'merged-breakwater'),
};
push @upp_cl, {
%$cl,
# Now we have the final new breakwater branch in the index
$new_bw = make_commit [ $new_bw ],
[ "Update changelog for new upstream $new_upstream_version",
- "[git-debrebase: new upstream $new_upstream_version, changelog]",
+ "[git-debrebase changelog: new upstream $new_upstream_version]",
];
};
# laundered.
my ($secret_head, $secret_bw, $last_anchor) = walk $head;
fresh_workarea();
+ my $any;
in_workarea sub {
- gbp_pq_export 'bw', $secret_bw, $secret_head;
+ $any = gbp_pq_export 'bw', $secret_bw, $secret_head;
};
+ return $any;
}
sub make_patches ($) {
my ($head) = @_;
keycommits $head, 0, \&snag;
- make_patches_staged $head;
+ my $any = make_patches_staged $head;
my $out;
in_workarea sub {
- my $ptree = cmdoutput @git, qw(write-tree --prefix=debian/patches/);
+ my $ptree = !$any ? undef :
+ cmdoutput @git, qw(write-tree --prefix=debian/patches/);
runcmd @git, qw(read-tree), $head;
- read_tree_subdir 'debian/patches', $ptree;
+ if ($ptree) {
+ read_tree_subdir 'debian/patches', $ptree;
+ } else {
+ rm_subdir_cached 'debian/patches';
+ }
$out = make_commit [$head], [
'Commit patch queue (exported by git-debrebase)',
- '[git-debrebase: export and commit patches]',
+ '[git-debrebase make-patches: export and commit patches]',
];
};
return $out;
badusage "no arguments allowed" if @ARGV;
my $head = get_head();
my (undef, undef, undef, $ffq, $gdrlast) = ffq_prev_branchinfo();
- keycommits $head, 0;
- my $out;
- make_patches_staged $head;
- in_workarea sub {
- $out = make_commit ['HEAD'], [
- 'Commit patch queue (converted from git-debrebase format)',
- '[git-debrebase convert-to-gbp: commit patches]',
- ];
- };
+ my ($anchor, $breakwater) = keycommits $head, 0;
+ my $out = $breakwater;
+ my $any = make_patches_staged $head;
+ if ($any) {
+ in_workarea sub {
+ $out = make_commit [$out], [
+ 'Commit patch queue (converted from git-debrebase format)',
+ '[git-debrebase convert-to-gbp: commit patches]',
+ ];
+ };
+ } else {
+ # in this case, it can be fast forward
+ $out = $head;
+ }
if (defined $ffq) {
push @deferred_updates, "delete $ffq";
push @deferred_updates, "delete $gdrlast";
END
This includes the contents of the .orig(s), minus any debian/ directory.
-[git-debrebase import-from-dgit-view upstream-import-convert: $version]
+[git-debrebase convert-from-dgit-view upstream-import-convert: $version]
END
];
push @upstreams, { Commit => $ups_synth,
'git-debrebase convert-from-dgit-view: drop upstream changes from breakwater',
"Drop upstream changes, and delete debian/patches, as part of converting\n".
"to git-debrebase format. Upstream changes will appear as commits.",
- '[git-debrebase convert-from-dgit-view: drop patches from tree]'
+ '[git-debrebase convert-from-dgit-view drop-patches]'
];
}
$work = make_commit [ $work, $u->{Commit} ], [