2 goredo -- djb's redo implementation on pure Go
3 Copyright (C) 2020-2021 Sergey Matveev <stargrave@stargrave.org>
5 This program is free software: you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation, version 3 of the License.
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
14 You should have received a copy of the GNU General Public License
15 along with this program. If not, see <http://www.gnu.org/licenses/>.
28 func targetsWalker(root string) ([]string, error) {
29 root, err := filepath.Abs(root)
33 dir, err := os.Open(root)
38 tgts := make([]string, 0, 1<<10)
40 fis, err := dir.Readdir(1 << 10)
47 for _, fi := range fis {
51 pth := path.Join(root, fi.Name())
52 if fi.Name() == RedoDir {
53 redoDir, err := os.Open(pth)
57 redoFis, err := redoDir.Readdir(0)
61 for _, redoFi := range redoFis {
63 if strings.HasSuffix(name, DepSuffix) {
64 name = cwdMustRel(root, name)
65 tgts = append(tgts, name[:len(name)-len(DepSuffix)])
70 subTgts, err := targetsWalker(pth)
71 tgts = append(tgts, subTgts...)
78 return tgts, dir.Close()