diff --git a/ChangeLog b/ChangeLog index 7ddc30066..bd0c6ca31 100644 --- a/ChangeLog +++ b/ChangeLog @@ -30,6 +30,9 @@ (thanks to Flavio Poletti). - TW-1857 Change Task::get call to the more efficient Task::has (thanks to Zachary Manning). +- TW‐1858 Change signature for dependencyGetBlocked +- TW-1859 Change signature of Task::getTags +- TW-1860 Change signature of Task::getAnnotations - TW-1873 Specify different path to extensions/hooks directory (thanks to Eli). - TW-1878 uuids subcommand produces a space-delimited list, not comma-delimited diff --git a/src/Task.cpp b/src/Task.cpp index 18d189981..48ac9a30c 100644 --- a/src/Task.cpp +++ b/src/Task.cpp @@ -1865,19 +1865,16 @@ float Task::urgency () //////////////////////////////////////////////////////////////////////////////// float Task::urgency_inherit () const { + float v = FLT_MIN; +#ifdef PRODUCT_TASKWARRIOR // Calling dependencyGetBlocked is rather expensive. // It is called recursively for each dependency in the chain here. - std::vector blocked; -#ifdef PRODUCT_TASKWARRIOR - dependencyGetBlocked (*this, blocked); -#endif - - float v = FLT_MIN; - for (auto& task : blocked) + for (auto& task : dependencyGetBlocked (*this)) { // Find highest urgency in all blocked tasks. v = std::max (v, task.urgency ()); } +#endif return v; } diff --git a/src/Task.h b/src/Task.h index cf2c7d076..16a091575 100644 --- a/src/Task.h +++ b/src/Task.h @@ -170,17 +170,17 @@ private: const std::string decode (const std::string&) const; public: - float urgency_project () const; - float urgency_active () const; - float urgency_scheduled () const; - float urgency_waiting () const; - float urgency_blocked () const; - float urgency_inherit () const; + float urgency_project () const; + float urgency_active () const; + float urgency_scheduled () const; + float urgency_waiting () const; + float urgency_blocked () const; + float urgency_inherit () const; float urgency_annotations () const; - float urgency_tags () const; - float urgency_due () const; - float urgency_blocking () const; - float urgency_age () const; + float urgency_tags () const; + float urgency_due () const; + float urgency_blocking () const; + float urgency_age () const; }; #endif diff --git a/src/columns/ColDepends.cpp b/src/columns/ColDepends.cpp index 5cb752ac6..287045bb5 100644 --- a/src/columns/ColDepends.cpp +++ b/src/columns/ColDepends.cpp @@ -78,17 +78,14 @@ void ColumnDepends::measure (Task& task, unsigned int& minimum, unsigned int& ma else if (_style == "count") { - std::vector blocking; - dependencyGetBlocking (task, blocking); - minimum = maximum = 2 + format ((int) blocking.size ()).length (); + minimum = maximum = 2 + format ((int) dependencyGetBlocking (task).size ()).length (); } else if (_style == "default" || _style == "list") { minimum = maximum = 0; - std::vector blocking; - dependencyGetBlocking (task, blocking); + auto blocking = dependencyGetBlocking (task); std::vector blocking_ids; for (auto& i : blocking) @@ -126,17 +123,13 @@ void ColumnDepends::render ( else if (_style == "count") { - std::vector blocking; - dependencyGetBlocking (task, blocking); - - renderStringRight (lines, width, color, '[' + format (static_cast (blocking.size ())) + ']'); + renderStringRight (lines, width, color, '[' + format (static_cast (dependencyGetBlocking (task).size ())) + ']'); } else if (_style == "default" || _style == "list") { - std::vector blocking; - dependencyGetBlocking (task, blocking); + auto blocking = dependencyGetBlocking (task); std::vector blocking_ids; for (const auto& t : blocking) diff --git a/src/commands/CmdInfo.cpp b/src/commands/CmdInfo.cpp index 3aeb4148a..60dc2dafc 100644 --- a/src/commands/CmdInfo.cpp +++ b/src/commands/CmdInfo.cpp @@ -160,8 +160,7 @@ int CmdInfo::execute (std::string& output) // dependencies: blocked { - std::vector blocked; - dependencyGetBlocking (task, blocked); + auto blocked = dependencyGetBlocking (task); if (blocked.size ()) { std::stringstream message; @@ -176,8 +175,7 @@ int CmdInfo::execute (std::string& output) // dependencies: blocking { - std::vector blocking; - dependencyGetBlocked (task, blocking); + auto blocking = dependencyGetBlocked (task); if (blocking.size ()) { std::stringstream message; diff --git a/src/dependency.cpp b/src/dependency.cpp index 11f9f8346..04af7b362 100644 --- a/src/dependency.cpp +++ b/src/dependency.cpp @@ -38,29 +38,35 @@ extern Context context; //////////////////////////////////////////////////////////////////////////////// -void dependencyGetBlocked (const Task& task, std::vector & blocked) +std::vector dependencyGetBlocked (const Task& task) { std::string uuid = task.get ("uuid"); - auto all = context.tdb2.pending.get_tasks (); - for (auto& it : all) + std::vector blocked; + for (auto& it : context.tdb2.pending.get_tasks ()) if (it.getStatus () != Task::completed && it.getStatus () != Task::deleted && it.has ("depends") && it.get ("depends").find (uuid) != std::string::npos) blocked.push_back (it); + + return blocked; } //////////////////////////////////////////////////////////////////////////////// -void dependencyGetBlocking (const Task& task, std::vector & blocking) +std::vector dependencyGetBlocking (const Task& task) { std::string depends = task.get ("depends"); + std::vector blocking; + if (depends != "") for (auto& it : context.tdb2.pending.get_tasks ()) if (it.getStatus () != Task::completed && it.getStatus () != Task::deleted && depends.find (it.get ("uuid")) != std::string::npos) blocking.push_back (it); + + return blocking; } //////////////////////////////////////////////////////////////////////////////// @@ -145,14 +151,12 @@ bool dependencyIsCircular (const Task& task) // void dependencyChainOnComplete (Task& task) { - std::vector blocking; - dependencyGetBlocking (task, blocking); + auto blocking = dependencyGetBlocking (task); // If the task is anything but the tail end of a dependency chain. if (blocking.size ()) { - std::vector blocked; - dependencyGetBlocked (task, blocked); + auto blocked = dependencyGetBlocked (task); // Nag about broken chain. if (context.config.getBoolean ("dependency.reminder")) @@ -205,8 +209,7 @@ void dependencyChainOnStart (Task& task) { if (context.config.getBoolean ("dependency.reminder")) { - std::vector blocking; - dependencyGetBlocking (task, blocking); + auto blocking = dependencyGetBlocking (task); // If the task is anything but the tail end of a dependency chain, nag about // broken chain. diff --git a/src/feedback.cpp b/src/feedback.cpp index dac344ade..ba1b2d2b2 100644 --- a/src/feedback.cpp +++ b/src/feedback.cpp @@ -381,14 +381,12 @@ void feedback_unblocked (const Task& task) if (context.verbose ("affected")) { // Get a list of tasks that depended on this task. - std::vector blocked; - dependencyGetBlocked (task, blocked); + auto blocked = dependencyGetBlocked (task); // Scan all the tasks that were blocked by this task for (auto& i : blocked) { - std::vector blocking; - dependencyGetBlocking (i, blocking); + auto blocking = dependencyGetBlocking (i); if (blocking.size () == 0) { if (i.id) diff --git a/src/main.h b/src/main.h index 8856e05ce..e66cb2798 100644 --- a/src/main.h +++ b/src/main.h @@ -52,8 +52,8 @@ std::string colorizeError (const std::string&); std::string colorizeDebug (const std::string&); // dependency.cpp -void dependencyGetBlocked (const Task&, std::vector &); -void dependencyGetBlocking (const Task&, std::vector &); +std::vector dependencyGetBlocked (const Task&); +std::vector dependencyGetBlocking (const Task&); bool dependencyIsCircular (const Task&); void dependencyChainOnComplete (Task&); void dependencyChainOnStart (Task&);