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>
This commit is contained in:
Hanspeter Portner 2019-08-16 23:40:19 +02:00 committed by Jason A. Donenfeld
parent fde897b817
commit 06671f4b21
4 changed files with 52 additions and 3 deletions

View File

@ -407,8 +407,8 @@ side-by-side-diffs::
snapshots:: snapshots::
Text which specifies the default set of snapshot formats that cgit Text which specifies the default set of snapshot formats that cgit
generates links for. The value is a space-separated list of zero or generates links for. The value is a space-separated list of zero or
more of the values "tar", "tar.gz", "tar.bz2", "tar.xz" and "zip". more of the values "tar", "tar.gz", "tar.bz2", "tar.xz", "tar.lz" and
The special value "all" enables all snapshot formats. "zip". The special value "all" enables all snapshot formats.
Default value: none. Default value: none.
source-filter:: source-filter::

View File

@ -104,7 +104,7 @@ virtual-root=/
cache-root=$PWD/cache cache-root=$PWD/cache
cache-size=1021 cache-size=1021
snapshots=tar.gz tar.bz zip snapshots=tar.gz tar.bz tar.lz zip
enable-log-filecount=1 enable-log-filecount=1
enable-log-linecount=1 enable-log-linecount=1
summary-log=5 summary-log=5

View File

@ -38,6 +38,48 @@ test_expect_success 'verify untarred file-5' '
test_line_count = 1 master/file-5 test_line_count = 1 master/file-5
' '
if test -n "$(which lzip 2>/dev/null)"; then
test_set_prereq LZIP
else
say 'Skipping LZIP validation tests: lzip not found'
fi
test_expect_success LZIP 'get foo/snapshot/master.tar.lz' '
cgit_url "foo/snapshot/master.tar.lz" >tmp
'
test_expect_success LZIP 'check html headers' '
head -n 1 tmp |
grep "Content-Type: application/x-lzip" &&
head -n 2 tmp |
grep "Content-Disposition: inline; filename=.master.tar.lz."
'
test_expect_success LZIP 'strip off the header lines' '
strip_headers <tmp >master.tar.lz
'
test_expect_success LZIP 'verify lzip format' '
lzip --test master.tar.lz &&
cp master.tar.lz /tmp/.
'
test_expect_success LZIP 'untar' '
rm -rf master &&
tar --lzip -xf master.tar.lz
'
test_expect_success LZIP 'count files' '
ls master/ >output &&
test_line_count = 5 output
'
test_expect_success LZIP 'verify untarred file-5' '
grep "^5$" master/file-5 &&
test_line_count = 1 master/file-5
'
test_expect_success 'get foo/snapshot/master.zip' ' test_expect_success 'get foo/snapshot/master.zip' '
cgit_url "foo/snapshot/master.zip" >tmp cgit_url "foo/snapshot/master.zip" >tmp
' '

View File

@ -79,6 +79,12 @@ static int write_tar_bzip2_archive(const char *hex, const char *prefix)
return write_compressed_tar_archive(hex, prefix, argv); return write_compressed_tar_archive(hex, prefix, argv);
} }
static int write_tar_lzip_archive(const char *hex, const char *prefix)
{
char *argv[] = { "lzip", NULL };
return write_compressed_tar_archive(hex, prefix, argv);
}
static int write_tar_xz_archive(const char *hex, const char *prefix) static int write_tar_xz_archive(const char *hex, const char *prefix)
{ {
char *argv[] = { "xz", NULL }; char *argv[] = { "xz", NULL };
@ -90,6 +96,7 @@ const struct cgit_snapshot_format cgit_snapshot_formats[] = {
{ ".tar", "application/x-tar", write_tar_archive }, { ".tar", "application/x-tar", write_tar_archive },
{ ".tar.gz", "application/x-gzip", write_tar_gzip_archive }, { ".tar.gz", "application/x-gzip", write_tar_gzip_archive },
{ ".tar.bz2", "application/x-bzip2", write_tar_bzip2_archive }, { ".tar.bz2", "application/x-bzip2", write_tar_bzip2_archive },
{ ".tar.lz", "application/x-lzip", write_tar_lzip_archive },
{ ".tar.xz", "application/x-xz", write_tar_xz_archive }, { ".tar.xz", "application/x-xz", write_tar_xz_archive },
{ ".zip", "application/x-zip", write_zip_archive }, { ".zip", "application/x-zip", write_zip_archive },
{ NULL } { NULL }