Skip to content

Commit eb948f7

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 19b68a0 commit eb948f7

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
@@ -458,18 +458,34 @@ static int write_tar_filter_archive(const struct archiver *ar,
458458
filter.use_shell = 1;
459459
filter.in = -1;
460460

461-
if (start_command(&filter) < 0)
462-
die_errno(_("unable to start '%s' filter"), argv[0]);
463-
close(1);
464-
if (dup2(filter.in, 1) < 0)
465-
die_errno(_("unable to redirect descriptor"));
466-
close(filter.in);
461+
if (!strcmp("gzip -cn", ar->data)) {
462+
char outmode[4] = "wb\0";
463+
464+
if (args->compression_level >= 0 && args->compression_level <= 9)
465+
outmode[2] = '0' + args->compression_level;
466+
467+
gzip = gzdopen(fileno(stdout), outmode);
468+
if (!gzip)
469+
die(_("Could not gzdopen stdout"));
470+
} else {
471+
if (start_command(&filter) < 0)
472+
die_errno(_("unable to start '%s' filter"), argv[0]);
473+
close(1);
474+
if (dup2(filter.in, 1) < 0)
475+
die_errno(_("unable to redirect descriptor"));
476+
close(filter.in);
477+
}
467478

468479
r = write_tar_archive(ar, args);
469480

470-
close(1);
471-
if (finish_command(&filter) != 0)
472-
die(_("'%s' filter reported error"), argv[0]);
481+
if (gzip) {
482+
if (gzclose(gzip) != Z_OK)
483+
die(_("gzclose failed"));
484+
} else {
485+
close(1);
486+
if (finish_command(&filter) != 0)
487+
die(_("'%s' filter reported error"), argv[0]);
488+
}
473489

474490
strbuf_release(&cmd);
475491
return r;

0 commit comments

Comments
 (0)