diff --git a/src/main.cpp b/src/main.cpp index 501609c..c6bba7e 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -23,14 +23,11 @@ void add_tasks() // // mob doesn't have a concept of task dependencies, just task ordering, so // if a task depends on another, it has to be earlier in the order - // - // true/false arguments to parallel_tasks is whether the sub tasks are super - // tasks // third-party tasks - add_task(false) + add_task() .add_task() .add_task() .add_task() @@ -42,18 +39,18 @@ void add_tasks() .add_task() .add_task(); - add_task(false) + add_task() .add_task() .add_task() .add_task() .add_task() .add_task(); - add_task(false) + add_task() .add_task() .add_task(); - add_task(false) + add_task() .add_task() .add_task() .add_task() @@ -68,11 +65,11 @@ void add_tasks() // most of the alternate names below are from the transifex slugs, which // are sometimes different from the project names, for whatever reason - add_task(true) + add_task() .add_task("cmake_common") .add_task("modorganizer-uibase"); - add_task(true) + add_task() .add_task("modorganizer-game_features") .add_task("modorganizer-archive") .add_task("modorganizer-lootcli") @@ -88,7 +85,7 @@ void add_tasks() // the gamebryo flag must be set for all game plugins that inherit from // the gamebryo classes; this will merge the .ts file from gamebryo with // the one from the specific plugin - add_task(true) + add_task() .add_task("modorganizer-game_oblivion", mo::gamebryo) .add_task("modorganizer-game_fallout3", mo::gamebryo) .add_task("modorganizer-game_fallout4", mo::gamebryo) @@ -101,7 +98,7 @@ void add_tasks() .add_task("modorganizer-game_ttw", mo::gamebryo) .add_task("modorganizer-game_enderal", mo::gamebryo); - add_task(true) + add_task() .add_task({"modorganizer-tool_inieditor", "inieditor"}) .add_task("modorganizer-tool_inibakery") .add_task("modorganizer-preview_base") @@ -120,7 +117,7 @@ void add_tasks() .add_task("modorganizer-plugin_python") .add_task(); - add_task(true) + add_task() .add_task({"modorganizer-tool_configurator", "pycfg"}) .add_task("modorganizer-fnistool") .add_task("modorganizer-basic_games") diff --git a/src/tasks/task.cpp b/src/tasks/task.cpp index 652780a..79698d2 100644 --- a/src/tasks/task.cpp +++ b/src/tasks/task.cpp @@ -689,11 +689,22 @@ void task::run_tool_impl(tool* t) } -parallel_tasks::parallel_tasks(bool super) - : container_task("parallel"), super_(super) +parallel_tasks::parallel_tasks() + : container_task("parallel") { } +void parallel_tasks::add_task(std::unique_ptr t) +{ + if (!children_.empty() && children_[0]->is_super() != t->is_super()) + { + gcx().bail_out(context::generic, + "parallel task can't mix super and non-super tasks"); + } + + children_.push_back(std::move(t)); +} + std::vector parallel_tasks::children() const { std::vector v; @@ -706,7 +717,10 @@ std::vector parallel_tasks::children() const bool parallel_tasks::is_super() const { - return super_; + if (children_.empty()) + return false; + + return children_[0]->is_super(); } void parallel_tasks::run() diff --git a/src/tasks/task.h b/src/tasks/task.h index dcb1555..b6f8a83 100644 --- a/src/tasks/task.h +++ b/src/tasks/task.h @@ -191,7 +191,7 @@ public: class parallel_tasks : public container_task { public: - parallel_tasks(bool super); + parallel_tasks(); bool enabled() const override { @@ -201,21 +201,21 @@ public: template parallel_tasks& add_task(Args&&... args) { - children_.push_back( - std::make_unique(std::forward(args)...)); - + add_task(std::make_unique(std::forward(args)...)); return *this; } template parallel_tasks& add_task(std::initializer_list il, Args&&... args) { - children_.push_back( - std::make_unique(std::move(il), std::forward(args)...)); + add_task(std::make_unique( + std::move(il), std::forward(args)...)); return *this; } + void add_task(std::unique_ptr t); + fs::path get_source_path() const override { return {}; @@ -248,7 +248,6 @@ protected: void do_clean(clean c) override; private: - bool super_; std::vector> children_; std::vector threads_; };