aboutsummaryrefslogtreecommitdiffstats
path: root/shared.c
diff options
context:
space:
mode:
authorLars Hjemli2007-10-25 09:30:06 +0200
committerLars Hjemli2007-10-27 09:34:15 +0200
commite397ff7024293223f48f235fcf072fc526cae7af (patch)
treecc88ee930bfc40dc1ebaad237345f79ad1085386 /shared.c
parent47bae9f58d5ecae437767b8e7835b23ad1804d0b (diff)
downloadcgit-e397ff7024293223f48f235fcf072fc526cae7af.tar.gz
cgit-e397ff7024293223f48f235fcf072fc526cae7af.tar.bz2
cgit-e397ff7024293223f48f235fcf072fc526cae7af.zip
Add functions and types for ref lists
This adds two structs, refinfo and reflist, and functions for building a list of refs. Signed-off-by: Lars Hjemli <hjemli@gmail.com>
Diffstat (limited to 'shared.c')
-rw-r--r--shared.c41
1 files changed, 41 insertions, 0 deletions
diff --git a/shared.c b/shared.c
index 3d4feea..d815cb1 100644
--- a/shared.c
+++ b/shared.c
@@ -291,6 +291,47 @@ char *trim_end(const char *str, char c)
291 return s; 291 return s;
292} 292}
293 293
294void cgit_add_ref(struct reflist *list, struct refinfo *ref)
295{
296 size_t size;
297
298 if (list->count >= list->alloc) {
299 list->alloc += (list->alloc ? list->alloc : 4);
300 size = list->alloc * sizeof(struct refinfo *);
301 list->refs = xrealloc(list->refs, size);
302 }
303 list->refs[list->count++] = ref;
304}
305
306struct refinfo *cgit_mk_refinfo(const char *refname, const unsigned char *sha1)
307{
308 struct refinfo *ref;
309
310 ref = xmalloc(sizeof (struct refinfo));
311 ref->refname = xstrdup(refname);
312 ref->object = parse_object(sha1);
313 switch (ref->object->type) {
314 case OBJ_TAG:
315 ref->tag = cgit_parse_tag((struct tag *)ref->object);
316 break;
317 case OBJ_COMMIT:
318 ref->commit = cgit_parse_commit((struct commit *)ref->object);
319 break;
320 }
321 return ref;
322}
323
324int cgit_refs_cb(const char *refname, const unsigned char *sha1, int flags,
325 void *cb_data)
326{
327 struct reflist *list = (struct reflist *)cb_data;
328 struct refinfo *info = cgit_mk_refinfo(refname, sha1);
329
330 if (info)
331 cgit_add_ref(list, info);
332 return 0;
333}
334
294void cgit_diff_tree_cb(struct diff_queue_struct *q, 335void cgit_diff_tree_cb(struct diff_queue_struct *q,
295 struct diff_options *options, void *data) 336 struct diff_options *options, void *data)
296{ 337{