"go.cypherpunks.ru/recfile"
)
+const (
+ DepTypeIfcreate = "ifcreate"
+ DepTypeIfchange = "ifchange"
+ DepTypeAlways = "always"
+ DepTypeStamp = "stamp"
+)
+
type TgtErr struct {
Tgt string
Err error
return fmt.Sprintf("%s: %s", e.Tgt, e.Err)
}
+func cwdMustRel(paths ...string) string {
+ rel, err := filepath.Rel(Cwd, path.Join(paths...))
+ if err != nil {
+ panic(err)
+ }
+ return rel
+}
+
func cwdAndTgt(tgt string) (string, string) {
cwd, tgt := path.Split(tgt)
cwd, err := filepath.Abs(cwd)
}
func rebuildStamped(cwd, tgt, depPath string) (string, error) {
- relTgt, err := filepath.Rel(Cwd, path.Join(cwd, tgt))
- if err != nil {
- panic(err)
- }
+ relTgt := cwdMustRel(cwd, tgt)
errs := make(chan error, 1)
- if err = runScript(relTgt, errs); err != nil {
+ if err := runScript(relTgt, errs); err != nil {
return "", err
}
- if err = <-errs; !isOkRun(err) {
+ if err := <-errs; !isOkRun(err) {
return "", errors.New("build failed")
}
fdDep, err := os.Open(depPath)
}
return "", err
}
- if m["Type"] == "stamp" {
+ if m["Type"] == DepTypeStamp {
stampTheir = m["Hash"]
break
}
return stampTheir, nil
}
-func isOOD(cwd, tgt string, level int) (bool, error) {
- tgtOrig := tgt
+func isOOD(cwd, tgtOrig string, level int) (bool, error) {
indent := strings.Repeat(". ", level)
trace(CDebug, "ood: %s%s checking", indent, tgtOrig)
- cwd, tgt = cwdAndTgt(path.Join(cwd, tgt))
+ cwd, tgt := cwdAndTgt(path.Join(cwd, tgtOrig))
depPath := path.Join(cwd, RedoDir, tgt+DepSuffix)
fdDep, err := os.Open(depPath)
if err != nil {
return true, TgtErr{tgtOrig, err}
}
switch m["Type"] {
- case "always":
+ case DepTypeAlways:
trace(CDebug, "ood: %s%s -> always", indent, tgtOrig)
ood = true
- case "ifcreate":
+ case DepTypeIfcreate:
ifcreates = append(ifcreates, m)
- case "ifchange":
+ case DepTypeIfchange:
ifchanges = append(ifchanges, m)
- case "stamp":
+ case DepTypeStamp:
stampOur = m["Hash"]
trace(CDebug, "ood: %s%s -> stamped: %s", indent, tgtOrig, stampOur)
default: