@@ -465,12 +465,33 @@ static void tgz_write_block(const void *data)
static const char internal_gzip_command[] = "git archive gzip";
-static int write_tar_filter_archive(const struct archiver *ar,
- struct archiver_args *args)
+static int gzip_internally(const struct archiver *ar,
+ struct archiver_args *args)
{
#if ZLIB_VERNUM >= 0x1221
struct gz_header_s gzhead = { .os = 3 }; /* Unix, for reproducibility */
#endif
+ int r;
+
+ write_block = tgz_write_block;
+ git_deflate_init_gzip(&gzstream, args->compression_level);
+#if ZLIB_VERNUM >= 0x1221
+ if (deflateSetHeader(&gzstream.z, &gzhead) != Z_OK)
+ BUG("deflateSetHeader() called too late");
+#endif
+ gzstream.next_out = outbuf;
+ gzstream.avail_out = sizeof(outbuf);
+
+ r = write_tar_archive(ar, args);
+
+ tgz_deflate(Z_FINISH);
+ git_deflate_end(&gzstream);
+ return r;
+}
+
+static int write_tar_filter_archive(const struct archiver *ar,
+ struct archiver_args *args)
+{
struct strbuf cmd = STRBUF_INIT;
struct child_process filter = CHILD_PROCESS_INIT;
int r;
@@ -478,22 +499,8 @@ static int write_tar_filter_archive(const struct archiver *ar,
if (!ar->filter_command)
BUG("tar-filter archiver called with no filter defined");
- if (!strcmp(ar->filter_command, internal_gzip_command)) {
- write_block = tgz_write_block;
- git_deflate_init_gzip(&gzstream, args->compression_level);
-#if ZLIB_VERNUM >= 0x1221
- if (deflateSetHeader(&gzstream.z, &gzhead) != Z_OK)
- BUG("deflateSetHeader() called too late");
-#endif
- gzstream.next_out = outbuf;
- gzstream.avail_out = sizeof(outbuf);
-
- r = write_tar_archive(ar, args);
-
- tgz_deflate(Z_FINISH);
- git_deflate_end(&gzstream);
- return r;
- }
+ if (!strcmp(ar->filter_command, internal_gzip_command))
+ return gzip_internally(ar, args);
strbuf_addstr(&cmd, ar->filter_command);
if (args->compression_level >= 0)
Refactor the code added in 76d7602631a (archive-tar: add internal gzip implementation, 2022-06-15) to call the magic "git archive gzip" command as a function. A subsequent commit will start using this as a fallback, but for now there's no functional changes here. Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> --- archive-tar.c | 43 +++++++++++++++++++++++++------------------ 1 file changed, 25 insertions(+), 18 deletions(-)