- Fixed bug #837, which caused incorrect urgency calculations for tasks that
have completed dependencies, and problems when editing those tasks (thanks
to Matt Kraai).
- Added Task::addDependency (const std::string&) method for reconstructing
dependencies on tasks with no ID.
- Modfified Task::urgency_blocked so that it considers the blocking task's
status. This is an expensive test, and so it is wrapped by a cheaper test
to see if there are/were any dependencies at all. This means that urgency
calculations are not slowed for tasks without dependencies, and is slower
but more accurate for tasks that do have dependencies.
- Modified edit command so that dependencies are shown as IDs or UUIDs
depending on whether the task is pending or not.
- Modified edit command so that dependencies are parsed as IDs or UUIDs
depending on whether the task is pending or not.
- Modified wording in the template of the edit command to reflect the above.
- Added unit tests bug.837.t.
- Fixed problem where urgency was not properly calculated for waiting tasks.
- Tweaked urgency coefficients to make most of the values closer together, and
therefore more sensitive.
- Inverted 'waiting' coefficient.
- Boosted 'next', 'due' and 'blocking' coefficients.
- Modified unit tests accordingly.
- Lessened the impact of 'blocked', 'project', 'tags' and 'age'.
- Backslashes actually. The escaping mechanism in the low-level parser
was eating leading \ characters when it should not. Very hard bug to
find, trivial to fix.
- Added unit tests to several components while narrowing this down.
- Added a coefficient for ageing which is the increase (or decrease)
of urgency per day. The calculated urgency offset due to ageing
can be limited by setting urgency.age.max.
- Fixed bug #839, which caused problems when recurrence frequencies of '1m'
were used. This is an obsolete form, and should now be '1mo' (thanks to
Gour D).
- Fixed bug in Task::addDependency where a 'dup dep' error string was not
properly composed, which cause the error message to be shown as 'k'.
- Relocated expression evaluation on modification to only be processed for
date attributes. This impacts DOM, but fixes more than it breaks.
- Corrected unit test that was expecting an old-style error message.
- Added protection against array overrun in next_mod_group. Again.
- Fixed bug in Task::substitute that contained incorrect assumptions about
regex matches.
- Fixed bug in Task::substitute that matched against the annotation name,
rather than the value for non-regex substitutions.
- Fixed bug that caused improper functioning of the 'global' substitution
indicator.
- Removed unnecessary capturing parentheses that were added for regex searches.
- 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.
- Improved some task validation errors by including data.
- Improved the phrasing of some error to be less pompous.
- Marked validation errors that need to be downgraded to warnings.
- Annotation timestamps are now incremented until unique. This prevents
rapid, successive annotations colliding. The kind that occur during
unit tests and when using UI wrapper programs.
- Removed 'sleep' commands in unit tests that were added to circumvent
this. This speeds up the test suite somewhat.
- Task is no longer a map of string to Att. Att is itself a name/
value pair, so the name was redundant. Task is now a map of string
to string. This brings the obsoletion of Att much closer.
- Implemented the import command, which only suports JSON. It is
the basis for all other import formats, which will be implemented
as external scripts.
- Added proper handling for when no command or filter is specified, and
no rc.default.command exists.
- Improved wording on above error message.
- Fixed typo in previous commit (managed to check in code before the
build completed, and ultimately failed).
- Now reports errors that occur during initialization at the same level
of verbosity as during command execution.
- Implemented CmdAdd.cpp and CmdLog.cpp using TDB2.
- Implemented simple append writes in TDB2.
- Modified CmdImport to accept and parse JSON.
- Added more const-ness in DOM, Expression and Task, to allow TDB2::get_tasks
to return a const vector ref, which is a Very Good Thing.
- Corrected usage for the export command.
- Implemented Task::urgency as a call to Task::urgency_c, which is a const
overload to allow urgency calculations (without caching) for const Task
objects.
- Removed obolete code from TDB.
- Added lots of diagnostic output for TDB2 - it's annoying, but will be
gone soon.
- Added mention in CmdHelp of the new <filter> and <modifications>
syntax elements. Needs more.
- Added Command::filter overload which uses TDB2. Not in use yet.
- A substitution arg is categorized as "subst", but was tested for
"substitution".
- The Arguments::is_multipart method was triggering on '/', which is
wrong, but I can't remember why I put it in there. Hmmm.
- When extracting a write-filter, substitutions after the command
were generating an error, whereas they should be ignored.
- Task::substitute was modifying data even when the patterns were not
matching. Yikes.
- Added unit tests for en-passant modification of all types during
done, delete, start, stop.
- Added regex support to substirutions.
- Fixed bug that prevented 1.9.4 from shipping with regexes. If the
description is "aXXaaXXa", and the substitution is /XX/.../ then the
first substitutions changes the length of the string to "a...aaXXa"
and therefore invalidates the index for the second match, and makes
this change: "a...a...Xa". The fix is to keep a running 'skew' count
of the difference in 'from' and 'to' length, to adjust the match
indexes.
- Moved the helper deltaSubstitutions function into the Task object,
which makes more sense.
- Cleaned up output composition for CmdAdd.
- Eliminated #ifdef FEATURE_REGEX. They are here to stay.
- Replaced old Tree-based parser with a faster, leaner parser.
Currently lacking good error handling and a large test suite.
- Integrated new parser into Task object, for encode/decode.
- Replicated same basic unit tests. Needs more.
- Fixed bug in handleShell that failed to call the new Context::initialize2.
- Removed debugging code from CmdInstall.
- Implemented format() that does not require width and precision args.