git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
blob 2be242fde1d38fc19930313608d36b72a0d9a1ed 2875 bytes (raw)
name: repo-settings.c 	 # note: path name is non-authoritative(*)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
 
#include "cache.h"
#include "config.h"
#include "repository.h"
#include "midx.h"

static void repo_config_get_bool_or(struct repository *r, const char *key,
				    int *dest, int def)
{
	if (repo_config_get_bool(r, key, dest))
		*dest = def;
}

void prepare_repo_settings(struct repository *r)
{
	int experimental;
	int intval;
	char *strval;
	int manyfiles;

	if (r->settings.initialized)
		return;

	/* Defaults */
	r->settings.index_version = -1;
	r->settings.core_untracked_cache = UNTRACKED_CACHE_UNSET;
	r->settings.fetch_negotiation_algorithm = FETCH_NEGOTIATION_DEFAULT;

	/* Booleans config or default, cascades to other settings */
	repo_config_get_bool_or(r, "feature.manyfiles", &manyfiles, 0);
	repo_config_get_bool_or(r, "feature.experimental", &experimental, 0);

	/* Defaults modified by feature.* */
	if (experimental) {
		r->settings.fetch_negotiation_algorithm = FETCH_NEGOTIATION_SKIPPING;
	}
	if (manyfiles) {
		r->settings.index_version = 4;
		r->settings.core_untracked_cache = UNTRACKED_CACHE_WRITE;
	}

	/* Boolean config or default, does not cascade (simple)  */
	repo_config_get_bool_or(r, "core.commitgraph",
				&r->settings.core_commit_graph, 1);
	repo_config_get_bool_or(r, "commitgraph.readchangedpaths",
				&r->settings.commit_graph_read_changed_paths, 1);
	repo_config_get_bool_or(r, "gc.writecommitgraph",
				&r->settings.gc_write_commit_graph, 1);
	repo_config_get_bool_or(r, "fetch.writecommitgraph",
				&r->settings.fetch_write_commit_graph, 0);
	repo_config_get_bool_or(r, "pack.usesparse",
				&r->settings.pack_use_sparse, 1);
	repo_config_get_bool_or(r, "core.multipackindex",
				&r->settings.core_multi_pack_index, 1);

	/*
	 * The GIT_TEST_MULTI_PACK_INDEX variable is special in that
	 * either it *or* the config sets
	 * r->settings.core_multi_pack_index if true. We don't take
	 * the environment variable if it exists (even if false) over
	 * any config, as in other cases.
	 */
	if (git_env_bool(GIT_TEST_MULTI_PACK_INDEX, 0))
		r->settings.core_multi_pack_index = 1;

	/*
	 * Non-boolean config
	 */
	if (!repo_config_get_int(r, "index.version", &intval))
		r->settings.index_version = intval;

	if (!repo_config_get_string(r, "core.untrackedcache", &strval)) {
		int maybe_bool = git_parse_maybe_bool(strval);
		if (maybe_bool == -1) {
			/*
			 * Set to "keep", or some other non-boolean
			 * value. In either case we do nothing but
			 * keep UNTRACKED_CACHE_UNSET.
			 */
		} else {
			r->settings.core_untracked_cache = maybe_bool
				? UNTRACKED_CACHE_WRITE
				: UNTRACKED_CACHE_REMOVE;
		}
		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;
	}
}

debug log:

solving 2be242fde1d ...
found 2be242fde1d in https://public-inbox.org/git/patch-1.1-e1d8c842c70-20210428T161817Z-avarab@gmail.com/
found f7fff0f5ab8 in https://80x24.org/mirrors/git.git
preparing index
index prepared:
100644 f7fff0f5ab837e05cd369ed7630e8e2648e9aba8	repo-settings.c

applying [1/1] https://public-inbox.org/git/patch-1.1-e1d8c842c70-20210428T161817Z-avarab@gmail.com/
diff --git a/repo-settings.c b/repo-settings.c
index f7fff0f5ab8..2be242fde1d 100644

Checking patch repo-settings.c...
Applied patch repo-settings.c cleanly.

index at:
100644 2be242fde1d38fc19930313608d36b72a0d9a1ed	repo-settings.c

(*) Git path names are given by the tree(s) the blob belongs to.
    Blobs themselves have no identifier aside from the hash of its contents.^

Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).