]> Cypherpunks.ru repositories - goredo.git/blob - whichdo.go
Download link for 2.6.2 release
[goredo.git] / whichdo.go
1 package main
2
3 import (
4         "io"
5         "io/fs"
6         "os"
7         "path"
8 )
9
10 func whichdo(tgt *Tgt) (dos []string, err error) {
11         var fdTmp *os.File
12         fdTmp, err = os.CreateTemp("", "whichdo")
13         if err != nil {
14                 return
15         }
16         err = os.Remove(fdTmp.Name())
17         if err != nil {
18                 return
19         }
20         err = depBuildWrite(fdTmp, BuildUUID)
21         if err != nil {
22                 return
23         }
24         var doFile string
25         var upLevels int
26         tgtH, tgtT := path.Split(tgt.a)
27         doFile, upLevels, err = findDo(fdTmp, fdTmp.Name(), tgtH, tgtT)
28         if err != nil {
29                 return
30         }
31         _, err = fdTmp.Seek(0, io.SeekStart)
32         if err != nil {
33                 return
34         }
35         var data []byte
36         data, err = io.ReadAll(fdTmp)
37         if err != nil {
38                 return
39         }
40         {
41                 var dep *Dep
42                 dep, err = depParse(tgt, data)
43                 if err != nil {
44                         return
45                 }
46                 for _, ifcreate := range dep.ifcreates {
47                         dos = append(dos, ifcreate.RelTo(Cwd))
48                 }
49                 for _, ifchange := range dep.ifchanges {
50                         dos = append(dos, ifchange.tgt.RelTo(Cwd))
51                 }
52         }
53         if doFile == "" {
54                 err = fs.ErrNotExist
55                 return
56         }
57         p := make([]string, 0, upLevels+2)
58         p = append(p, tgtH)
59         for i := 0; i < upLevels; i++ {
60                 p = append(p, "..")
61         }
62         p = append(p, doFile)
63         dos = append(dos, mustRel(Cwd, path.Join(p...)))
64         return
65 }