summaryrefslogtreecommitdiffabout
authorLars Hjemli <hjemli@gmail.com>2009-08-23 21:00:28 (UTC)
committer Lars Hjemli <hjemli@gmail.com>2009-08-24 08:22:58 (UTC)
commit39398545787179bc8075d64a443f9da3845c4f67 (patch) (unidiff)
treef8710ddde4d91a633d97d9c88c9d21b0abbb8fcf
parente7af002d5c405c82652f739d08ced3908d1f57e7 (diff)
downloadcgit-39398545787179bc8075d64a443f9da3845c4f67.zip
cgit-39398545787179bc8075d64a443f9da3845c4f67.tar.gz
cgit-39398545787179bc8075d64a443f9da3845c4f67.tar.bz2
Add config option 'repo.section'
This option can be used to specify the section name for the current repository. Signed-off-by: Lars Hjemli <hjemli@gmail.com>
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--cgit.c2
-rw-r--r--cgitrc.5.txt3
2 files changed, 5 insertions, 0 deletions
diff --git a/cgit.c b/cgit.c
index 013a0fe..7264b8e 100644
--- a/cgit.c
+++ b/cgit.c
@@ -76,192 +76,194 @@ void config_cb(const char *name, const char *value)
76 ctx.cfg.virtual_root = ""; 76 ctx.cfg.virtual_root = "";
77 } else if (!strcmp(name, "nocache")) 77 } else if (!strcmp(name, "nocache"))
78 ctx.cfg.nocache = atoi(value); 78 ctx.cfg.nocache = atoi(value);
79 else if (!strcmp(name, "noplainemail")) 79 else if (!strcmp(name, "noplainemail"))
80 ctx.cfg.noplainemail = atoi(value); 80 ctx.cfg.noplainemail = atoi(value);
81 else if (!strcmp(name, "noheader")) 81 else if (!strcmp(name, "noheader"))
82 ctx.cfg.noheader = atoi(value); 82 ctx.cfg.noheader = atoi(value);
83 else if (!strcmp(name, "snapshots")) 83 else if (!strcmp(name, "snapshots"))
84 ctx.cfg.snapshots = cgit_parse_snapshots_mask(value); 84 ctx.cfg.snapshots = cgit_parse_snapshots_mask(value);
85 else if (!strcmp(name, "enable-index-links")) 85 else if (!strcmp(name, "enable-index-links"))
86 ctx.cfg.enable_index_links = atoi(value); 86 ctx.cfg.enable_index_links = atoi(value);
87 else if (!strcmp(name, "enable-log-filecount")) 87 else if (!strcmp(name, "enable-log-filecount"))
88 ctx.cfg.enable_log_filecount = atoi(value); 88 ctx.cfg.enable_log_filecount = atoi(value);
89 else if (!strcmp(name, "enable-log-linecount")) 89 else if (!strcmp(name, "enable-log-linecount"))
90 ctx.cfg.enable_log_linecount = atoi(value); 90 ctx.cfg.enable_log_linecount = atoi(value);
91 else if (!strcmp(name, "max-stats")) 91 else if (!strcmp(name, "max-stats"))
92 ctx.cfg.max_stats = cgit_find_stats_period(value, NULL); 92 ctx.cfg.max_stats = cgit_find_stats_period(value, NULL);
93 else if (!strcmp(name, "cache-size")) 93 else if (!strcmp(name, "cache-size"))
94 ctx.cfg.cache_size = atoi(value); 94 ctx.cfg.cache_size = atoi(value);
95 else if (!strcmp(name, "cache-root")) 95 else if (!strcmp(name, "cache-root"))
96 ctx.cfg.cache_root = xstrdup(value); 96 ctx.cfg.cache_root = xstrdup(value);
97 else if (!strcmp(name, "cache-root-ttl")) 97 else if (!strcmp(name, "cache-root-ttl"))
98 ctx.cfg.cache_root_ttl = atoi(value); 98 ctx.cfg.cache_root_ttl = atoi(value);
99 else if (!strcmp(name, "cache-repo-ttl")) 99 else if (!strcmp(name, "cache-repo-ttl"))
100 ctx.cfg.cache_repo_ttl = atoi(value); 100 ctx.cfg.cache_repo_ttl = atoi(value);
101 else if (!strcmp(name, "cache-scanrc-ttl")) 101 else if (!strcmp(name, "cache-scanrc-ttl"))
102 ctx.cfg.cache_scanrc_ttl = atoi(value); 102 ctx.cfg.cache_scanrc_ttl = atoi(value);
103 else if (!strcmp(name, "cache-static-ttl")) 103 else if (!strcmp(name, "cache-static-ttl"))
104 ctx.cfg.cache_static_ttl = atoi(value); 104 ctx.cfg.cache_static_ttl = atoi(value);
105 else if (!strcmp(name, "cache-dynamic-ttl")) 105 else if (!strcmp(name, "cache-dynamic-ttl"))
106 ctx.cfg.cache_dynamic_ttl = atoi(value); 106 ctx.cfg.cache_dynamic_ttl = atoi(value);
107 else if (!strcmp(name, "about-filter")) 107 else if (!strcmp(name, "about-filter"))
108 ctx.cfg.about_filter = new_filter(value, 0); 108 ctx.cfg.about_filter = new_filter(value, 0);
109 else if (!strcmp(name, "commit-filter")) 109 else if (!strcmp(name, "commit-filter"))
110 ctx.cfg.commit_filter = new_filter(value, 0); 110 ctx.cfg.commit_filter = new_filter(value, 0);
111 else if (!strcmp(name, "embedded")) 111 else if (!strcmp(name, "embedded"))
112 ctx.cfg.embedded = atoi(value); 112 ctx.cfg.embedded = atoi(value);
113 else if (!strcmp(name, "max-message-length")) 113 else if (!strcmp(name, "max-message-length"))
114 ctx.cfg.max_msg_len = atoi(value); 114 ctx.cfg.max_msg_len = atoi(value);
115 else if (!strcmp(name, "max-repodesc-length")) 115 else if (!strcmp(name, "max-repodesc-length"))
116 ctx.cfg.max_repodesc_len = atoi(value); 116 ctx.cfg.max_repodesc_len = atoi(value);
117 else if (!strcmp(name, "max-repo-count")) 117 else if (!strcmp(name, "max-repo-count"))
118 ctx.cfg.max_repo_count = atoi(value); 118 ctx.cfg.max_repo_count = atoi(value);
119 else if (!strcmp(name, "max-commit-count")) 119 else if (!strcmp(name, "max-commit-count"))
120 ctx.cfg.max_commit_count = atoi(value); 120 ctx.cfg.max_commit_count = atoi(value);
121 else if (!strcmp(name, "scan-path")) 121 else if (!strcmp(name, "scan-path"))
122 if (!ctx.cfg.nocache && ctx.cfg.cache_size) 122 if (!ctx.cfg.nocache && ctx.cfg.cache_size)
123 process_cached_repolist(value); 123 process_cached_repolist(value);
124 else 124 else
125 scan_tree(value); 125 scan_tree(value);
126 else if (!strcmp(name, "source-filter")) 126 else if (!strcmp(name, "source-filter"))
127 ctx.cfg.source_filter = new_filter(value, 1); 127 ctx.cfg.source_filter = new_filter(value, 1);
128 else if (!strcmp(name, "summary-log")) 128 else if (!strcmp(name, "summary-log"))
129 ctx.cfg.summary_log = atoi(value); 129 ctx.cfg.summary_log = atoi(value);
130 else if (!strcmp(name, "summary-branches")) 130 else if (!strcmp(name, "summary-branches"))
131 ctx.cfg.summary_branches = atoi(value); 131 ctx.cfg.summary_branches = atoi(value);
132 else if (!strcmp(name, "summary-tags")) 132 else if (!strcmp(name, "summary-tags"))
133 ctx.cfg.summary_tags = atoi(value); 133 ctx.cfg.summary_tags = atoi(value);
134 else if (!strcmp(name, "agefile")) 134 else if (!strcmp(name, "agefile"))
135 ctx.cfg.agefile = xstrdup(value); 135 ctx.cfg.agefile = xstrdup(value);
136 else if (!strcmp(name, "renamelimit")) 136 else if (!strcmp(name, "renamelimit"))
137 ctx.cfg.renamelimit = atoi(value); 137 ctx.cfg.renamelimit = atoi(value);
138 else if (!strcmp(name, "robots")) 138 else if (!strcmp(name, "robots"))
139 ctx.cfg.robots = xstrdup(value); 139 ctx.cfg.robots = xstrdup(value);
140 else if (!strcmp(name, "clone-prefix")) 140 else if (!strcmp(name, "clone-prefix"))
141 ctx.cfg.clone_prefix = xstrdup(value); 141 ctx.cfg.clone_prefix = xstrdup(value);
142 else if (!strcmp(name, "local-time")) 142 else if (!strcmp(name, "local-time"))
143 ctx.cfg.local_time = atoi(value); 143 ctx.cfg.local_time = atoi(value);
144 else if (!prefixcmp(name, "mimetype.")) 144 else if (!prefixcmp(name, "mimetype."))
145 add_mimetype(name + 9, value); 145 add_mimetype(name + 9, value);
146 else if (!strcmp(name, "section") || !strcmp(name, "repo.group")) 146 else if (!strcmp(name, "section") || !strcmp(name, "repo.group"))
147 ctx.cfg.section = xstrdup(value); 147 ctx.cfg.section = xstrdup(value);
148 else if (!strcmp(name, "repo.url")) 148 else if (!strcmp(name, "repo.url"))
149 ctx.repo = cgit_add_repo(value); 149 ctx.repo = cgit_add_repo(value);
150 else if (!strcmp(name, "repo.name")) 150 else if (!strcmp(name, "repo.name"))
151 ctx.repo->name = xstrdup(value); 151 ctx.repo->name = xstrdup(value);
152 else if (ctx.repo && !strcmp(name, "repo.path")) 152 else if (ctx.repo && !strcmp(name, "repo.path"))
153 ctx.repo->path = trim_end(value, '/'); 153 ctx.repo->path = trim_end(value, '/');
154 else if (ctx.repo && !strcmp(name, "repo.clone-url")) 154 else if (ctx.repo && !strcmp(name, "repo.clone-url"))
155 ctx.repo->clone_url = xstrdup(value); 155 ctx.repo->clone_url = xstrdup(value);
156 else if (ctx.repo && !strcmp(name, "repo.desc")) 156 else if (ctx.repo && !strcmp(name, "repo.desc"))
157 ctx.repo->desc = xstrdup(value); 157 ctx.repo->desc = xstrdup(value);
158 else if (ctx.repo && !strcmp(name, "repo.owner")) 158 else if (ctx.repo && !strcmp(name, "repo.owner"))
159 ctx.repo->owner = xstrdup(value); 159 ctx.repo->owner = xstrdup(value);
160 else if (ctx.repo && !strcmp(name, "repo.defbranch")) 160 else if (ctx.repo && !strcmp(name, "repo.defbranch"))
161 ctx.repo->defbranch = xstrdup(value); 161 ctx.repo->defbranch = xstrdup(value);
162 else if (ctx.repo && !strcmp(name, "repo.snapshots")) 162 else if (ctx.repo && !strcmp(name, "repo.snapshots"))
163 ctx.repo->snapshots = ctx.cfg.snapshots & cgit_parse_snapshots_mask(value); /* XXX: &? */ 163 ctx.repo->snapshots = ctx.cfg.snapshots & cgit_parse_snapshots_mask(value); /* XXX: &? */
164 else if (ctx.repo && !strcmp(name, "repo.enable-log-filecount")) 164 else if (ctx.repo && !strcmp(name, "repo.enable-log-filecount"))
165 ctx.repo->enable_log_filecount = ctx.cfg.enable_log_filecount * atoi(value); 165 ctx.repo->enable_log_filecount = ctx.cfg.enable_log_filecount * atoi(value);
166 else if (ctx.repo && !strcmp(name, "repo.enable-log-linecount")) 166 else if (ctx.repo && !strcmp(name, "repo.enable-log-linecount"))
167 ctx.repo->enable_log_linecount = ctx.cfg.enable_log_linecount * atoi(value); 167 ctx.repo->enable_log_linecount = ctx.cfg.enable_log_linecount * atoi(value);
168 else if (ctx.repo && !strcmp(name, "repo.max-stats")) 168 else if (ctx.repo && !strcmp(name, "repo.max-stats"))
169 ctx.repo->max_stats = cgit_find_stats_period(value, NULL); 169 ctx.repo->max_stats = cgit_find_stats_period(value, NULL);
170 else if (ctx.repo && !strcmp(name, "repo.module-link")) 170 else if (ctx.repo && !strcmp(name, "repo.module-link"))
171 ctx.repo->module_link= xstrdup(value); 171 ctx.repo->module_link= xstrdup(value);
172 else if (ctx.repo && !strcmp(name, "repo.section"))
173 ctx.repo->section = xstrdup(value);
172 else if (ctx.repo && !strcmp(name, "repo.about-filter")) 174 else if (ctx.repo && !strcmp(name, "repo.about-filter"))
173 ctx.repo->about_filter = new_filter(value, 0); 175 ctx.repo->about_filter = new_filter(value, 0);
174 else if (ctx.repo && !strcmp(name, "repo.commit-filter")) 176 else if (ctx.repo && !strcmp(name, "repo.commit-filter"))
175 ctx.repo->commit_filter = new_filter(value, 0); 177 ctx.repo->commit_filter = new_filter(value, 0);
176 else if (ctx.repo && !strcmp(name, "repo.source-filter")) 178 else if (ctx.repo && !strcmp(name, "repo.source-filter"))
177 ctx.repo->source_filter = new_filter(value, 1); 179 ctx.repo->source_filter = new_filter(value, 1);
178 else if (ctx.repo && !strcmp(name, "repo.readme") && value != NULL) { 180 else if (ctx.repo && !strcmp(name, "repo.readme") && value != NULL) {
179 if (*value == '/') 181 if (*value == '/')
180 ctx.repo->readme = xstrdup(value); 182 ctx.repo->readme = xstrdup(value);
181 else 183 else
182 ctx.repo->readme = xstrdup(fmt("%s/%s", ctx.repo->path, value)); 184 ctx.repo->readme = xstrdup(fmt("%s/%s", ctx.repo->path, value));
183 } else if (!strcmp(name, "include")) 185 } else if (!strcmp(name, "include"))
184 parse_configfile(value, config_cb); 186 parse_configfile(value, config_cb);
185} 187}
186 188
187static void querystring_cb(const char *name, const char *value) 189static void querystring_cb(const char *name, const char *value)
188{ 190{
189 if (!value) 191 if (!value)
190 value = ""; 192 value = "";
191 193
192 if (!strcmp(name,"r")) { 194 if (!strcmp(name,"r")) {
193 ctx.qry.repo = xstrdup(value); 195 ctx.qry.repo = xstrdup(value);
194 ctx.repo = cgit_get_repoinfo(value); 196 ctx.repo = cgit_get_repoinfo(value);
195 } else if (!strcmp(name, "p")) { 197 } else if (!strcmp(name, "p")) {
196 ctx.qry.page = xstrdup(value); 198 ctx.qry.page = xstrdup(value);
197 } else if (!strcmp(name, "url")) { 199 } else if (!strcmp(name, "url")) {
198 ctx.qry.url = xstrdup(value); 200 ctx.qry.url = xstrdup(value);
199 cgit_parse_url(value); 201 cgit_parse_url(value);
200 } else if (!strcmp(name, "qt")) { 202 } else if (!strcmp(name, "qt")) {
201 ctx.qry.grep = xstrdup(value); 203 ctx.qry.grep = xstrdup(value);
202 } else if (!strcmp(name, "q")) { 204 } else if (!strcmp(name, "q")) {
203 ctx.qry.search = xstrdup(value); 205 ctx.qry.search = xstrdup(value);
204 } else if (!strcmp(name, "h")) { 206 } else if (!strcmp(name, "h")) {
205 ctx.qry.head = xstrdup(value); 207 ctx.qry.head = xstrdup(value);
206 ctx.qry.has_symref = 1; 208 ctx.qry.has_symref = 1;
207 } else if (!strcmp(name, "id")) { 209 } else if (!strcmp(name, "id")) {
208 ctx.qry.sha1 = xstrdup(value); 210 ctx.qry.sha1 = xstrdup(value);
209 ctx.qry.has_sha1 = 1; 211 ctx.qry.has_sha1 = 1;
210 } else if (!strcmp(name, "id2")) { 212 } else if (!strcmp(name, "id2")) {
211 ctx.qry.sha2 = xstrdup(value); 213 ctx.qry.sha2 = xstrdup(value);
212 ctx.qry.has_sha1 = 1; 214 ctx.qry.has_sha1 = 1;
213 } else if (!strcmp(name, "ofs")) { 215 } else if (!strcmp(name, "ofs")) {
214 ctx.qry.ofs = atoi(value); 216 ctx.qry.ofs = atoi(value);
215 } else if (!strcmp(name, "path")) { 217 } else if (!strcmp(name, "path")) {
216 ctx.qry.path = trim_end(value, '/'); 218 ctx.qry.path = trim_end(value, '/');
217 } else if (!strcmp(name, "name")) { 219 } else if (!strcmp(name, "name")) {
218 ctx.qry.name = xstrdup(value); 220 ctx.qry.name = xstrdup(value);
219 } else if (!strcmp(name, "mimetype")) { 221 } else if (!strcmp(name, "mimetype")) {
220 ctx.qry.mimetype = xstrdup(value); 222 ctx.qry.mimetype = xstrdup(value);
221 } else if (!strcmp(name, "s")){ 223 } else if (!strcmp(name, "s")){
222 ctx.qry.sort = xstrdup(value); 224 ctx.qry.sort = xstrdup(value);
223 } else if (!strcmp(name, "showmsg")) { 225 } else if (!strcmp(name, "showmsg")) {
224 ctx.qry.showmsg = atoi(value); 226 ctx.qry.showmsg = atoi(value);
225 } else if (!strcmp(name, "period")) { 227 } else if (!strcmp(name, "period")) {
226 ctx.qry.period = xstrdup(value); 228 ctx.qry.period = xstrdup(value);
227 } 229 }
228} 230}
229 231
230char *xstrdupn(const char *str) 232char *xstrdupn(const char *str)
231{ 233{
232 return (str ? xstrdup(str) : NULL); 234 return (str ? xstrdup(str) : NULL);
233} 235}
234 236
235static void prepare_context(struct cgit_context *ctx) 237static void prepare_context(struct cgit_context *ctx)
236{ 238{
237 memset(ctx, 0, sizeof(ctx)); 239 memset(ctx, 0, sizeof(ctx));
238 ctx->cfg.agefile = "info/web/last-modified"; 240 ctx->cfg.agefile = "info/web/last-modified";
239 ctx->cfg.nocache = 0; 241 ctx->cfg.nocache = 0;
240 ctx->cfg.cache_size = 0; 242 ctx->cfg.cache_size = 0;
241 ctx->cfg.cache_dynamic_ttl = 5; 243 ctx->cfg.cache_dynamic_ttl = 5;
242 ctx->cfg.cache_max_create_time = 5; 244 ctx->cfg.cache_max_create_time = 5;
243 ctx->cfg.cache_repo_ttl = 5; 245 ctx->cfg.cache_repo_ttl = 5;
244 ctx->cfg.cache_root = CGIT_CACHE_ROOT; 246 ctx->cfg.cache_root = CGIT_CACHE_ROOT;
245 ctx->cfg.cache_root_ttl = 5; 247 ctx->cfg.cache_root_ttl = 5;
246 ctx->cfg.cache_scanrc_ttl = 15; 248 ctx->cfg.cache_scanrc_ttl = 15;
247 ctx->cfg.cache_static_ttl = -1; 249 ctx->cfg.cache_static_ttl = -1;
248 ctx->cfg.css = "/cgit.css"; 250 ctx->cfg.css = "/cgit.css";
249 ctx->cfg.logo = "/cgit.png"; 251 ctx->cfg.logo = "/cgit.png";
250 ctx->cfg.local_time = 0; 252 ctx->cfg.local_time = 0;
251 ctx->cfg.max_repo_count = 50; 253 ctx->cfg.max_repo_count = 50;
252 ctx->cfg.max_commit_count = 50; 254 ctx->cfg.max_commit_count = 50;
253 ctx->cfg.max_lock_attempts = 5; 255 ctx->cfg.max_lock_attempts = 5;
254 ctx->cfg.max_msg_len = 80; 256 ctx->cfg.max_msg_len = 80;
255 ctx->cfg.max_repodesc_len = 80; 257 ctx->cfg.max_repodesc_len = 80;
256 ctx->cfg.max_stats = 0; 258 ctx->cfg.max_stats = 0;
257 ctx->cfg.module_link = "./?repo=%s&page=commit&id=%s"; 259 ctx->cfg.module_link = "./?repo=%s&page=commit&id=%s";
258 ctx->cfg.renamelimit = -1; 260 ctx->cfg.renamelimit = -1;
259 ctx->cfg.robots = "index, nofollow"; 261 ctx->cfg.robots = "index, nofollow";
260 ctx->cfg.root_title = "Git repository browser"; 262 ctx->cfg.root_title = "Git repository browser";
261 ctx->cfg.root_desc = "a fast webinterface for the git dscm"; 263 ctx->cfg.root_desc = "a fast webinterface for the git dscm";
262 ctx->cfg.script_name = CGIT_SCRIPT_NAME; 264 ctx->cfg.script_name = CGIT_SCRIPT_NAME;
263 ctx->cfg.summary_branches = 10; 265 ctx->cfg.summary_branches = 10;
264 ctx->cfg.summary_log = 10; 266 ctx->cfg.summary_log = 10;
265 ctx->cfg.summary_tags = 10; 267 ctx->cfg.summary_tags = 10;
266 ctx->env.cgit_config = xstrdupn(getenv("CGIT_CONFIG")); 268 ctx->env.cgit_config = xstrdupn(getenv("CGIT_CONFIG"));
267 ctx->env.http_host = xstrdupn(getenv("HTTP_HOST")); 269 ctx->env.http_host = xstrdupn(getenv("HTTP_HOST"));
diff --git a/cgitrc.5.txt b/cgitrc.5.txt
index 4d009f9..e99c9f7 100644
--- a/cgitrc.5.txt
+++ b/cgitrc.5.txt
@@ -222,192 +222,195 @@ root-title::
222 222
223scan-path:: 223scan-path::
224 A path which will be scanned for repositories. If caching is enabled, 224 A path which will be scanned for repositories. If caching is enabled,
225 the result will be cached as a cgitrc include-file in the cache 225 the result will be cached as a cgitrc include-file in the cache
226 directory. Default value: none. See also: cache-scanrc-ttl. 226 directory. Default value: none. See also: cache-scanrc-ttl.
227 227
228section: 228section:
229 The name of the current repository section - all repositories defined 229 The name of the current repository section - all repositories defined
230 after this option will inherit the current section name. Default value: 230 after this option will inherit the current section name. Default value:
231 none. 231 none.
232 232
233snapshots:: 233snapshots::
234 Text which specifies the default set of snapshot formats generated by 234 Text which specifies the default set of snapshot formats generated by
235 cgit. The value is a space-separated list of zero or more of the 235 cgit. The value is a space-separated list of zero or more of the
236 values "tar", "tar.gz", "tar.bz2" and "zip". Default value: none. 236 values "tar", "tar.gz", "tar.bz2" and "zip". Default value: none.
237 237
238source-filter:: 238source-filter::
239 Specifies a command which will be invoked to format plaintext blobs 239 Specifies a command which will be invoked to format plaintext blobs
240 in the tree view. The command will get the blob content on its STDIN 240 in the tree view. The command will get the blob content on its STDIN
241 and the name of the blob as its only command line argument. The STDOUT 241 and the name of the blob as its only command line argument. The STDOUT
242 from the command will be included verbatim as the blob contents, i.e. 242 from the command will be included verbatim as the blob contents, i.e.
243 this can be used to implement e.g. syntax highlighting. Default value: 243 this can be used to implement e.g. syntax highlighting. Default value:
244 none. 244 none.
245 245
246summary-branches:: 246summary-branches::
247 Specifies the number of branches to display in the repository "summary" 247 Specifies the number of branches to display in the repository "summary"
248 view. Default value: "10". 248 view. Default value: "10".
249 249
250summary-log:: 250summary-log::
251 Specifies the number of log entries to display in the repository 251 Specifies the number of log entries to display in the repository
252 "summary" view. Default value: "10". 252 "summary" view. Default value: "10".
253 253
254summary-tags:: 254summary-tags::
255 Specifies the number of tags to display in the repository "summary" 255 Specifies the number of tags to display in the repository "summary"
256 view. Default value: "10". 256 view. Default value: "10".
257 257
258virtual-root:: 258virtual-root::
259 Url which, if specified, will be used as root for all cgit links. It 259 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 260 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 261 '/cgit/tree/README' as opposed to '?r=cgit&p=tree&path=README'. Default
262 value: none. 262 value: none.
263 NOTE: cgit has recently learned how to use PATH_INFO to achieve the 263 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. 264 same kind of virtual urls, so this option will probably be deprecated.
265 265
266REPOSITORY SETTINGS 266REPOSITORY SETTINGS
267------------------- 267-------------------
268repo.about-filter:: 268repo.about-filter::
269 Override the default about-filter. Default value: <about-filter>. 269 Override the default about-filter. Default value: <about-filter>.
270 270
271repo.clone-url:: 271repo.clone-url::
272 A list of space-separated urls which can be used to clone this repo. 272 A list of space-separated urls which can be used to clone this repo.
273 Default value: none. 273 Default value: none.
274 274
275repo.commit-filter:: 275repo.commit-filter::
276 Override the default commit-filter. Default value: <commit-filter>. 276 Override the default commit-filter. Default value: <commit-filter>.
277 277
278repo.defbranch:: 278repo.defbranch::
279 The name of the default branch for this repository. If no such branch 279 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 280 exists in the repository, the first branch name (when sorted) is used
281 as default instead. Default value: "master". 281 as default instead. Default value: "master".
282 282
283repo.desc:: 283repo.desc::
284 The value to show as repository description. Default value: none. 284 The value to show as repository description. Default value: none.
285 285
286repo.enable-log-filecount:: 286repo.enable-log-filecount::
287 A flag which can be used to disable the global setting 287 A flag which can be used to disable the global setting
288 `enable-log-filecount'. Default value: none. 288 `enable-log-filecount'. Default value: none.
289 289
290repo.enable-log-linecount:: 290repo.enable-log-linecount::
291 A flag which can be used to disable the global setting 291 A flag which can be used to disable the global setting
292 `enable-log-linecount'. Default value: none. 292 `enable-log-linecount'. Default value: none.
293 293
294repo.max-stats:: 294repo.max-stats::
295 Override the default maximum statistics period. Valid values are equal 295 Override the default maximum statistics period. Valid values are equal
296 to the values specified for the global "max-stats" setting. Default 296 to the values specified for the global "max-stats" setting. Default
297 value: none. 297 value: none.
298 298
299repo.name:: 299repo.name::
300 The value to show as repository name. Default value: <repo.url>. 300 The value to show as repository name. Default value: <repo.url>.
301 301
302repo.owner:: 302repo.owner::
303 A value used to identify the owner of the repository. Default value: 303 A value used to identify the owner of the repository. Default value:
304 none. 304 none.
305 305
306repo.path:: 306repo.path::
307 An absolute path to the repository directory. For non-bare repositories 307 An absolute path to the repository directory. For non-bare repositories
308 this is the .git-directory. Default value: none. 308 this is the .git-directory. Default value: none.
309 309
310repo.readme:: 310repo.readme::
311 A path (relative to <repo.path>) which specifies a file to include 311 A path (relative to <repo.path>) which specifies a file to include
312 verbatim as the "About" page for this repo. Default value: none. 312 verbatim as the "About" page for this repo. Default value: none.
313 313
314repo.snapshots:: 314repo.snapshots::
315 A mask of allowed snapshot-formats for this repo, restricted by the 315 A mask of allowed snapshot-formats for this repo, restricted by the
316 "snapshots" global setting. Default value: <snapshots>. 316 "snapshots" global setting. Default value: <snapshots>.
317 317
318repo.section::
319 Override the current section for this repository. Default value: none.
320
318repo.source-filter:: 321repo.source-filter::
319 Override the default source-filter. Default value: <source-filter>. 322 Override the default source-filter. Default value: <source-filter>.
320 323
321repo.url:: 324repo.url::
322 The relative url used to access the repository. This must be the first 325 The relative url used to access the repository. This must be the first
323 setting specified for each repo. Default value: none. 326 setting specified for each repo. Default value: none.
324 327
325 328
326EXAMPLE CGITRC FILE 329EXAMPLE CGITRC FILE
327------------------- 330-------------------
328 331
329.... 332....
330# Enable caching of up to 1000 output entriess 333# Enable caching of up to 1000 output entriess
331cache-size=1000 334cache-size=1000
332 335
333 336
334# Specify some default clone prefixes 337# Specify some default clone prefixes
335clone-prefix=git://foobar.com ssh://foobar.com/pub/git http://foobar.com/git 338clone-prefix=git://foobar.com ssh://foobar.com/pub/git http://foobar.com/git
336 339
337# Specify the css url 340# Specify the css url
338css=/css/cgit.css 341css=/css/cgit.css
339 342
340 343
341# Show extra links for each repository on the index page 344# Show extra links for each repository on the index page
342enable-index-links=1 345enable-index-links=1
343 346
344 347
345# Show number of affected files per commit on the log pages 348# Show number of affected files per commit on the log pages
346enable-log-filecount=1 349enable-log-filecount=1
347 350
348 351
349# Show number of added/removed lines per commit on the log pages 352# Show number of added/removed lines per commit on the log pages
350enable-log-linecount=1 353enable-log-linecount=1
351 354
352 355
353# Add a cgit favicon 356# Add a cgit favicon
354favicon=/favicon.ico 357favicon=/favicon.ico
355 358
356 359
357# Use a custom logo 360# Use a custom logo
358logo=/img/mylogo.png 361logo=/img/mylogo.png
359 362
360 363
361# Enable statistics per week, month and quarter 364# Enable statistics per week, month and quarter
362max-stats=quarter 365max-stats=quarter
363 366
364 367
365# Set the title and heading of the repository index page 368# Set the title and heading of the repository index page
366root-title=foobar.com git repositories 369root-title=foobar.com git repositories
367 370
368 371
369# Set a subheading for the repository index page 372# Set a subheading for the repository index page
370root-desc=tracking the foobar development 373root-desc=tracking the foobar development
371 374
372 375
373# Include some more info about foobar.com on the index page 376# Include some more info about foobar.com on the index page
374root-readme=/var/www/htdocs/about.html 377root-readme=/var/www/htdocs/about.html
375 378
376 379
377# Allow download of tar.gz, tar.bz2 and zip-files 380# Allow download of tar.gz, tar.bz2 and zip-files
378snapshots=tar.gz tar.bz2 zip 381snapshots=tar.gz tar.bz2 zip
379 382
380 383
381## 384##
382## List of common mimetypes 385## List of common mimetypes
383## 386##
384 387
385mimetype.git=image/git 388mimetype.git=image/git
386mimetype.html=text/html 389mimetype.html=text/html
387mimetype.jpg=image/jpeg 390mimetype.jpg=image/jpeg
388mimetype.jpeg=image/jpeg 391mimetype.jpeg=image/jpeg
389mimetype.pdf=application/pdf 392mimetype.pdf=application/pdf
390mimetype.png=image/png 393mimetype.png=image/png
391mimetype.svg=image/svg+xml 394mimetype.svg=image/svg+xml
392 395
393 396
394## 397##
395## List of repositories. 398## List of repositories.
396## PS: Any repositories listed when repo.group is unset will not be 399## PS: Any repositories listed when repo.group is unset will not be
397## displayed under a group heading 400## displayed under a group heading
398## PPS: This list could be kept in a different file (e.g. '/etc/cgitrepos') 401## PPS: This list could be kept in a different file (e.g. '/etc/cgitrepos')
399## and included like this: 402## and included like this:
400## include=/etc/cgitrepos 403## include=/etc/cgitrepos
401## 404##
402 405
403 406
404repo.url=foo 407repo.url=foo
405repo.path=/pub/git/foo.git 408repo.path=/pub/git/foo.git
406repo.desc=the master foo repository 409repo.desc=the master foo repository
407repo.owner=fooman@foobar.com 410repo.owner=fooman@foobar.com
408repo.readme=info/web/about.html 411repo.readme=info/web/about.html
409 412
410 413
411repo.url=bar 414repo.url=bar
412repo.path=/pub/git/bar.git 415repo.path=/pub/git/bar.git
413repo.desc=the bars for your foo 416repo.desc=the bars for your foo