Line Flow Count Block(s) Source
1 - /*
2 - * Copyright (C) the libgit2 contributors. All rights reserved.
3 - *
4 - * This file is part of libgit2, distributed under the GNU GPL v2 with
5 - * a Linking Exception. For full terms see the included COPYING file.
6 - */
7 -
8 - #include "common.h"
9 -
10 - #include "futils.h"
11 - #include "repository.h"
12 - #include "config.h"
13 - #include "git2/config.h"
14 - #include "vector.h"
15 - #include "filter.h"
16 -
17 - struct map_data {
18 - const char *name;
19 - git_configmap *maps;
20 - size_t map_count;
21 - int default_value;
22 - };
23 -
24 - /*
25 - * core.eol
26 - * Sets the line ending type to use in the working directory for
27 - * files that have the text property set. Alternatives are lf, crlf
28 - * and native, which uses the platform's native line ending. The default
29 - * value is native. See gitattributes(5) for more information on
30 - * end-of-line conversion.
31 - */
32 - static git_configmap _configmap_eol[] = {
33 - {GIT_CONFIGMAP_FALSE, NULL, GIT_EOL_UNSET},
34 - {GIT_CONFIGMAP_STRING, "lf", GIT_EOL_LF},
35 - {GIT_CONFIGMAP_STRING, "crlf", GIT_EOL_CRLF},
36 - {GIT_CONFIGMAP_STRING, "native", GIT_EOL_NATIVE}
37 - };
38 -
39 - /*
40 - * core.autocrlf
41 - * Setting this variable to "true" is almost the same as setting
42 - * the text attribute to "auto" on all files except that text files are
43 - * not guaranteed to be normalized: files that contain CRLF in the
44 - * repository will not be touched. Use this setting if you want to have
45 - * CRLF line endings in your working directory even though the repository
46 - * does not have normalized line endings. This variable can be set to input,
47 - * in which case no output conversion is performed.
48 - */
49 - static git_configmap _configmap_autocrlf[] = {
50 - {GIT_CONFIGMAP_FALSE, NULL, GIT_AUTO_CRLF_FALSE},
51 - {GIT_CONFIGMAP_TRUE, NULL, GIT_AUTO_CRLF_TRUE},
52 - {GIT_CONFIGMAP_STRING, "input", GIT_AUTO_CRLF_INPUT}
53 - };
54 -
55 - static git_configmap _configmap_safecrlf[] = {
56 - {GIT_CONFIGMAP_FALSE, NULL, GIT_SAFE_CRLF_FALSE},
57 - {GIT_CONFIGMAP_TRUE, NULL, GIT_SAFE_CRLF_FAIL},
58 - {GIT_CONFIGMAP_STRING, "warn", GIT_SAFE_CRLF_WARN}
59 - };
60 -
61 - static git_configmap _configmap_logallrefupdates[] = {
62 - {GIT_CONFIGMAP_FALSE, NULL, GIT_LOGALLREFUPDATES_FALSE},
63 - {GIT_CONFIGMAP_TRUE, NULL, GIT_LOGALLREFUPDATES_TRUE},
64 - {GIT_CONFIGMAP_STRING, "always", GIT_LOGALLREFUPDATES_ALWAYS},
65 - };
66 -
67 - /*
68 - * Generic map for integer values
69 - */
70 - static git_configmap _configmap_int[] = {
71 - {GIT_CONFIGMAP_INT32, NULL, 0},
72 - };
73 -
74 - static struct map_data _configmaps[] = {
75 - {"core.autocrlf", _configmap_autocrlf, ARRAY_SIZE(_configmap_autocrlf), GIT_AUTO_CRLF_DEFAULT},
76 - {"core.eol", _configmap_eol, ARRAY_SIZE(_configmap_eol), GIT_EOL_DEFAULT},
77 - {"core.symlinks", NULL, 0, GIT_SYMLINKS_DEFAULT },
78 - {"core.ignorecase", NULL, 0, GIT_IGNORECASE_DEFAULT },
79 - {"core.filemode", NULL, 0, GIT_FILEMODE_DEFAULT },
80 - {"core.ignorestat", NULL, 0, GIT_IGNORESTAT_DEFAULT },
81 - {"core.trustctime", NULL, 0, GIT_TRUSTCTIME_DEFAULT },
82 - {"core.abbrev", _configmap_int, 1, GIT_ABBREV_DEFAULT },
83 - {"core.precomposeunicode", NULL, 0, GIT_PRECOMPOSE_DEFAULT },
84 - {"core.safecrlf", _configmap_safecrlf, ARRAY_SIZE(_configmap_safecrlf), GIT_SAFE_CRLF_DEFAULT},
85 - {"core.logallrefupdates", _configmap_logallrefupdates, ARRAY_SIZE(_configmap_logallrefupdates), GIT_LOGALLREFUPDATES_DEFAULT},
86 - {"core.protecthfs", NULL, 0, GIT_PROTECTHFS_DEFAULT },
87 - {"core.protectntfs", NULL, 0, GIT_PROTECTNTFS_DEFAULT },
88 - {"core.fsyncobjectfiles", NULL, 0, GIT_FSYNCOBJECTFILES_DEFAULT },
89 - };
90 -
91 50135 2 int git_config__configmap_lookup(int *out, git_config *config, git_configmap_item item)
92 - {
93 50135 2 int error = 0;
94 50135 2 struct map_data *data = &_configmaps[(int)item];
95 - git_config_entry *entry;
96 -
97 50141 2,3 if ((error = git_config__lookup_entry(&entry, config, data->name, false)) < 0)
98 ##### 4 return error;
99 -
100 50141 5 if (!entry)
101 38838 6 *out = data->default_value;
102 11303 7 else if (data->maps)
103 865 8,8 error = git_config_lookup_map_value(
104 865 8,8 out, data->maps, data->map_count, entry->value);
105 - else
106 10438 9 error = git_config_parse_bool(out, entry->value);
107 -
108 50141 10 git_config_entry_free(entry);
109 50131 11 return error;
110 - }
111 -
112 - 2 suppressed: function cannot be solved git_repository__configmap_lookup (automatic due to inconsistent arc counts in .gcda files)int git_repository__configmap_lookup(int *out, git_repository *repo, git_configmap_item item)
113 - {
114 - 2 suppressed: function cannot be solved git_repository__configmap_lookup (automatic due to inconsistent arc counts in .gcda files) *out = repo->configmap_cache[(int)item];
115 -
116 - 2 suppressed: function cannot be solved git_repository__configmap_lookup (automatic due to inconsistent arc counts in .gcda files) if (*out == GIT_CONFIGMAP_NOT_CACHED) {
117 - int error;
118 - git_config *config;
119 -
120 - 3-6 suppressed: function cannot be solved git_repository__configmap_lookup (automatic due to inconsistent arc counts in .gcda files) if ((error = git_repository_config__weakptr(&config, repo)) < 0 ||
121 - 5 suppressed: function cannot be solved git_repository__configmap_lookup (automatic due to inconsistent arc counts in .gcda files) (error = git_config__configmap_lookup(out, config, item)) < 0)
122 - 7 suppressed: function cannot be solved git_repository__configmap_lookup (automatic due to inconsistent arc counts in .gcda files) return error;
123 -
124 - 8 suppressed: function cannot be solved git_repository__configmap_lookup (automatic due to inconsistent arc counts in .gcda files) repo->configmap_cache[(int)item] = *out;
125 - }
126 -
127 - 9 suppressed: function cannot be solved git_repository__configmap_lookup (automatic due to inconsistent arc counts in .gcda files) return 0;
128 - }
129 -
130 11574 2 void git_repository__configmap_lookup_cache_clear(git_repository *repo)
131 - {
132 - int i;
133 -
134 173610 2-4 for (i = 0; i < GIT_CONFIGMAP_CACHE_MAX; ++i)
135 162036 3 repo->configmap_cache[i] = GIT_CONFIGMAP_NOT_CACHED;
136 11574 5 }
137 -