func()

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
}