X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=git-debrebase;h=9e8d7075d42e32bb24a270ecaf9db217162c4ad0;hb=b52ed63f3a57d7ac4d3d62571cc9a9458ee08fe8;hp=fd67629492dd08a220a4ebf29e426e869d108b29;hpb=11feba1f44552f3232c52f4f2a55ff7f2f0c6175;p=dgit.git diff --git a/git-debrebase b/git-debrebase index fd676294..9e8d7075 100755 --- a/git-debrebase +++ b/git-debrebase @@ -19,6 +19,7 @@ # along with this program. If not, see . END { $? = $Debian::Dgit::ExitStatus::desired // -1; }; +use Debian::Dgit::GDR; use Debian::Dgit::ExitStatus; use strict; @@ -1018,7 +1019,7 @@ sub record_ffq_prev_deferred () { } return if $invert; my $lrval = git_get_ref $lrref; - return unless defined $lrval; + return unless length $lrval; if (is_fast_fwd $lrval, $currentval) { print "OK, you are ahead of $lrref\n" or die $!; @@ -1128,7 +1129,7 @@ sub do_stitch ($;$) { stitch($dangling_head, $ffq_prev, $gdrlast, $ffq_prev_commitish, $prose); } -sub cmd_new_upstream_v0 () { +sub cmd_new_upstream () { # automatically and unconditionally launders before rebasing # if rebase --abort is used, laundering has still been done @@ -1140,7 +1141,23 @@ sub cmd_new_upstream_v0 () { my $new_version = (new Dpkg::Version scalar(shift @ARGV), check => 1); my $new_upstream_version = $new_version->version(); - my $new_upstream = git_rev_parse (shift @ARGV // 'upstream'); + my $new_upstream = shift @ARGV; + if (!defined $new_upstream) { + my @tried; + # todo: at some point maybe use git-deborig to do this + foreach my $tagpfx ('', 'v', 'upstream/') { + my $tag = $tagpfx.(dep14_version_mangle $new_upstream_version); + $new_upstream = git_get_ref "refs/tags/$tag"; + last if length $new_upstream; + push @tried, $tag; + } + if (!length $new_upstream) { + fail "Could not determine appropriate upstream commitish.\n". + " (Tried these tags: @tried)\n". + " Check version, and specify upstream commitish explicitly."; + } + } + $new_upstream = git_rev_parse $new_upstream; record_ffq_auto(); @@ -1361,6 +1378,10 @@ sub cmd_breakwater () { sub cmd_status () { badusage "no arguments allowed" if @ARGV; + # todo: gdr status should print divergence info + # todo: gdr status should print upstream component(s) info + # todo: gdr should leave/maintain some refs with this kind of info ? + my $oldest = [ 0 ]; my $newest; my $note = sub {