about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorHanspeter Portner2019-08-16 23:40:19 +0200
committerJason A. Donenfeld2020-02-26 09:57:40 +0800
commit06671f4b2167951c6b46401b0f5ac8af4d48d50a (patch)
tree99611b13d44424fa1eb27ea9c3700d9d535f432d
parentgit: update to v2.25.1 (diff)
downloadcgit-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.txt4
-rwxr-xr-xtests/setup.sh2
-rwxr-xr-xtests/t0107-snapshot.sh42
-rw-r--r--ui-snapshot.c7
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::
407snapshots:: 407snapshots::
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
414source-filter:: 414source-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=/
104cache-root=$PWD/cache 104cache-root=$PWD/cache
105 105
106cache-size=1021 106cache-size=1021
107snapshots=tar.gz tar.bz zip 107snapshots=tar.gz tar.bz tar.lz zip
108enable-log-filecount=1 108enable-log-filecount=1
109enable-log-linecount=1 109enable-log-linecount=1
110summary-log=5 110summary-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
41if test -n "$(which lzip 2>/dev/null)"; then
42 test_set_prereq LZIP
43else
44 say 'Skipping LZIP validation tests: lzip not found'
45fi
46
47test_expect_success LZIP 'get foo/snapshot/master.tar.lz' '
48 cgit_url "foo/snapshot/master.tar.lz" >tmp
49'
50
51test_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
59test_expect_success LZIP 'strip off the header lines' '
60 strip_headers <tmp >master.tar.lz
61'
62
63test_expect_success LZIP 'verify lzip format' '
64 lzip --test master.tar.lz &&
65 cp master.tar.lz /tmp/.
66'
67
68test_expect_success LZIP 'untar' '
69 rm -rf master &&
70 tar --lzip -xf master.tar.lz
71'
72
73test_expect_success LZIP 'count files' '
74 ls master/ >output &&
75 test_line_count = 5 output
76'
77
78test_expect_success LZIP 'verify untarred file-5' '
79 grep "^5$" master/file-5 &&
80 test_line_count = 1 master/file-5
81'
82
41test_expect_success 'get foo/snapshot/master.zip' ' 83test_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
82static 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
82static int write_tar_xz_archive(const char *hex, const char *prefix) 88static 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 }