repo-settings.con commit general improvements (43abf13)
   1#include "cache.h"
   2#include "config.h"
   3#include "repository.h"
   4
   5#define UPDATE_DEFAULT_BOOL(s,v) do { if (s == -1) { s = v; } } while(0)
   6
   7void prepare_repo_settings(struct repository *r)
   8{
   9        int value;
  10        char *strval;
  11
  12        if (r->settings.initialized)
  13                return;
  14
  15        /* Defaults */
  16        memset(&r->settings, -1, sizeof(r->settings));
  17
  18        if (!repo_config_get_bool(r, "core.commitgraph", &value))
  19                r->settings.core_commit_graph = value;
  20        if (!repo_config_get_bool(r, "gc.writecommitgraph", &value))
  21                r->settings.gc_write_commit_graph = value;
  22        UPDATE_DEFAULT_BOOL(r->settings.core_commit_graph, 1);
  23        UPDATE_DEFAULT_BOOL(r->settings.gc_write_commit_graph, 1);
  24
  25        if (!repo_config_get_bool(r, "index.version", &value))
  26                r->settings.index_version = value;
  27        if (!repo_config_get_maybe_bool(r, "core.untrackedcache", &value)) {
  28                if (value == 0)
  29                        r->settings.core_untracked_cache = UNTRACKED_CACHE_REMOVE;
  30                else
  31                        r->settings.core_untracked_cache = UNTRACKED_CACHE_WRITE;
  32        } else if (!repo_config_get_string(r, "core.untrackedcache", &strval)) {
  33                if (!strcasecmp(strval, "keep"))
  34                        r->settings.core_untracked_cache = UNTRACKED_CACHE_KEEP;
  35
  36                free(strval);
  37        }
  38
  39        if (!repo_config_get_string(r, "fetch.negotiationalgorithm", &strval)) {
  40                if (!strcasecmp(strval, "skipping"))
  41                        r->settings.fetch_negotiation_algorithm = FETCH_NEGOTIATION_SKIPPING;
  42                else
  43                        r->settings.fetch_negotiation_algorithm = FETCH_NEGOTIATION_DEFAULT;
  44        }
  45
  46        if (!repo_config_get_bool(r, "pack.usesparse", &value))
  47                r->settings.pack_use_sparse = value;
  48        if (!repo_config_get_bool(r, "feature.manyfiles", &value) && value) {
  49                UPDATE_DEFAULT_BOOL(r->settings.index_version, 4);
  50                UPDATE_DEFAULT_BOOL(r->settings.core_untracked_cache, UNTRACKED_CACHE_WRITE);
  51        }
  52        if (!repo_config_get_bool(r, "fetch.writecommitgraph", &value))
  53                r->settings.fetch_write_commit_graph = value;
  54        if (!repo_config_get_bool(r, "feature.experimental", &value) && value) {
  55                UPDATE_DEFAULT_BOOL(r->settings.pack_use_sparse, 1);
  56                UPDATE_DEFAULT_BOOL(r->settings.fetch_negotiation_algorithm, FETCH_NEGOTIATION_SKIPPING);
  57                UPDATE_DEFAULT_BOOL(r->settings.fetch_write_commit_graph, 1);
  58        }
  59        UPDATE_DEFAULT_BOOL(r->settings.fetch_write_commit_graph, 0);
  60
  61        /* Hack for test programs like test-dump-untracked-cache */
  62        if (ignore_untracked_cache_config)
  63                r->settings.core_untracked_cache = UNTRACKED_CACHE_KEEP;
  64        else
  65                UPDATE_DEFAULT_BOOL(r->settings.core_untracked_cache, UNTRACKED_CACHE_KEEP);
  66
  67        UPDATE_DEFAULT_BOOL(r->settings.fetch_negotiation_algorithm, FETCH_NEGOTIATION_DEFAULT);
  68}