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::
Text which specifies the default set of snapshot formats that cgit
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".
The special value "all" enables all snapshot formats.
more of the values "tar", "tar.gz", "tar.bz2", "tar.xz", "tar.lz" and
"zip". The special value "all" enables all snapshot formats.
Default value: none.
source-filter::

View File

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

View File

@ -38,6 +38,48 @@ test_expect_success 'verify untarred 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' '
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);
}
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)
{
char *argv[] = { "xz", NULL };
@ -90,6 +96,7 @@ const struct cgit_snapshot_format cgit_snapshot_formats[] = {
{ ".tar", "application/x-tar", write_tar_archive },
{ ".tar.gz", "application/x-gzip", write_tar_gzip_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 },
{ ".zip", "application/x-zip", write_zip_archive },
{ NULL }