cgit

commit 055e092a330098f6b9177266facf43029dbe1883

Author: Jason A. Donenfeld <Jason@zx2c4.com>

ui-snapshot: pass -n to gzip, to suppress timestamp

Since cgit snapshots of tags are often used for releases, we don't
want the rarely used feature of the gzip compressor that includes
an embedded timestamp into the archive, since this makes each tarball
of the same (potentially signed) tag different.

This commit refactors the archive handling code a bit so that each
different format is able to run with an arbitrary argv for the filter.

 ui-snapshot.c | 18 ++++++++++--------


diff --git a/ui-snapshot.c b/ui-snapshot.c
index 07cc944525c53096b5c429f25fd2b29c68eaa28f..47432bd325759178aa0a30389ae04c11adf340b1 100644
--- a/ui-snapshot.c
+++ b/ui-snapshot.c
@@ -1,6 +1,7 @@
 /* ui-snapshot.c: generate snapshot of a commit
  *
  * Copyright (C) 2006 Lars Hjemli
+ * Copyright (C) 2012 Jason A. Donenfeld <Jason@zx2c4.com>
  *
  * Licensed under GNU General Public License v2
  *   (see COPYING for full license text)
@@ -10,15 +11,13 @@ #include "cgit.h"
 #include "html.h"
 #include "ui-shared.h"
 
-static int write_compressed_tar_archive(struct archiver_args *args,const char *filter)
+static int write_compressed_tar_archive(struct archiver_args *args, char *filter_argv[])
 {
 	int rv;
 	struct cgit_filter f;
 
-	f.cmd = xstrdup(filter);
-	f.argv = malloc(2 * sizeof(char *));
-	f.argv[0] = f.cmd;
-	f.argv[1] = NULL;
+	f.cmd = filter_argv[0];
+	f.argv = filter_argv;
 	cgit_open_filter(&f);
 	rv = write_tar_archive(args);
 	cgit_close_filter(&f);
@@ -27,17 +26,20 @@ }
 
 static int write_tar_gzip_archive(struct archiver_args *args)
 {
-	return write_compressed_tar_archive(args,"gzip");
+	char *argv[] = { "gzip", "-n", NULL };
+	return write_compressed_tar_archive(args, argv);
 }
 
 static int write_tar_bzip2_archive(struct archiver_args *args)
 {
-	return write_compressed_tar_archive(args,"bzip2");
+	char *argv[] = { "bzip2", NULL };
+	return write_compressed_tar_archive(args, argv);
 }
 
 static int write_tar_xz_archive(struct archiver_args *args)
 {
-	return write_compressed_tar_archive(args,"xz");
+	char *argv[] = { "xz", NULL };
+	return write_compressed_tar_archive(args, argv);
 }
 
 const struct cgit_snapshot_format cgit_snapshot_formats[] = {