summaryrefslogtreecommitdiffabout
authorLars Hjemli <hjemli@gmail.com>2008-10-05 11:13:03 (UTC)
committer Lars Hjemli <hjemli@gmail.com>2008-10-05 11:13:03 (UTC)
commit204669ff4a4028a82cc48e9319632595ba3ff703 (patch) (unidiff)
treeb951f29e966e13fb62f9edfdf51cbdfb19e9c868
parentf82b19407dd876e6c02a572615bf34b09f6fa831 (diff)
downloadcgit-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>
Diffstat (more/less context) (ignore whitespace changes)
-rwxr-xr-xtests/t0107-snapshot.sh5
-rw-r--r--ui-snapshot.c8
2 files changed, 11 insertions, 2 deletions
diff --git a/tests/t0107-snapshot.sh b/tests/t0107-snapshot.sh
index 8e90e10..d97c465 100755
--- a/tests/t0107-snapshot.sh
+++ b/tests/t0107-snapshot.sh
@@ -8,29 +8,32 @@ run_test 'get foo/snapshot/test.tar.gz' '
8 cgit_url "foo/snapshot/test.tar.gz" >trash/tmp 8 cgit_url "foo/snapshot/test.tar.gz" >trash/tmp
9' 9'
10 10
11run_test 'check html headers' ' 11run_test 'check html headers' '
12 head -n 1 trash/tmp | 12 head -n 1 trash/tmp |
13 grep -e "Content-Type: application/x-tar" && 13 grep -e "Content-Type: application/x-tar" &&
14 14
15 head -n 2 trash/tmp | 15 head -n 2 trash/tmp |
16 grep -e "Content-Disposition: inline; filename=.test.tar.gz." 16 grep -e "Content-Disposition: inline; filename=.test.tar.gz."
17' 17'
18 18
19run_test 'strip off the header lines' ' 19run_test 'strip off the header lines' '
20 tail -n +6 trash/tmp > trash/test.tar.gz 20 tail -n +6 trash/tmp > trash/test.tar.gz
21' 21'
22 22
23run_test 'verify gzip format' 'gunzip --test trash/test.tar.gz' 23run_test 'verify gzip format' 'gunzip --test trash/test.tar.gz'
24run_test 'untar' 'tar -xf trash/test.tar.gz -C trash' 24run_test 'untar' '
25 rm -rf trash/foo &&
26 tar -xf trash/test.tar.gz -C trash
27'
25 28
26run_test 'count files' ' 29run_test 'count files' '
27 c=$(ls -1 trash/foo/ | wc -l) && 30 c=$(ls -1 trash/foo/ | wc -l) &&
28 test $c = 5 31 test $c = 5
29' 32'
30 33
31run_test 'verify untarred file-5' ' 34run_test 'verify untarred file-5' '
32 grep -e "^5$" trash/foo/file-5 && 35 grep -e "^5$" trash/foo/file-5 &&
33 test $(cat trash/foo/file-5 | wc -l) = 1 36 test $(cat trash/foo/file-5 | wc -l) = 1
34' 37'
35 38
36tests_done 39tests_done
diff --git a/ui-snapshot.c b/ui-snapshot.c
index 966a140..7a597ff 100644
--- a/ui-snapshot.c
+++ b/ui-snapshot.c
@@ -69,33 +69,39 @@ static int make_snapshot(const struct cgit_snapshot_format *format,
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
95void cgit_print_snapshot(const char *head, const char *hex, const char *prefix, 101void 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);