]> Cypherpunks.ru repositories - goredo.git/blob - sources.go
Do not use deprecated os.SEEK_*
[goredo.git] / sources.go
1 /*
2 goredo -- djb's redo implementation on pure Go
3 Copyright (C) 2020-2021 Sergey Matveev <stargrave@stargrave.org>
4
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.
8
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.
13
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/>.
16 */
17
18 package main
19
20 import (
21         "os"
22         "path"
23         "path/filepath"
24         "strings"
25 )
26
27 func sourcesWalker() ([]string, error) {
28         tgts, err := targetsWalker(Cwd)
29         if err != nil {
30                 return nil, err
31         }
32         srcs := make(map[string]struct{}, 1<<10)
33         for _, tgt := range tgts {
34                 cwd, f := path.Split(tgt)
35                 fdDep, err := os.Open(path.Join(cwd, RedoDir, f+DepSuffix))
36                 if err != nil {
37                         return nil, err
38                 }
39                 depInfo, err := depRead(fdDep)
40                 fdDep.Close()
41                 for _, m := range depInfo.ifchanges {
42                         tgt = m["Target"]
43                         if !strings.HasSuffix(tgt, ".do") && isSrc(cwd, tgt) {
44                                 pth, err := filepath.Abs(path.Join(cwd, tgt))
45                                 if err != nil {
46                                         panic(err)
47                                 }
48                                 srcs[cwdMustRel(pth)] = struct{}{}
49                         }
50                 }
51         }
52         tgts = make([]string, 0, len(srcs))
53         for tgt := range srcs {
54                 tgts = append(tgts, tgt)
55         }
56         return tgts, nil
57 }