From af3e1d7000ee00823370aebecb256f4cfe57dab4 Mon Sep 17 00:00:00 2001 From: Evan Martin Date: Sun, 28 Nov 2010 17:27:30 -0800 Subject: [PATCH] refactor --- build.cc | 32 ++++++++++++++++++++------------ build.h | 2 ++ 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/build.cc b/build.cc index e32130e..ef32c46 100644 --- a/build.cc +++ b/build.cc @@ -294,20 +294,9 @@ bool Builder::Build(string* err) { continue; } - // Create directories necessary for outputs. - for (vector::iterator i = edge->outputs_.begin(); - i != edge->outputs_.end(); ++i) { - if (!disk_interface_->MakeDirs((*i)->file_->path_)) - return false; - } - - string command = edge->EvaluateCommand(); - if (!command_runner_->StartCommand(edge)) { - err->assign("command '" + command + "' failed."); + if (!StartEdge(edge, err)) return false; - } - edge = NULL; while (!(edge = command_runner_->NextFinishedCommand())) { command_runner_->WaitForCommands(err); } @@ -330,3 +319,22 @@ bool Builder::Build(string* err) { return true; } +bool Builder::StartEdge(Edge* edge, string* err) { + // Create directories necessary for outputs. + // XXX: this will block; do we care? + for (vector::iterator i = edge->outputs_.begin(); + i != edge->outputs_.end(); ++i) { + if (!disk_interface_->MakeDirs((*i)->file_->path_)) + return false; + } + + // Compute command and start it. + string command = edge->EvaluateCommand(); + if (!command_runner_->StartCommand(edge)) { + err->assign("command '" + command + "' failed."); + return false; + } + + return true; +} + diff --git a/build.h b/build.h index 701a28d..d12cc76 100644 --- a/build.h +++ b/build.h @@ -85,6 +85,8 @@ struct Builder { Node* AddTarget(const string& name, string* err); bool Build(string* err); + bool StartEdge(Edge* edge, string* err); + State* state_; Plan plan_; DiskInterface* disk_interface_; -- 2.7.4