The on-exit hook gets all modified tasks as input, but this was omitted
in the previous release. This adds a test for the desired behavior, and
updates TDB2 to correctly store the required information.
This removes use of gnutls and the TLS implementation, which is no
longer needed (task synchronization is handled via Taskchampion, which
uses `reqwest`, which handles TLS via other Rust dependencies). This
incidentally removes the following config options:
* `debug.tls`
* `taskd.ca`
* `taskd.certificate`
* `taskd.ciphers`
* `taskd.credentials`
* `taskd.key`
* `taskd.server`
* `taskd.trust`
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.