mirror of
https://github.com/git-for-windows/git.git
synced 2025-12-11 11:16:01 -06:00
Users may want to enable the --path-walk option for 'git pack-objects' by default, especially underneath commands like 'git push' or 'git repack'. This should be limited to client repositories, since the --path-walk option disables bitmap walks, so would be bad to include in Git servers when serving fetches and clones. There is potential that it may be helpful to consider when repacking the repository, to take advantage of improved deltas across historical versions of the same files. Much like how "pack.useSparse" was introduced and included in "feature.experimental" before being enabled by default, use the repository settings infrastructure to make the new "pack.usePathWalk" config enabled by "feature.experimental" and "feature.manyFiles". Signed-off-by: Derrick Stolee <stolee@gmail.com>
84 lines
2.2 KiB
C
84 lines
2.2 KiB
C
#ifndef REPO_SETTINGS_H
|
|
#define REPO_SETTINGS_H
|
|
|
|
struct fsmonitor_settings;
|
|
struct repository;
|
|
|
|
enum untracked_cache_setting {
|
|
UNTRACKED_CACHE_KEEP,
|
|
UNTRACKED_CACHE_REMOVE,
|
|
UNTRACKED_CACHE_WRITE,
|
|
};
|
|
|
|
enum fetch_negotiation_setting {
|
|
FETCH_NEGOTIATION_CONSECUTIVE,
|
|
FETCH_NEGOTIATION_SKIPPING,
|
|
FETCH_NEGOTIATION_NOOP,
|
|
};
|
|
|
|
enum log_refs_config {
|
|
LOG_REFS_UNSET = -1,
|
|
LOG_REFS_NONE = 0,
|
|
LOG_REFS_NORMAL,
|
|
LOG_REFS_ALWAYS
|
|
};
|
|
|
|
struct repo_settings {
|
|
int initialized;
|
|
|
|
int core_commit_graph;
|
|
int commit_graph_generation_version;
|
|
int commit_graph_changed_paths_version;
|
|
int gc_write_commit_graph;
|
|
int fetch_write_commit_graph;
|
|
int command_requires_full_index;
|
|
int sparse_index;
|
|
int pack_read_reverse_index;
|
|
int pack_use_bitmap_boundary_traversal;
|
|
int pack_use_multi_pack_reuse;
|
|
|
|
/*
|
|
* Does this repository have core.useReplaceRefs=true (on by
|
|
* default)? This provides a repository-scoped version of this
|
|
* config, though it could be disabled process-wide via some Git
|
|
* builtins or the --no-replace-objects option. See
|
|
* replace_refs_enabled() for more details.
|
|
*/
|
|
int read_replace_refs;
|
|
|
|
struct fsmonitor_settings *fsmonitor; /* lazily loaded */
|
|
|
|
int index_version;
|
|
int index_skip_hash;
|
|
enum untracked_cache_setting core_untracked_cache;
|
|
|
|
int pack_use_sparse;
|
|
int pack_use_path_walk;
|
|
enum fetch_negotiation_setting fetch_negotiation_algorithm;
|
|
|
|
int core_multi_pack_index;
|
|
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, \
|
|
.core_untracked_cache = UNTRACKED_CACHE_KEEP, \
|
|
.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);
|
|
|
|
/* Read the value for "core.logAllRefUpdates". */
|
|
enum log_refs_config repo_settings_get_log_all_ref_updates(struct repository *repo);
|
|
/* Read the value for "core.warnAmbiguousRefs". */
|
|
int repo_settings_get_warn_ambiguous_refs(struct repository *repo);
|
|
|
|
#endif /* REPO_SETTINGS_H */
|