18
func NewRegexpFs(source Fs, re *regexp.Regexp) Fs {
19
return &RegexpFs{source: source, re: re}
22
type RegexpFile struct {
27
func (r *RegexpFs) matchesName(name string) error {
31
if r.re.MatchString(name) {
37
func (r *RegexpFs) dirOrMatches(name string) error {
38
dir, err := IsDir(r.source, name)
45
return r.matchesName(name)
48
func (r *RegexpFs) Chtimes(name string, a, m time.Time) error {
49
if err := r.dirOrMatches(name); err != nil {
52
return r.source.Chtimes(name, a, m)
55
func (r *RegexpFs) Chmod(name string, mode os.FileMode) error {
56
if err := r.dirOrMatches(name); err != nil {
59
return r.source.Chmod(name, mode)
62
func (r *RegexpFs) Chown(name string, uid, gid int) error {
63
if err := r.dirOrMatches(name); err != nil {
66
return r.source.Chown(name, uid, gid)
69
func (r *RegexpFs) Name() string {
73
func (r *RegexpFs) Stat(name string) (os.FileInfo, error) {
74
if err := r.dirOrMatches(name); err != nil {
77
return r.source.Stat(name)
80
func (r *RegexpFs) Rename(oldname, newname string) error {
81
dir, err := IsDir(r.source, oldname)
88
if err := r.matchesName(oldname); err != nil {
91
if err := r.matchesName(newname); err != nil {
94
return r.source.Rename(oldname, newname)
97
func (r *RegexpFs) RemoveAll(p string) error {
98
dir, err := IsDir(r.source, p)
103
if err := r.matchesName(p); err != nil {
107
return r.source.RemoveAll(p)
110
func (r *RegexpFs) Remove(name string) error {
111
if err := r.dirOrMatches(name); err != nil {
114
return r.source.Remove(name)
117
func (r *RegexpFs) OpenFile(name string, flag int, perm os.FileMode) (File, error) {
118
if err := r.dirOrMatches(name); err != nil {
121
return r.source.OpenFile(name, flag, perm)
124
func (r *RegexpFs) Open(name string) (File, error) {
125
dir, err := IsDir(r.source, name)
130
if err := r.matchesName(name); err != nil {
134
f, err := r.source.Open(name)
138
return &RegexpFile{f: f, re: r.re}, nil
141
func (r *RegexpFs) Mkdir(n string, p os.FileMode) error {
142
return r.source.Mkdir(n, p)
145
func (r *RegexpFs) MkdirAll(n string, p os.FileMode) error {
146
return r.source.MkdirAll(n, p)
149
func (r *RegexpFs) Create(name string) (File, error) {
150
if err := r.matchesName(name); err != nil {
153
return r.source.Create(name)
156
func (f *RegexpFile) Close() error {
160
func (f *RegexpFile) Read(s []byte) (int, error) {
164
func (f *RegexpFile) ReadAt(s []byte, o int64) (int, error) {
165
return f.f.ReadAt(s, o)
168
func (f *RegexpFile) Seek(o int64, w int) (int64, error) {
169
return f.f.Seek(o, w)
172
func (f *RegexpFile) Write(s []byte) (int, error) {
176
func (f *RegexpFile) WriteAt(s []byte, o int64) (int, error) {
177
return f.f.WriteAt(s, o)
180
func (f *RegexpFile) Name() string {
184
func (f *RegexpFile) Readdir(c int) (fi []os.FileInfo, err error) {
185
var rfi []os.FileInfo
186
rfi, err = f.f.Readdir(c)
190
for _, i := range rfi {
191
if i.IsDir() || f.re.MatchString(i.Name()) {
198
func (f *RegexpFile) Readdirnames(c int) (n []string, err error) {
199
fi, err := f.Readdir(c)
203
for _, s := range fi {
204
n = append(n, s.Name())
209
func (f *RegexpFile) Stat() (os.FileInfo, error) {
213
func (f *RegexpFile) Sync() error {
217
func (f *RegexpFile) Truncate(s int64) error {
218
return f.f.Truncate(s)
221
func (f *RegexpFile) WriteString(s string) (int, error) {
222
return f.f.WriteString(s)