| 25 | const dirMode = 0o750 |
| 26 | |
| 27 | func createFile(outDir *os.Root, target string, mode os.FileMode, modTime time.Time, src io.Reader) error { |
| 28 | f, err := outDir.OpenFile(target, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, mode) |
| 29 | if err != nil { |
| 30 | return errors.Wrap(err, "error creating file") |
| 31 | } |
| 32 | |
| 33 | defer outDir.Chtimes(target, modTime, modTime) //nolint:errcheck |
| 34 | |
| 35 | defer func() { |
| 36 | err = stderrors.Join(err, f.Close()) |
| 37 | }() |
| 38 | |
| 39 | if _, err := io.Copy(f, src); err != nil { |
| 40 | return errors.Wrap(err, "error copying contents") |
| 41 | } |
| 42 | |
| 43 | return nil |
| 44 | } |
| 45 | |
| 46 | func createSymlink(outDir *os.Root, linkPath, linkTarget string) error { |
| 47 | outDir.Remove(linkPath) //nolint:errcheck |