mirror of
https://github.com/git/git.git
synced 2025-02-06 10:03:06 +00:00
config: make packed_git_(limit|window_size)
non-global variables
The variables `packed_git_window_size` and `packed_git_limit` are global config variables used in the `packfile.c` file. Since it is only used in this file, let's change it from being a global config variable to a local variable for the subsystem. With this, we rid `packfile.c` from all global variable usage and this means we can also remove the `USE_THE_REPOSITORY_VARIABLE` guard from the file. Helped-by: Taylor Blau <me@ttaylorr.com> Signed-off-by: Karthik Nayak <karthik.188@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
d6b2d21fbf
commit
d284713bae
@ -3539,7 +3539,7 @@ static void parse_argv(void)
|
||||
int cmd_fast_import(int argc,
|
||||
const char **argv,
|
||||
const char *prefix,
|
||||
struct repository *repo UNUSED)
|
||||
struct repository *repo)
|
||||
{
|
||||
unsigned int i;
|
||||
|
||||
@ -3660,7 +3660,7 @@ int cmd_fast_import(int argc,
|
||||
fprintf(stderr, " pools: %10lu KiB\n", (unsigned long)((tree_entry_allocd + fi_mem_pool.pool_alloc) /1024));
|
||||
fprintf(stderr, " objects: %10" PRIuMAX " KiB\n", (alloc_count*sizeof(struct object_entry))/1024);
|
||||
fprintf(stderr, "---------------------------------------------------------------------\n");
|
||||
pack_report();
|
||||
pack_report(repo);
|
||||
fprintf(stderr, "---------------------------------------------------------------------\n");
|
||||
fprintf(stderr, "\n");
|
||||
}
|
||||
|
17
config.c
17
config.c
@ -1493,28 +1493,11 @@ static int git_default_core_config(const char *var, const char *value,
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!strcmp(var, "core.packedgitwindowsize")) {
|
||||
int pgsz_x2 = getpagesize() * 2;
|
||||
packed_git_window_size = git_config_ulong(var, value, ctx->kvi);
|
||||
|
||||
/* This value must be multiple of (pagesize * 2) */
|
||||
packed_git_window_size /= pgsz_x2;
|
||||
if (packed_git_window_size < 1)
|
||||
packed_git_window_size = 1;
|
||||
packed_git_window_size *= pgsz_x2;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!strcmp(var, "core.bigfilethreshold")) {
|
||||
big_file_threshold = git_config_ulong(var, value, ctx->kvi);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!strcmp(var, "core.packedgitlimit")) {
|
||||
packed_git_limit = git_config_ulong(var, value, ctx->kvi);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!strcmp(var, "core.autocrlf")) {
|
||||
if (value && !strcasecmp(value, "input")) {
|
||||
auto_crlf = AUTO_CRLF_INPUT;
|
||||
|
@ -49,8 +49,6 @@ int fsync_object_files = -1;
|
||||
int use_fsync = -1;
|
||||
enum fsync_method fsync_method = FSYNC_METHOD_DEFAULT;
|
||||
enum fsync_component fsync_components = FSYNC_COMPONENTS_DEFAULT;
|
||||
size_t packed_git_window_size = DEFAULT_PACKED_GIT_WINDOW_SIZE;
|
||||
size_t packed_git_limit = DEFAULT_PACKED_GIT_LIMIT;
|
||||
unsigned long big_file_threshold = 512 * 1024 * 1024;
|
||||
char *editor_program;
|
||||
char *askpass_program;
|
||||
|
23
packfile.c
23
packfile.c
@ -1,4 +1,3 @@
|
||||
#define USE_THE_REPOSITORY_VARIABLE
|
||||
|
||||
#include "git-compat-util.h"
|
||||
#include "environment.h"
|
||||
@ -46,15 +45,15 @@ static size_t pack_mapped;
|
||||
#define SZ_FMT PRIuMAX
|
||||
static inline uintmax_t sz_fmt(size_t s) { return s; }
|
||||
|
||||
void pack_report(void)
|
||||
void pack_report(struct repository *repo)
|
||||
{
|
||||
fprintf(stderr,
|
||||
"pack_report: getpagesize() = %10" SZ_FMT "\n"
|
||||
"pack_report: core.packedGitWindowSize = %10" SZ_FMT "\n"
|
||||
"pack_report: core.packedGitLimit = %10" SZ_FMT "\n",
|
||||
sz_fmt(getpagesize()),
|
||||
sz_fmt(packed_git_window_size),
|
||||
sz_fmt(packed_git_limit));
|
||||
sz_fmt(repo->settings.packed_git_window_size),
|
||||
sz_fmt(repo->settings.packed_git_limit));
|
||||
fprintf(stderr,
|
||||
"pack_report: pack_used_ctr = %10u\n"
|
||||
"pack_report: pack_mmap_calls = %10u\n"
|
||||
@ -650,8 +649,15 @@ unsigned char *use_pack(struct packed_git *p,
|
||||
break;
|
||||
}
|
||||
if (!win) {
|
||||
size_t window_align = packed_git_window_size / 2;
|
||||
size_t window_align;
|
||||
off_t len;
|
||||
struct repo_settings *settings;
|
||||
|
||||
/* lazy load the settings in case it hasn't been setup */
|
||||
prepare_repo_settings(p->repo);
|
||||
settings = &p->repo->settings;
|
||||
|
||||
window_align = settings->packed_git_window_size / 2;
|
||||
|
||||
if (p->pack_fd == -1 && open_packed_git(p))
|
||||
die("packfile %s cannot be accessed", p->pack_name);
|
||||
@ -659,11 +665,12 @@ unsigned char *use_pack(struct packed_git *p,
|
||||
CALLOC_ARRAY(win, 1);
|
||||
win->offset = (offset / window_align) * window_align;
|
||||
len = p->pack_size - win->offset;
|
||||
if (len > packed_git_window_size)
|
||||
len = packed_git_window_size;
|
||||
if (len > settings->packed_git_window_size)
|
||||
len = settings->packed_git_window_size;
|
||||
win->len = (size_t)len;
|
||||
pack_mapped += win->len;
|
||||
while (packed_git_limit < pack_mapped
|
||||
|
||||
while (settings->packed_git_limit < pack_mapped
|
||||
&& unuse_one_window(p))
|
||||
; /* nothing */
|
||||
win->base = xmmap_gently(NULL, win->len,
|
||||
|
@ -89,7 +89,7 @@ unsigned long repo_approximate_object_count(struct repository *r);
|
||||
struct packed_git *find_oid_pack(const struct object_id *oid,
|
||||
struct packed_git *packs);
|
||||
|
||||
void pack_report(void);
|
||||
void pack_report(struct repository *repo);
|
||||
|
||||
/*
|
||||
* mmap the index file for the specified packfile (if it is not
|
||||
|
@ -128,6 +128,19 @@ void prepare_repo_settings(struct repository *r)
|
||||
|
||||
if (!repo_config_get_ulong(r, "core.deltabasecachelimit", &ulongval))
|
||||
r->settings.delta_base_cache_limit = ulongval;
|
||||
|
||||
if (!repo_config_get_ulong(r, "core.packedgitwindowsize", &ulongval)) {
|
||||
int pgsz_x2 = getpagesize() * 2;
|
||||
|
||||
/* This value must be multiple of (pagesize * 2) */
|
||||
ulongval /= pgsz_x2;
|
||||
if (ulongval < 1)
|
||||
ulongval = 1;
|
||||
r->settings.packed_git_window_size = ulongval * pgsz_x2;
|
||||
}
|
||||
|
||||
if (!repo_config_get_ulong(r, "core.packedgitlimit", &ulongval))
|
||||
r->settings.packed_git_limit = ulongval;
|
||||
}
|
||||
|
||||
enum log_refs_config repo_settings_get_log_all_ref_updates(struct repository *repo)
|
||||
|
@ -59,6 +59,8 @@ struct repo_settings {
|
||||
int warn_ambiguous_refs; /* lazily loaded via accessor */
|
||||
|
||||
size_t delta_base_cache_limit;
|
||||
size_t packed_git_window_size;
|
||||
size_t packed_git_limit;
|
||||
};
|
||||
#define REPO_SETTINGS_INIT { \
|
||||
.index_version = -1, \
|
||||
@ -66,6 +68,8 @@ struct repo_settings {
|
||||
.fetch_negotiation_algorithm = FETCH_NEGOTIATION_CONSECUTIVE, \
|
||||
.warn_ambiguous_refs = -1, \
|
||||
.delta_base_cache_limit = DEFAULT_DELTA_BASE_CACHE_LIMIT, \
|
||||
.packed_git_window_size = DEFAULT_PACKED_GIT_WINDOW_SIZE, \
|
||||
.packed_git_limit = DEFAULT_PACKED_GIT_LIMIT, \
|
||||
}
|
||||
|
||||
void prepare_repo_settings(struct repository *r);
|
||||
|
Loading…
x
Reference in New Issue
Block a user