| 1 | #ifndef REPO_SETTINGS_H |
| 2 | #define REPO_SETTINGS_H |
| 3 | |
| 4 | struct fsmonitor_settings; |
| 5 | struct repository; |
| 6 | |
| 7 | enum untracked_cache_setting { |
| 8 | UNTRACKED_CACHE_KEEP, |
| 9 | UNTRACKED_CACHE_REMOVE, |
| 10 | UNTRACKED_CACHE_WRITE, |
| 11 | }; |
| 12 | |
| 13 | enum fetch_negotiation_setting { |
| 14 | FETCH_NEGOTIATION_CONSECUTIVE, |
| 15 | FETCH_NEGOTIATION_SKIPPING, |
| 16 | FETCH_NEGOTIATION_NOOP, |
| 17 | }; |
| 18 | |
| 19 | struct repo_settings { |
| 20 | int initialized; |
| 21 | |
| 22 | int core_commit_graph; |
| 23 | int commit_graph_generation_version; |
| 24 | int commit_graph_changed_paths_version; |
| 25 | int gc_write_commit_graph; |
| 26 | int fetch_write_commit_graph; |
| 27 | int command_requires_full_index; |
| 28 | int sparse_index; |
| 29 | int pack_read_reverse_index; |
| 30 | int pack_use_bitmap_boundary_traversal; |
| 31 | int pack_use_multi_pack_reuse; |
| 32 | |
| 33 | int shared_repository; |
| 34 | int shared_repository_initialized; |
| 35 | |
| 36 | /* |
| 37 | * Does this repository have core.useReplaceRefs=true (on by |
| 38 | * default)? This provides a repository-scoped version of this |
| 39 | * config, though it could be disabled process-wide via some Git |
| 40 | * builtins or the --no-replace-objects option. See |
| 41 | * replace_refs_enabled() for more details. |
| 42 | */ |
| 43 | int read_replace_refs; |
| 44 | |
| 45 | struct fsmonitor_settings *fsmonitor; /* lazily loaded */ |
| 46 | |
| 47 | int index_version; |
| 48 | int index_skip_hash; |
| 49 | enum untracked_cache_setting core_untracked_cache; |
| 50 | |
| 51 | int pack_use_sparse; |
| 52 | int pack_use_path_walk; |
| 53 | enum fetch_negotiation_setting fetch_negotiation_algorithm; |
| 54 | |
| 55 | int core_multi_pack_index; |
| 56 | int warn_ambiguous_refs; /* lazily loaded via accessor */ |
| 57 | |
| 58 | size_t delta_base_cache_limit; |
| 59 | size_t packed_git_window_size; |
| 60 | size_t packed_git_limit; |
| 61 | unsigned long big_file_threshold; |
| 62 | |
| 63 | int max_allowed_tree_depth; |
| 64 | |
| 65 | char *hooks_path; |
| 66 | }; |
| 67 | #define REPO_SETTINGS_INIT { \ |
| 68 | .shared_repository = -1, \ |
| 69 | .index_version = -1, \ |
| 70 | .core_untracked_cache = UNTRACKED_CACHE_KEEP, \ |
| 71 | .fetch_negotiation_algorithm = FETCH_NEGOTIATION_CONSECUTIVE, \ |
| 72 | .warn_ambiguous_refs = -1, \ |
| 73 | .delta_base_cache_limit = DEFAULT_DELTA_BASE_CACHE_LIMIT, \ |
| 74 | .packed_git_window_size = DEFAULT_PACKED_GIT_WINDOW_SIZE, \ |
| 75 | .packed_git_limit = DEFAULT_PACKED_GIT_LIMIT, \ |
| 76 | .max_allowed_tree_depth = DEFAULT_MAX_ALLOWED_TREE_DEPTH, \ |
| 77 | } |
| 78 | |
| 79 | void prepare_repo_settings(struct repository *r); |
| 80 | void repo_settings_clear(struct repository *r); |
| 81 | |
| 82 | /* Read the value for "core.warnAmbiguousRefs". */ |
| 83 | int repo_settings_get_warn_ambiguous_refs(struct repository *repo); |
| 84 | /* Read the value for "core.hooksPath". */ |
| 85 | const char *repo_settings_get_hooks_path(struct repository *repo); |
| 86 | |
| 87 | /* Read and set the value for "core.bigFileThreshold". */ |
| 88 | unsigned long repo_settings_get_big_file_threshold(struct repository *repo); |
| 89 | void repo_settings_set_big_file_threshold(struct repository *repo, unsigned long value); |
| 90 | |
| 91 | /* Read, set or reset the value for "core.sharedRepository". */ |
| 92 | int repo_settings_get_shared_repository(struct repository *repo); |
| 93 | void repo_settings_set_shared_repository(struct repository *repo, int value); |
| 94 | void repo_settings_reset_shared_repository(struct repository *repo); |
| 95 | |
| 96 | #endif /* REPO_SETTINGS_H */ |