From e4574695494bfca030d74309bf149d965dbe093f Mon Sep 17 00:00:00 2001 From: Fumitoshi Ukai Date: Thu, 16 Jul 2015 16:55:51 +0900 Subject: [go] build specified targets or first target if not given. --- exec.go | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) (limited to 'exec.go') diff --git a/exec.go b/exec.go index 8aa7a0e..adf1c10 100644 --- a/exec.go +++ b/exec.go @@ -151,8 +151,8 @@ func NewExecutor(opt *ExecutorOpt) (*Executor, error) { return ex, nil } -// Exec executes to build roots. -func (ex *Executor) Exec(g *DepGraph) error { +// Exec executes to build targets, or first target in DepGraph. +func (ex *Executor) Exec(g *DepGraph, targets []string) error { ex.ctx = newExecContext(g.vars, g.vpaths, false) // TODO: Handle target specific variables. @@ -169,7 +169,24 @@ func (ex *Executor) Exec(g *DepGraph) error { } startTime := time.Now() - for _, root := range g.nodes { + var nodes []*DepNode + if len(targets) == 0 { + if len(g.nodes) > 0 { + nodes = append(nodes, g.nodes[0]) + } + } else { + m := make(map[string]*DepNode) + for _, n := range g.nodes { + m[n.Output] = n + } + for _, t := range targets { + n := m[t] + if n != nil { + nodes = append(nodes, n) + } + } + } + for _, root := range nodes { err := ex.makeJobs(root, nil) if err != nil { break -- cgit v1.2.3