environment: move object_creation_mode into repo_config_values
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>next
parent
1840ca005f
commit
b5efc34b10
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in New Issue