author | Lars Hjemli <hjemli@gmail.com> | 2008-10-05 11:13:03 (UTC) |
---|---|---|
committer | Lars Hjemli <hjemli@gmail.com> | 2008-10-05 11:13:03 (UTC) |
commit | 204669ff4a4028a82cc48e9319632595ba3ff703 (patch) (unidiff) | |
tree | b951f29e966e13fb62f9edfdf51cbdfb19e9c868 /ui-snapshot.c | |
parent | f82b19407dd876e6c02a572615bf34b09f6fa831 (diff) | |
download | cgit-204669ff4a4028a82cc48e9319632595ba3ff703.zip cgit-204669ff4a4028a82cc48e9319632595ba3ff703.tar.gz cgit-204669ff4a4028a82cc48e9319632595ba3ff703.tar.bz2 |
ui-snapshot.c: specify archiver_args.baselen
The struct member was introduces in git commit d53fe8187c38, but the cgit
testsuite failed to detect that cgit always generated archives without
prefixes, i.e. the result from cgit_repobasename was ignored.
This fixes the bug and the testsuite.
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
-rw-r--r-- | ui-snapshot.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/ui-snapshot.c b/ui-snapshot.c index 966a140..7a597ff 100644 --- a/ui-snapshot.c +++ b/ui-snapshot.c | |||
@@ -61,49 +61,55 @@ const struct cgit_snapshot_format cgit_snapshot_formats[] = { | |||
61 | { ".tar.gz", "application/x-tar", write_tar_gzip_archive, 0x2 }, | 61 | { ".tar.gz", "application/x-tar", write_tar_gzip_archive, 0x2 }, |
62 | { ".tar.bz2", "application/x-tar", write_tar_bzip2_archive, 0x4 }, | 62 | { ".tar.bz2", "application/x-tar", write_tar_bzip2_archive, 0x4 }, |
63 | { ".tar", "application/x-tar", write_tar_archive, 0x8 }, | 63 | { ".tar", "application/x-tar", write_tar_archive, 0x8 }, |
64 | {} | 64 | {} |
65 | }; | 65 | }; |
66 | 66 | ||
67 | static int make_snapshot(const struct cgit_snapshot_format *format, | 67 | static int make_snapshot(const struct cgit_snapshot_format *format, |
68 | const char *hex, const char *prefix, | 68 | const char *hex, const char *prefix, |
69 | const char *filename) | 69 | const char *filename) |
70 | { | 70 | { |
71 | struct archiver_args args; | 71 | struct archiver_args args; |
72 | struct commit *commit; | 72 | struct commit *commit; |
73 | unsigned char sha1[20]; | 73 | unsigned char sha1[20]; |
74 | 74 | ||
75 | if(get_sha1(hex, sha1)) { | 75 | if(get_sha1(hex, sha1)) { |
76 | cgit_print_error(fmt("Bad object id: %s", hex)); | 76 | cgit_print_error(fmt("Bad object id: %s", hex)); |
77 | return 1; | 77 | return 1; |
78 | } | 78 | } |
79 | commit = lookup_commit_reference(sha1); | 79 | commit = lookup_commit_reference(sha1); |
80 | if(!commit) { | 80 | if(!commit) { |
81 | cgit_print_error(fmt("Not a commit reference: %s", hex)); | 81 | cgit_print_error(fmt("Not a commit reference: %s", hex)); |
82 | return 1; | 82 | return 1; |
83 | } | 83 | } |
84 | memset(&args, 0, sizeof(args)); | 84 | memset(&args, 0, sizeof(args)); |
85 | args.base = fmt("%s/", prefix); | 85 | if (prefix) { |
86 | args.base = fmt("%s/", prefix); | ||
87 | args.baselen = strlen(prefix) + 1; | ||
88 | } else { | ||
89 | args.base = ""; | ||
90 | args.baselen = 0; | ||
91 | } | ||
86 | args.tree = commit->tree; | 92 | args.tree = commit->tree; |
87 | args.time = commit->date; | 93 | args.time = commit->date; |
88 | ctx.page.mimetype = xstrdup(format->mimetype); | 94 | ctx.page.mimetype = xstrdup(format->mimetype); |
89 | ctx.page.filename = xstrdup(filename); | 95 | ctx.page.filename = xstrdup(filename); |
90 | cgit_print_http_headers(&ctx); | 96 | cgit_print_http_headers(&ctx); |
91 | format->write_func(&args); | 97 | format->write_func(&args); |
92 | return 0; | 98 | return 0; |
93 | } | 99 | } |
94 | 100 | ||
95 | void cgit_print_snapshot(const char *head, const char *hex, const char *prefix, | 101 | void cgit_print_snapshot(const char *head, const char *hex, const char *prefix, |
96 | const char *filename, int snapshots) | 102 | const char *filename, int snapshots) |
97 | { | 103 | { |
98 | const struct cgit_snapshot_format* f; | 104 | const struct cgit_snapshot_format* f; |
99 | int sl, fnl; | 105 | int sl, fnl; |
100 | 106 | ||
101 | fnl = strlen(filename); | 107 | fnl = strlen(filename); |
102 | if (!hex) | 108 | if (!hex) |
103 | hex = head; | 109 | hex = head; |
104 | for (f = cgit_snapshot_formats; f->suffix; f++) { | 110 | for (f = cgit_snapshot_formats; f->suffix; f++) { |
105 | if (!(snapshots & f->bit)) | 111 | if (!(snapshots & f->bit)) |
106 | continue; | 112 | continue; |
107 | sl = strlen(f->suffix); | 113 | sl = strlen(f->suffix); |
108 | if(fnl < sl || strcmp(&filename[fnl-sl], f->suffix)) | 114 | if(fnl < sl || strcmp(&filename[fnl-sl], f->suffix)) |
109 | continue; | 115 | continue; |