summaryrefslogtreecommitdiffabout
path: root/cgit.c
authorLars Hjemli <hjemli@gmail.com>2008-07-27 10:58:37 (UTC)
committer Lars Hjemli <hjemli@gmail.com>2008-07-27 10:58:37 (UTC)
commit952f4ece296d91b8b41f56de9e1c3bc80f94f196 (patch) (unidiff)
tree3ad6b53b89c0508b70c6dbf9bb73a02252b8ff98 /cgit.c
parent25c84326deff579d5de4b880f9dca2690bdc8569 (diff)
downloadcgit-952f4ece296d91b8b41f56de9e1c3bc80f94f196.zip
cgit-952f4ece296d91b8b41f56de9e1c3bc80f94f196.tar.gz
cgit-952f4ece296d91b8b41f56de9e1c3bc80f94f196.tar.bz2
Modify default value for a few cgitrc options
The default max-length used when printing commit messages and repo descriptions can be increased due to the new layout (no sidebar). Also, on the repo summary page I believe it makes sense to only show the ten most recent branches and tags by default, just as it makes sense to show the ten most recent commit messages for the active branch. Signed-off-by: Lars Hjemli <hjemli@gmail.com>
Diffstat (limited to 'cgit.c') (more/less context) (ignore whitespace changes)
-rw-r--r--cgit.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/cgit.c b/cgit.c
index cefeddf..e2d5edb 100644
--- a/cgit.c
+++ b/cgit.c
@@ -45,264 +45,267 @@ void config_cb(const char *name, const char *value)
45 ctx.cfg.virtual_root = ""; 45 ctx.cfg.virtual_root = "";
46 } else if (!strcmp(name, "nocache")) 46 } else if (!strcmp(name, "nocache"))
47 ctx.cfg.nocache = atoi(value); 47 ctx.cfg.nocache = atoi(value);
48 else if (!strcmp(name, "snapshots")) 48 else if (!strcmp(name, "snapshots"))
49 ctx.cfg.snapshots = cgit_parse_snapshots_mask(value); 49 ctx.cfg.snapshots = cgit_parse_snapshots_mask(value);
50 else if (!strcmp(name, "enable-index-links")) 50 else if (!strcmp(name, "enable-index-links"))
51 ctx.cfg.enable_index_links = atoi(value); 51 ctx.cfg.enable_index_links = atoi(value);
52 else if (!strcmp(name, "enable-log-filecount")) 52 else if (!strcmp(name, "enable-log-filecount"))
53 ctx.cfg.enable_log_filecount = atoi(value); 53 ctx.cfg.enable_log_filecount = atoi(value);
54 else if (!strcmp(name, "enable-log-linecount")) 54 else if (!strcmp(name, "enable-log-linecount"))
55 ctx.cfg.enable_log_linecount = atoi(value); 55 ctx.cfg.enable_log_linecount = atoi(value);
56 else if (!strcmp(name, "cache-size")) 56 else if (!strcmp(name, "cache-size"))
57 ctx.cfg.cache_size = atoi(value); 57 ctx.cfg.cache_size = atoi(value);
58 else if (!strcmp(name, "cache-root")) 58 else if (!strcmp(name, "cache-root"))
59 ctx.cfg.cache_root = xstrdup(value); 59 ctx.cfg.cache_root = xstrdup(value);
60 else if (!strcmp(name, "cache-root-ttl")) 60 else if (!strcmp(name, "cache-root-ttl"))
61 ctx.cfg.cache_root_ttl = atoi(value); 61 ctx.cfg.cache_root_ttl = atoi(value);
62 else if (!strcmp(name, "cache-repo-ttl")) 62 else if (!strcmp(name, "cache-repo-ttl"))
63 ctx.cfg.cache_repo_ttl = atoi(value); 63 ctx.cfg.cache_repo_ttl = atoi(value);
64 else if (!strcmp(name, "cache-static-ttl")) 64 else if (!strcmp(name, "cache-static-ttl"))
65 ctx.cfg.cache_static_ttl = atoi(value); 65 ctx.cfg.cache_static_ttl = atoi(value);
66 else if (!strcmp(name, "cache-dynamic-ttl")) 66 else if (!strcmp(name, "cache-dynamic-ttl"))
67 ctx.cfg.cache_dynamic_ttl = atoi(value); 67 ctx.cfg.cache_dynamic_ttl = atoi(value);
68 else if (!strcmp(name, "max-message-length")) 68 else if (!strcmp(name, "max-message-length"))
69 ctx.cfg.max_msg_len = atoi(value); 69 ctx.cfg.max_msg_len = atoi(value);
70 else if (!strcmp(name, "max-repodesc-length")) 70 else if (!strcmp(name, "max-repodesc-length"))
71 ctx.cfg.max_repodesc_len = atoi(value); 71 ctx.cfg.max_repodesc_len = atoi(value);
72 else if (!strcmp(name, "max-repo-count")) 72 else if (!strcmp(name, "max-repo-count"))
73 ctx.cfg.max_repo_count = atoi(value); 73 ctx.cfg.max_repo_count = atoi(value);
74 else if (!strcmp(name, "max-commit-count")) 74 else if (!strcmp(name, "max-commit-count"))
75 ctx.cfg.max_commit_count = atoi(value); 75 ctx.cfg.max_commit_count = atoi(value);
76 else if (!strcmp(name, "summary-log")) 76 else if (!strcmp(name, "summary-log"))
77 ctx.cfg.summary_log = atoi(value); 77 ctx.cfg.summary_log = atoi(value);
78 else if (!strcmp(name, "summary-branches")) 78 else if (!strcmp(name, "summary-branches"))
79 ctx.cfg.summary_branches = atoi(value); 79 ctx.cfg.summary_branches = atoi(value);
80 else if (!strcmp(name, "summary-tags")) 80 else if (!strcmp(name, "summary-tags"))
81 ctx.cfg.summary_tags = atoi(value); 81 ctx.cfg.summary_tags = atoi(value);
82 else if (!strcmp(name, "agefile")) 82 else if (!strcmp(name, "agefile"))
83 ctx.cfg.agefile = xstrdup(value); 83 ctx.cfg.agefile = xstrdup(value);
84 else if (!strcmp(name, "renamelimit")) 84 else if (!strcmp(name, "renamelimit"))
85 ctx.cfg.renamelimit = atoi(value); 85 ctx.cfg.renamelimit = atoi(value);
86 else if (!strcmp(name, "robots")) 86 else if (!strcmp(name, "robots"))
87 ctx.cfg.robots = xstrdup(value); 87 ctx.cfg.robots = xstrdup(value);
88 else if (!strcmp(name, "clone-prefix")) 88 else if (!strcmp(name, "clone-prefix"))
89 ctx.cfg.clone_prefix = xstrdup(value); 89 ctx.cfg.clone_prefix = xstrdup(value);
90 else if (!strcmp(name, "repo.group")) 90 else if (!strcmp(name, "repo.group"))
91 ctx.cfg.repo_group = xstrdup(value); 91 ctx.cfg.repo_group = xstrdup(value);
92 else if (!strcmp(name, "repo.url")) 92 else if (!strcmp(name, "repo.url"))
93 ctx.repo = cgit_add_repo(value); 93 ctx.repo = cgit_add_repo(value);
94 else if (!strcmp(name, "repo.name")) 94 else if (!strcmp(name, "repo.name"))
95 ctx.repo->name = xstrdup(value); 95 ctx.repo->name = xstrdup(value);
96 else if (ctx.repo && !strcmp(name, "repo.path")) 96 else if (ctx.repo && !strcmp(name, "repo.path"))
97 ctx.repo->path = trim_end(value, '/'); 97 ctx.repo->path = trim_end(value, '/');
98 else if (ctx.repo && !strcmp(name, "repo.clone-url")) 98 else if (ctx.repo && !strcmp(name, "repo.clone-url"))
99 ctx.repo->clone_url = xstrdup(value); 99 ctx.repo->clone_url = xstrdup(value);
100 else if (ctx.repo && !strcmp(name, "repo.desc")) 100 else if (ctx.repo && !strcmp(name, "repo.desc"))
101 ctx.repo->desc = xstrdup(value); 101 ctx.repo->desc = xstrdup(value);
102 else if (ctx.repo && !strcmp(name, "repo.owner")) 102 else if (ctx.repo && !strcmp(name, "repo.owner"))
103 ctx.repo->owner = xstrdup(value); 103 ctx.repo->owner = xstrdup(value);
104 else if (ctx.repo && !strcmp(name, "repo.defbranch")) 104 else if (ctx.repo && !strcmp(name, "repo.defbranch"))
105 ctx.repo->defbranch = xstrdup(value); 105 ctx.repo->defbranch = xstrdup(value);
106 else if (ctx.repo && !strcmp(name, "repo.snapshots")) 106 else if (ctx.repo && !strcmp(name, "repo.snapshots"))
107 ctx.repo->snapshots = ctx.cfg.snapshots & cgit_parse_snapshots_mask(value); /* XXX: &? */ 107 ctx.repo->snapshots = ctx.cfg.snapshots & cgit_parse_snapshots_mask(value); /* XXX: &? */
108 else if (ctx.repo && !strcmp(name, "repo.enable-log-filecount")) 108 else if (ctx.repo && !strcmp(name, "repo.enable-log-filecount"))
109 ctx.repo->enable_log_filecount = ctx.cfg.enable_log_filecount * atoi(value); 109 ctx.repo->enable_log_filecount = ctx.cfg.enable_log_filecount * atoi(value);
110 else if (ctx.repo && !strcmp(name, "repo.enable-log-linecount")) 110 else if (ctx.repo && !strcmp(name, "repo.enable-log-linecount"))
111 ctx.repo->enable_log_linecount = ctx.cfg.enable_log_linecount * atoi(value); 111 ctx.repo->enable_log_linecount = ctx.cfg.enable_log_linecount * atoi(value);
112 else if (ctx.repo && !strcmp(name, "repo.module-link")) 112 else if (ctx.repo && !strcmp(name, "repo.module-link"))
113 ctx.repo->module_link= xstrdup(value); 113 ctx.repo->module_link= xstrdup(value);
114 else if (ctx.repo && !strcmp(name, "repo.readme") && value != NULL) { 114 else if (ctx.repo && !strcmp(name, "repo.readme") && value != NULL) {
115 if (*value == '/') 115 if (*value == '/')
116 ctx.repo->readme = xstrdup(value); 116 ctx.repo->readme = xstrdup(value);
117 else 117 else
118 ctx.repo->readme = xstrdup(fmt("%s/%s", ctx.repo->path, value)); 118 ctx.repo->readme = xstrdup(fmt("%s/%s", ctx.repo->path, value));
119 } else if (!strcmp(name, "include")) 119 } else if (!strcmp(name, "include"))
120 parse_configfile(value, config_cb); 120 parse_configfile(value, config_cb);
121} 121}
122 122
123static void querystring_cb(const char *name, const char *value) 123static void querystring_cb(const char *name, const char *value)
124{ 124{
125 if (!strcmp(name,"r")) { 125 if (!strcmp(name,"r")) {
126 ctx.qry.repo = xstrdup(value); 126 ctx.qry.repo = xstrdup(value);
127 ctx.repo = cgit_get_repoinfo(value); 127 ctx.repo = cgit_get_repoinfo(value);
128 } else if (!strcmp(name, "p")) { 128 } else if (!strcmp(name, "p")) {
129 ctx.qry.page = xstrdup(value); 129 ctx.qry.page = xstrdup(value);
130 } else if (!strcmp(name, "url")) { 130 } else if (!strcmp(name, "url")) {
131 cgit_parse_url(value); 131 cgit_parse_url(value);
132 } else if (!strcmp(name, "qt")) { 132 } else if (!strcmp(name, "qt")) {
133 ctx.qry.grep = xstrdup(value); 133 ctx.qry.grep = xstrdup(value);
134 } else if (!strcmp(name, "q")) { 134 } else if (!strcmp(name, "q")) {
135 ctx.qry.search = xstrdup(value); 135 ctx.qry.search = xstrdup(value);
136 } else if (!strcmp(name, "h")) { 136 } else if (!strcmp(name, "h")) {
137 ctx.qry.head = xstrdup(value); 137 ctx.qry.head = xstrdup(value);
138 ctx.qry.has_symref = 1; 138 ctx.qry.has_symref = 1;
139 } else if (!strcmp(name, "id")) { 139 } else if (!strcmp(name, "id")) {
140 ctx.qry.sha1 = xstrdup(value); 140 ctx.qry.sha1 = xstrdup(value);
141 ctx.qry.has_sha1 = 1; 141 ctx.qry.has_sha1 = 1;
142 } else if (!strcmp(name, "id2")) { 142 } else if (!strcmp(name, "id2")) {
143 ctx.qry.sha2 = xstrdup(value); 143 ctx.qry.sha2 = xstrdup(value);
144 ctx.qry.has_sha1 = 1; 144 ctx.qry.has_sha1 = 1;
145 } else if (!strcmp(name, "ofs")) { 145 } else if (!strcmp(name, "ofs")) {
146 ctx.qry.ofs = atoi(value); 146 ctx.qry.ofs = atoi(value);
147 } else if (!strcmp(name, "path")) { 147 } else if (!strcmp(name, "path")) {
148 ctx.qry.path = trim_end(value, '/'); 148 ctx.qry.path = trim_end(value, '/');
149 } else if (!strcmp(name, "name")) { 149 } else if (!strcmp(name, "name")) {
150 ctx.qry.name = xstrdup(value); 150 ctx.qry.name = xstrdup(value);
151 } else if (!strcmp(name, "mimetype")) { 151 } else if (!strcmp(name, "mimetype")) {
152 ctx.qry.mimetype = xstrdup(value); 152 ctx.qry.mimetype = xstrdup(value);
153 } 153 }
154} 154}
155 155
156static void prepare_context(struct cgit_context *ctx) 156static void prepare_context(struct cgit_context *ctx)
157{ 157{
158 memset(ctx, 0, sizeof(ctx)); 158 memset(ctx, 0, sizeof(ctx));
159 ctx->cfg.agefile = "info/web/last-modified"; 159 ctx->cfg.agefile = "info/web/last-modified";
160 ctx->cfg.nocache = 0; 160 ctx->cfg.nocache = 0;
161 ctx->cfg.cache_size = 0; 161 ctx->cfg.cache_size = 0;
162 ctx->cfg.cache_dynamic_ttl = 5; 162 ctx->cfg.cache_dynamic_ttl = 5;
163 ctx->cfg.cache_max_create_time = 5; 163 ctx->cfg.cache_max_create_time = 5;
164 ctx->cfg.cache_repo_ttl = 5; 164 ctx->cfg.cache_repo_ttl = 5;
165 ctx->cfg.cache_root = CGIT_CACHE_ROOT; 165 ctx->cfg.cache_root = CGIT_CACHE_ROOT;
166 ctx->cfg.cache_root_ttl = 5; 166 ctx->cfg.cache_root_ttl = 5;
167 ctx->cfg.cache_static_ttl = -1; 167 ctx->cfg.cache_static_ttl = -1;
168 ctx->cfg.css = "/cgit.css"; 168 ctx->cfg.css = "/cgit.css";
169 ctx->cfg.logo = "/git-logo.png"; 169 ctx->cfg.logo = "/git-logo.png";
170 ctx->cfg.max_repo_count = 50; 170 ctx->cfg.max_repo_count = 50;
171 ctx->cfg.max_commit_count = 50; 171 ctx->cfg.max_commit_count = 50;
172 ctx->cfg.max_lock_attempts = 5; 172 ctx->cfg.max_lock_attempts = 5;
173 ctx->cfg.max_msg_len = 60; 173 ctx->cfg.max_msg_len = 80;
174 ctx->cfg.max_repodesc_len = 60; 174 ctx->cfg.max_repodesc_len = 80;
175 ctx->cfg.module_link = "./?repo=%s&page=commit&id=%s"; 175 ctx->cfg.module_link = "./?repo=%s&page=commit&id=%s";
176 ctx->cfg.renamelimit = -1; 176 ctx->cfg.renamelimit = -1;
177 ctx->cfg.robots = "index, nofollow"; 177 ctx->cfg.robots = "index, nofollow";
178 ctx->cfg.root_title = "Git repository browser"; 178 ctx->cfg.root_title = "Git repository browser";
179 ctx->cfg.root_desc = "a fast webinterface for the git dscm"; 179 ctx->cfg.root_desc = "a fast webinterface for the git dscm";
180 ctx->cfg.script_name = CGIT_SCRIPT_NAME; 180 ctx->cfg.script_name = CGIT_SCRIPT_NAME;
181 ctx->cfg.summary_branches = 10;
182 ctx->cfg.summary_log = 10;
183 ctx->cfg.summary_tags = 10;
181 ctx->page.mimetype = "text/html"; 184 ctx->page.mimetype = "text/html";
182 ctx->page.charset = PAGE_ENCODING; 185 ctx->page.charset = PAGE_ENCODING;
183 ctx->page.filename = NULL; 186 ctx->page.filename = NULL;
184 ctx->page.modified = time(NULL); 187 ctx->page.modified = time(NULL);
185 ctx->page.expires = ctx->page.modified; 188 ctx->page.expires = ctx->page.modified;
186} 189}
187 190
188struct refmatch { 191struct refmatch {
189 char *req_ref; 192 char *req_ref;
190 char *first_ref; 193 char *first_ref;
191 int match; 194 int match;
192}; 195};
193 196
194int find_current_ref(const char *refname, const unsigned char *sha1, 197int find_current_ref(const char *refname, const unsigned char *sha1,
195 int flags, void *cb_data) 198 int flags, void *cb_data)
196{ 199{
197 struct refmatch *info; 200 struct refmatch *info;
198 201
199 info = (struct refmatch *)cb_data; 202 info = (struct refmatch *)cb_data;
200 if (!strcmp(refname, info->req_ref)) 203 if (!strcmp(refname, info->req_ref))
201 info->match = 1; 204 info->match = 1;
202 if (!info->first_ref) 205 if (!info->first_ref)
203 info->first_ref = xstrdup(refname); 206 info->first_ref = xstrdup(refname);
204 return info->match; 207 return info->match;
205} 208}
206 209
207char *find_default_branch(struct cgit_repo *repo) 210char *find_default_branch(struct cgit_repo *repo)
208{ 211{
209 struct refmatch info; 212 struct refmatch info;
210 char *ref; 213 char *ref;
211 214
212 info.req_ref = repo->defbranch; 215 info.req_ref = repo->defbranch;
213 info.first_ref = NULL; 216 info.first_ref = NULL;
214 info.match = 0; 217 info.match = 0;
215 for_each_branch_ref(find_current_ref, &info); 218 for_each_branch_ref(find_current_ref, &info);
216 if (info.match) 219 if (info.match)
217 ref = info.req_ref; 220 ref = info.req_ref;
218 else 221 else
219 ref = info.first_ref; 222 ref = info.first_ref;
220 if (ref) 223 if (ref)
221 ref = xstrdup(ref); 224 ref = xstrdup(ref);
222 return ref; 225 return ref;
223} 226}
224 227
225static int prepare_repo_cmd(struct cgit_context *ctx) 228static int prepare_repo_cmd(struct cgit_context *ctx)
226{ 229{
227 char *tmp; 230 char *tmp;
228 unsigned char sha1[20]; 231 unsigned char sha1[20];
229 int nongit = 0; 232 int nongit = 0;
230 233
231 setenv("GIT_DIR", ctx->repo->path, 1); 234 setenv("GIT_DIR", ctx->repo->path, 1);
232 setup_git_directory_gently(&nongit); 235 setup_git_directory_gently(&nongit);
233 if (nongit) { 236 if (nongit) {
234 ctx->page.title = fmt("%s - %s", ctx->cfg.root_title, 237 ctx->page.title = fmt("%s - %s", ctx->cfg.root_title,
235 "config error"); 238 "config error");
236 tmp = fmt("Not a git repository: '%s'", ctx->repo->path); 239 tmp = fmt("Not a git repository: '%s'", ctx->repo->path);
237 ctx->repo = NULL; 240 ctx->repo = NULL;
238 cgit_print_http_headers(ctx); 241 cgit_print_http_headers(ctx);
239 cgit_print_docstart(ctx); 242 cgit_print_docstart(ctx);
240 cgit_print_pageheader(ctx); 243 cgit_print_pageheader(ctx);
241 cgit_print_error(tmp); 244 cgit_print_error(tmp);
242 cgit_print_docend(); 245 cgit_print_docend();
243 return 1; 246 return 1;
244 } 247 }
245 ctx->page.title = fmt("%s - %s", ctx->repo->name, ctx->repo->desc); 248 ctx->page.title = fmt("%s - %s", ctx->repo->name, ctx->repo->desc);
246 249
247 if (!ctx->qry.head) { 250 if (!ctx->qry.head) {
248 ctx->qry.head = find_default_branch(ctx->repo); 251 ctx->qry.head = find_default_branch(ctx->repo);
249 ctx->repo->defbranch = ctx->qry.head; 252 ctx->repo->defbranch = ctx->qry.head;
250 } 253 }
251 254
252 if (!ctx->qry.head) { 255 if (!ctx->qry.head) {
253 cgit_print_http_headers(ctx); 256 cgit_print_http_headers(ctx);
254 cgit_print_docstart(ctx); 257 cgit_print_docstart(ctx);
255 cgit_print_pageheader(ctx); 258 cgit_print_pageheader(ctx);
256 cgit_print_error("Repository seems to be empty"); 259 cgit_print_error("Repository seems to be empty");
257 cgit_print_docend(); 260 cgit_print_docend();
258 return 1; 261 return 1;
259 } 262 }
260 263
261 if (get_sha1(ctx->qry.head, sha1)) { 264 if (get_sha1(ctx->qry.head, sha1)) {
262 tmp = xstrdup(ctx->qry.head); 265 tmp = xstrdup(ctx->qry.head);
263 ctx->qry.head = ctx->repo->defbranch; 266 ctx->qry.head = ctx->repo->defbranch;
264 cgit_print_http_headers(ctx); 267 cgit_print_http_headers(ctx);
265 cgit_print_docstart(ctx); 268 cgit_print_docstart(ctx);
266 cgit_print_pageheader(ctx); 269 cgit_print_pageheader(ctx);
267 cgit_print_error(fmt("Invalid branch: %s", tmp)); 270 cgit_print_error(fmt("Invalid branch: %s", tmp));
268 cgit_print_docend(); 271 cgit_print_docend();
269 return 1; 272 return 1;
270 } 273 }
271 return 0; 274 return 0;
272} 275}
273 276
274static void process_request(void *cbdata) 277static void process_request(void *cbdata)
275{ 278{
276 struct cgit_context *ctx = cbdata; 279 struct cgit_context *ctx = cbdata;
277 struct cgit_cmd *cmd; 280 struct cgit_cmd *cmd;
278 281
279 cmd = cgit_get_cmd(ctx); 282 cmd = cgit_get_cmd(ctx);
280 if (!cmd) { 283 if (!cmd) {
281 ctx->page.title = "cgit error"; 284 ctx->page.title = "cgit error";
282 ctx->repo = NULL; 285 ctx->repo = NULL;
283 cgit_print_http_headers(ctx); 286 cgit_print_http_headers(ctx);
284 cgit_print_docstart(ctx); 287 cgit_print_docstart(ctx);
285 cgit_print_pageheader(ctx); 288 cgit_print_pageheader(ctx);
286 cgit_print_error("Invalid request"); 289 cgit_print_error("Invalid request");
287 cgit_print_docend(); 290 cgit_print_docend();
288 return; 291 return;
289 } 292 }
290 293
291 if (cmd->want_repo && !ctx->repo) { 294 if (cmd->want_repo && !ctx->repo) {
292 cgit_print_http_headers(ctx); 295 cgit_print_http_headers(ctx);
293 cgit_print_docstart(ctx); 296 cgit_print_docstart(ctx);
294 cgit_print_pageheader(ctx); 297 cgit_print_pageheader(ctx);
295 cgit_print_error(fmt("No repository selected")); 298 cgit_print_error(fmt("No repository selected"));
296 cgit_print_docend(); 299 cgit_print_docend();
297 return; 300 return;
298 } 301 }
299 302
300 if (ctx->repo && prepare_repo_cmd(ctx)) 303 if (ctx->repo && prepare_repo_cmd(ctx))
301 return; 304 return;
302 305
303 if (cmd->want_layout) { 306 if (cmd->want_layout) {
304 cgit_print_http_headers(ctx); 307 cgit_print_http_headers(ctx);
305 cgit_print_docstart(ctx); 308 cgit_print_docstart(ctx);
306 cgit_print_pageheader(ctx); 309 cgit_print_pageheader(ctx);
307 } 310 }
308 311