mirror of
https://github.com/GothenburgBitFactory/taskwarrior.git
synced 2025-06-26 10:54:26 +02:00
Bug Fix - recurrence
- Fixed bug whereby handleRecurrence was being called after the tasks were loaded and filtered, and thus handleRecurrence operated on a filtered set, and failed. The fix is to move the call to before the TDB::load call, and to add another TDB::loadPending call inside handleRecurrence. This means TDB::load needs to be reentrant without re-reading the file, and can therefore be called twice, with the likelihood of there being a different filter for each call. This in turn led to the problem whereby handleRecurrence would generate the synthetic tasks, which then sat uncommitted in TDB::mNew. The fix for this is that every call to TDB::loadPending gets the contents of TDB::mNew appended (with correct IDs). This bug is what you might call a good one.
This commit is contained in:
parent
20bd2cf594
commit
8dab95e200
7 changed files with 62 additions and 43 deletions
|
@ -53,8 +53,12 @@ extern Context context;
|
|||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Scans all tasks, and for any recurring tasks, determines whether any new
|
||||
// child tasks need to be generated to fill gaps.
|
||||
void handleRecurrence (std::vector <Task>& tasks)
|
||||
void handleRecurrence ()
|
||||
{
|
||||
std::vector <Task> tasks;
|
||||
Filter filter;
|
||||
context.tdb.loadPending (tasks, filter);
|
||||
|
||||
std::vector <Task> modified;
|
||||
|
||||
// Look at all tasks and find any recurring ones.
|
||||
|
@ -97,7 +101,6 @@ void handleRecurrence (std::vector <Task>& tasks)
|
|||
changed = true;
|
||||
|
||||
Task rec (*t); // Clone the parent.
|
||||
rec.id = context.tdb.nextId (); // Assign a unique id.
|
||||
rec.set ("uuid", uuid ()); // New UUID.
|
||||
rec.setStatus (Task::pending); // Shiny.
|
||||
rec.set ("parent", t->get ("uuid")); // Remember mom.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue