X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=git-debrebase;h=1a79a280efd7a258af01864402215a64ae95035a;hb=e019247f462f1580abe05ec3c0e7724781a73096;hp=f4831c3c5b6c4f1a8a23cf58a1ebfeb0c074a7ce;hpb=bc3be36a946aeb6485259be594645c3c3d69550f;p=dgit.git diff --git a/git-debrebase b/git-debrebase index f4831c3c..1a79a280 100755 --- a/git-debrebase +++ b/git-debrebase @@ -255,6 +255,12 @@ sub read_tree_subdir ($$) { runcmd @git, qw(read-tree), "--prefix=$subdir/", $new_tree_object; } +sub read_tree_debian ($) { + my ($treeish) = @_; + read_tree_subdir 'debian', "$treeish:debian"; + rm_subdir_cached 'debian/patches'; +} + sub make_commit ($$) { my ($parents, $message_paras) = @_; my $tree = cmdoutput @git, qw(write-tree); @@ -310,6 +316,22 @@ sub any_snags () { return $snags_forced || $snags_tripped; } +sub gbp_pq_export ($$$) { + my ($bname, $base, $tip) = @_; + # 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. + runcmd @git, qw(checkout -q -b), $bname, $base; + runcmd @git, qw(checkout -q -b), "patch-queue/$bname", $tip; + my @gbp_cmd = (qw(gbp pq export)); + my $r = system shell_cmd 'exec >../gbp-pq-err 2>&1', @gbp_cmd; + if ($r) { + { local ($!,$?); copy('../gbp-pq-err', \*STDERR); } + failedcmd @gbp_cmd; + } + runcmd @git, qw(add -f debian/patches); +} + # classify returns an info hash like this # CommitId => $objid # Hdr => # commit headers, including 1 final newline @@ -661,14 +683,15 @@ sub keycommits ($;$$$$) { return ($anchor, $breakwater); } -sub walk ($;$$); -sub walk ($;$$) { +sub walk ($;$$$); +sub walk ($;$$$) { my ($input, - $nogenerate,$report) = @_; + $nogenerate,$report, $report_lprefix) = @_; # => ($tip, $breakwater_tip, $last_anchor) # (or nothing, if $nogenerate) printdebug "*** WALK $input ".($nogenerate//0)." ".($report//'-')."\n"; + $report_lprefix //= ''; # go through commits backwards # we generate two lists of commits to apply: @@ -700,7 +723,7 @@ sub walk ($;$$) { my $prline = sub { return unless $report; - print $report $prdelim, @_; + print $report $prdelim, $report_lprefix, @_; $prdelim = "\n"; }; @@ -850,15 +873,10 @@ sub walk ($;$$) { my $rewriting = 0; - my $read_tree_debian = sub { - my ($treeish) = @_; - read_tree_subdir 'debian', "$treeish:debian"; - rm_subdir_cached 'debian/patches'; - }; my $read_tree_upstream = sub { my ($treeish) = @_; runcmd @git, qw(read-tree), $treeish; - $read_tree_debian->($build); + read_tree_debian($build); }; $#upp_cl = $upp_limit if defined $upp_limit; @@ -886,7 +904,7 @@ sub walk ($;$$) { printdebug "WALK BUILD ".($cltree//'undef'). " $method (rewriting=$rewriting)\n"; if ($method eq 'Debian') { - $read_tree_debian->($cltree); + read_tree_debian($cltree); } elsif ($method eq 'Upstream') { $read_tree_upstream->($cltree); } elsif ($method eq 'StartRewrite') { @@ -896,7 +914,7 @@ sub walk ($;$$) { $breakwater = $build; next; } elsif ($method eq 'DgitImportDebianUpdate') { - $read_tree_debian->($cltree); + read_tree_debian($cltree); } elsif ($method eq 'DgitImportUpstreamUpdate') { confess unless $rewriting; my $differs = (get_differs $build, $cltree); @@ -1593,6 +1611,9 @@ sub cmd_conclude () { } sub cmd_scrap () { + if (currently_rebasing()) { + runcmd @git, qw(rebase --abort); + } my ($ffq_prev, $gdrlast, $ffq_prev_commitish) = ffq_prev_info(); if (!$ffq_prev_commitish) { fail "No ongoing git-debrebase session." unless $opt_noop_ok; @@ -1614,15 +1635,7 @@ sub make_patches_staged ($) { my ($secret_head, $secret_bw, $last_anchor) = walk $head; fresh_workarea(); in_workarea sub { - runcmd @git, qw(checkout -q -b bw), $secret_bw; - runcmd @git, qw(checkout -q -b patch-queue/bw), $secret_head; - my @gbp_cmd = (qw(gbp pq export)); - my $r = system shell_cmd 'exec >../gbp-pq-err 2>&1', @gbp_cmd; - if ($r) { - { local ($!,$?); copy('../gbp-pq-err', \*STDERR); } - failedcmd @gbp_cmd; - } - runcmd @git, qw(add -f debian/patches); + gbp_pq_export 'bw', $secret_bw, $secret_head; }; }