]> gitweb.ps.run Git - ps-cgit/blob - ui-snapshot.c
Add support for downloading single blobs
[ps-cgit] / ui-snapshot.c
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
11 static 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
38 void 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 }