Expand cases accepted by -exclude

The exclude flag was only using filepath.Match which isn't intuitive
compared with some other command line tools. Added a couple of
additional cases to handle relative paths.

Fixes issue #16
This commit is contained in:
Grant Murphy 2016-07-26 21:47:09 -07:00
parent debb1f5b08
commit a7ebf35465

View file

@ -15,6 +15,8 @@
package main package main
import ( import (
"os"
"path"
"path/filepath" "path/filepath"
"strings" "strings"
) )
@ -30,17 +32,37 @@ func (f *filelist) Set(val string) error {
return nil return nil
} }
func (f *filelist) Contains(path string) bool { func (f *filelist) Contains(pathname string) bool {
// Ignore dot files // Ignore dot files
_, filename := filepath.Split(path) _, filename := filepath.Split(pathname)
if strings.HasPrefix(filename, ".") { if strings.HasPrefix(filename, ".") {
return true return true
} }
cwd, _ := os.Getwd()
abs, _ := filepath.Abs(pathname)
for _, pattern := range *f { for _, pattern := range *f {
// Match entire path
if rv, err := filepath.Match(pattern, path); rv && err == nil { // Also check working directory
rel := path.Join(cwd, pattern)
// Match pattern directly
if matched, _ := filepath.Match(pattern, pathname); matched {
return true return true
} }
// Also check pattern relative to working directory
if matched, _ := filepath.Match(rel, pathname); matched {
return true
}
// Finally try absolute path
st, e := os.Stat(rel)
if !os.IsNotExist(e) && st.IsDir() && strings.HasPrefix(abs, rel) {
return true
}
} }
return false return false
} }