diff options
author | Lars Hjemli <hjemli@gmail.com> | 2007-10-25 16:30:06 (JST) |
---|---|---|
committer | Lars Hjemli <hjemli@gmail.com> | 2007-10-27 16:34:15 (JST) |
commit | e397ff7024293223f48f235fcf072fc526cae7af (patch) | |
tree | cc88ee930bfc40dc1ebaad237345f79ad1085386 /shared.c | |
parent | 47bae9f58d5ecae437767b8e7835b23ad1804d0b (diff) | |
download | cgit-e397ff7024293223f48f235fcf072fc526cae7af.zip cgit-e397ff7024293223f48f235fcf072fc526cae7af.tar.gz |
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.c | 41 |
1 files changed, 41 insertions, 0 deletions
@@ -291,6 +291,47 @@ char *trim_end(const char *str, char c) | |||
291 | return s; | 291 | return s; |
292 | } | 292 | } |
293 | 293 | ||
294 | void 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 | |||
306 | struct 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 | |||
324 | int 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 | |||
294 | void cgit_diff_tree_cb(struct diff_queue_struct *q, | 335 | void 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 | { |