| | |
| | | if len(rule.AllOf) > 0 { |
| | | for _, rel := range rule.AllOf { |
| | | path := filepath.Join(dir, rel) |
| | | if !validRequiredFile(path) { |
| | | if !validRequiredPath(path, rule.Directory) { |
| | | result.Valid = false |
| | | result.Missing = append(result.Missing, rel) |
| | | continue |
| | |
| | | var selected string |
| | | for _, rel := range rule.AnyOf { |
| | | path := filepath.Join(dir, rel) |
| | | if validRequiredFile(path) { |
| | | if validRequiredPath(path, rule.Directory) { |
| | | selected = path |
| | | break |
| | | } |
| | |
| | | } |
| | | |
| | | func validRequiredFile(path string) bool { |
| | | return validRequiredPath(path, false) |
| | | } |
| | | |
| | | func validRequiredPath(path string, directory bool) bool { |
| | | info, err := os.Stat(path) |
| | | if err != nil || info.IsDir() { |
| | | if err != nil { |
| | | return false |
| | | } |
| | | if directory { |
| | | return info.IsDir() |
| | | } |
| | | if info.IsDir() { |
| | | return false |
| | | } |
| | | return info.Size() > 0 |