Hopefully found the ultimate cause of duplicated (completed) tasks.
The corresponding test case
1. does not rely on the fact that there are modifications with equal
timestamps and
2. is a LOT simpler than the other ones.
Fixed some other merge issues with the sorting order of equally timestamped
entries in undo.data (see #1104).
1. The fact that both files can begin with equal timestamps but different
modifications has not been taken into account.
2. Besides the fact that the relative order within the same data file must
be preservered as introduced before, we also need a unique order for entries
of different data files so that each machine comes to the same merge result.
This has now been achieved by taking the UUIDs into account as soon as the
timestamps are equal.
Fixed the bug where the sort order of transactions with equal timestamps
was not stable, i.e. due to the lack of a total order, different merges
produced different sortings and hence messed up transactions which
have already been merged.
Added unit test.
Implemented a quick fix for the issue with a broken branch-off algorithm
which disregarded the transaction boundaries in the undo.data file.
Added unit test.
Implemented a quick fix for the issue with a broken branch-off algorithm
which disregarded the transaction boundaries in the undo.data file.
- Fixed bug #1022, where dependencies were note released when a blocking task
was completed (thanks to Arkady Grudzinsky).
- The Task object now caches ::is_blocked and ::is_blocking Booleans that are
determined on pending.data load.
- Simplified and sped up color rule processing using cached values, reducing
the number of map lookups, and removed loop invariants when the rules are
not defined.
- Simplified urgency calculations given the cached values for blocked/blocking.
- On load, pending.data is scanned for accurate blocked/blocking status
determination.
- Obsoleted and removed complex single-task dependency calculations.
- Sped up 'nag' processing by using cached values..
- Modified the 'show' command to consider color.blocking to be valid.
- Added default config value for color.blocking, and included it in the
precedence list ahead of blocked, as it is more important.
- Updated taskrc.5 man page to include the new color.blocking rule, and its
place in the rule precedence.
- Fixed bug #1023, which applied default.project and default.priority during
modification (thanks to Christoph Lange).
- Added unit tests.
- Added Christoph to the AUTHORS file.
- Added std::string::reserve in high-use locations.
- Used Task::get_date over Task::get where possible.
- Added missing code (bug) for waking up any completed tasks that are freshly
waited.
- Greater use of STL methods for bulk copying.
- Corrected performance measurement. The TDB2::gc requires data to
be loaded first, but load time is measured separately. This resulted
in repeat counting. Now the gc time subtracts any load time that is
accumulated *during* the gc. This is now a fair accounting of the time.
- Removed backlog file processing, which slows down processing. When
2.1 has taskd support, the backlog will be cleared, but until then there
is no point in accumulating transactions.
- Fixed merge, with an egregious hack for now, by creating zero-byte undo.data
file. This goes against the whole TDB2 philosophy, so it is temporary.
- Updated PUNCHLIST.
- Removed old tdb comment from CmdMerge.
- Fixed a bug, or rather a side-effect of more efficient i/o. Now that
a TDB2::GC call does not write out files until the final TDB2::commit,
the GC has the effect of not modifying task IDs based on shuffling tasks
between pending.data and completed.data until the next command. Fixed.
- Implemented the import-yaml.pl external script.
- Added unit tests.
- Fixed problem where the pending tasks were not loaded prior to uuid
verification.
- Fixed a silly bug whereby TDB2::gc, once it loaded the data, wiped the TF2
objects, such that TDB2::commit didn't know there was data to write.
Hmm. Time for a vacation.
- Fixed validation bug whereby recurring child tasks inherited the
parent status ("recurring") instead of the expected "pending".
- Modified 'add' command to code duplicated in Task::validate.
- Cleaned up associated bug.period.t unit test.
- Stubbed the undo implementation in TB2::revert (undo as a name is
already taken), and in the process lose the capability.
- Add detection of <modifications> when running the 'undo' command
and generate an error.
- Corrected maintenance of the _lines vector during TDB2::add_line.
- Implemented TDB2::modify_task undo maintenance.
- Added unit tests for TDB2. Which fail.