aboutsummaryrefslogtreecommitdiffstats
path: root/builtin
diff options
context:
space:
mode:
authorPatrick Steinhardt <ps@pks.im>2024-08-08 09:35:37 +0200
committerJunio C Hamano <gitster@pobox.com>2024-08-08 09:21:39 -0700
commit69814846aba19f864e8140c2de982ea345f4ce1b (patch)
treef322037cf359168f95a8d705b7ffbdfc9a4f6ca1 /builtin
parentbuiltin/submodule: allow cloning with different ref storage format (diff)
downloadgit-69814846aba19f864e8140c2de982ea345f4ce1b.tar.gz
git-69814846aba19f864e8140c2de982ea345f4ce1b.zip
builtin/clone: propagate ref storage format to submodules
When recursively cloning a repository with a non-default ref storage format, e.g. by passing the `--ref-format=` option, then only the top-level repository will end up using that ref storage format, and all recursively cloned submodules will instead use the default format. While mixed-format constellations are expected to work alright, the outcome still is somewhat surprising as we have essentially ignored the user's request. Fix this by propagating the requested ref format to cloned submodules. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'builtin')
-rw-r--r--builtin/clone.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/builtin/clone.c b/builtin/clone.c
index af6017d41a..75b15b5773 100644
--- a/builtin/clone.c
+++ b/builtin/clone.c
@@ -729,7 +729,8 @@ static int git_sparse_checkout_init(const char *repo)
return result;
}
-static int checkout(int submodule_progress, int filter_submodules)
+static int checkout(int submodule_progress, int filter_submodules,
+ enum ref_storage_format ref_storage_format)
{
struct object_id oid;
char *head;
@@ -813,6 +814,10 @@ static int checkout(int submodule_progress, int filter_submodules)
strvec_push(&cmd.args, "--no-fetch");
}
+ if (ref_storage_format != REF_STORAGE_FORMAT_UNKNOWN)
+ strvec_pushf(&cmd.args, "--ref-format=%s",
+ ref_storage_format_to_name(ref_storage_format));
+
if (filter_submodules && filter_options.choice)
strvec_pushf(&cmd.args, "--filter=%s",
expand_list_objects_filter_spec(&filter_options));
@@ -1536,7 +1541,8 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
return 1;
junk_mode = JUNK_LEAVE_REPO;
- err = checkout(submodule_progress, filter_submodules);
+ err = checkout(submodule_progress, filter_submodules,
+ ref_storage_format);
free(remote_name);
strbuf_release(&reflog_msg);