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
}
}
subs = append(subs, &BuildLogJob{
dir: dirNormalized,
- tgt: dep["Target"],
+ tgt: dep,
started: started,
exitCode: exitCode,
rec: rec,
"flag"
"fmt"
"io"
+ "log"
"os"
"os/exec"
"path"
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{
})
}
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()
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
--- /dev/null
+#!/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