summaryrefslogtreecommitdiffabout
path: root/shared.c
Unidiff
Diffstat (limited to 'shared.c') (more/less context) (ignore whitespace changes)
-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
@@ -286,16 +286,57 @@ char *trim_end(const char *str, char c)
286 286
287 c = t[len]; 287 c = t[len];
288 t[len] = '\0'; 288 t[len] = '\0';
289 s = xstrdup(t); 289 s = xstrdup(t);
290 t[len] = c; 290 t[len] = 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{
297 int i; 338 int i;
298 339
299 for (i = 0; i < q->nr; i++) { 340 for (i = 0; i < q->nr; i++) {
300 if (q->queue[i]->status == 'U') 341 if (q->queue[i]->status == 'U')
301 continue; 342 continue;