From 46e189a9c6398c1ab1245ab1e9827b959db29219 Mon Sep 17 00:00:00 2001 From: Sergey Matveev Date: Sun, 1 Aug 2021 15:08:26 +0300 Subject: [PATCH] No .rec required for recursive logs --- buildlog.go | 17 ++++------------- doc/news.texi | 2 ++ run.go | 42 ++++++++++++++++++++++++++++------------- t/goredo-failed-build.t | 17 +++++++++++++++++ 4 files changed, 52 insertions(+), 26 deletions(-) create mode 100755 t/goredo-failed-build.t diff --git a/buildlog.go b/buildlog.go index 3403e4d..0564bed 100644 --- a/buildlog.go +++ b/buildlog.go @@ -200,18 +200,9 @@ func showBuildLog(dir, tgt string, buildLogRec map[string][]string, depth int) e return w.Flush() } defer fd.Close() - fdDep, err := os.Open(path.Join(dirNormalized, RedoDir, tgtNormalized+DepSuffix)) - if err != nil { - return err - } - depInfo, err := depRead(fdDep) - fdDep.Close() - if err != nil { - return err - } - subs := make([]*BuildLogJob, 0, len(depInfo.ifchanges)) - for _, dep := range depInfo.ifchanges { - subDir, subTgt := cwdAndTgt(path.Join(dirNormalized, dep["Target"])) + subs := make([]*BuildLogJob, 0, len(buildLogRec["Ifchange"])) + for _, dep := range buildLogRec["Ifchange"] { + subDir, subTgt := cwdAndTgt(path.Join(dirNormalized, dep)) if subDir == dirNormalized && subTgt == tgtNormalized { continue } @@ -238,7 +229,7 @@ func showBuildLog(dir, tgt string, buildLogRec map[string][]string, depth int) e } subs = append(subs, &BuildLogJob{ dir: dirNormalized, - tgt: dep["Target"], + tgt: dep, started: started, exitCode: exitCode, rec: rec, diff --git a/doc/news.texi b/doc/news.texi index a839bb1..c280785 100644 --- a/doc/news.texi +++ b/doc/news.texi @@ -6,6 +6,8 @@ @itemize @item @command{redo-cleanup} now also cleans @file{.redo/tgt.log.rec} files. +@item + Recursive logs do not require @file{.redo/tgt.rec} existence anymore. @end itemize @anchor{Release 1_9_0} diff --git a/run.go b/run.go index fe78a87..d31c8a0 100644 --- a/run.go +++ b/run.go @@ -25,6 +25,7 @@ import ( "flag" "fmt" "io" + "log" "os" "os/exec" "path" @@ -476,8 +477,8 @@ func runScript(tgtOrig string, errs chan error, traced bool) error { for _, arg := range args { fields = append(fields, recfile.Field{Name: "Cmd", Value: arg}) } - for _, e := range cmd.Env { - fields = append(fields, recfile.Field{Name: "Env", Value: e}) + for _, env := range cmd.Env { + fields = append(fields, recfile.Field{Name: "Env", Value: env}) } if exitErr != nil { fields = append(fields, recfile.Field{ @@ -486,12 +487,36 @@ func runScript(tgtOrig string, errs chan error, traced bool) error { }) } w := bufio.NewWriter(fdStderr) + + var depInfo *DepInfo + fdDep, err = os.Open(fdDep.Name()) + if err != nil { + goto Err + } + depInfo, err = depRead(fdDep) + fdDep.Close() + if err != nil { + goto Err + } + for _, dep := range depInfo.ifchanges { + fields = append(fields, recfile.Field{ + Name: "Ifchange", + Value: dep["Target"], + }) + } _, err = recfile.NewWriter(w).WriteFields(fields...) - w.Flush() - fdStderr.Close() if err != nil { + goto Err + } + err = w.Flush() + Err: + if err != nil { + log.Println(err) os.Remove(logRecPath) } + fdStderr.Close() + } else { + log.Println("can not open", logRecPath, ":", err) } } lockRelease() @@ -556,15 +581,6 @@ func runScript(tgtOrig string, errs chan error, traced bool) error { finished = time.Now() runErr.Finished = &finished if err != nil { - // Try to commit .rec anyway - if !NoSync { - fdDep.Sync() - } - os.Rename(fdDep.Name(), path.Join(redoDir, tgt+DepSuffix)) - if !NoSync { - err = syncDir(redoDir) - } - exitErr = err.(*exec.ExitError) runErr.Err = err errs <- runErr diff --git a/t/goredo-failed-build.t b/t/goredo-failed-build.t new file mode 100755 index 0000000..0643101 --- /dev/null +++ b/t/goredo-failed-build.t @@ -0,0 +1,17 @@ +#!/bin/sh + +testname=`basename "$0"` +test_description="Check that failed build is still OOD target" +. $SHARNESS_TEST_SRCDIR/sharness.sh + +tmp=`mktemp -d` +trap "rm -fr $tmp" HUP PIPE INT QUIT TERM EXIT +cd $tmp + +echo exit 1 > bar.do +echo redo-ifchange bar > foo.do +export REDO_NO_PROGRESS=1 +test_expect_success "first fail" 'redo foo ; [ $? = 1 ]' +test_expect_success "second fail" 'redo foo ; [ $? = 1 ]' + +test_done -- 2.44.0