chiark / gitweb /
git-debrebase: Break out resolve_upstream_version (nfc)
[dgit.git] / git-debrebase
index 0c351a474459471abd8ec66b9a5a3c3ffac48bba..5d3c7426da687046ae3dccabc134cab99f484458 100755 (executable)
@@ -573,7 +573,7 @@ sub keycommits ($;$$$$) {
     my ($anchor, $breakwater);
     my $clogonly;
     my $cl;
-    $fatal //= sub { fail $_[2]; };
+    $fatal //= sub { fail $_[1]; };
     my $x = sub {
        my ($cb, $tagsfx, $mainwhy, $xwhy) = @_;
        my $why = $mainwhy.$xwhy;
@@ -1162,23 +1162,12 @@ sub do_stitch ($;$) {
     stitch($dangling_head, $ffq_prev, $gdrlast, $ffq_prev_commitish, $prose);
 }
 
-sub cmd_new_upstream () {
-    # automatically and unconditionally launders before rebasing
-    # if rebase --abort is used, laundering has still been done
+sub resolve_upstream_version ($$) {
+    my ($new_upstream, $version) = @_;
 
-    my %pieces;
+    my $new_upstream_version = "$version";
+    $new_upstream_version =~ s/-.*?$//;;
 
-    badusage "need NEW-VERSION [UPS-COMMITTISH]" unless @ARGV >= 1;
-
-    # parse args - low commitment
-    my $spec_version = shift @ARGV;
-    my $new_version = (new Dpkg::Version $spec_version, check => 1);
-    if ($new_version->is_native()) {
-       $new_version = (new Dpkg::Version "$spec_version-1", check => 1);
-    }
-    my $new_upstream_version = $new_version->version();
-
-    my $new_upstream = shift @ARGV;
     if (!defined $new_upstream) {
        my @tried;
        # todo: at some point maybe use git-deborig to do this
@@ -1196,6 +1185,30 @@ sub cmd_new_upstream () {
     }
     $new_upstream = git_rev_parse $new_upstream;
 
+    return ($new_upstream, $new_upstream_version);
+}
+
+sub cmd_new_upstream () {
+    # automatically and unconditionally launders before rebasing
+    # if rebase --abort is used, laundering has still been done
+
+    my %pieces;
+
+    badusage "need NEW-VERSION [UPS-COMMITTISH]" unless @ARGV >= 1;
+
+    # parse args - low commitment
+    my $spec_version = shift @ARGV;
+    my $new_version = (new Dpkg::Version $spec_version, check => 1);
+    fail "bad version number \`$spec_version'" unless defined $new_version;
+    if ($new_version->is_native()) {
+       $new_version = (new Dpkg::Version "$spec_version-1", check => 1);
+    }
+
+    my $new_upstream = shift @ARGV;
+    my $new_upstream_version;
+    ($new_upstream, $new_upstream_version) =
+       resolve_upstream_version $new_upstream, $new_version;
+
     record_ffq_auto();
 
     my $piece = sub {