chiark / gitweb /
dgit: Reject dgit pull in split brain mode
[dgit.git] / dgit
diff --git a/dgit b/dgit
index 35b61a5e0006e414c7e309cbd173f1b469f427f5..36e0a2b6afba0e14da5a9a7574c00424b7ccc71a 100755 (executable)
--- a/dgit
+++ b/dgit
@@ -173,7 +173,7 @@ autoflush STDOUT 1;
 
 our $supplementary_message = '';
 our $made_split_brain = 0;
-our $do_split_brain = 0;
+our $do_split_brain;
 
 # Interactions between quilt mode and split brain
 # (currently, split brain only implemented iff
@@ -295,7 +295,7 @@ sub quiltmode_splitbrain () {
     $quilt_mode =~ m/gbp|dpm|unapplied/;
 }
 
-sub do_split_brain () { $do_split_brain // confess }
+sub do_split_brain () { !!($do_split_brain // confess) }
 
 sub opts_opt_multi_cmd {
     my $extra = shift;
@@ -967,6 +967,15 @@ sub notpushing () {
     parseopts_late_defaults();
 }
 
+sub determine_whether_split_brain () {
+    my ($format,) = get_source_format();
+    printdebug "format $format, quilt mode $quilt_mode\n";
+    if (madformat_wantfixup($format) && quiltmode_splitbrain()) {
+       $do_split_brain = 1;
+    }
+    $do_split_brain //= 0;
+}
+
 sub supplementary_message ($) {
     my ($msg) = @_;
     if (!$we_are_responder) {
@@ -4506,7 +4515,7 @@ END
        }
     }
 
-    confess unless !!$made_split_brain == !!do_split_brain();
+    confess unless !!$made_split_brain == do_split_brain();
 
     changedir $playground;
     progress f_ "checking that %s corresponds to HEAD", $dscfn;
@@ -4826,7 +4835,8 @@ sub cmd_fetch {
 sub cmd_pull {
     parseopts();
     fetchpullargs();
-    if (quiltmode_splitbrain()) {
+    determine_whether_split_brain();
+    if (do_split_brain()) {
        my ($format, $fopts) = get_source_format();
        madformat($format) and fail f_ <<END, $quilt_mode
 dgit pull not yet supported in split view mode (--quilt=%s)
@@ -6210,7 +6220,7 @@ END
 
     progress f_ "starting quiltify (multiple patches, %s mode)", $quilt_mode;
     quiltify($clogp,$headref,$oldtiptree,\@failsuggestion);
-    runcmd @git, qw(checkout -q), (qw(master dgit-view)[!!do_split_brain()]);
+    runcmd @git, qw(checkout -q), (qw(master dgit-view)[do_split_brain()]);
 
     if (!open P, '>>', ".pc/applied-patches") {
        $!==&ENOENT or confess "$!";
@@ -6361,11 +6371,8 @@ sub build_or_push_prep_early () {
 }
 
 sub build_or_push_prep_modes () {
-    my ($format,) = get_source_format();
-    printdebug "format $format, quilt mode $quilt_mode\n";
-    if (madformat_wantfixup($format) && quiltmode_splitbrain()) {
-       $do_split_brain = 1;
-    }
+    determine_whether_split_brain();
+
     fail __ "dgit: --include-dirty is not supported in split view quilt mode"
        if do_split_brain() && $includedirty;
 }
@@ -6695,7 +6702,7 @@ sub build_source {
        unlink "$buildproductsdir/$sourcechanges" or $!==ENOENT
            or fail f_ "remove %s: %s", $sourcechanges, $!;
     }
-#    confess unless !!$made_split_brain == !!do_split_brain();
+#    confess unless !!$made_split_brain == do_split_brain();
 
     my @cmd = (@dpkgsource, qw(-b --));
     my $leafdir;