- Made Table::optimize a public method.
- Table::optimize called only from handleReportGHistory, where it's
needed.
- Retaining benchmark.txt, to allow further improvements.
- Added Timer class to display high resolution timing information.
- Found terrible bug in Table::optimize that was taking up 99.7%,
on average, of the Table::rendering time, including sorting. This
fix naturally causes a 187-fold speedup of rendering.
- Changed report.cpp in handleCustomReport to only load pending tasks,
instead of all pending tasks. Subtle, but important difference.
- Added unit tests to cover automatic colorization by priority.
- Added unit tests to cover automatic disabling of color when !isatty.
- Added unit tests to cover display of unsupported configuration
variable in the 'version' report.
- Added support the '_forcecolor' configuration variable to allow the
possibility of unit tests that test color support, yet redirect
output to a file. This configuration variable will not be
documented.
- No longer writes shadow files based on TDB onChange trigger.
- Addressed bug whereby adding a recurring task trigger a shadow
file rewrite, which in turn performs trigger another rewrite...
- Validates specified columns in custom reports against list of good
column names.
- Validates list of sort columns in custom reports against list of
specified column names.
- Minor fix to grammar file.
Doesn't work, and is commented out for now. Need a better approach
because of the priority attribute validation of "!H" failing, and the
Unix shell interpreting "!", thus requiring an escape, which makes the
command ("task list pri:\!H") ugly.
- Removed TDB::gc calls from report.cpp.
- Made TDB::gc calls from task.cpp whenever necessary.
- Disabled TDB::gc calls when running a report for the sake of the shadow file.
- Shadow file overwrite now implemented using ostream, instead of cout.rdbuf trickery, for the well-being of cygwin.