setup: allow skipping creation of the refdb
Allow callers to skip creation of the reference database via a new flag `INIT_DB_SKIP_REFDB`, which is required for git-clone(1) so that we can create it at a later point once the object format has been discovered from the remote repository. Note that we also uplift the call to `create_reference_database()` into `init_db()`, which makes it easier to handle the new flag for us. This changes the order in which we do initialization so that we now set up the Git configuration before we create the reference database. In practice this move should not result in any change in behaviour. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Patrick Steinhardt committed
Dec 12, 2023 at 08:00 UTC
56cd0334f7664feffcd8ed8f8f0d3929374c69e0
2 files changed
+8
-10
setup.c
+5
-8
@@ -1949,11 +1949,9 @@ static void create_reference_database(const char *initial_branch, int quiet)
1949
1950
static int create_default_files(const char *template_path,
1951
const char *original_git_dir,
1952
- const char *initial_branch,
1952
const struct repository_format *fmt,
1953
int prev_bare_repository,
1955
- int init_shared_repository,
1956
- int quiet)
1954
+ int init_shared_repository)
1955
{
1956
struct stat st1;
1957
struct strbuf buf = STRBUF_INIT;
@@ -2024,7 +2022,6 @@ static int create_default_files(const char *template_path,
2022
adjust_shared_perm(get_git_dir());
2023
}
2024
2027
- create_reference_database(initial_branch, quiet);
2025
initialize_repository_version(fmt->hash_algo, 0);
2026
2027
/* Check filemode trustability */
@@ -2184,11 +2181,11 @@ int init_db(const char *git_dir, const char *real_git_dir,
2181
validate_hash_algorithm(&repo_fmt, hash);
2182
2183
reinit = create_default_files(template_dir, original_git_dir,
2187
- initial_branch, &repo_fmt,
2188
- prev_bare_repository,
2189
- init_shared_repository,
2190
- flags & INIT_DB_QUIET);
2184
+ &repo_fmt, prev_bare_repository,
2185
+ init_shared_repository);
2186
2187
+ if (!(flags & INIT_DB_SKIP_REFDB))
2188
+ create_reference_database(initial_branch, flags & INIT_DB_QUIET);
2189
create_object_directory();
2190
2191
if (get_shared_repository()) {
setup.h
+3
-2
@@ -169,8 +169,9 @@ int verify_repository_format(const struct repository_format *format,
169
*/
170
void check_repository_format(struct repository_format *fmt);
171
172
-#define INIT_DB_QUIET 0x0001
173
-#define INIT_DB_EXIST_OK 0x0002
172
+#define INIT_DB_QUIET (1 << 0)
173
+#define INIT_DB_EXIST_OK (1 << 1)
174
+#define INIT_DB_SKIP_REFDB (1 << 2)
175
176
int init_db(const char *git_dir, const char *real_git_dir,
177
const char *template_dir, int hash_algo,