our $our_version = 'UNRELEASED'; ###substituted###
our $absurdity = undef; ###substituted###
-our @rpushprotovsn_support = qw(4 5); # 5 drops tag format specification
+our @rpushprotovsn_support = qw(6 5 4); # Reverse order!
our $protovsn;
our $cmd;
our %format_ok = map { $_=>1 } ("1.0","3.0 (native)","3.0 (quilt)");
-our $suite_re = '[-+.0-9a-z]+';
our $cleanmode_re = qr{(?: dpkg-source (?: -d )? (?: ,no-check | ,all-check )?
| (?: git | git-ff ) (?: ,always )?
| check (?: ,ignores )?
# > param head DGIT-VIEW-HEAD
# > param csuite SUITE
# > param tagformat new # $protovsn == 4
+# > param splitbrain 0|1 # $protovsn >= 6
# > param maint-view MAINT-VIEW-HEAD
#
# > param buildinfo-filename P_V_X.buildinfo # zero or more times
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',
$do_split_brain = 1;
}
$do_split_brain //= 0;
-
- return ($format);
}
sub supplementary_message ($) {
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
%s release %s for %s (%s) [dgit]
ENDT
or confess "$!";
+ unshift @dtxinfo, "--quilt=$quilt_mode" if madformat($format);
+ unshift @dtxinfo, do_split_brain() ? "split" : "no-split"
+ # rpush protocol 5 and earlier don't tell us
+ unless $we_are_initiator && $protovsn < 6;
my $dtxinfo = join(" ", "",@dtxinfo);
print TO <<END or confess "$!";
[dgit distro=$declaredistro$dtxinfo]
responder_send_command("param csuite $csuite");
responder_send_command("param isuite $isuite");
responder_send_command("param tagformat new"); # needed in $protovsn==4
+ responder_send_command("param splitbrain $do_split_brain");
if (defined $maintviewhead) {
responder_send_command("param maint-view $maintviewhead");
}
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
}
our %i_wanted;
+our ($i_clogp, $i_version, $i_dscfn, $i_changesfn, @i_buildinfos);
sub i_resp_want ($) {
my ($keyword) = @_;
$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;
+ if ($protovsn >= 6) {
+ determine_whether_split_brain getfield $dsc, 'Format';
+ $do_split_brain eq ($i_param{'splitbrain'} // '<unsent>')
+ or badproto \*RO,
+ "split brain mismatch, $do_split_brain != $i_param{'split_brain'}";
+ printdebug "rpush split brain $do_split_brain\n";
+ }
+ }
my @localpaths = i_method "i_want", $keyword;
printdebug "[[ $keyword @localpaths\n";
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";
}
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";
}
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)"