mirror of
https://github.com/git/git.git
synced 2026-06-24 08:48:31 +00:00
environment: move "pack_compression_level" into struct repo_config_values
The `pack_compression_level` configuration is currently stored in the global variable `pack_compression_level`, which makes it shared across repository instances within a single process. Store it instead in `repo_config_values`, where eagerly‑parsed repository configuration lives. `pack_compression_level` is parsed eagerly because it influences packfile compression, a core operation where a lazy parse could cause inconsistent behavior and hamper libification. This preserves the existing eager‑parsing behavior while tying the value to the repository from which it was read, avoiding cross‑repository state leakage and continuing the effort to reduce reliance on global configuration state. Update all references to use `repo_config_values()`. Mentored-by: Christian Couder <christian.couder@gmail.com> Mentored-by: Usman Akinyemi <usmanakinyemi202@gmail.com> Signed-off-by: Olamide Caleb Bello <belkid98@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
e0f86540ab
commit
8cd7402acc
@@ -965,6 +965,7 @@ static int store_object(
|
||||
unsigned long hdrlen, deltalen;
|
||||
struct git_hash_ctx c;
|
||||
git_zstream s;
|
||||
struct repo_config_values *cfg = repo_config_values(the_repository);
|
||||
|
||||
hdrlen = format_object_header((char *)hdr, sizeof(hdr), type,
|
||||
dat->len);
|
||||
@@ -1005,7 +1006,7 @@ static int store_object(
|
||||
} else
|
||||
delta = NULL;
|
||||
|
||||
git_deflate_init(&s, pack_compression_level);
|
||||
git_deflate_init(&s, cfg->pack_compression_level);
|
||||
if (delta) {
|
||||
s.next_in = delta;
|
||||
s.avail_in = deltalen;
|
||||
@@ -1032,7 +1033,7 @@ static int store_object(
|
||||
if (delta) {
|
||||
FREE_AND_NULL(delta);
|
||||
|
||||
git_deflate_init(&s, pack_compression_level);
|
||||
git_deflate_init(&s, cfg->pack_compression_level);
|
||||
s.next_in = (void *)dat->buf;
|
||||
s.avail_in = dat->len;
|
||||
s.avail_out = git_deflate_bound(&s, s.avail_in);
|
||||
@@ -1115,6 +1116,7 @@ static void stream_blob(uintmax_t len, struct object_id *oidout, uintmax_t mark)
|
||||
struct git_hash_ctx c;
|
||||
git_zstream s;
|
||||
struct hashfile_checkpoint checkpoint;
|
||||
struct repo_config_values *cfg = repo_config_values(the_repository);
|
||||
int status = Z_OK;
|
||||
|
||||
/* Determine if we should auto-checkpoint. */
|
||||
@@ -1134,7 +1136,7 @@ static void stream_blob(uintmax_t len, struct object_id *oidout, uintmax_t mark)
|
||||
|
||||
crc32_begin(pack_file);
|
||||
|
||||
git_deflate_init(&s, pack_compression_level);
|
||||
git_deflate_init(&s, cfg->pack_compression_level);
|
||||
|
||||
hdrlen = encode_in_pack_object_header(out_buf, out_sz, OBJ_BLOB, len);
|
||||
|
||||
|
||||
@@ -386,8 +386,9 @@ static unsigned long do_compress(void **pptr, unsigned long size)
|
||||
git_zstream stream;
|
||||
void *in, *out;
|
||||
unsigned long maxsize;
|
||||
struct repo_config_values *cfg = repo_config_values(the_repository);
|
||||
|
||||
git_deflate_init(&stream, pack_compression_level);
|
||||
git_deflate_init(&stream, cfg->pack_compression_level);
|
||||
maxsize = git_deflate_bound(&stream, size);
|
||||
|
||||
in = *pptr;
|
||||
@@ -413,8 +414,9 @@ static unsigned long write_large_blob_data(struct odb_read_stream *st, struct ha
|
||||
unsigned char ibuf[1024 * 16];
|
||||
unsigned char obuf[1024 * 16];
|
||||
unsigned long olen = 0;
|
||||
struct repo_config_values *cfg = repo_config_values(the_repository);
|
||||
|
||||
git_deflate_init(&stream, pack_compression_level);
|
||||
git_deflate_init(&stream, cfg->pack_compression_level);
|
||||
|
||||
for (;;) {
|
||||
ssize_t readlen;
|
||||
@@ -5003,6 +5005,7 @@ int cmd_pack_objects(int argc,
|
||||
struct string_list keep_pack_list = STRING_LIST_INIT_NODUP;
|
||||
struct list_objects_filter_options filter_options =
|
||||
LIST_OBJECTS_FILTER_INIT;
|
||||
struct repo_config_values *cfg = repo_config_values(the_repository);
|
||||
|
||||
struct option pack_objects_options[] = {
|
||||
OPT_CALLBACK_F('q', "quiet", &progress, NULL,
|
||||
@@ -5084,7 +5087,7 @@ int cmd_pack_objects(int argc,
|
||||
N_("ignore packs that have companion .keep file")),
|
||||
OPT_STRING_LIST(0, "keep-pack", &keep_pack_list, N_("name"),
|
||||
N_("ignore this pack")),
|
||||
OPT_INTEGER(0, "compression", &pack_compression_level,
|
||||
OPT_INTEGER(0, "compression", &cfg->pack_compression_level,
|
||||
N_("pack compression level")),
|
||||
OPT_BOOL(0, "keep-true-parents", &grafts_keep_true_parents,
|
||||
N_("do not hide commits by grafts")),
|
||||
@@ -5243,10 +5246,10 @@ int cmd_pack_objects(int argc,
|
||||
|
||||
if (!reuse_object)
|
||||
reuse_delta = 0;
|
||||
if (pack_compression_level == -1)
|
||||
pack_compression_level = Z_DEFAULT_COMPRESSION;
|
||||
else if (pack_compression_level < 0 || pack_compression_level > Z_BEST_COMPRESSION)
|
||||
die(_("bad pack compression level %d"), pack_compression_level);
|
||||
if (cfg->pack_compression_level == -1)
|
||||
cfg->pack_compression_level = Z_DEFAULT_COMPRESSION;
|
||||
else if (cfg->pack_compression_level < 0 || cfg->pack_compression_level > Z_BEST_COMPRESSION)
|
||||
die(_("bad pack compression level %d"), cfg->pack_compression_level);
|
||||
|
||||
if (!delta_search_threads) /* --threads=0 means autodetect */
|
||||
delta_search_threads = online_cpus();
|
||||
|
||||
@@ -52,7 +52,6 @@ char *git_commit_encoding;
|
||||
char *git_log_output_encoding;
|
||||
char *apply_default_whitespace;
|
||||
char *apply_default_ignorewhitespace;
|
||||
int pack_compression_level = Z_DEFAULT_COMPRESSION;
|
||||
int fsync_object_files = -1;
|
||||
int use_fsync = -1;
|
||||
enum fsync_method fsync_method = FSYNC_METHOD_DEFAULT;
|
||||
@@ -390,7 +389,7 @@ int git_default_core_config(const char *var, const char *value,
|
||||
if (!zlib_compression_seen)
|
||||
cfg->zlib_compression_level = level;
|
||||
if (!pack_compression_seen)
|
||||
pack_compression_level = level;
|
||||
cfg->pack_compression_level = level;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -662,6 +661,8 @@ static int git_default_attr_config(const char *var, const char *value)
|
||||
int git_default_config(const char *var, const char *value,
|
||||
const struct config_context *ctx, void *cb)
|
||||
{
|
||||
struct repo_config_values *cfg = repo_config_values(the_repository);
|
||||
|
||||
if (starts_with(var, "core."))
|
||||
return git_default_core_config(var, value, ctx, cb);
|
||||
|
||||
@@ -701,7 +702,7 @@ int git_default_config(const char *var, const char *value,
|
||||
level = Z_DEFAULT_COMPRESSION;
|
||||
else if (level < 0 || level > Z_BEST_COMPRESSION)
|
||||
die(_("bad pack compression level %d"), level);
|
||||
pack_compression_level = level;
|
||||
cfg->pack_compression_level = level;
|
||||
pack_compression_seen = 1;
|
||||
return 0;
|
||||
}
|
||||
@@ -721,4 +722,5 @@ void repo_config_values_init(struct repo_config_values *cfg)
|
||||
cfg->trust_ctime = 1;
|
||||
cfg->check_stat = 1;
|
||||
cfg->zlib_compression_level = Z_BEST_SPEED;
|
||||
cfg->pack_compression_level = Z_DEFAULT_COMPRESSION;
|
||||
}
|
||||
|
||||
@@ -94,6 +94,7 @@ struct repo_config_values {
|
||||
int trust_ctime;
|
||||
int check_stat;
|
||||
int zlib_compression_level;
|
||||
int pack_compression_level;
|
||||
|
||||
/* section "branch" config values */
|
||||
enum branch_track branch_track;
|
||||
@@ -171,7 +172,6 @@ extern int assume_unchanged;
|
||||
extern int warn_on_object_refname_ambiguity;
|
||||
extern char *apply_default_whitespace;
|
||||
extern char *apply_default_ignorewhitespace;
|
||||
extern int pack_compression_level;
|
||||
extern unsigned long pack_size_limit_cfg;
|
||||
|
||||
extern int precomposed_unicode;
|
||||
|
||||
@@ -1437,8 +1437,9 @@ static int stream_blob_to_pack(struct transaction_packfile *state,
|
||||
int status = Z_OK;
|
||||
int write_object = (flags & INDEX_WRITE_OBJECT);
|
||||
off_t offset = 0;
|
||||
struct repo_config_values *cfg = repo_config_values(the_repository);
|
||||
|
||||
git_deflate_init(&s, pack_compression_level);
|
||||
git_deflate_init(&s, cfg->pack_compression_level);
|
||||
|
||||
hdrlen = encode_in_pack_object_header(obuf, sizeof(obuf), OBJ_BLOB, size);
|
||||
s.next_out = obuf + hdrlen;
|
||||
|
||||
Reference in New Issue
Block a user