X-Git-Url: http://www.git.cypherpunks.ru/?a=blobdiff_plain;f=buildlog.go;fp=buildlog.go;h=956cf4fdc9aa353b5abfca806e19cc8ae19c56ac;hb=3f8ee87bd625a38b57a0a38e3c34bb26fe6e1b8e;hp=b0d2f2d620b1961a306576594c501517f88763f7;hpb=4655c362aed45a161e0bac3a6987347bb35c3eaa;p=goredo.git diff --git a/buildlog.go b/buildlog.go index b0d2f2d..956cf4f 100644 --- a/buildlog.go +++ b/buildlog.go @@ -38,8 +38,7 @@ import ( const HumanTimeFmt = "2006-01-02 15:04:05.000000000 Z07:00" type BuildLogJob struct { - dir string - tgt string + tgt *Tgt started time.Time exitCode int rec map[string][]string @@ -75,8 +74,8 @@ func init() { buildLogSeen = make(map[string]struct{}) } -func parseBuildLogRec(dir, tgt string) (map[string][]string, error) { - fd, err := os.Open(path.Join(dir, RedoDir, tgt+LogRecSuffix)) +func parseBuildLogRec(tgt *Tgt) (map[string][]string, error) { + fd, err := os.Open(path.Join(tgt.h, RedoDir, tgt.t+LogRecSuffix)) if err != nil { return nil, ErrLine(err) } @@ -94,18 +93,17 @@ func depthPrefix(depth int) string { } func showBuildLogSub(sub *BuildLogJob, depth int) error { - abs := mustAbs(path.Join(sub.dir, sub.tgt)) - if _, ok := buildLogSeen[abs]; ok { + if _, ok := buildLogSeen[sub.tgt.a]; ok { return nil } - buildLogSeen[abs] = struct{}{} + buildLogSeen[sub.tgt.a] = struct{}{} dp := depthPrefix(depth) fmt.Printf( "%s%s%s\n", sub.rec["Started"][0], dp, - colourize(CRedo, "redo "+sub.tgt), + colourize(CRedo, "redo "+sub.tgt.String()), ) - if err := showBuildLog(sub.dir, sub.tgt, sub.rec, depth+1); err != nil { + if err := showBuildLog(sub.tgt, sub.rec, depth+1); err != nil { return err } durationSec, durationNsec, err := durationToInts(sub.rec["Duration"][0]) @@ -116,14 +114,14 @@ func showBuildLogSub(sub *BuildLogJob, depth int) error { fmt.Printf( "%s%s%s (code: %d) (%d.%ds)\n\n", sub.rec["Finished"][0], dp, - colourize(CErr, "err "+sub.tgt), + colourize(CErr, "err "+sub.tgt.String()), sub.exitCode, durationSec, durationNsec, ) } else { fmt.Printf( "%s%s%s (%d.%ds)\n\n", sub.rec["Finished"][0], dp, - colourize(CRedo, "done "+sub.tgt), + colourize(CRedo, "done "+sub.tgt.String()), durationSec, durationNsec, ) } @@ -168,11 +166,10 @@ func showBuildLogCmd(m map[string][]string, depth int) error { return nil } -func showBuildLog(dir, tgt string, buildLogRec map[string][]string, depth int) error { +func showBuildLog(tgt *Tgt, buildLogRec map[string][]string, depth int) error { var err error - dirNormalized, tgtNormalized := cwdAndTgt(path.Join(dir, tgt)) if *flagBuildLogCommands || *flagBuildLogRecursive { - buildLogRec, err = parseBuildLogRec(dirNormalized, tgtNormalized) + buildLogRec, err = parseBuildLogRec(tgt) if err != nil { return err } @@ -182,7 +179,7 @@ func showBuildLog(dir, tgt string, buildLogRec map[string][]string, depth int) e return err } } - fd, err := os.Open(path.Join(dirNormalized, RedoDir, tgtNormalized+LogSuffix)) + fd, err := os.Open(path.Join(tgt.h, RedoDir, tgt.t+LogSuffix)) if err != nil { return ErrLine(err) } @@ -198,12 +195,12 @@ func showBuildLog(dir, tgt string, buildLogRec map[string][]string, depth int) e } defer fd.Close() subs := make([]*BuildLogJob, 0, len(buildLogRec["Ifchange"])) - for _, dep := range buildLogRec["Ifchange"] { - subDir, subTgt := cwdAndTgt(path.Join(dirNormalized, dep)) - if subDir == dirNormalized && subTgt == tgtNormalized { + for _, depPath := range buildLogRec["Ifchange"] { + dep := NewTgt(path.Join(tgt.h, depPath)) + if dep.a == tgt.a { continue } - rec, err := parseBuildLogRec(subDir, subTgt) + rec, err := parseBuildLogRec(dep) if err != nil { if errors.Is(err, fs.ErrNotExist) { continue @@ -225,7 +222,6 @@ func showBuildLog(dir, tgt string, buildLogRec map[string][]string, depth int) e } } subs = append(subs, &BuildLogJob{ - dir: dirNormalized, tgt: dep, started: started, exitCode: exitCode,