chiark / gitweb /
dgit: rpush protocol: Actually select version 5 !
[dgit.git] / dgit
diff --git a/dgit b/dgit
index de53faa381c8a2574bbbde96f332d19a6218f2c1..43d2286b95de11f8ea66dfa100bf4b2c7d65edf4 100755 (executable)
--- a/dgit
+++ b/dgit
@@ -53,7 +53,7 @@ use Debian::Dgit;
 our $our_version = 'UNRELEASED'; ###substituted###
 our $absurdity = undef; ###substituted###
 
-our @rpushprotovsn_support = qw(4 5); # 5 drops tag format specification
+our @rpushprotovsn_support = qw(5 4); # Reverse order!
 our $protovsn;
 
 our $cmd;
@@ -300,6 +300,10 @@ sub deliberately_not_fast_forward () {
 sub quiltmode_splitting () {
     $quilt_mode =~ m/gbp|dpm|unapplied|baredebian/;
 }
+sub format_quiltmode_splitting ($) {
+    my ($format) = @_;
+    return madformat_wantfixup($format) && quiltmode_splitting();
+}
 
 sub do_split_brain () { !!($do_split_brain // confess) }
 
@@ -973,9 +977,8 @@ sub notpushing () {
     parseopts_late_defaults();
 }
 
-sub determine_whether_split_brain () {
-    my ($format,) = get_source_format();
-
+sub determine_whether_split_brain ($) {
+    my ($format) = @_;
     {
        local $access_forpush;
        default_from_access_cfg(\$splitview_mode, 'split-view', 'auto',
@@ -985,7 +988,7 @@ sub determine_whether_split_brain () {
 
     printdebug "format $format, quilt mode $quilt_mode\n";
 
-    if (madformat_wantfixup($format) && quiltmode_splitting()) {
+    if (format_quiltmode_splitting $format) {
        $splitview_mode ne 'never' or
            fail f_ "dgit: quilt mode \`%s' (for format \`%s')".
                    " implies split view, but split-view set to \`%s'",
@@ -993,8 +996,6 @@ sub determine_whether_split_brain () {
        $do_split_brain = 1;
     }
     $do_split_brain //= 0;
-
-    return ($format);
 }
 
 sub supplementary_message ($) {
@@ -4357,11 +4358,12 @@ sub push_mktags ($$ $$ $) {
 
     my $cversion = getfield $clogp, 'Version';
     my $clogsuite = getfield $clogp, 'Distribution';
+    my $format = getfield $dsc, 'Format';
 
     # We make the git tag by hand because (a) that makes it easier
     # to control the "tagger" (b) we can do remote signing
     my $authline = clogp_authline $clogp;
-    my $dtxinfo = join(" ", "",@deliberatelies);
+    my @dtxinfo = @deliberatelies;
 
     my $mktag = sub {
        my ($tw) = @_;
@@ -4382,6 +4384,7 @@ END
 %s release %s for %s (%s) [dgit]
 ENDT
                or confess "$!";
+           my $dtxinfo = join(" ", "",@dtxinfo);
            print TO <<END or confess "$!";
 [dgit distro=$declaredistro$dtxinfo]
 END
@@ -4881,7 +4884,7 @@ sub cmd_fetch {
 sub cmd_pull {
     parseopts();
     fetchpullargs();
-    determine_whether_split_brain();
+    determine_whether_split_brain get_source_format();
     if (do_split_brain()) {
        my ($format, $fopts) = get_source_format();
        madformat($format) and fail f_ <<END, $quilt_mode
@@ -5176,6 +5179,7 @@ sub i_resp_previously ($) {
 }
 
 our %i_wanted;
+our ($i_clogp, $i_version, $i_dscfn, $i_changesfn, @i_buildinfos);
 
 sub i_resp_want ($) {
     my ($keyword) = @_;
@@ -5185,8 +5189,11 @@ sub i_resp_want ($) {
     $isuite = $i_param{'isuite'} // $i_param{'csuite'};
     die unless $isuite =~ m/^$suite_re$/;
 
-    pushing();
-    rpush_handle_protovsn_bothends();
+    if (!defined $dsc) {
+       pushing();
+       rpush_handle_protovsn_bothends();
+       push_parse_dsc $i_dscfn, 'remote dsc', $i_version;
+    }
 
     my @localpaths = i_method "i_want", $keyword;
     printdebug "[[  $keyword @localpaths\n";
@@ -5196,8 +5203,6 @@ sub i_resp_want ($) {
     print RI "files-end\n" or confess "$!";
 }
 
-our ($i_clogp, $i_version, $i_dscfn, $i_changesfn, @i_buildinfos);
-
 sub i_localname_parsed_changelog {
     return "remote-changelog.822";
 }
@@ -5265,7 +5270,7 @@ sub i_want_signed_tag {
 
     die unless $i_param{'csuite'} =~ m/^$suite_re$/;
     $csuite = $&;
-    push_parse_dsc $i_dscfn, 'remote dsc', $i_version;
+    defined $dsc or badproto \*RO, "dsc (before parsed-changelog)";
 
     my @tagwants = push_tagwants $i_version, $head, $maintview, "tag";
 
@@ -6568,7 +6573,8 @@ sub build_or_push_prep_early () {
 }
 
 sub build_or_push_prep_modes () {
-    my ($format,) = determine_whether_split_brain();
+    my ($format) = get_source_format();
+    determine_whether_split_brain($format);
 
     fail __ "dgit: --include-dirty is not supported with split view".
             " (including with view-splitting quilt modes)"