X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=git-debrebase;h=c02fe8a27e2c25d8c573ce88b7ddda8ca3828cb4;hb=06163c6846f67fc9469c07c00611495f373f510e;hp=748b49bc2bc34c644bb06d357325789eb808513c;hpb=deb725236dab7d80249e72e871d069be25a607f8;p=dgit.git diff --git a/git-debrebase b/git-debrebase index 748b49bc..c02fe8a2 100755 --- a/git-debrebase +++ b/git-debrebase @@ -396,6 +396,15 @@ sub classify ($) { # BreakwaterStart commits are also anchors in the terminology # of git-debrebase(5), but they are untagged (and always # manually generated). + # + # We cannot not tolerate any tagged linear commit (ie, + # BreakwaterStart commits tagged `[anchor:') because such a + # thing could result from an erroneous linearising raw git + # rebase of a merge anchor. That would represent a corruption + # of the branch. and we want to detect and reject the results + # of such corruption before it makes it out anywhere. If we + # reject it here then we avoid making the pseudomerge which + # would be needed to push it. my $badanchor = sub { $unknown->("git-debrebase \`anchor' but @_"); }; @p == 2 or return $badanchor->("has other than two parents"); @@ -909,7 +918,7 @@ sub cmd_launder_v0 () { sub defaultcmd_rebase () { push @ARGV, @{ $opt_defaultcmd_interactive // [] }; my ($tip,$breakwater) = do_launder_head 'launder for rebase'; - runcmd @git, qw(rebase), @ARGV, $breakwater; + runcmd @git, qw(rebase), @ARGV, $breakwater if @ARGV; } sub cmd_analyse () { @@ -1074,8 +1083,8 @@ sub stitch ($$$$$) { update_head $old_head, $new_head, "stitch: $prose"; } -sub do_stitch ($) { - my ($prose) = @_; +sub do_stitch ($;$) { + my ($prose, $unclean) = @_; my ($ffq_prev, $gdrlast, $ffq_prev_commitish) = ffq_prev_info(); if (!$ffq_prev_commitish) { @@ -1084,7 +1093,7 @@ sub do_stitch ($) { } my $dangling_head = get_head(); - keycommits $dangling_head, \&snag, \&snag, \&snag; + keycommits $dangling_head, $unclean,$unclean,$unclean; stitch($dangling_head, $ffq_prev, $gdrlast, $ffq_prev_commitish, $prose); } @@ -1234,6 +1243,10 @@ sub cmd_new_upstream_v0 () { "[git-debrebase anchor: new upstream $new_upstream_version, merge]", ]; + my $clogsignoff = cmdoutput qw(git show), + '--pretty=format:%an <%ae> %aD', + $new_bw; + # Now we have to add a changelog stanza so the Debian version # is right. die if unlink "debian"; @@ -1250,7 +1263,7 @@ $p ($new_version) UNRELEASED; urgency=medium * Update to new upstream version $new_upstream_version. - -- + -- $clogsignoff END close CN or die $!; @@ -1303,13 +1316,27 @@ sub cmd_stitch () { my $prose = 'stitch'; GetOptions('prose=s', \$prose) or die badusage("bad options to stitch"); badusage "no arguments allowed" if @ARGV; - do_stitch($prose); + do_stitch $prose, 0; +} +sub cmd_prepush () { cmd_stitch(); } + +sub cmd_quick () { + badusage "no arguments allowed" if @ARGV; + do_launder_head 'launder for git-debrebase quick'; + do_stitch 'quick', \&snag; } sub cmd_conclude () { + my ($ffq_prev, $gdrlast, $ffq_prev_commitish) = ffq_prev_info(); + if (!$ffq_prev_commitish) { + fail "No ongoing git-debrebase session." unless $opt_noop_ok; + return; + } + my $dangling_head = get_head(); + badusage "no arguments allowed" if @ARGV; - do_launder_head 'launder for conclude'; - do_stitch 'conclude'; + do_launder_head 'launder for git-debrebase quick'; + do_stitch 'quick', \&snag; } sub cmd_convert_from_gbp () {