X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=git-debrebase;h=b69450baaa4f952463e6bbcb925ad0be6a0788e1;hb=8538600c6a51f6b02d1db7f7171f05a9651a27e6;hp=c497631c874b8c44391539c618eba04256c32e1d;hpb=615c5264953f09dc873ac65779ec565f1d239af6;p=dgit.git diff --git a/git-debrebase b/git-debrebase index c497631c..b69450ba 100755 --- a/git-debrebase +++ b/git-debrebase @@ -33,7 +33,8 @@ # git-debrebase [] stitch [--prose=] # git-debrebase [] downstream-rebase-launder-v0 # experimental # -# git-debrebase [] convert-from-gbp +# git-debrebase [] convert-from-gbp [] +# git-debrebase [] convert-to-gbp # problems / outstanding questions: # @@ -449,15 +450,23 @@ sub classify ($) { Contributor => $identical[0]); } if (@p == 2 && @identical == 2) { - my @bytime = nsort_by { - my ($ph,$pm) = get_commit $_->{CommitId}; + my $get_t = sub { + my ($ph,$pm) = get_commit $_[0]{CommitId}; $ph =~ m/^committer .* (\d+) [-+]\d+$/m or die "$_->{CommitId} ?"; $1; - } @p; + }; + my @bytime = @p; + my $order = $get_t->($bytime[0]) <=> $get_t->($bytime[1]); + if ($order > 0) { # newer first + } elsif ($order < 0) { + @bytime = reverse @bytime; + } else { + return $unknown->('merge of two identical same-age parents'); + } return $classify->(qw(Pseudomerge), SubType => qw(Ambiguous), - Overwritten => [ $bytime[0] ], - Contributor => $bytime[1]); + Contributor => $bytime[0], + Overwritten => [ $bytime[1] ]); } foreach my $p (@p) { my ($p_h, $p_m) = get_commit $p->{CommitId}; @@ -1277,8 +1286,7 @@ sub cmd_convert_from_gbp () { update_head_checkout $old_head, $work, 'convert-from-gbp'; } -sub cmd_convert_to_gbp_v0 () { - # v0 because very raw; does not make pseudomerges or anything +sub cmd_convert_to_gbp () { badusage "no arguments allowed" if @ARGV; my $head = get_head(); my $ffq = (ffq_prev_branchinfo())[3];