all repos — cgit @ 1f34fb9d4f0bf82706ed8912c37a4b320a14813b

a hyperfast web frontend for git written in c

ui-snapshot.c (view raw)

 1/* ui-snapshot.c: generate snapshot of a commit
 2 *
 3 * Copyright (C) 2006 Lars Hjemli
 4 *
 5 * Licensed under GNU General Public License v2
 6 *   (see COPYING for full license text)
 7 */
 8
 9#include "cgit.h"
10
11static void cgit_print_zip(struct cacheitem *item, const char *hex, 
12			   const char *prefix, const char *filename)
13{
14	struct archiver_args args;
15	struct commit *commit;
16	unsigned char sha1[20];
17
18	if (get_sha1(hex, sha1)) {
19		cgit_print_error(fmt("Bad object id: %s", hex));
20		return;
21	}
22	commit = lookup_commit_reference(sha1);
23
24	if (!commit) {
25		cgit_print_error(fmt("Not a commit reference: %s", hex));
26		return;
27	}
28
29	memset(&args, 0, sizeof(args));
30	args.base = fmt("%s/", prefix);
31	args.tree = commit->tree;
32	
33	cgit_print_snapshot_start("application/x-zip", filename, item);
34	write_zip_archive(&args);
35}
36
37
38void cgit_print_snapshot(struct cacheitem *item, const char *hex, 
39			 const char *format, const char *prefix,
40			 const char *filename)
41{
42	if (!strcmp(format, "zip"))
43		cgit_print_zip(item, hex, prefix, filename);
44	else
45		cgit_print_error(fmt("Unsupported snapshot format: %s", 
46				     format));
47}