summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/GeertJohan/go.rice/walk.go
diff options
context:
space:
mode:
authorWim <wim@42.be>2017-02-18 23:00:46 +0100
committerWim <wim@42.be>2017-02-18 23:11:48 +0100
commit930b639cc9cd2d2873302f30303378c0e53816a8 (patch)
tree8cd3f1d464fb5d4e5607fe16255c35a31a9d8b62 /vendor/github.com/GeertJohan/go.rice/walk.go
parent58483ea70c2c99a352592c5e50686fb03985650e (diff)
downloadmatterbridge-msglm-930b639cc9cd2d2873302f30303378c0e53816a8.tar.gz
matterbridge-msglm-930b639cc9cd2d2873302f30303378c0e53816a8.tar.bz2
matterbridge-msglm-930b639cc9cd2d2873302f30303378c0e53816a8.zip
Update vendor
Diffstat (limited to 'vendor/github.com/GeertJohan/go.rice/walk.go')
-rw-r--r--vendor/github.com/GeertJohan/go.rice/walk.go122
1 files changed, 122 insertions, 0 deletions
diff --git a/vendor/github.com/GeertJohan/go.rice/walk.go b/vendor/github.com/GeertJohan/go.rice/walk.go
new file mode 100644
index 00000000..3042aeab
--- /dev/null
+++ b/vendor/github.com/GeertJohan/go.rice/walk.go
@@ -0,0 +1,122 @@
+package rice
+
+import (
+ "os"
+ "path/filepath"
+ "sort"
+ "strings"
+)
+
+// Walk is like filepath.Walk()
+// Visit http://golang.org/pkg/path/filepath/#Walk for more information
+func (b *Box) Walk(path string, walkFn filepath.WalkFunc) error {
+
+ pathFile, err := b.Open(path)
+ if err != nil {
+ return err
+ }
+ defer pathFile.Close()
+
+ pathInfo, err := pathFile.Stat()
+ if err != nil {
+ return err
+ }
+
+ if b.IsAppended() || b.IsEmbedded() {
+ return b.walk(path, pathInfo, walkFn)
+ }
+
+ // We don't have any embedded or appended box so use live filesystem mode
+ return filepath.Walk(b.absolutePath+string(os.PathSeparator)+path, func(path string, info os.FileInfo, err error) error {
+
+ // Strip out the box name from the returned paths
+ path = strings.TrimPrefix(path, b.absolutePath+string(os.PathSeparator))
+ return walkFn(path, info, err)
+
+ })
+
+}
+
+// walk recursively descends path.
+// See walk() in $GOROOT/src/pkg/path/filepath/path.go
+func (b *Box) walk(path string, info os.FileInfo, walkFn filepath.WalkFunc) error {
+
+ err := walkFn(path, info, nil)
+ if err != nil {
+ if info.IsDir() && err == filepath.SkipDir {
+ return nil
+ }
+ return err
+ }
+
+ if !info.IsDir() {
+ return nil
+ }
+
+ names, err := b.readDirNames(path)
+ if err != nil {
+ return walkFn(path, info, err)
+ }
+
+ for _, name := range names {
+
+ filename := filepath.Join(path, name)
+ fileObject, err := b.Open(filename)
+ if err != nil {
+ return err
+ }
+ defer fileObject.Close()
+
+ fileInfo, err := fileObject.Stat()
+ if err != nil {
+ if err := walkFn(filename, fileInfo, err); err != nil && err != filepath.SkipDir {
+ return err
+ }
+ } else {
+ err = b.walk(filename, fileInfo, walkFn)
+ if err != nil {
+ if !fileInfo.IsDir() || err != filepath.SkipDir {
+ return err
+ }
+ }
+ }
+ }
+
+ return nil
+
+}
+
+// readDirNames reads the directory named by path and returns a sorted list of directory entries.
+// See readDirNames() in $GOROOT/pkg/path/filepath/path.go
+func (b *Box) readDirNames(path string) ([]string, error) {
+
+ f, err := b.Open(path)
+ if err != nil {
+ return nil, err
+ }
+ defer f.Close()
+
+ stat, err := f.Stat()
+ if err != nil {
+ return nil, err
+ }
+
+ if !stat.IsDir() {
+ return nil, nil
+ }
+
+ infos, err := f.Readdir(0)
+ if err != nil {
+ return nil, err
+ }
+
+ var names []string
+
+ for _, info := range infos {
+ names = append(names, info.Name())
+ }
+
+ sort.Strings(names)
+ return names, nil
+
+}