builtin/clone: move setup of alternates for shared local clones
When cloning a local repository with "--shared" we add that repository to the new repository's alternates. This is done in `clone_local()`, which is responsible for performing local clones. Move the logic into `collect_alternates()` to unify our setup of alternates. Furthermore, this will allow us to set up alternates right at creation time of the object database. Note that the logic for cloning a local repository with "--no-shared" is not yet part of `collect_alternates()`. This will be handled in the next commit, but means that at this step, we may compute `commondir` without it being used. It will become used in the next step though. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>next
parent
501548160c
commit
87e10a91e2
|
|
@ -220,7 +220,8 @@ static void copy_alternates(struct strbuf *src, const char *src_repo)
|
|||
fclose(in);
|
||||
}
|
||||
|
||||
static void collect_alternates(struct strvec *alternates)
|
||||
static void collect_alternates(struct strvec *alternates,
|
||||
const char *local_source_repo)
|
||||
{
|
||||
if (option_required_reference.nr || option_optional_reference.nr) {
|
||||
struct collect_alternates_data data = {
|
||||
|
|
@ -234,6 +235,16 @@ static void collect_alternates(struct strvec *alternates)
|
|||
for_each_string_list(&option_optional_reference,
|
||||
collect_one_alternate, &data);
|
||||
}
|
||||
|
||||
if (local_source_repo) {
|
||||
struct strbuf commondir = STRBUF_INIT;
|
||||
|
||||
get_common_dir(&commondir, local_source_repo);
|
||||
if (option_shared)
|
||||
strvec_pushf(alternates, "%s/objects", commondir.buf);
|
||||
|
||||
strbuf_release(&commondir);
|
||||
}
|
||||
}
|
||||
|
||||
static void mkdir_if_missing(const char *pathname, mode_t mode)
|
||||
|
|
@ -357,13 +368,7 @@ static void copy_or_link_directory(struct strbuf *src, struct strbuf *dest,
|
|||
|
||||
static void clone_local(const char *src_repo, const char *dest_repo)
|
||||
{
|
||||
if (option_shared) {
|
||||
struct strbuf alt = STRBUF_INIT;
|
||||
get_common_dir(&alt, src_repo);
|
||||
strbuf_addstr(&alt, "/objects");
|
||||
odb_add_to_alternates_file(the_repository->objects, alt.buf);
|
||||
strbuf_release(&alt);
|
||||
} else {
|
||||
if (!option_shared) {
|
||||
struct strbuf src = STRBUF_INIT;
|
||||
struct strbuf dest = STRBUF_INIT;
|
||||
get_common_dir(&src, src_repo);
|
||||
|
|
@ -1348,7 +1353,7 @@ int cmd_clone(int argc,
|
|||
warning(_("--local is ignored"));
|
||||
|
||||
create_object_database(the_repository);
|
||||
collect_alternates(&alternates);
|
||||
collect_alternates(&alternates, is_local ? path : NULL);
|
||||
|
||||
for (size_t i = 0; i < alternates.nr; i++)
|
||||
odb_add_to_alternates_file(the_repository->objects, alternates.v[i]);
|
||||
|
|
|
|||
Loading…
Reference in New Issue