-func isBuiltNow(fdDep *os.File) (bool, *recfile.Reader, error) {
- r := recfile.NewReader(fdDep)
- m, err := r.NextMap()
- if err != nil {
- return false, nil, err
- }
- if m["Build"] == "" {
- return false, r, errors.New(".dep missing Build:")
- }
- return m["Build"] == BuildUUID, r, nil
-}
-
-func rebuildStamped(cwd, tgt, depPath string) (string, error) {
- relTgt := cwdMustRel(cwd, tgt)
- errs := make(chan error, 1)
- if err := runScript(relTgt, errs); err != nil {
- return "", err
- }
- if err := <-errs; !isOkRun(err) {
- return "", errors.New("build failed")
- }
- fdDep, err := os.Open(depPath)
- if err != nil {
- return "", err
- }
- defer fdDep.Close()
- builtNow, r, err := isBuiltNow(fdDep)
- if err != nil {
- return "", err
- }
- if !builtNow {
- return "", errors.New("is not built")
- }
- var stampTheir string
- for {
- m, err := r.NextMap()
- if err != nil {
- if err == io.EOF {
- break
- }
- return "", err
- }
- if m["Type"] == DepTypeStamp {
- stampTheir = m["Hash"]
- break
- }
- }
- return stampTheir, nil
-}
-
-func isOOD(cwd, tgtOrig string, level int) (bool, error) {