in command-runner/internal/containers/shared/tar.go [21:69]
func TarDirectory(ctx context.Context, srcPath string, dstDir string, useGitIgnore bool, uid int, gid int) (*os.File, error) {
tarFile, err := os.CreateTemp(fs.TmpDir(), "tardir")
if err != nil {
return nil, err
}
tw := tar.NewWriter(tarFile)
srcPrefix := filepath.Dir(srcPath)
if !strings.HasSuffix(srcPrefix, string(filepath.Separator)) {
srcPrefix += string(filepath.Separator)
}
log.Ctx(ctx).Printf("Stripping prefix:%s src:%s", srcPrefix, srcPath)
var ignorer gitignore.Matcher
if useGitIgnore {
ps, err := gitignore.ReadPatterns(polyfill.New(osfs.New(srcPath)), nil)
if err != nil {
log.Ctx(ctx).Printf("Error loading .gitignore: %v", err)
}
ignorer = gitignore.NewMatcher(ps)
}
fc := &fs.FileCollector{
Fs: &fs.DefaultFs{},
Ignorer: ignorer,
SrcPath: srcPath,
SrcPrefix: srcPrefix,
Handler: &fs.TarCollector{
TarWriter: tw,
UID: uid,
GID: gid,
DstDir: dstDir,
},
}
err = filepath.Walk(srcPath, fc.CollectFiles(ctx, []string{}))
if err != nil {
return nil, err
}
if err := tw.Close(); err != nil {
return nil, err
}
_, err = tarFile.Seek(0, 0)
if err != nil {
return nil, fmt.Errorf("failed to seek tar archive: %w", err)
}
return tarFile, nil
}