Skip to content

Commit d938a1f

Browse files
r1walzGit for Windows Build Agent
authored andcommitted
archive: avoid spawning gzip
As we already link to the zlib library, we can perform the compression without even requiring gzip on the host machine. Signed-off-by: Rohit Ashiwal <[email protected]> Signed-off-by: Johannes Schindelin <[email protected]>
1 parent 88eb8bb commit d938a1f

File tree

1 file changed

+25
-9
lines changed

1 file changed

+25
-9
lines changed

archive-tar.c

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -473,18 +473,34 @@ static int write_tar_filter_archive(const struct archiver *ar,
473473
filter.use_shell = 1;
474474
filter.in = -1;
475475

476-
if (start_command(&filter) < 0)
477-
die_errno(_("unable to start '%s' filter"), argv[0]);
478-
close(1);
479-
if (dup2(filter.in, 1) < 0)
480-
die_errno(_("unable to redirect descriptor"));
481-
close(filter.in);
476+
if (!strcmp("gzip -cn", ar->data)) {
477+
char outmode[4] = "wb\0";
478+
479+
if (args->compression_level >= 0 && args->compression_level <= 9)
480+
outmode[2] = '0' + args->compression_level;
481+
482+
gzip = gzdopen(fileno(stdout), outmode);
483+
if (!gzip)
484+
die(_("Could not gzdopen stdout"));
485+
} else {
486+
if (start_command(&filter) < 0)
487+
die_errno(_("unable to start '%s' filter"), argv[0]);
488+
close(1);
489+
if (dup2(filter.in, 1) < 0)
490+
die_errno(_("unable to redirect descriptor"));
491+
close(filter.in);
492+
}
482493

483494
r = write_tar_archive(ar, args);
484495

485-
close(1);
486-
if (finish_command(&filter) != 0)
487-
die(_("'%s' filter reported error"), argv[0]);
496+
if (gzip) {
497+
if (gzclose(gzip) != Z_OK)
498+
die(_("gzclose failed"));
499+
} else {
500+
close(1);
501+
if (finish_command(&filter) != 0)
502+
die(_("'%s' filter reported error"), argv[0]);
503+
}
488504

489505
strbuf_release(&cmd);
490506
return r;

0 commit comments

Comments
 (0)