This replicates what the Rust runtime does, and matches what Rust code
expects, for example when writing to a socket which is no longer
connected to the remote end.
TC 0.7.0 introduces a new `TaskData` type that maps to Taskwarrior's
`Task` type more cleanly. It also introduces the idea of gathering lists
of operations and "committing" them to a replica.
A consequence of this change is that TaskChampion no longer
automatically maintains dependency information, so Taskwarrior must do
so, with its `TDB2::dependency_sync` method. This method does a very
similar thing to what TaskChampion had been doing, so this is a shift of
responsibility but not a major performance difference.
Cxx is .. not great. It is missing a lot of useful things that make a
general-purpose bridge impractical:
- no support for trait objects
- no support for `Option<T>` (https://github.com/dtolnay/cxx/issues/87)
- no support for `Vec<Box<..>>`
As a result, some creativity is required in writing the bridge, for
example returning a `Vec<OptionTaskData>` from `all_task_data` to allow
individual `TaskData` values to be "taken" from the vector.
That said, Cxx is the current state-of-the-art, and does a good job of
ensuring memory safety, at the cost of some slightly awkward APIs.
Subsequent work can remove the "TDB2" layer and allow commands and other
parts of Taskwarrior to interface directly with the `Replica`.
- Many files were missing an explicit cmake.h include. Some were not including
it at all. Now it's used almost everywhere.
(cherry picked from commit 82ae86979c497e6d1d0c6b2b5a55aa379ec82c98)
- Added special case support for '--version' which bypasses all
configuration. Not documented. For extension prgorams like
'taskhelm', that need to determine whether taskwarrior is
sufficiently current.
- Implemented custom uuid function that doesn't suffer from the precision
and cyclic lack of randomness of the previous implementation.
Signed-off-by: Paul Beckingham <paul@beckingham.net>
- Added proper handling for sequences, in that they must be contiguous.
- Added placeholder code for default command, and automatic info report.
- Eliminated Context::parse.
- Eliminated Context::run Timer, because when it goes out of scope, it
adds timing messages to the deubg output, which at the end of Context::run
has already been displayed. In addition, the Context::dispatch timer
is about 0.2 milliseconds shorter, so the two are redundant.
- Obsoleted Command::exectute 'commandLine' argument. It is worse
than unnecessary, it is an uncategorized raw argument string, which
is only really useful for the 'execute' command, which itself now
calls Arguments::combine to reconstruct the command line string.
- Implemented Arguments::extract_command to locate the command
keyword in an argument list.
- Implemented Arguments::extract_sequence to locate and remove an ID
sequence from an argument list.
- Added unit test for extract_sequence.
- Stubbed all Argument::extract_<object> methods.
- Simplified code in (soon to be obsolete) Sequence.cpp.
- Implemented stubbed Context::initialize2.
- Implemented combined command line.
- Migrated some code from Context::initialize to ::initialize2.
- Integrated ::initialize2 into the startup sequence.
- Implemented Context::dispatch2.
- Integrated ::dispatch2 into the run sequence.
- Implemented Context::updateXtermTitle.
- Added debug messages to new Command objects.
- Implemented CmdLogo, which implements the _logo command, for fun.
- Removed unnecessary base class overrides from Cmd* objects.
- Added en-US.h, which will be a header file full of string defines.
- Added logic to i18n.h to include en-US.h based on cmake command
line argument (cmake ... -DPACKAGE_LANGUAGE=1).
- Added one sample string.
- New 'ids' command that returns a filtered set of task ID numbers, instead
of the actual tasks. For advanced pipeline use.
- Now supplements the command line with data read from standard input, which
allows commands like: echo 'add Pay the bills' | task