]> git.ipfire.org Git - thirdparty/git.git/commitdiff
environment: move object_creation_mode into repo_config_values
authorTian Yuchen <cat@malon.dev>
Tue, 14 Jul 2026 03:25:24 +0000 (11:25 +0800)
committerJunio C Hamano <gitster@pobox.com>
Tue, 14 Jul 2026 14:30:23 +0000 (07:30 -0700)
The global variable 'object_creation_mode' controls how Git creates
object files, specifically determining whether to use hardlinks or
renames when moving temporary files into the object database. Move
it into 'struct repo_config_values' to continue the libification
effort.

Move the 'enum object_creation_mode' definition higher up in
'environment.h' to ensure it is visible to the structure. Initialize
the per-repository value to its default macro value
OBJECT_CREATION_MODE inside 'repo_config_values_init()'.

Update configuration parsing in 'git_default_core_config()' to write
directly to the repository-specific configuration structure.

Mentored-by: Christian Couder <christian.couder@gmail.com>
Mentored-by: Ayush Chandekar <ayu.chandekar@gmail.com>
Mentored-by: Olamide Caleb Bello <belkid98@gmail.com>
Signed-off-by: Tian Yuchen <cat@malon.dev>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
environment.c
environment.h
object-file.c

index c0bf7577b7ad4016e78983571873578f99716d04..ef3c032e0c0329af7dcc4fd71b40a1849fb3c5f7 100644 (file)
@@ -60,7 +60,6 @@ char *check_roundtrip_encoding;
 #ifndef OBJECT_CREATION_MODE
 #define OBJECT_CREATION_MODE OBJECT_CREATION_USES_HARDLINKS
 #endif
-enum object_creation_mode object_creation_mode = OBJECT_CREATION_MODE;
 int grafts_keep_true_parents;
 unsigned long pack_size_limit_cfg;
 
@@ -512,9 +511,9 @@ int git_default_core_config(const char *var, const char *value,
                if (!value)
                        return config_error_nonbool(var);
                if (!strcmp(value, "rename"))
-                       object_creation_mode = OBJECT_CREATION_USES_RENAMES;
+                       cfg->object_creation_mode = OBJECT_CREATION_USES_RENAMES;
                else if (!strcmp(value, "link"))
-                       object_creation_mode = OBJECT_CREATION_USES_HARDLINKS;
+                       cfg->object_creation_mode = OBJECT_CREATION_USES_HARDLINKS;
                else
                        die(_("invalid mode for object creation: %s"), value);
                return 0;
@@ -728,6 +727,7 @@ void repo_config_values_init(struct repo_config_values *cfg)
        cfg->apply_default_ignorewhitespace = NULL;
        cfg->push_default = PUSH_DEFAULT_UNSPECIFIED;
        cfg->autorebase = AUTOREBASE_NEVER;
+       cfg->object_creation_mode = OBJECT_CREATION_MODE;
        cfg->apply_sparse_checkout = 0;
        cfg->branch_track = BRANCH_TRACK_REMOTE;
        cfg->trust_ctime = 1;
index 46b2f0d861089eaf494f26ce151a62f8488d0cce..a47a5c83dbd469625bb8f7d527ffba1a8b7ed53b 100644 (file)
@@ -109,6 +109,11 @@ enum rebase_setup_type {
        AUTOREBASE_ALWAYS
 };
 
+enum object_creation_mode {
+       OBJECT_CREATION_USES_HARDLINKS = 0,
+       OBJECT_CREATION_USES_RENAMES = 1
+};
+
 struct repo_config_values {
        /* section "core" config values */
        char *attributes_file;
@@ -120,6 +125,7 @@ struct repo_config_values {
        char *apply_default_ignorewhitespace;
        enum push_default_type push_default;
        enum rebase_setup_type autorebase;
+       enum object_creation_mode object_creation_mode;
        int apply_sparse_checkout;
        int trust_ctime;
        int check_stat;
@@ -213,12 +219,6 @@ extern unsigned long pack_size_limit_cfg;
 extern int protect_hfs;
 extern int protect_ntfs;
 
-enum object_creation_mode {
-       OBJECT_CREATION_USES_HARDLINKS = 0,
-       OBJECT_CREATION_USES_RENAMES = 1
-};
-extern enum object_creation_mode object_creation_mode;
-
 extern int grafts_keep_true_parents;
 
 const char *get_log_output_encoding(void);
index e3d92bbda25f0a53dae74b50926340316240af61..26780904681a22ddffc8608cf9e88942b72c692a 100644 (file)
@@ -411,11 +411,12 @@ int finalize_object_file_flags(struct repository *repo,
 {
        unsigned retries = 0;
        int ret;
+       struct repo_config_values *cfg = repo_config_values(repo);
 
 retry:
        ret = 0;
 
-       if (object_creation_mode == OBJECT_CREATION_USES_RENAMES)
+       if (cfg->object_creation_mode == OBJECT_CREATION_USES_RENAMES)
                goto try_rename;
        else if (link(tmpfile, filename))
                ret = errno;