Merge branch 'ps/clone-into-reftable-repository' into ps/refstorage-extension
* ps/clone-into-reftable-repository: builtin/clone: create the refdb with the correct object format builtin/clone: skip reading HEAD when retrieving remote builtin/clone: set up sparse checkout later builtin/clone: fix bundle URIs with mismatching object formats remote-curl: rediscover repository when fetching refs setup: allow skipping creation of the refdb setup: extract function to create the refdb
This commit is contained in:
@ -1101,8 +1101,14 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Initialize the repository, but skip initializing the reference
|
||||
* database. We do not yet know about the object format of the
|
||||
* repository, and reference backends may persist that information into
|
||||
* their on-disk data structures.
|
||||
*/
|
||||
init_db(git_dir, real_git_dir, option_template, GIT_HASH_UNKNOWN, NULL,
|
||||
do_not_override_repo_unix_permissions, INIT_DB_QUIET);
|
||||
do_not_override_repo_unix_permissions, INIT_DB_QUIET | INIT_DB_SKIP_REFDB);
|
||||
|
||||
if (real_git_dir) {
|
||||
free((char *)git_dir);
|
||||
@ -1189,10 +1195,7 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
|
||||
if (option_required_reference.nr || option_optional_reference.nr)
|
||||
setup_reference();
|
||||
|
||||
if (option_sparse_checkout && git_sparse_checkout_init(dir))
|
||||
return 1;
|
||||
|
||||
remote = remote_get(remote_name);
|
||||
remote = remote_get_early(remote_name);
|
||||
|
||||
refspec_appendf(&remote->fetch, "+%s*:%s*", src_ref_prefix,
|
||||
branch_top.buf);
|
||||
@ -1270,6 +1273,27 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
|
||||
if (transport->smart_options && !deepen && !filter_options.choice)
|
||||
transport->smart_options->check_self_contained_and_connected = 1;
|
||||
|
||||
strvec_push(&transport_ls_refs_options.ref_prefixes, "HEAD");
|
||||
refspec_ref_prefixes(&remote->fetch,
|
||||
&transport_ls_refs_options.ref_prefixes);
|
||||
if (option_branch)
|
||||
expand_ref_prefix(&transport_ls_refs_options.ref_prefixes,
|
||||
option_branch);
|
||||
if (!option_no_tags)
|
||||
strvec_push(&transport_ls_refs_options.ref_prefixes,
|
||||
"refs/tags/");
|
||||
|
||||
refs = transport_get_remote_refs(transport, &transport_ls_refs_options);
|
||||
|
||||
/*
|
||||
* Now that we know what algorithm the remote side is using, let's set
|
||||
* ours to the same thing.
|
||||
*/
|
||||
hash_algo = hash_algo_by_ptr(transport_get_hash_algo(transport));
|
||||
initialize_repository_version(hash_algo, 1);
|
||||
repo_set_hash_algo(the_repository, hash_algo);
|
||||
create_reference_database(NULL, 1);
|
||||
|
||||
/*
|
||||
* Before fetching from the remote, download and install bundle
|
||||
* data from the --bundle-uri option.
|
||||
@ -1285,24 +1309,7 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
|
||||
bundle_uri);
|
||||
else if (has_heuristic)
|
||||
git_config_set_gently("fetch.bundleuri", bundle_uri);
|
||||
}
|
||||
|
||||
strvec_push(&transport_ls_refs_options.ref_prefixes, "HEAD");
|
||||
refspec_ref_prefixes(&remote->fetch,
|
||||
&transport_ls_refs_options.ref_prefixes);
|
||||
if (option_branch)
|
||||
expand_ref_prefix(&transport_ls_refs_options.ref_prefixes,
|
||||
option_branch);
|
||||
if (!option_no_tags)
|
||||
strvec_push(&transport_ls_refs_options.ref_prefixes,
|
||||
"refs/tags/");
|
||||
|
||||
refs = transport_get_remote_refs(transport, &transport_ls_refs_options);
|
||||
|
||||
if (refs)
|
||||
mapped_refs = wanted_peer_refs(refs, &remote->fetch);
|
||||
|
||||
if (!bundle_uri) {
|
||||
} else {
|
||||
/*
|
||||
* Populate transport->got_remote_bundle_uri and
|
||||
* transport->bundle_uri. We might get nothing.
|
||||
@ -1323,13 +1330,8 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Now that we know what algorithm the remote side is using,
|
||||
* let's set ours to the same thing.
|
||||
*/
|
||||
hash_algo = hash_algo_by_ptr(transport_get_hash_algo(transport));
|
||||
initialize_repository_version(hash_algo, 1);
|
||||
repo_set_hash_algo(the_repository, hash_algo);
|
||||
if (refs)
|
||||
mapped_refs = wanted_peer_refs(refs, &remote->fetch);
|
||||
|
||||
if (mapped_refs) {
|
||||
/*
|
||||
@ -1432,6 +1434,9 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
|
||||
dissociate_from_references();
|
||||
}
|
||||
|
||||
if (option_sparse_checkout && git_sparse_checkout_init(dir))
|
||||
return 1;
|
||||
|
||||
junk_mode = JUNK_LEAVE_REPO;
|
||||
err = checkout(submodule_progress, filter_submodules);
|
||||
|
||||
|
Reference in New Issue
Block a user