Skip to content

Commit

Permalink
Use vfs.Contains
Browse files Browse the repository at this point in the history
  • Loading branch information
twpayne committed Mar 24, 2019
1 parent 7c8e4b6 commit 9aa00ca
Show file tree
Hide file tree
Showing 13 changed files with 26 additions and 16 deletions.
2 changes: 1 addition & 1 deletion cmd/cat.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ func (c *Config) runCatCmd(fs vfs.FS, args []string) error {
if err != nil {
return err
}
entries, err := c.getEntries(ts, args)
entries, err := c.getEntries(fs, ts, args)
if err != nil {
return err
}
Expand Down
2 changes: 1 addition & 1 deletion cmd/chattr.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ func (c *Config) runChattrCmd(fs vfs.FS, args []string) error {
if err != nil {
return err
}
entries, err := c.getEntries(ts, args[1:])
entries, err := c.getEntries(fs, ts, args[1:])
if err != nil {
return err
}
Expand Down
6 changes: 3 additions & 3 deletions cmd/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ func (c *Config) applyArgs(fs vfs.FS, args []string, mutator chezmoi.Mutator) er
if len(args) == 0 {
return ts.Apply(fs, mutator)
}
entries, err := c.getEntries(ts, args)
entries, err := c.getEntries(fs, ts, args)
if err != nil {
return err
}
Expand Down Expand Up @@ -174,14 +174,14 @@ func (c *Config) getEditor() string {
return "vi"
}

func (c *Config) getEntries(ts *chezmoi.TargetState, args []string) ([]chezmoi.Entry, error) {
func (c *Config) getEntries(fs vfs.FS, ts *chezmoi.TargetState, args []string) ([]chezmoi.Entry, error) {
entries := []chezmoi.Entry{}
for _, arg := range args {
targetPath, err := filepath.Abs(arg)
if err != nil {
return nil, err
}
entry, err := ts.Get(targetPath)
entry, err := ts.Get(fs, targetPath)
if err != nil {
return nil, err
}
Expand Down
2 changes: 1 addition & 1 deletion cmd/dump.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ func (c *Config) runDumpCmd(fs vfs.FS, args []string) error {
return err
}
} else {
entries, err := c.getEntries(ts, args)
entries, err := c.getEntries(fs, ts, args)
if err != nil {
return err
}
Expand Down
2 changes: 1 addition & 1 deletion cmd/edit.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ func (c *Config) runEditCmd(fs vfs.FS, args []string) error {
if err != nil {
return err
}
entries, err := c.getEntries(ts, args)
entries, err := c.getEntries(fs, ts, args)
if err != nil {
return err
}
Expand Down
2 changes: 1 addition & 1 deletion cmd/forget.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ func (c *Config) runForgetCmd(fs vfs.FS, args []string) error {
if err != nil {
return err
}
entries, err := c.getEntries(ts, args)
entries, err := c.getEntries(fs, ts, args)
if err != nil {
return err
}
Expand Down
2 changes: 1 addition & 1 deletion cmd/import.go
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ func (c *Config) runImportCmd(fs vfs.FS, args []string) error {
}
mutator := c.getDefaultMutator(fs)
if c._import.removeDestination {
entry, err := ts.Get(c._import.importTAROptions.DestinationDir)
entry, err := ts.Get(fs, c._import.importTAROptions.DestinationDir)
switch {
case err == nil:
if err := mutator.RemoveAll(filepath.Join(c.SourceDir, entry.SourceName())); err != nil {
Expand Down
2 changes: 1 addition & 1 deletion cmd/remove.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ func (c *Config) runRemoveCmd(fs vfs.FS, args []string) error {
if err != nil {
return err
}
entries, err := c.getEntries(ts, args)
entries, err := c.getEntries(fs, ts, args)
if err != nil {
return nil
}
Expand Down
2 changes: 1 addition & 1 deletion cmd/source_path.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ func (c *Config) runSourcePathCmd(fs vfs.FS, args []string) error {
_, err := fmt.Println(ts.SourceDir)
return err
}
entries, err := c.getEntries(ts, args)
entries, err := c.getEntries(fs, ts, args)
if err != nil {
return err
}
Expand Down
2 changes: 1 addition & 1 deletion cmd/unmanaged.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ func (c *Config) runUnmanagedCmd(fs vfs.FS, args []string) error {
if path == c.DestDir {
return nil
}
entry, _ := ts.Get(path)
entry, _ := ts.Get(fs, path)
managed := entry != nil
ignored := ts.TargetIgnore.Match(strings.TrimPrefix(path, c.DestDir+"/"))
if !managed && !ignored {
Expand Down
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ require (
github.com/stretchr/objx v0.1.1 // indirect
github.com/stretchr/testify v1.3.0
github.com/twpayne/go-shell v0.0.1
github.com/twpayne/go-vfs v1.0.5
github.com/twpayne/go-vfs v1.0.6
github.com/twpayne/go-xdg/v2 v2.0.0
github.com/zalando/go-keyring v0.0.0-20180221093347-6d81c293b3fb
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2
Expand Down
2 changes: 2 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,8 @@ github.com/twpayne/go-shell v0.0.1 h1:Ako3cUeuULhWadYk37jM3FlJ8lkSSW4INBjYj9K60G
github.com/twpayne/go-shell v0.0.1/go.mod h1:QCjEvdZndTuPObd+11NYAI1UeNLSuGZVxJ+67Wl+IU4=
github.com/twpayne/go-vfs v1.0.5 h1:i45a6Ykg/asDB94fHH5OmScCQHFx/P9A//9M5dfXwQk=
github.com/twpayne/go-vfs v1.0.5/go.mod h1:OIXA6zWkcn7Jk46XT7ceYqBMeIkfzJ8WOBhGJM0W4y8=
github.com/twpayne/go-vfs v1.0.6 h1:simuCsNdFE5juFWp2saFB03uUHdwpjX24gtusrl1CK8=
github.com/twpayne/go-vfs v1.0.6/go.mod h1:A7YkNSb8q0vkRm4fPKNntU6tKePPh96OOwxHYxhZzOU=
github.com/twpayne/go-xdg/v2 v2.0.0 h1:ndl5DfjeuLtGJTAQC967JpjOlOVwJHf0cFGTTyZliWM=
github.com/twpayne/go-xdg/v2 v2.0.0/go.mod h1:ZoSYKMfhsJdpvqNTwvRIWRV05EMknvaj5gDQ9B0CF9A=
github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0=
Expand Down
14 changes: 11 additions & 3 deletions lib/chezmoi/target_state.go
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,11 @@ func NewTargetState(destDir string, umask os.FileMode, sourceDir string, data ma

// Add adds a new target to ts.
func (ts *TargetState) Add(fs vfs.FS, addOptions AddOptions, targetPath string, info os.FileInfo, mutator Mutator) error {
if !filepath.HasPrefix(targetPath, ts.DestDir) {
contains, err := vfs.Contains(fs, targetPath, ts.DestDir)
if err != nil {
return err
}
if !contains {
return fmt.Errorf("%s: outside target directory", targetPath)
}
targetName, err := filepath.Rel(ts.DestDir, targetPath)
Expand Down Expand Up @@ -220,8 +224,12 @@ func (ts *TargetState) Evaluate() error {
}

// Get returns the state of the given target, or nil if no such target is found.
func (ts *TargetState) Get(target string) (Entry, error) {
if !filepath.HasPrefix(target, ts.DestDir) {
func (ts *TargetState) Get(fs vfs.FS, target string) (Entry, error) {
contains, err := vfs.Contains(fs, target, ts.DestDir)
if err != nil {
return nil, err
}
if !contains {
return nil, fmt.Errorf("%s: outside target directory", target)
}
targetName, err := filepath.Rel(ts.DestDir, target)
Expand Down

0 comments on commit 9aa00ca

Please sign in to comment.