-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, err := filepath.Rel(Cwd, path.Join(cwd, tgt))
- if err != nil {
- panic(err)
- }
- 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"] == "stamp" {
- stampTheir = m["Hash"]
- break
- }
- }
- return stampTheir, nil
-}
-
-func isOOD(cwd, tgt string, level int) (bool, error) {
- tgtOrig := tgt