ifchanges []map[string]string
}
+var missingBuild = errors.New(".rec missing Build:")
+
func depRead(fdDep io.Reader) (*DepInfo, error) {
r := recfile.NewReader(fdDep)
m, err := r.NextMap()
depInfo := DepInfo{}
b := m["Build"]
if b == "" {
- return nil, errors.New(".rec missing Build:")
+ return nil, missingBuild
}
depInfo.build = b
for {
}
return &depInfo, nil
}
+
+func depReadBuild(pth string) (string, error) {
+ fd, err := os.Open(pth)
+ if err != nil {
+ return "", err
+ }
+ r := recfile.NewReader(fd)
+ m, err := r.NextMap()
+ fd.Close()
+ if err != nil {
+ return "", err
+ }
+ build := m["Build"]
+ if build == "" {
+ err = missingBuild
+ }
+ return build, err
+}
func isOODByBuildUUID(cwd, tgtOrig string) bool {
cwd, tgt := cwdAndTgt(path.Join(cwd, tgtOrig))
depPath := path.Join(cwd, RedoDir, tgt+DepSuffix)
- fdDep, err := os.Open(depPath)
- if err != nil {
- return true
- }
- depInfo, err := depRead(fdDep)
- fdDep.Close()
- if err != nil || depInfo.build != BuildUUID {
- return true
- }
- return false
+ build, err := depReadBuild(depPath)
+ return err != nil || build != BuildUUID
}
func isOOD(cwd, tgtOrig string, level int, seen map[string]struct{}) (bool, error) {
log.Fatal(err)
}
}
- var depInfo *DepInfo
- fdDep, err := os.Open(path.Join(redoDir, tgt+DepSuffix))
+ build, err := depReadBuild(path.Join(redoDir, tgt+DepSuffix))
if err != nil {
if errors.Is(err, fs.ErrNotExist) {
err = errors.New("was not built: no .rec")
}
goto Finish
}
- defer fdDep.Close()
- depInfo, err = depRead(fdDep)
- if err != nil {
- goto Finish
- }
- if depInfo.build != BuildUUID {
+ if build != BuildUUID {
err = errors.New("was not built: build differs")
}
Finish:
// Check if it was already built in parallel
if !forced {
- if fdDep, err := os.Open(path.Join(redoDir, tgt+DepSuffix)); err == nil {
- depInfo, err := depRead(fdDep)
- fdDep.Close()
- if err == nil && depInfo.build == BuildUUID {
- lockRelease()
- errs <- nil
- return nil
- }
+ if build, err := depReadBuild(path.Join(redoDir, tgt+DepSuffix)); err == nil && build == BuildUUID {
+ lockRelease()
+ errs <- nil
+ return nil
}
}