зеркало из https://github.com/microsoft/git.git
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 <rohit.ashiwal265@gmail.com> Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
This commit is contained in:
Родитель
5788769768
Коммит
ae8108f5b0
|
@ -467,18 +467,34 @@ static int write_tar_filter_archive(const struct archiver *ar,
|
||||||
filter.use_shell = 1;
|
filter.use_shell = 1;
|
||||||
filter.in = -1;
|
filter.in = -1;
|
||||||
|
|
||||||
if (start_command(&filter) < 0)
|
if (!strcmp("gzip -cn", ar->data)) {
|
||||||
die_errno(_("unable to start '%s' filter"), argv[0]);
|
char outmode[4] = "wb\0";
|
||||||
close(1);
|
|
||||||
if (dup2(filter.in, 1) < 0)
|
if (args->compression_level >= 0 && args->compression_level <= 9)
|
||||||
die_errno(_("unable to redirect descriptor"));
|
outmode[2] = '0' + args->compression_level;
|
||||||
close(filter.in);
|
|
||||||
|
gzip = gzdopen(fileno(stdout), outmode);
|
||||||
|
if (!gzip)
|
||||||
|
die(_("Could not gzdopen stdout"));
|
||||||
|
} else {
|
||||||
|
if (start_command(&filter) < 0)
|
||||||
|
die_errno(_("unable to start '%s' filter"), argv[0]);
|
||||||
|
close(1);
|
||||||
|
if (dup2(filter.in, 1) < 0)
|
||||||
|
die_errno(_("unable to redirect descriptor"));
|
||||||
|
close(filter.in);
|
||||||
|
}
|
||||||
|
|
||||||
r = write_tar_archive(ar, args);
|
r = write_tar_archive(ar, args);
|
||||||
|
|
||||||
close(1);
|
if (gzip) {
|
||||||
if (finish_command(&filter) != 0)
|
if (gzclose(gzip) != Z_OK)
|
||||||
die(_("'%s' filter reported error"), argv[0]);
|
die(_("gzclose failed"));
|
||||||
|
} else {
|
||||||
|
close(1);
|
||||||
|
if (finish_command(&filter) != 0)
|
||||||
|
die(_("'%s' filter reported error"), argv[0]);
|
||||||
|
}
|
||||||
|
|
||||||
strbuf_release(&cmd);
|
strbuf_release(&cmd);
|
||||||
return r;
|
return r;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче