in pkg/testutil/bldr/git_worktree.go [47:86]
func (bldr *GitWorktreeBuilder) CopyFromDir(fromDir string) *GitWorktreeBuilder {
err := filepath.Walk(fromDir, func(path string, info fs.FileInfo, err error) error {
if err != nil {
return err
}
withoutOldDir, _ := strings.CutPrefix(path, fromDir)
newPath, _ := strings.CutPrefix(withoutOldDir, "/")
if newPath == "" {
return nil
}
if info.IsDir() {
return bldr.worktree.Filesystem.MkdirAll(newPath, info.Mode())
}
fromFile, err := os.Open(path)
if err != nil {
return fmt.Errorf("failed to open from file: %w", err)
}
defer func() { _ = fromFile.Close() }()
toFile, err := bldr.worktree.Filesystem.OpenFile(newPath, syscall.O_WRONLY|syscall.O_CREAT|syscall.O_TRUNC, info.Mode())
if err != nil {
return fmt.Errorf("failed to open new file: %w", err)
}
defer func() { _ = toFile.Close() }()
_, err = io.Copy(toFile, fromFile)
if err != nil {
return fmt.Errorf("failed to copy from old to new file: %w", err)
}
return nil
})
require.NoError(bldr.t, err)
return bldr
}