support symlink resolution during file search

Closes #3
This commit is contained in:
Aaron Meihm 2015-12-30 12:58:56 -06:00
Родитель 59f11e2a17
Коммит 5418292142
3 изменённых файлов: 48 добавлений и 0 удалений

Просмотреть файл

@ -235,6 +235,17 @@ func (s *simpleFileLocator) locate(target string, useRegexp bool) error {
return s.locateInner(target, useRegexp, "")
}
func (s *simpleFileLocator) symFollowIsRegular(path string) (bool, error) {
fi, err := os.Stat(path)
if err != nil {
return false, err
}
if fi.Mode().IsRegular() {
return true, nil
}
return false, nil
}
func (s *simpleFileLocator) locateInner(target string, useRegexp bool, path string) error {
var (
spath string
@ -288,6 +299,22 @@ func (s *simpleFileLocator) locateInner(target string, useRegexp bool, path stri
s.matches = append(s.matches, fname)
}
}
} else if (x.Mode() & os.ModeSymlink) > 0 {
isregsym, err := s.symFollowIsRegular(fname)
if err != nil {
return err
}
if isregsym {
if !useRegexp {
if x.Name() == target {
s.matches = append(s.matches, fname)
}
} else {
if re.MatchString(x.Name()) {
s.matches = append(s.matches, fname)
}
}
}
}
}
return nil

Просмотреть файл

@ -0,0 +1 @@
testfile1

Просмотреть файл

@ -49,6 +49,15 @@
}
},
{
"object": "testfile2-version",
"filecontent": {
"path": "${root}",
"file": ".*file2",
"expression": "^Version = (\\S+)"
}
},
{
"object": "anyfile",
"filecontent": {
@ -134,6 +143,17 @@
}
},
{
"test": "filecontent4",
"description": "version is ok",
"expectedresult": false,
"object": "testfile2-version",
"evr": {
"operation": "<",
"value": "0.4z"
}
},
{
"test": "anyfile0",
"expectedresult": true,