diff options
author | Peter Collingbourne <peter@pcc.me.uk> | 2011-11-13 05:49:16 (GMT) |
---|---|---|
committer | Peter Collingbourne <peter@pcc.me.uk> | 2012-02-04 21:46:12 (GMT) |
commit | 85ff781fa30fff63c01ccd30faaad39d766e1505 (patch) | |
tree | dc5791da4769c61951735e84febcccfa8acf98d2 /src/build_test.cc | |
parent | b07e183e0eb6225e34a3d592e3dff63bcf00df81 (diff) | |
download | Ninja-85ff781fa30fff63c01ccd30faaad39d766e1505.zip Ninja-85ff781fa30fff63c01ccd30faaad39d766e1505.tar.gz Ninja-85ff781fa30fff63c01ccd30faaad39d766e1505.tar.bz2 |
Implement cleanup-on-interrupt
This causes us to clean up by deleting any output files belonging
to currently-running commands before we quit if we are interrupted
(either by Ctrl-C or by a command failing).
Fixes issue #110.
Diffstat (limited to 'src/build_test.cc')
-rw-r--r-- | src/build_test.cc | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/src/build_test.cc b/src/build_test.cc index 0fa23ed..de5ddc1 100644 --- a/src/build_test.cc +++ b/src/build_test.cc @@ -181,7 +181,7 @@ struct BuildTest : public StateTestWithBuiltinRules, BuildTest() : config_(MakeConfig()), builder_(&state_, config_), now_(1), last_command_(NULL) { builder_.disk_interface_ = &fs_; - builder_.command_runner_ = this; + builder_.command_runner_.reset(this); AssertParse(&state_, "build cat1: cat in1\n" "build cat2: cat in1 in2\n" @@ -191,13 +191,17 @@ struct BuildTest : public StateTestWithBuiltinRules, fs_.Create("in2", now_, ""); } + ~BuildTest() { + builder_.command_runner_.release(); + } + // Mark a path dirty. void Dirty(const string& path); // CommandRunner impl virtual bool CanRunMore(); virtual bool StartCommand(Edge* edge); - virtual Edge* WaitForCommand(bool* success, string* output); + virtual Edge* WaitForCommand(ExitStatus* status, string* output); BuildConfig MakeConfig() { BuildConfig config; @@ -251,15 +255,16 @@ bool BuildTest::StartCommand(Edge* edge) { return true; } -Edge* BuildTest::WaitForCommand(bool* success, string* output) { +Edge* BuildTest::WaitForCommand(ExitStatus* status, string* /* output */) { if (Edge* edge = last_command_) { if (edge->rule().name() == "fail") - *success = false; + *status = ExitFailure; else - *success = true; + *status = ExitSuccess; last_command_ = NULL; return edge; } + *status = ExitFailure; return NULL; } |