The stats command calls an API to provide this information in a way that
will still be relevant for TaskChampion, while CmdInfo's access to the
data remains. The TaskChampion interface for per-task hitsory is still
not ready.
The stats command gets this information from an API that will also work
for TaskChampion. The sync command still accesses the field directly,
as the command must be completely rewritten for TaskChampion.
Reduce the amount of copies necessary for TDB2::gc() by moving the GC
processing to the Task object source - TF2::load_tasks().
This entangles TDB2 and TF2 more than previously, but leads to huge
performance benefits:
- "next" performance test down 21%
- "list" performance test down 11%
- "all" performance test down 4%
- "export" performance test down 9%
The "gc" measurement is down 96% for all performance tests. This is a
result of moving the actual processing into TF2::load_gc() and not
measuring the time taken by that function as "gc" time.
- Leads to 1-3% improvement across all performance tests.
- _I2U could very likely be further optimized by using a sparse vector,
or handling the edge cases of this approach ourselves.
- Improves "task import" performance test on test machine further from
13s to 1.9s.
- Active only during "task import". Might be worth using during other
mass lookups like "task sync", or could even be a good default.
- Removed the ability for hooks to add tasks, or modify tasks that are outside
the context of the current event. This makes hooks a local mechanism that
operates only on local changes. Modifications/additions coming in via sync
command are not processed by hooks.
- Added an option to bypass backlog recording to TDB2::add and TDB2::modify.
This is required when handling backlog data, to prevent perpetual syncing.
- 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.