// Build the specified node (caller has determined that it should be // built and can be built). On failure, report the error (e.g. to the // console, a GUI window, ...) and return false. On success, return // true. func (self *BuildState) buildNode(node dag.Node, builderr *BuildError) bool { rule := node.BuildRule() log.Verbose("building node %s, action=%s\n", node, rule.ActionString()) node.SetState(dag.BUILDING) builderr.attempts++ targets, errs := rule.Execute() if len(errs) > 0 { // Normal, everyday build failure: report the precise problem // immediately, and accumulate summary info in the caller. for _, tnode := range targets { tnode.SetState(dag.FAILED) } self.reportFailure(errs) builderr.addFailure(node) return false } for _, tnode := range targets { tnode.SetState(dag.BUILT) } return true }