in commands/helpers/archive/fastzip/zip_fastzip_archiver.go [72:113]
func (a *archiver) Archive(ctx context.Context, files map[string]os.FileInfo) error {
tmpDir, err := os.MkdirTemp(os.Getenv(archiverStagingDir), "fastzip")
if err != nil {
return fmt.Errorf("fastzip archiver unable to create temporary directory: %w", err)
}
defer os.RemoveAll(tmpDir)
opts, err := getArchiverOptionsFromEnvironment()
if err != nil {
return err
}
opts = append(opts, fastzip.WithStageDirectory(tmpDir))
if a.level == archive.FastestCompression {
opts = append(opts, fastzip.WithArchiverMethod(zip.Store))
}
if a.zstd {
opts = append(opts, fastzip.WithArchiverMethod(zstd.ZipMethodWinZip))
}
fa, err := fastzip.NewArchiver(a.w, a.dir, opts...)
if err != nil {
return err
}
if a.level != archive.FastestCompression {
if a.zstd {
fa.RegisterCompressor(zstd.ZipMethodWinZip, fastzip.ZstdCompressor(zstdLevels[a.level]))
} else {
fa.RegisterCompressor(zip.Deflate, fastzip.FlateCompressor(flateLevels[a.level]))
}
}
err = fa.Archive(ctx, files)
if cerr := fa.Close(); err == nil && cerr != nil {
return cerr
}
return err
}