chiark / gitweb /
dgit: Reject split brain quilt modes with single-debian-patch
[dgit.git] / dgit
diff --git a/dgit b/dgit
index 13ed4b6cfef05775c7f65fe3fd5236a80d9d67f6..cbdf3764c2463782dbe7285bb278a4e70ea96698 100755 (executable)
--- a/dgit
+++ b/dgit
@@ -178,6 +178,29 @@ our $supplementary_message = '';
 our $split_brain = 0;
 our $do_split_brain = 0;
 
+# Interactions between quilt mode and split brain
+# (currently, split brain only implemented iff
+#  madformat_wantfixup && quiltmode_splitbrain)
+#
+#   source format        sane           `3.0 (quilt)'
+#                                       madformat_wantfixup()
+#
+#   quilt mode                          normal              quiltmode
+#                                       (eg linear)         _splitbrain
+#
+#   ------------      ------------------------------------------------
+#
+#   no split          no q cache        no q cache          forbidden,
+#     brain           PM on master      q fixup on master   prevented
+#   !$do_split_brain                    PM on master
+#
+#   split brain       no q cache        q fixup cached, to dgit view
+#                     PM in dgit view   PM in dgit view
+#
+# PM = pseudomerge to make ff, due to overwrite (or split view)
+# "no q cache" = do not record in cache on build, do not check cache
+# `3.0 (quilt)' with --quilt=nocheck is treated as sane format
+
 END {
     local ($@, $?);
     return unless forkcheck_mainprocess();
@@ -4494,8 +4517,9 @@ END
        # user might have not used dgit build, so maybe do this now:
        if (quiltmode_splitbrain()) {
            $do_split_brain = 1;
+       }
+       if ($do_split_brain) {
            changedir $playground;
-           quilt_need_fake_dsc($upstreamversion);
            my $cachekey;
            ($dgithead, $cachekey) =
                quilt_check_splitbrain_cache($actualhead, $upstreamversion);
@@ -5800,6 +5824,10 @@ sub build_maybe_quilt_fixup () {
     my $upstreamversion = upstreamversion $version;
 
     if ($fopts->{'single-debian-patch'}) {
+       fail f_
+ "quilt mode %s does not make sense (or is not supported) with single-debian-patch",
+           $quilt_mode
+           if quiltmode_splitbrain();
        quilt_fixup_singlepatch($clogp, $headref, $upstreamversion);
     } else {
        quilt_fixup_multipatch($clogp, $headref, $upstreamversion);
@@ -5950,6 +5978,7 @@ sub quilt_fakedsc2unapplied ($$) {
     # must be run in the playground
     # quilt_need_fake_dsc must have been called
 
+    quilt_need_fake_dsc($upstreamversion);
     runcmd qw(sh -ec),
         'exec dpkg-source --no-check --skip-patches -x fake.dsc >/dev/null';
 
@@ -5977,6 +6006,8 @@ sub quilt_check_splitbrain_cache ($$) {
     # Computes the cache key and looks in the cache.
     # Returns ($dgit_view_commitid, $cachekey) or (undef, $cachekey)
 
+    quilt_need_fake_dsc($upstreamversion);
+
     my $splitbrain_cachekey;
     
     progress f_
@@ -6134,9 +6165,7 @@ sub quilt_fixup_multipatch ($$$) {
        chdir '..';
     }
 
-    quilt_need_fake_dsc($upstreamversion);
-
-    if (quiltmode_splitbrain()) {
+    if ($do_split_brain) {
        my $cachehit;
        ($cachehit, $splitbrain_cachekey) =
            quilt_check_splitbrain_cache($headref, $upstreamversion);
@@ -6903,7 +6932,6 @@ sub cmd_print_unapplied_treeish {
     prep_ud();
     changedir $playground;
     my $uv = upstreamversion $version;
-    quilt_need_fake_dsc($uv);
     my $u = quilt_fakedsc2unapplied($headref, $uv);
     print $u, "\n" or confess "$!";
 }