From 48d5470152ba1e27af1139c90ad325cba262e6ce Mon Sep 17 00:00:00 2001 From: Dominik Schulz Date: Wed, 13 Dec 2017 19:59:12 +0100 Subject: [PATCH] Follow symlinks (#516) Fixes #514 --- store/sub/fsck.go | 7 ++++++- store/sub/list.go | 10 +++++++--- store/sub/templates.go | 6 +++++- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/store/sub/fsck.go b/store/sub/fsck.go index dd276cfd19..e5dde486ec 100644 --- a/store/sub/fsck.go +++ b/store/sub/fsck.go @@ -30,7 +30,12 @@ func (s *Store) Fsck(ctx context.Context, prefix string) (map[string]uint64, err countFn := func(t string) { counts[t]++ } - err = filepath.Walk(s.path, s.mkStoreWalkerFsckFunc(ctx, prefix, storeRec, countFn)) + + path, err := filepath.EvalSymlinks(s.path) + if err != nil { + return counts, err + } + err = filepath.Walk(path, s.mkStoreWalkerFsckFunc(ctx, prefix, storeRec, countFn)) return counts, err } diff --git a/store/sub/list.go b/store/sub/list.go index ca2d87dfd9..e7e73a23e4 100644 --- a/store/sub/list.go +++ b/store/sub/list.go @@ -22,10 +22,10 @@ func mkStoreWalkerFunc(alias, folder string, fn func(...string)) func(string, os if info.IsDir() { return nil } - if strings.HasPrefix(info.Name(), ".") { + if path == folder { return nil } - if path == folder { + if strings.HasPrefix(info.Name(), ".") { return nil } if path == filepath.Join(folder, GPGID) { @@ -56,6 +56,10 @@ func (s *Store) List(prefix string) ([]string, error) { lst = append(lst, in...) } - err := filepath.Walk(s.path, mkStoreWalkerFunc(prefix, s.path, addFunc)) + path, err := filepath.EvalSymlinks(s.path) + if err != nil { + return lst, err + } + err = filepath.Walk(path, mkStoreWalkerFunc(prefix, path, addFunc)) return lst, err } diff --git a/store/sub/templates.go b/store/sub/templates.go index f554035676..25350be078 100644 --- a/store/sub/templates.go +++ b/store/sub/templates.go @@ -80,7 +80,11 @@ func (s *Store) ListTemplates(prefix string) []string { lst = append(lst, in...) } - if err := filepath.Walk(s.path, mkTemplateStoreWalkerFunc(prefix, s.path, addFunc)); err != nil { + path, err := filepath.EvalSymlinks(s.path) + if err != nil { + return lst + } + if err := filepath.Walk(path, mkTemplateStoreWalkerFunc(prefix, path, addFunc)); err != nil { fmt.Printf("Failed to list templates: %s\n", err) }