summaryrefslogtreecommitdiffabout
authorLars Hjemli <hjemli@gmail.com>2009-08-24 06:53:21 (UTC)
committer Lars Hjemli <hjemli@gmail.com>2009-08-24 08:22:59 (UTC)
commit2273c2c821bfc77d492d7e97ae38f162d7fc91aa (patch) (unidiff)
tree688acf38d828122c86af88585cd89dbf23efc239
parent007df98d2114fac4e9134cd7bc7e2960d0d730b4 (diff)
downloadcgit-2273c2c821bfc77d492d7e97ae38f162d7fc91aa.zip
cgit-2273c2c821bfc77d492d7e97ae38f162d7fc91aa.tar.gz
cgit-2273c2c821bfc77d492d7e97ae38f162d7fc91aa.tar.bz2
Add config option 'enable-filter-overrides'
This option must be enabled if repo-specific cgitrc files should be allowed to override any of the 'filter' options. Signed-off-by: Lars Hjemli <hjemli@gmail.com>
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--cgit.c15
-rw-r--r--cgit.h1
-rw-r--r--cgitrc.5.txt21
3 files changed, 26 insertions, 11 deletions
diff --git a/cgit.c b/cgit.c
index 167b5dd..f1ea03c 100644
--- a/cgit.c
+++ b/cgit.c
@@ -53,43 +53,44 @@ void repo_config(struct cgit_repo *repo, const char *name, const char *value)
53 else if (!strcmp(name, "owner")) 53 else if (!strcmp(name, "owner"))
54 repo->owner = xstrdup(value); 54 repo->owner = xstrdup(value);
55 else if (!strcmp(name, "defbranch")) 55 else if (!strcmp(name, "defbranch"))
56 repo->defbranch = xstrdup(value); 56 repo->defbranch = xstrdup(value);
57 else if (!strcmp(name, "snapshots")) 57 else if (!strcmp(name, "snapshots"))
58 repo->snapshots = ctx.cfg.snapshots & cgit_parse_snapshots_mask(value); 58 repo->snapshots = ctx.cfg.snapshots & cgit_parse_snapshots_mask(value);
59 else if (!strcmp(name, "enable-log-filecount")) 59 else if (!strcmp(name, "enable-log-filecount"))
60 repo->enable_log_filecount = ctx.cfg.enable_log_filecount * atoi(value); 60 repo->enable_log_filecount = ctx.cfg.enable_log_filecount * atoi(value);
61 else if (!strcmp(name, "enable-log-linecount")) 61 else if (!strcmp(name, "enable-log-linecount"))
62 repo->enable_log_linecount = ctx.cfg.enable_log_linecount * atoi(value); 62 repo->enable_log_linecount = ctx.cfg.enable_log_linecount * atoi(value);
63 else if (!strcmp(name, "max-stats")) 63 else if (!strcmp(name, "max-stats"))
64 repo->max_stats = cgit_find_stats_period(value, NULL); 64 repo->max_stats = cgit_find_stats_period(value, NULL);
65 else if (!strcmp(name, "module-link")) 65 else if (!strcmp(name, "module-link"))
66 repo->module_link= xstrdup(value); 66 repo->module_link= xstrdup(value);
67 else if (!strcmp(name, "section")) 67 else if (!strcmp(name, "section"))
68 repo->section = xstrdup(value); 68 repo->section = xstrdup(value);
69 else if (!strcmp(name, "about-filter"))
70 repo->about_filter = new_filter(value, 0);
71 else if (!strcmp(name, "commit-filter"))
72 repo->commit_filter = new_filter(value, 0);
73 else if (!strcmp(name, "source-filter"))
74 repo->source_filter = new_filter(value, 1);
75 else if (!strcmp(name, "readme") && value != NULL) { 69 else if (!strcmp(name, "readme") && value != NULL) {
76 if (*value == '/') 70 if (*value == '/')
77 ctx.repo->readme = xstrdup(value); 71 ctx.repo->readme = xstrdup(value);
78 else 72 else
79 ctx.repo->readme = xstrdup(fmt("%s/%s", ctx.repo->path, value)); 73 ctx.repo->readme = xstrdup(fmt("%s/%s", ctx.repo->path, value));
74 } else if (ctx.cfg.enable_filter_overrides) {
75 if (!strcmp(name, "about-filter"))
76 repo->about_filter = new_filter(value, 0);
77 else if (!strcmp(name, "commit-filter"))
78 repo->commit_filter = new_filter(value, 0);
79 else if (!strcmp(name, "source-filter"))
80 repo->source_filter = new_filter(value, 1);
80 } 81 }
81} 82}
82 83
83void config_cb(const char *name, const char *value) 84void config_cb(const char *name, const char *value)
84{ 85{
85 if (!strcmp(name, "section") || !strcmp(name, "repo.group")) 86 if (!strcmp(name, "section") || !strcmp(name, "repo.group"))
86 ctx.cfg.section = xstrdup(value); 87 ctx.cfg.section = xstrdup(value);
87 else if (!strcmp(name, "repo.url")) 88 else if (!strcmp(name, "repo.url"))
88 ctx.repo = cgit_add_repo(value); 89 ctx.repo = cgit_add_repo(value);
89 else if (ctx.repo && !strcmp(name, "repo.path")) 90 else if (ctx.repo && !strcmp(name, "repo.path"))
90 ctx.repo->path = trim_end(value, '/'); 91 ctx.repo->path = trim_end(value, '/');
91 else if (ctx.repo && !prefixcmp(name, "repo.")) 92 else if (ctx.repo && !prefixcmp(name, "repo."))
92 repo_config(ctx.repo, name + 5, value); 93 repo_config(ctx.repo, name + 5, value);
93 else if (!strcmp(name, "root-title")) 94 else if (!strcmp(name, "root-title"))
94 ctx.cfg.root_title = xstrdup(value); 95 ctx.cfg.root_title = xstrdup(value);
95 else if (!strcmp(name, "root-desc")) 96 else if (!strcmp(name, "root-desc"))
@@ -115,32 +116,34 @@ void config_cb(const char *name, const char *value)
115 else if (!strcmp(name, "logo-link")) 116 else if (!strcmp(name, "logo-link"))
116 ctx.cfg.logo_link = xstrdup(value); 117 ctx.cfg.logo_link = xstrdup(value);
117 else if (!strcmp(name, "module-link")) 118 else if (!strcmp(name, "module-link"))
118 ctx.cfg.module_link = xstrdup(value); 119 ctx.cfg.module_link = xstrdup(value);
119 else if (!strcmp(name, "virtual-root")) { 120 else if (!strcmp(name, "virtual-root")) {
120 ctx.cfg.virtual_root = trim_end(value, '/'); 121 ctx.cfg.virtual_root = trim_end(value, '/');
121 if (!ctx.cfg.virtual_root && (!strcmp(value, "/"))) 122 if (!ctx.cfg.virtual_root && (!strcmp(value, "/")))
122 ctx.cfg.virtual_root = ""; 123 ctx.cfg.virtual_root = "";
123 } else if (!strcmp(name, "nocache")) 124 } else if (!strcmp(name, "nocache"))
124 ctx.cfg.nocache = atoi(value); 125 ctx.cfg.nocache = atoi(value);
125 else if (!strcmp(name, "noplainemail")) 126 else if (!strcmp(name, "noplainemail"))
126 ctx.cfg.noplainemail = atoi(value); 127 ctx.cfg.noplainemail = atoi(value);
127 else if (!strcmp(name, "noheader")) 128 else if (!strcmp(name, "noheader"))
128 ctx.cfg.noheader = atoi(value); 129 ctx.cfg.noheader = atoi(value);
129 else if (!strcmp(name, "snapshots")) 130 else if (!strcmp(name, "snapshots"))
130 ctx.cfg.snapshots = cgit_parse_snapshots_mask(value); 131 ctx.cfg.snapshots = cgit_parse_snapshots_mask(value);
132 else if (!strcmp(name, "enable-filter-overrides"))
133 ctx.cfg.enable_filter_overrides = atoi(value);
131 else if (!strcmp(name, "enable-index-links")) 134 else if (!strcmp(name, "enable-index-links"))
132 ctx.cfg.enable_index_links = atoi(value); 135 ctx.cfg.enable_index_links = atoi(value);
133 else if (!strcmp(name, "enable-log-filecount")) 136 else if (!strcmp(name, "enable-log-filecount"))
134 ctx.cfg.enable_log_filecount = atoi(value); 137 ctx.cfg.enable_log_filecount = atoi(value);
135 else if (!strcmp(name, "enable-log-linecount")) 138 else if (!strcmp(name, "enable-log-linecount"))
136 ctx.cfg.enable_log_linecount = atoi(value); 139 ctx.cfg.enable_log_linecount = atoi(value);
137 else if (!strcmp(name, "max-stats")) 140 else if (!strcmp(name, "max-stats"))
138 ctx.cfg.max_stats = cgit_find_stats_period(value, NULL); 141 ctx.cfg.max_stats = cgit_find_stats_period(value, NULL);
139 else if (!strcmp(name, "cache-size")) 142 else if (!strcmp(name, "cache-size"))
140 ctx.cfg.cache_size = atoi(value); 143 ctx.cfg.cache_size = atoi(value);
141 else if (!strcmp(name, "cache-root")) 144 else if (!strcmp(name, "cache-root"))
142 ctx.cfg.cache_root = xstrdup(value); 145 ctx.cfg.cache_root = xstrdup(value);
143 else if (!strcmp(name, "cache-root-ttl")) 146 else if (!strcmp(name, "cache-root-ttl"))
144 ctx.cfg.cache_root_ttl = atoi(value); 147 ctx.cfg.cache_root_ttl = atoi(value);
145 else if (!strcmp(name, "cache-repo-ttl")) 148 else if (!strcmp(name, "cache-repo-ttl"))
146 ctx.cfg.cache_repo_ttl = atoi(value); 149 ctx.cfg.cache_repo_ttl = atoi(value);
diff --git a/cgit.h b/cgit.h
index 3359be9..ef109aa 100644
--- a/cgit.h
+++ b/cgit.h
@@ -161,32 +161,33 @@ struct cgit_config {
161 char *module_link; 161 char *module_link;
162 char *robots; 162 char *robots;
163 char *root_title; 163 char *root_title;
164 char *root_desc; 164 char *root_desc;
165 char *root_readme; 165 char *root_readme;
166 char *script_name; 166 char *script_name;
167 char *section; 167 char *section;
168 char *virtual_root; 168 char *virtual_root;
169 int cache_size; 169 int cache_size;
170 int cache_dynamic_ttl; 170 int cache_dynamic_ttl;
171 int cache_max_create_time; 171 int cache_max_create_time;
172 int cache_repo_ttl; 172 int cache_repo_ttl;
173 int cache_root_ttl; 173 int cache_root_ttl;
174 int cache_scanrc_ttl; 174 int cache_scanrc_ttl;
175 int cache_static_ttl; 175 int cache_static_ttl;
176 int embedded; 176 int embedded;
177 int enable_filter_overrides;
177 int enable_index_links; 178 int enable_index_links;
178 int enable_log_filecount; 179 int enable_log_filecount;
179 int enable_log_linecount; 180 int enable_log_linecount;
180 int local_time; 181 int local_time;
181 int max_repo_count; 182 int max_repo_count;
182 int max_commit_count; 183 int max_commit_count;
183 int max_lock_attempts; 184 int max_lock_attempts;
184 int max_msg_len; 185 int max_msg_len;
185 int max_repodesc_len; 186 int max_repodesc_len;
186 int max_stats; 187 int max_stats;
187 int nocache; 188 int nocache;
188 int noplainemail; 189 int noplainemail;
189 int noheader; 190 int noheader;
190 int renamelimit; 191 int renamelimit;
191 int snapshots; 192 int snapshots;
192 int summary_branches; 193 int summary_branches;
diff --git a/cgitrc.5.txt b/cgitrc.5.txt
index 46df291..617b7c3 100644
--- a/cgitrc.5.txt
+++ b/cgitrc.5.txt
@@ -75,32 +75,36 @@ clone-prefix::
75 75
76commit-filter:: 76commit-filter::
77 Specifies a command which will be invoked to format commit messages. 77 Specifies a command which will be invoked to format commit messages.
78 The command will get the message on its STDIN, and the STDOUT from the 78 The command will get the message on its STDIN, and the STDOUT from the
79 command will be included verbatim as the commit message, i.e. this can 79 command will be included verbatim as the commit message, i.e. this can
80 be used to implement bugtracker integration. Default value: none. 80 be used to implement bugtracker integration. Default value: none.
81 81
82css:: 82css::
83 Url which specifies the css document to include in all cgit pages. 83 Url which specifies the css document to include in all cgit pages.
84 Default value: "/cgit.css". 84 Default value: "/cgit.css".
85 85
86embedded:: 86embedded::
87 Flag which, when set to "1", will make cgit generate a html fragment 87 Flag which, when set to "1", will make cgit generate a html fragment
88 suitable for embedding in other html pages. Default value: none. See 88 suitable for embedding in other html pages. Default value: none. See
89 also: "noheader". 89 also: "noheader".
90 90
91enable-filter-overrides::
92 Flag which, when set to "1", allows all filter settings to be
93 overridden in repository-specific cgitrc files. Default value: none.
94
91enable-index-links:: 95enable-index-links::
92 Flag which, when set to "1", will make cgit generate extra links for 96 Flag which, when set to "1", will make cgit generate extra links for
93 each repo in the repository index (specifically, to the "summary", 97 each repo in the repository index (specifically, to the "summary",
94 "commit" and "tree" pages). Default value: "0". 98 "commit" and "tree" pages). Default value: "0".
95 99
96enable-log-filecount:: 100enable-log-filecount::
97 Flag which, when set to "1", will make cgit print the number of 101 Flag which, when set to "1", will make cgit print the number of
98 modified files for each commit on the repository log page. Default 102 modified files for each commit on the repository log page. Default
99 value: "0". 103 value: "0".
100 104
101enable-log-linecount:: 105enable-log-linecount::
102 Flag which, when set to "1", will make cgit print the number of added 106 Flag which, when set to "1", will make cgit print the number of added
103 and removed lines for each commit on the repository log page. Default 107 and removed lines for each commit on the repository log page. Default
104 value: "0". 108 value: "0".
105 109
106favicon:: 110favicon::
@@ -253,40 +257,42 @@ summary-log::
253 257
254summary-tags:: 258summary-tags::
255 Specifies the number of tags to display in the repository "summary" 259 Specifies the number of tags to display in the repository "summary"
256 view. Default value: "10". 260 view. Default value: "10".
257 261
258virtual-root:: 262virtual-root::
259 Url which, if specified, will be used as root for all cgit links. It 263 Url which, if specified, will be used as root for all cgit links. It
260 will also cause cgit to generate 'virtual urls', i.e. urls like 264 will also cause cgit to generate 'virtual urls', i.e. urls like
261 '/cgit/tree/README' as opposed to '?r=cgit&p=tree&path=README'. Default 265 '/cgit/tree/README' as opposed to '?r=cgit&p=tree&path=README'. Default
262 value: none. 266 value: none.
263 NOTE: cgit has recently learned how to use PATH_INFO to achieve the 267 NOTE: cgit has recently learned how to use PATH_INFO to achieve the
264 same kind of virtual urls, so this option will probably be deprecated. 268 same kind of virtual urls, so this option will probably be deprecated.
265 269
266REPOSITORY SETTINGS 270REPOSITORY SETTINGS
267------------------- 271-------------------
268repo.about-filter:: 272repo.about-filter::
269 Override the default about-filter. Default value: <about-filter>. 273 Override the default about-filter. Default value: none. See also:
274 "enable-filter-overrides".
270 275
271repo.clone-url:: 276repo.clone-url::
272 A list of space-separated urls which can be used to clone this repo. 277 A list of space-separated urls which can be used to clone this repo.
273 Default value: none. 278 Default value: none.
274 279
275repo.commit-filter:: 280repo.commit-filter::
276 Override the default commit-filter. Default value: <commit-filter>. 281 Override the default commit-filter. Default value: none. See also:
282 "enable-filter-overrides".
277 283
278repo.defbranch:: 284repo.defbranch::
279 The name of the default branch for this repository. If no such branch 285 The name of the default branch for this repository. If no such branch
280 exists in the repository, the first branch name (when sorted) is used 286 exists in the repository, the first branch name (when sorted) is used
281 as default instead. Default value: "master". 287 as default instead. Default value: "master".
282 288
283repo.desc:: 289repo.desc::
284 The value to show as repository description. Default value: none. 290 The value to show as repository description. Default value: none.
285 291
286repo.enable-log-filecount:: 292repo.enable-log-filecount::
287 A flag which can be used to disable the global setting 293 A flag which can be used to disable the global setting
288 `enable-log-filecount'. Default value: none. 294 `enable-log-filecount'. Default value: none.
289 295
290repo.enable-log-linecount:: 296repo.enable-log-linecount::
291 A flag which can be used to disable the global setting 297 A flag which can be used to disable the global setting
292 `enable-log-linecount'. Default value: none. 298 `enable-log-linecount'. Default value: none.
@@ -307,46 +313,51 @@ repo.path::
307 An absolute path to the repository directory. For non-bare repositories 313 An absolute path to the repository directory. For non-bare repositories
308 this is the .git-directory. Default value: none. 314 this is the .git-directory. Default value: none.
309 315
310repo.readme:: 316repo.readme::
311 A path (relative to <repo.path>) which specifies a file to include 317 A path (relative to <repo.path>) which specifies a file to include
312 verbatim as the "About" page for this repo. Default value: none. 318 verbatim as the "About" page for this repo. Default value: none.
313 319
314repo.snapshots:: 320repo.snapshots::
315 A mask of allowed snapshot-formats for this repo, restricted by the 321 A mask of allowed snapshot-formats for this repo, restricted by the
316 "snapshots" global setting. Default value: <snapshots>. 322 "snapshots" global setting. Default value: <snapshots>.
317 323
318repo.section:: 324repo.section::
319 Override the current section name for this repository. Default value: 325 Override the current section name for this repository. Default value:
320 none. 326 none.
321 327
322repo.source-filter:: 328repo.source-filter::
323 Override the default source-filter. Default value: <source-filter>. 329 Override the default source-filter. Default value: none. See also:
330 "enable-filter-overrides".
324 331
325repo.url:: 332repo.url::
326 The relative url used to access the repository. This must be the first 333 The relative url used to access the repository. This must be the first
327 setting specified for each repo. Default value: none. 334 setting specified for each repo. Default value: none.
328 335
329 336
330REPOSITORY-SPECIFIC CGITRC FILE 337REPOSITORY-SPECIFIC CGITRC FILE
331------------------------------- 338-------------------------------
332When the option "scan-path" is used to auto-discover git repositories, cgit 339When the option "scan-path" is used to auto-discover git repositories, cgit
333will try to parse the file "cgitrc" within any found repository. Such a 340will try to parse the file "cgitrc" within any found repository. Such a
334repo-specific config file may contain any of the repo-specific options 341repo-specific config file may contain any of the repo-specific options
335described above, except "repo.url" and "repo.path". Also, in a repo-specific 342described above, except "repo.url" and "repo.path". Additionally, the "filter"
336config file, the "repo." prefix is dropped from the config option names. 343options are only acknowledged in repo-specific config files when
344"enable-filter-overrides" is set to "1".
345
346Note: the "repo." prefix is dropped from the option names in repo-specific
347config files, e.g. "repo.desc" becomes "desc".
337 348
338 349
339EXAMPLE CGITRC FILE 350EXAMPLE CGITRC FILE
340------------------- 351-------------------
341 352
342.... 353....
343# Enable caching of up to 1000 output entriess 354# Enable caching of up to 1000 output entriess
344cache-size=1000 355cache-size=1000
345 356
346 357
347# Specify some default clone prefixes 358# Specify some default clone prefixes
348clone-prefix=git://foobar.com ssh://foobar.com/pub/git http://foobar.com/git 359clone-prefix=git://foobar.com ssh://foobar.com/pub/git http://foobar.com/git
349 360
350# Specify the css url 361# Specify the css url
351css=/css/cgit.css 362css=/css/cgit.css
352 363