mirror of
https://github.com/git/git.git
synced 2024-05-06 15:46:41 +02:00
c6b4888b3f
Instead of the global ignore_untracked_cache_config variable added indae6c322fa
(test-dump-untracked-cache: don't modify the untracked cache, 2016-01-27) we can make use of the new facility to set config via environment variables added ind8d77153ea
(config: allow specifying config entries via envvar pairs, 2021-01-12). It's arguably a bit hacky to use setenv() and getenv() to pass messages between the same program, but since the test helpers are not the main intended audience of repo-settings.c I think it's better than hardcoding the test-only special-case in prepare_repo_settings(). This uses the xsetenv() wrapper added in the preceding commit, if we don't set these in the environment we'll fail in t7063-status-untracked-cache.sh, but let's fail earlier anyway if that were to happen. This breaks any parent process that's potentially using the GIT_CONFIG_* and GIT_CONFIG_PARAMETERS mechanism to pass one-shot config setting down to a git subprocess, but in this case we don't care about the general case of such potential parents. This process neither spawns other "git" processes, nor is it interested in other configuration. We might want to pick up other test modes here, but those will be passed via GIT_TEST_* environment variables. Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
91 lines
3.2 KiB
C
91 lines
3.2 KiB
C
#include "cache.h"
|
|
#include "config.h"
|
|
#include "repository.h"
|
|
#include "midx.h"
|
|
|
|
#define UPDATE_DEFAULT_BOOL(s,v) do { if (s == -1) { s = v; } } while(0)
|
|
|
|
void prepare_repo_settings(struct repository *r)
|
|
{
|
|
int value;
|
|
char *strval;
|
|
|
|
if (r->settings.initialized)
|
|
return;
|
|
|
|
/* Defaults */
|
|
memset(&r->settings, -1, sizeof(r->settings));
|
|
|
|
if (!repo_config_get_bool(r, "core.commitgraph", &value))
|
|
r->settings.core_commit_graph = value;
|
|
if (!repo_config_get_bool(r, "commitgraph.readchangedpaths", &value))
|
|
r->settings.commit_graph_read_changed_paths = value;
|
|
if (!repo_config_get_bool(r, "gc.writecommitgraph", &value))
|
|
r->settings.gc_write_commit_graph = value;
|
|
UPDATE_DEFAULT_BOOL(r->settings.core_commit_graph, 1);
|
|
UPDATE_DEFAULT_BOOL(r->settings.commit_graph_read_changed_paths, 1);
|
|
UPDATE_DEFAULT_BOOL(r->settings.gc_write_commit_graph, 1);
|
|
|
|
if (!repo_config_get_int(r, "index.version", &value))
|
|
r->settings.index_version = value;
|
|
if (!repo_config_get_maybe_bool(r, "core.untrackedcache", &value)) {
|
|
if (value == 0)
|
|
r->settings.core_untracked_cache = UNTRACKED_CACHE_REMOVE;
|
|
else
|
|
r->settings.core_untracked_cache = UNTRACKED_CACHE_WRITE;
|
|
} else if (!repo_config_get_string(r, "core.untrackedcache", &strval)) {
|
|
if (!strcasecmp(strval, "keep"))
|
|
r->settings.core_untracked_cache = UNTRACKED_CACHE_KEEP;
|
|
|
|
free(strval);
|
|
}
|
|
|
|
if (!repo_config_get_string(r, "fetch.negotiationalgorithm", &strval)) {
|
|
if (!strcasecmp(strval, "skipping"))
|
|
r->settings.fetch_negotiation_algorithm = FETCH_NEGOTIATION_SKIPPING;
|
|
else if (!strcasecmp(strval, "noop"))
|
|
r->settings.fetch_negotiation_algorithm = FETCH_NEGOTIATION_NOOP;
|
|
else
|
|
r->settings.fetch_negotiation_algorithm = FETCH_NEGOTIATION_DEFAULT;
|
|
}
|
|
|
|
if (!repo_config_get_bool(r, "pack.usesparse", &value))
|
|
r->settings.pack_use_sparse = value;
|
|
UPDATE_DEFAULT_BOOL(r->settings.pack_use_sparse, 1);
|
|
|
|
value = git_env_bool(GIT_TEST_MULTI_PACK_INDEX, 0);
|
|
if (value || !repo_config_get_bool(r, "core.multipackindex", &value))
|
|
r->settings.core_multi_pack_index = value;
|
|
UPDATE_DEFAULT_BOOL(r->settings.core_multi_pack_index, 1);
|
|
|
|
if (!repo_config_get_bool(r, "feature.manyfiles", &value) && value) {
|
|
UPDATE_DEFAULT_BOOL(r->settings.index_version, 4);
|
|
UPDATE_DEFAULT_BOOL(r->settings.core_untracked_cache, UNTRACKED_CACHE_WRITE);
|
|
}
|
|
|
|
if (!repo_config_get_bool(r, "fetch.writecommitgraph", &value))
|
|
r->settings.fetch_write_commit_graph = value;
|
|
UPDATE_DEFAULT_BOOL(r->settings.fetch_write_commit_graph, 0);
|
|
|
|
if (!repo_config_get_bool(r, "feature.experimental", &value) && value)
|
|
UPDATE_DEFAULT_BOOL(r->settings.fetch_negotiation_algorithm, FETCH_NEGOTIATION_SKIPPING);
|
|
|
|
UPDATE_DEFAULT_BOOL(r->settings.core_untracked_cache, UNTRACKED_CACHE_KEEP);
|
|
UPDATE_DEFAULT_BOOL(r->settings.fetch_negotiation_algorithm, FETCH_NEGOTIATION_DEFAULT);
|
|
|
|
/*
|
|
* This setting guards all index reads to require a full index
|
|
* over a sparse index. After suitable guards are placed in the
|
|
* codebase around uses of the index, this setting will be
|
|
* removed.
|
|
*/
|
|
r->settings.command_requires_full_index = 1;
|
|
|
|
/*
|
|
* Initialize this as off.
|
|
*/
|
|
r->settings.sparse_index = 0;
|
|
if (!repo_config_get_bool(r, "index.sparse", &value) && value)
|
|
r->settings.sparse_index = 1;
|
|
}
|