in pkg/header/check.go [56:126]
func listFiles(config *ConfigHeader) ([]string, error) {
var fileList []string
repo, err := git.PlainOpen("./")
if err != nil { // we're not in a Git workspace, fallback to glob paths
var localFileList []string
for _, pattern := range config.Paths {
if pattern == "." {
pattern = "./"
}
files, err := doublestar.Glob(pattern)
if err != nil {
return nil, err
}
localFileList = append(localFileList, files...)
}
seen := make(map[string]bool)
for _, file := range localFileList {
files, err := walkFile(file, seen)
if err != nil {
return nil, err
}
fileList = append(fileList, files...)
}
} else {
var candidates []string
t, _ := repo.Worktree()
if t.Excludes == nil {
t.Excludes = make([]gitignore.Pattern, 0)
}
addIgnorePatterns(t)
s, _ := t.Status()
for file := range s {
candidates = append(candidates, file)
}
head, _ := repo.Head()
commit, _ := repo.CommitObject(head.Hash())
tree, err := commit.Tree()
if err != nil {
return nil, err
}
if err := tree.Files().ForEach(func(file *object.File) error {
if file == nil {
return errors.New("file pointer is nil")
}
candidates = append(candidates, file.Name)
return nil
}); err != nil {
return nil, err
}
seen := make(map[string]bool)
for _, file := range candidates {
if !seen[file] {
seen[file] = true
_, err := os.Stat(file)
if err == nil {
fileList = append(fileList, file)
} else if !os.IsNotExist(err) {
return nil, err
}
}
}
}
return fileList, nil
}