fix: resolves #474

Resolves #474, whereby `cheat` failed to resolve symlinks. The root
cause was that `path/filepath#Walk` simply does not resolve symlinks:

  https://golang.org/pkg/path/filepath/#Walk
This commit is contained in:
Chris Lane 2019-11-05 19:08:40 -05:00
parent c47b7f81aa
commit f7c093bec0
2 changed files with 14 additions and 2 deletions

View File

@ -4,6 +4,7 @@ import (
"fmt"
"io/ioutil"
"os"
"path/filepath"
cp "github.com/cheat/cheat/internal/cheatpath"
@ -38,14 +39,25 @@ func New(opts map[string]interface{}, confPath string) (Config, error) {
return Config{}, fmt.Errorf("could not unmarshal yaml: %v", err)
}
// expand ~ in config paths
// process cheatpaths
for i, cheatpath := range conf.Cheatpaths {
// expand ~ in config paths
expanded, err := homedir.Expand(cheatpath.Path)
if err != nil {
return Config{}, fmt.Errorf("failed to expand ~: %v", err)
}
// follow symlinks
expanded, err = filepath.EvalSymlinks(expanded)
if err != nil {
return Config{}, fmt.Errorf(
"failed to resolve symlink: %s, %v",
expanded,
err,
)
}
conf.Cheatpaths[i].Path = expanded
}

View File

@ -54,7 +54,7 @@ func Load(cheatpaths []cp.Cheatpath) ([]map[string]sheet.Sheet, error) {
// NB: this is still somewhat brittle in that it will miss files
// contained within hidden directories in the middle of a path, though
// that should not realistically occur.
if strings.HasPrefix(title, ".") || strings.HasPrefix(info.Name(), "."){
if strings.HasPrefix(title, ".") || strings.HasPrefix(info.Name(), ".") {
return nil
}