diff options
-rw-r--r-- | src/build.cc | 2 | ||||
-rw-r--r-- | src/ctor.h | 1 | ||||
-rw-r--r-- | src/execute.cc | 5 | ||||
-rw-r--r-- | src/libctor.cc | 7 | ||||
-rw-r--r-- | src/tasks.cc | 5 | ||||
-rw-r--r-- | src/tasks.h | 3 | ||||
-rw-r--r-- | test/tasks_test.cc | 12 |
7 files changed, 24 insertions, 11 deletions
diff --git a/src/build.cc b/src/build.cc index a31f6a5..5995fb7 100644 --- a/src/build.cc +++ b/src/build.cc @@ -65,7 +65,7 @@ int build(const ctor::settings& settings, break; } - auto task = getNextTask(all_tasks, dirtyTasks); + auto task = getNextTask(settings, all_tasks, dirtyTasks); if(task == nullptr) { if(processes.empty() && !dirtyTasks.empty()) @@ -209,6 +209,7 @@ struct settings std::string builddir{"build"}; std::size_t parallel_processes{1}; int verbose{0}; // -1: completely silent, 0: normal, 1: verbose, ... + bool dry_run{false}; }; struct build_configuration; diff --git a/src/execute.cc b/src/execute.cc index ad6c2a2..c050732 100644 --- a/src/execute.cc +++ b/src/execute.cc @@ -107,7 +107,10 @@ int execute(const ctor::settings& settings, { envmap.insert(key + "=" + value); } - + if(settings.dry_run) + { + _exit(0); + } auto [_, envv] = envmap.get(); execve(command.data(), const_cast<char* const *>(argv.data()), const_cast<char* const *>(envv)); diff --git a/src/libctor.cc b/src/libctor.cc index aaf17c9..3bfa041 100644 --- a/src/libctor.cc +++ b/src/libctor.cc @@ -132,6 +132,13 @@ int main(int argc, char* argv[]) return 0; }); + opt.add("dry-run", no_argument, 'n', + "Print the commands that would be executed, but do not execute them.", + [&]() { + settings.dry_run = true; + return 0; + }); + opt.add("configure-cmd", no_argument, key++, "Print commandline for last configure.", [&]() { diff --git a/src/tasks.cc b/src/tasks.cc index 2f9e47a..e853470 100644 --- a/src/tasks.cc +++ b/src/tasks.cc @@ -170,7 +170,8 @@ std::vector<std::shared_ptr<Task>> taskFactory(const ctor::build_configuration& return tasks; } -std::shared_ptr<Task> getNextTask([[maybe_unused]]const std::vector<std::shared_ptr<Task>>& allTasks, +std::shared_ptr<Task> getNextTask([[maybe_unused]]const ctor::settings& settings, + [[maybe_unused]]const std::vector<std::shared_ptr<Task>>& allTasks, std::vector<std::shared_ptr<Task>>& dirtyTasks) { for(auto dirtyTask = dirtyTasks.begin(); @@ -179,7 +180,7 @@ std::shared_ptr<Task> getNextTask([[maybe_unused]]const std::vector<std::shared_ { auto task = *dirtyTask; //std::cout << "Examining target " << (*dirtyTask)->target() << "\n"; - if(task->ready()) + if(task->ready() || settings.dry_run) { dirtyTasks.erase(dirtyTask); return task; diff --git a/src/tasks.h b/src/tasks.h index 6573784..97fc84d 100644 --- a/src/tasks.h +++ b/src/tasks.h @@ -23,7 +23,8 @@ const std::deque<Target>& getTargets(const ctor::settings& settings, //! fulfilled. //! The returned task is removed from the dirty list. //! Return nullptr if no dirty task is ready. -std::shared_ptr<Task> getNextTask(const std::vector<std::shared_ptr<Task>>& allTasks, +std::shared_ptr<Task> getNextTask(const ctor::settings& settings, + const std::vector<std::shared_ptr<Task>>& allTasks, std::vector<std::shared_ptr<Task>>& dirtyTasks); //! Get list of tasks filtered by name including each of their direct diff --git a/test/tasks_test.cc b/test/tasks_test.cc index b444bd5..cbd0864 100644 --- a/test/tasks_test.cc +++ b/test/tasks_test.cc @@ -170,7 +170,7 @@ public: uASSERT_EQUAL(0, task->registerDepTasks(allTasks)); } - uASSERT_EQUAL(nullptr, getNextTask(allTasks, dirtyTasks)); + uASSERT_EQUAL(nullptr, getNextTask({}, allTasks, dirtyTasks)); } { // Zero (One task, no dirty) @@ -187,7 +187,7 @@ public: uASSERT_EQUAL(0, task->registerDepTasks(allTasks)); } - uASSERT_EQUAL(nullptr, getNextTask(allTasks, dirtyTasks)); + uASSERT_EQUAL(nullptr, getNextTask({}, allTasks, dirtyTasks)); } { // One (One task, one dirty) @@ -205,7 +205,7 @@ public: uASSERT_EQUAL(0, task->registerDepTasks(allTasks)); } - uASSERT_EQUAL(task1, getNextTask(allTasks, dirtyTasks)); + uASSERT_EQUAL(task1, getNextTask({}, allTasks, dirtyTasks)); uASSERT_EQUAL(0u, dirtyTasks.size()); } @@ -226,7 +226,7 @@ public: uASSERT_EQUAL(0, task->registerDepTasks(allTasks)); } - uASSERT_EQUAL(task2, getNextTask(allTasks, dirtyTasks)); + uASSERT_EQUAL(task2, getNextTask({}, allTasks, dirtyTasks)); uASSERT_EQUAL(0u, dirtyTasks.size()); } @@ -250,7 +250,7 @@ public: uASSERT_EQUAL(0, task->registerDepTasks(allTasks)); } - uASSERT_EQUAL(task2, getNextTask(allTasks, dirtyTasks)); + uASSERT_EQUAL(task2, getNextTask({}, allTasks, dirtyTasks)); uASSERT_EQUAL(0u, dirtyTasks.size()); } @@ -275,7 +275,7 @@ public: uASSERT_EQUAL(0, task->registerDepTasks(allTasks)); } - uASSERT_EQUAL(task1, getNextTask(allTasks, dirtyTasks)); + uASSERT_EQUAL(task1, getNextTask({}, allTasks, dirtyTasks)); uASSERT_EQUAL(1u, dirtyTasks.size()); } } |