The commit 31224cbdc7 (clone: recursive and reference option triggers
submodule alternates, 2016-08-17) argued for any further `submodule update`
to respect the initial setup. This is not the case if you only pass
'--reference[-if-able]' to the initial clone without instructing to
recurse into submodules.

If there are submodules however the user is likely to later run
a 'submodule update --init' to obtain the submodules. In this case we
also want to have the references available.

Reported-by: Maxime Viargues <maxime.viarg...@serato.com>
Signed-off-by: Stefan Beller <sbel...@google.com>
---
 builtin/clone.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/builtin/clone.c b/builtin/clone.c
index de85b85254..5f022e39e9 100644
--- a/builtin/clone.c
+++ b/builtin/clone.c
@@ -24,6 +24,7 @@
 #include "remote.h"
 #include "run-command.h"
 #include "connected.h"
+#include "submodule.h"
 
 /*
  * Overall FIXMEs:
@@ -993,11 +994,14 @@ int cmd_clone(int argc, const char **argv, const char 
*prefix)
                        string_list_append(&option_config,
                                           strbuf_detach(&sb, NULL));
                }
+       }
 
+       if (option_recurse_submodules.nr ||
+           has_submodules(SUBMODULE_CHECK_GITMODULES_IN_WT)) {
                if (option_required_reference.nr &&
                    option_optional_reference.nr)
-                       die(_("clone --recursive is not compatible with "
-                             "both --reference and --reference-if-able"));
+                       die(_("submodules are incompatible with both "
+                           "--reference and --reference-if-able"));
                else if (option_required_reference.nr) {
                        string_list_append(&option_config,
                                "submodule.alternateLocation=superproject");
-- 
2.12.2.575.gb14f27f917

Reply via email to