aboutsummaryrefslogtreecommitdiffstats
path: root/shared.c
diff options
context:
space:
mode:
Diffstat (limited to 'shared.c')
-rw-r--r--shared.c49
1 files changed, 48 insertions, 1 deletions
diff --git a/shared.c b/shared.c
index 3d4feea..7eb2b0e 100644
--- a/shared.c
+++ b/shared.c
@@ -38,6 +38,8 @@ int cgit_cache_dynamic_ttl = 5;
38int cgit_cache_static_ttl = -1; 38int cgit_cache_static_ttl = -1;
39int cgit_cache_max_create_time = 5; 39int cgit_cache_max_create_time = 5;
40int cgit_summary_log = 0; 40int cgit_summary_log = 0;
41int cgit_summary_tags = 0;
42int cgit_summary_branches = 0;
41int cgit_renamelimit = -1; 43int cgit_renamelimit = -1;
42 44
43int cgit_max_msg_len = 60; 45int cgit_max_msg_len = 60;
@@ -64,7 +66,7 @@ int htmlfd = 0;
64int cgit_get_cmd_index(const char *cmd) 66int cgit_get_cmd_index(const char *cmd)
65{ 67{
66 static char *cmds[] = {"log", "commit", "diff", "tree", "blob", 68 static char *cmds[] = {"log", "commit", "diff", "tree", "blob",
67 "snapshot", "tag", NULL}; 69 "snapshot", "tag", "refs", NULL};
68 int i; 70 int i;
69 71
70 for(i = 0; cmds[i]; i++) 72 for(i = 0; cmds[i]; i++)
@@ -181,6 +183,10 @@ void cgit_global_config_cb(const char *name, const char *value)
181 cgit_max_commit_count = atoi(value); 183 cgit_max_commit_count = atoi(value);
182 else if (!strcmp(name, "summary-log")) 184 else if (!strcmp(name, "summary-log"))
183 cgit_summary_log = atoi(value); 185 cgit_summary_log = atoi(value);
186 else if (!strcmp(name, "summary-branches"))
187 cgit_summary_branches = atoi(value);
188 else if (!strcmp(name, "summary-tags"))
189 cgit_summary_tags = atoi(value);
184 else if (!strcmp(name, "agefile")) 190 else if (!strcmp(name, "agefile"))
185 cgit_agefile = xstrdup(value); 191 cgit_agefile = xstrdup(value);
186 else if (!strcmp(name, "renamelimit")) 192 else if (!strcmp(name, "renamelimit"))
@@ -291,6 +297,47 @@ char *trim_end(const char *str, char c)
291 return s; 297 return s;
292} 298}
293 299
300void cgit_add_ref(struct reflist *list, struct refinfo *ref)
301{
302 size_t size;
303
304 if (list->count >= list->alloc) {
305 list->alloc += (list->alloc ? list->alloc : 4);
306 size = list->alloc * sizeof(struct refinfo *);
307 list->refs = xrealloc(list->refs, size);
308 }
309 list->refs[list->count++] = ref;
310}
311
312struct refinfo *cgit_mk_refinfo(const char *refname, const unsigned char *sha1)
313{
314 struct refinfo *ref;
315
316 ref = xmalloc(sizeof (struct refinfo));
317 ref->refname = xstrdup(refname);
318 ref->object = parse_object(sha1);
319 switch (ref->object->type) {
320 case OBJ_TAG:
321 ref->tag = cgit_parse_tag((struct tag *)ref->object);
322 break;
323 case OBJ_COMMIT:
324 ref->commit = cgit_parse_commit((struct commit *)ref->object);
325 break;
326 }
327 return ref;
328}
329
330int cgit_refs_cb(const char *refname, const unsigned char *sha1, int flags,
331 void *cb_data)
332{
333 struct reflist *list = (struct reflist *)cb_data;
334 struct refinfo *info = cgit_mk_refinfo(refname, sha1);
335
336 if (info)
337 cgit_add_ref(list, info);
338 return 0;
339}
340
294void cgit_diff_tree_cb(struct diff_queue_struct *q, 341void cgit_diff_tree_cb(struct diff_queue_struct *q,
295 struct diff_options *options, void *data) 342 struct diff_options *options, void *data)
296{ 343{