- TW-296 urgency of blocked task should affect urgency of blocking task

Signed-off-by: Paul Beckingham <paul@beckingham.net>
This commit is contained in:
Wilhelm Schuermann 2014-07-06 14:11:10 -04:00 committed by Paul Beckingham
parent 0c1fa8b20e
commit 7548ce662a
5 changed files with 40 additions and 0 deletions

View file

@ -79,6 +79,7 @@ float Task::urgencyActiveCoefficient = 0.0;
float Task::urgencyScheduledCoefficient = 0.0;
float Task::urgencyWaitingCoefficient = 0.0;
float Task::urgencyBlockedCoefficient = 0.0;
float Task::urgencyInheritCoefficient = 0.0;
float Task::urgencyAnnotationsCoefficient = 0.0;
float Task::urgencyTagsCoefficient = 0.0;
float Task::urgencyNextCoefficient = 0.0;
@ -1721,6 +1722,7 @@ float Task::urgency_c () const
value += fabsf (Task::urgencyDueCoefficient) > epsilon ? (urgency_due () * Task::urgencyDueCoefficient) : 0.0;
value += fabsf (Task::urgencyBlockingCoefficient) > epsilon ? (urgency_blocking () * Task::urgencyBlockingCoefficient) : 0.0;
value += fabsf (Task::urgencyAgeCoefficient) > epsilon ? (urgency_age () * Task::urgencyAgeCoefficient) : 0.0;
value += fabsf (Task::urgencyInheritCoefficient) > epsilon ? (urgency_inherit () * Task::urgencyInheritCoefficient) : 0.0;
// Tag- and project-specific coefficients.
std::map <std::string, float>::iterator var;
@ -1792,6 +1794,39 @@ float Task::urgency_priority () const
return 0.0;
}
////////////////////////////////////////////////////////////////////////////////
float Task::urgency_inherit () const
{
if (!is_blocking)
return 0.0;
std::vector <Task> blocked;
std::vector <Task>::const_iterator it;
float v = 0.0;
// Calling dependencyGetBlocked is rather expensive.
// It is called recursively for each dependency in the chain here.
// Paul is going to kill me. :)
dependencyGetBlocked (*this, blocked);
for (it = blocked.begin (); it != blocked.end (); ++it)
{
// urgency_blocked, _blocking, _project and _tags left out.
v += it->urgency_active();
v += it->urgency_age();
v += it->urgency_annotations();
v += it->urgency_due();
v += it->urgency_next();
v += it->urgency_priority();
v += it->urgency_scheduled();
v += it->urgency_waiting();
// Inherit from all parent tasks in the dependency chain recursively.
v += it->urgency_inherit();
}
return v;
}
////////////////////////////////////////////////////////////////////////////////
float Task::urgency_project () const
{