- dep := m["Target"]
- theirTs := m["Ctime"]
- theirHsh := m["Hash"]
- if dep == "" || theirTs == "" {
- return ood, errors.New("invalid format of dep." + tgtOrig)
- }
- trace(CDebug, "ood: %s%s -> %s: checking", indent, tgtOrig, dep)
- fd, err := os.Open(path.Join(cwd, dep))
- if err != nil {
- if os.IsNotExist(err) {
- trace(CDebug, "ood: %s%s -> %s: not exists", indent, tgtOrig, dep)
- ood = true
- continue
- }
- return ood, err
- }
- defer fd.Close()
- ts, err := fileCtime(fd)
- if err != nil {
- return ood, err
- }
- if theirTs == ts {
- trace(CDebug, "ood: %s%s -> %s: same ctime", indent, tgtOrig, dep)
- } else if NoHash || theirHsh == "" {
- trace(CDebug, "ood: %s%s -> %s: ctime differs", indent, tgtOrig, dep)
- ood = true
- } else {
- hsh, err := fileHash(fd)
- if err != nil {
- return ood, err
- }
- if theirHsh == hsh {
- trace(CDebug, "ood: %s%s -> %s: same hash", indent, tgtOrig, dep)
- } else {
- trace(CDebug, "ood: %s%s -> %s: hash differs", indent, tgtOrig, dep)
- ood = true
- }
- }
- fd.Close()
- if ood {
- continue
- }
- if dep == tgt {
- trace(CDebug, "ood: %s%s -> %s: same target", indent, tgtOrig, dep)
- continue
- }
- if isSrc(cwd, dep) {
- trace(CDebug, "ood: %s%s -> %s: is source", indent, tgtOrig, dep)
- continue
- } else {
- depOod, err := isOOD(cwd, dep, level+1)
- if depOod {
- ood = true
- trace(CDebug, "ood: %s%s -> %s: ood", indent, tgtOrig, dep)
- } else {
- trace(CDebug, "ood: %s%s -> %s: !ood", indent, tgtOrig, dep)
- }
- if err != nil {
- return ood, err
- }
- }