diff options
author | Hanspeter Portner | 2019-08-16 23:40:19 +0200 |
---|---|---|
committer | Jason A. Donenfeld | 2020-02-26 09:57:40 +0800 |
commit | 06671f4b2167951c6b46401b0f5ac8af4d48d50a (patch) | |
tree | 99611b13d44424fa1eb27ea9c3700d9d535f432d | |
parent | git: update to v2.25.1 (diff) | |
download | cgit-06671f4b2167951c6b46401b0f5ac8af4d48d50a.tar.gz cgit-06671f4b2167951c6b46401b0f5ac8af4d48d50a.zip |
ui-snapshot: add support for lzip compression
This patch adds support for lzip [1] compressed snapshots (*.tar.lz) [1] https://www.nongnu.org/lzip/ Signed-off-by: Hanspeter Portner <dev@open-music-kontrollers.ch> Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
-rw-r--r-- | cgitrc.5.txt | 4 | ||||
-rwxr-xr-x | tests/setup.sh | 2 | ||||
-rwxr-xr-x | tests/t0107-snapshot.sh | 42 | ||||
-rw-r--r-- | ui-snapshot.c | 7 |
4 files changed, 52 insertions, 3 deletions
diff --git a/cgitrc.5.txt b/cgitrc.5.txt index ba77826..4ad3e64 100644 --- a/cgitrc.5.txt +++ b/cgitrc.5.txt | |||
@@ -407,8 +407,8 @@ side-by-side-diffs:: | |||
407 | snapshots:: | 407 | snapshots:: |
408 | Text which specifies the default set of snapshot formats that cgit | 408 | Text which specifies the default set of snapshot formats that cgit |
409 | generates links for. The value is a space-separated list of zero or | 409 | generates links for. The value is a space-separated list of zero or |
410 | more of the values "tar", "tar.gz", "tar.bz2", "tar.xz" and "zip". | 410 | more of the values "tar", "tar.gz", "tar.bz2", "tar.xz", "tar.lz" and |
411 | The special value "all" enables all snapshot formats. | 411 | "zip". The special value "all" enables all snapshot formats. |
412 | Default value: none. | 412 | Default value: none. |
413 | 413 | ||
414 | source-filter:: | 414 | source-filter:: |
diff --git a/tests/setup.sh b/tests/setup.sh index 7590f04..69e47e6 100755 --- a/tests/setup.sh +++ b/tests/setup.sh | |||
@@ -104,7 +104,7 @@ virtual-root=/ | |||
104 | cache-root=$PWD/cache | 104 | cache-root=$PWD/cache |
105 | 105 | ||
106 | cache-size=1021 | 106 | cache-size=1021 |
107 | snapshots=tar.gz tar.bz zip | 107 | snapshots=tar.gz tar.bz tar.lz zip |
108 | enable-log-filecount=1 | 108 | enable-log-filecount=1 |
109 | enable-log-linecount=1 | 109 | enable-log-linecount=1 |
110 | summary-log=5 | 110 | summary-log=5 |
diff --git a/tests/t0107-snapshot.sh b/tests/t0107-snapshot.sh index 6cf7aaa..a845ad9 100755 --- a/tests/t0107-snapshot.sh +++ b/tests/t0107-snapshot.sh | |||
@@ -38,6 +38,48 @@ test_expect_success 'verify untarred file-5' ' | |||
38 | test_line_count = 1 master/file-5 | 38 | test_line_count = 1 master/file-5 |
39 | ' | 39 | ' |
40 | 40 | ||
41 | if test -n "$(which lzip 2>/dev/null)"; then | ||
42 | test_set_prereq LZIP | ||
43 | else | ||
44 | say 'Skipping LZIP validation tests: lzip not found' | ||
45 | fi | ||
46 | |||
47 | test_expect_success LZIP 'get foo/snapshot/master.tar.lz' ' | ||
48 | cgit_url "foo/snapshot/master.tar.lz" >tmp | ||
49 | ' | ||
50 | |||
51 | test_expect_success LZIP 'check html headers' ' | ||
52 | head -n 1 tmp | | ||
53 | grep "Content-Type: application/x-lzip" && | ||
54 | |||
55 | head -n 2 tmp | | ||
56 | grep "Content-Disposition: inline; filename=.master.tar.lz." | ||
57 | ' | ||
58 | |||
59 | test_expect_success LZIP 'strip off the header lines' ' | ||
60 | strip_headers <tmp >master.tar.lz | ||
61 | ' | ||
62 | |||
63 | test_expect_success LZIP 'verify lzip format' ' | ||
64 | lzip --test master.tar.lz && | ||
65 | cp master.tar.lz /tmp/. | ||
66 | ' | ||
67 | |||
68 | test_expect_success LZIP 'untar' ' | ||
69 | rm -rf master && | ||
70 | tar --lzip -xf master.tar.lz | ||
71 | ' | ||
72 | |||
73 | test_expect_success LZIP 'count files' ' | ||
74 | ls master/ >output && | ||
75 | test_line_count = 5 output | ||
76 | ' | ||
77 | |||
78 | test_expect_success LZIP 'verify untarred file-5' ' | ||
79 | grep "^5$" master/file-5 && | ||
80 | test_line_count = 1 master/file-5 | ||
81 | ' | ||
82 | |||
41 | test_expect_success 'get foo/snapshot/master.zip' ' | 83 | test_expect_success 'get foo/snapshot/master.zip' ' |
42 | cgit_url "foo/snapshot/master.zip" >tmp | 84 | cgit_url "foo/snapshot/master.zip" >tmp |
43 | ' | 85 | ' |
diff --git a/ui-snapshot.c b/ui-snapshot.c index 9461d51..92cde42 100644 --- a/ui-snapshot.c +++ b/ui-snapshot.c | |||
@@ -79,6 +79,12 @@ static int write_tar_bzip2_archive(const char *hex, const char *prefix) | |||
79 | return write_compressed_tar_archive(hex, prefix, argv); | 79 | return write_compressed_tar_archive(hex, prefix, argv); |
80 | } | 80 | } |
81 | 81 | ||
82 | static int write_tar_lzip_archive(const char *hex, const char *prefix) | ||
83 | { | ||
84 | char *argv[] = { "lzip", NULL }; | ||
85 | return write_compressed_tar_archive(hex, prefix, argv); | ||
86 | } | ||
87 | |||
82 | static int write_tar_xz_archive(const char *hex, const char *prefix) | 88 | static int write_tar_xz_archive(const char *hex, const char *prefix) |
83 | { | 89 | { |
84 | char *argv[] = { "xz", NULL }; | 90 | char *argv[] = { "xz", NULL }; |
@@ -90,6 +96,7 @@ const struct cgit_snapshot_format cgit_snapshot_formats[] = { | |||
90 | { ".tar", "application/x-tar", write_tar_archive }, | 96 | { ".tar", "application/x-tar", write_tar_archive }, |
91 | { ".tar.gz", "application/x-gzip", write_tar_gzip_archive }, | 97 | { ".tar.gz", "application/x-gzip", write_tar_gzip_archive }, |
92 | { ".tar.bz2", "application/x-bzip2", write_tar_bzip2_archive }, | 98 | { ".tar.bz2", "application/x-bzip2", write_tar_bzip2_archive }, |
99 | { ".tar.lz", "application/x-lzip", write_tar_lzip_archive }, | ||
93 | { ".tar.xz", "application/x-xz", write_tar_xz_archive }, | 100 | { ".tar.xz", "application/x-xz", write_tar_xz_archive }, |
94 | { ".zip", "application/x-zip", write_zip_archive }, | 101 | { ".zip", "application/x-zip", write_zip_archive }, |
95 | { NULL } | 102 | { NULL } |