feedback: Use task identifiers instead of IDs

During construction of a feedback string for a dependency change,
a list of IDs of the dependencies was used. However, if the tasks
being referred to are already deleted / completed, their respective
IDs are all 0s.

Use shortened UUIDs in such case.
This commit is contained in:
Tomas Babej 2016-04-03 11:05:32 +02:00 committed by Paul Beckingham
parent 1ebc8034b4
commit 084383a644
3 changed files with 45 additions and 22 deletions

View file

@ -1177,6 +1177,22 @@ void Task::getDependencies (std::vector <std::string>& all) const
all.clear (); all.clear ();
split (all, get ("depends"), ','); split (all, get ("depends"), ',');
} }
////////////////////////////////////////////////////////////////////////////////
void Task::getDependencies (std::vector <Task>& all) const
{
std::vector <std::string> deps;
split (deps, get ("depends"), ',');
all.clear ();
for (auto& dep : deps)
{
Task task;
context.tdb2.get (dep, task);
all.push_back (task);
}
}
#endif #endif
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////

View file

@ -142,6 +142,7 @@ public:
void removeDependency (const std::string&); void removeDependency (const std::string&);
void getDependencies (std::vector <int>&) const; void getDependencies (std::vector <int>&) const;
void getDependencies (std::vector <std::string>&) const; void getDependencies (std::vector <std::string>&) const;
void getDependencies (std::vector <Task>&) const;
void getUDAOrphans (std::vector <std::string>&) const; void getUDAOrphans (std::vector <std::string>&) const;

View file

@ -44,6 +44,20 @@ extern Context context;
static void countTasks (const std::vector <Task>&, const std::string&, int&, int&); static void countTasks (const std::vector <Task>&, const std::string&, int&, int&);
////////////////////////////////////////////////////////////////////////////////
// Converts a vector of tasks to a human-readable string that represents the tasks.
std::string taskIdentifiers (const std::vector <Task>& tasks)
{
std::vector <std::string> identifiers;
for (auto task: tasks)
identifiers.push_back (task.identifier (true));
std::string result;
join (result, ", ", identifiers);
return result;
}
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
std::string taskDifferences (const Task& before, const Task& after) std::string taskDifferences (const Task& before, const Task& after)
{ {
@ -72,13 +86,11 @@ std::string taskDifferences (const Task& before, const Task& after)
{ {
if (name == "depends") if (name == "depends")
{ {
std::vector <int> deps_after; std::vector <Task> deps_after;
after.getDependencies (deps_after); after.getDependencies (deps_after);
std::string to;
join (to, ", ", deps_after);
out << " - " out << " - "
<< format (STRING_FEEDBACK_DEP_SET, to) << format (STRING_FEEDBACK_DEP_SET, taskIdentifiers (deps_after))
<< "\n"; << "\n";
} }
else else
@ -100,15 +112,13 @@ std::string taskDifferences (const Task& before, const Task& after)
{ {
if (name == "depends") if (name == "depends")
{ {
std::vector <int> deps_before; std::vector <Task> deps_before;
before.getDependencies (deps_before); before.getDependencies (deps_before);
std::string from; std::string from = taskIdentifiers (deps_before);
join (from, ", ", deps_before);
std::vector <int> deps_after; std::vector <Task> deps_after;
after.getDependencies (deps_after); after.getDependencies (deps_after);
std::string to; std::string to = taskIdentifiers (deps_after);
join (to, ", ", deps_after);
out << " - " out << " - "
<< format (STRING_FEEDBACK_DEP_MOD, from, to) << format (STRING_FEEDBACK_DEP_MOD, from, to)
@ -161,10 +171,9 @@ std::string taskInfoDifferences (
{ {
if (name == "depends") if (name == "depends")
{ {
std::vector <int> deps_before; std::vector <Task> deps_before;
before.getDependencies (deps_before); before.getDependencies (deps_before);
std::string from; std::string from = taskIdentifiers (deps_before);
join (from, ", ", deps_before);
out << format (STRING_FEEDBACK_DEP_DEL, from) out << format (STRING_FEEDBACK_DEP_DEL, from)
<< "\n"; << "\n";
@ -191,10 +200,9 @@ std::string taskInfoDifferences (
{ {
if (name == "depends") if (name == "depends")
{ {
std::vector <int> deps_after; std::vector <Task> deps_after;
after.getDependencies (deps_after); after.getDependencies (deps_after);
std::string to; std::string to = taskIdentifiers (deps_after);
join (to, ", ", deps_after);
out << format (STRING_FEEDBACK_DEP_WAS_SET, to) out << format (STRING_FEEDBACK_DEP_WAS_SET, to)
<< "\n"; << "\n";
@ -225,15 +233,13 @@ std::string taskInfoDifferences (
{ {
if (name == "depends") if (name == "depends")
{ {
std::vector <int> deps_before; std::vector <Task> deps_before;
before.getDependencies (deps_before); before.getDependencies (deps_before);
std::string from; std::string from = taskIdentifiers (deps_before);
join (from, ", ", deps_before);
std::vector <int> deps_after; std::vector <Task> deps_after;
after.getDependencies (deps_after); after.getDependencies (deps_after);
std::string to; std::string to = taskIdentifiers (deps_after);
join (to, ", ", deps_after);
out << format (STRING_FEEDBACK_DEP_WAS_MOD, from, to) out << format (STRING_FEEDBACK_DEP_WAS_MOD, from, to)
<< "\n"; << "\n";