-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathprefixfs_file.go
86 lines (73 loc) · 1.79 KB
/
prefixfs_file.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
package backupfs
import (
"io/fs"
"strings"
)
var _ File = (*prefixFile)(nil)
// filePath and prefix are expected to be normalized (filepath.Clean) paths
func newPrefixFile(f File, filePath, prefix string) File {
var (
nameOverride = ""
baseName = f.Name()
)
if filePath == prefix {
nameOverride = separator
} else if prefix != "" && strings.HasPrefix(baseName, prefix) {
nameOverride = strings.TrimPrefix(baseName, prefix)
}
return &prefixFile{
f: f,
nameOverride: nameOverride,
}
}
type prefixFile struct {
f File
nameOverride string
}
func (pf *prefixFile) Name() string {
// hide the existence of the prefix
if pf.nameOverride != "" {
return pf.nameOverride
}
return pf.f.Name()
}
func (pf *prefixFile) Readdir(count int) ([]fs.FileInfo, error) {
return pf.f.Readdir(count)
}
func (pf *prefixFile) Readdirnames(n int) ([]string, error) {
return pf.f.Readdirnames(n)
}
func (pf *prefixFile) Stat() (fs.FileInfo, error) {
return pf.f.Stat()
}
func (pf *prefixFile) Sync() error {
return pf.f.Sync()
}
func (pf *prefixFile) Truncate(size int64) error {
return pf.f.Truncate(size)
}
func (pf *prefixFile) WriteString(s string) (ret int, err error) {
return pf.f.WriteString(s)
}
func (pf *prefixFile) Close() error {
err := pf.f.Close()
if err != nil {
return err
}
return nil
}
func (pf *prefixFile) Read(p []byte) (n int, err error) {
return pf.f.Read(p)
}
func (pf *prefixFile) ReadAt(p []byte, off int64) (n int, err error) {
return pf.f.ReadAt(p, off)
}
func (pf *prefixFile) Seek(offset int64, whence int) (int64, error) {
return pf.f.Seek(offset, whence)
}
func (pf *prefixFile) Write(p []byte) (n int, err error) {
return pf.f.Write(p)
}
func (pf *prefixFile) WriteAt(p []byte, off int64) (n int, err error) {
return pf.f.WriteAt(p, off)
}