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 $quilt_upstream_commitish;
our $quilt_upstream_commitish_used;
our $quilt_upstream_commitish_message;
-our $quilt_options_re = 'gbp|dpm|baredebian(?:\+tarball)?';
+our $quilt_options_re = 'gbp|dpm|baredebian(?:\+tarball|\+git)?';
our $quilt_modes_re = "linear|smash|auto|nofix|nocheck|unapplied|$quilt_options_re";
our $splitview_mode;
our $splitview_modes_re = qr{auto|always|never};
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 )?
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) }
# > 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',
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'",
$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
my $authline = clogp_authline $clogp;
- my $delibs = join(" ", "",@deliberatelies);
+ my @dtxinfo = @deliberatelies;
my $mktag = sub {
my ($tw) = @_;
%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$delibs]
+[dgit distro=$declaredistro$dtxinfo]
END
foreach my $ref (sort keys %previously) {
print TO <<END or confess "$!";
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)"
or badcfg f_ "unknown quilt-mode \`%s'", $quilt_mode;
$quilt_mode = $1;
}
+ $quilt_mode =~ s/^(baredebian)\+git$/$1/;
foreach my $moc (@modeopt_cfgs) {
local $access_forpush;