- Removed the feature that allows commands to be piped in to stdin,
and appended to any existing command line. This feature is
conditionally compiled, controlled by the FEATURE_STDIN define in
main.h
- Many unit tests contained "echo '-- y'", and now use "echo 'y'"
because the '--' is no longer supported on stdin.
- Thanks to the IRC team for testing, including Bryce Harrington,
Sam Stuck, Owen Clarke, Greg Grossmeier.
- Added bounds check before call to string::substr to avoid passing a
negative start pos. Test rc.t was broken from commit 0ac9a4b because
it contains 'report.:b' and legacyCheckForDeprecatedVariables was
trying to substr starting from pos 'length() - 12' (-3).
- Changed a test that adds a task that is due in one hour, then
verifies that the task is 'due'. This fails when run between
the times 2300 and 2400. Now the test makes the task due in
5 minutes, which narrows the window when the test can fail.
This no longer coincides with the time the tinderbox runs.
- 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.
- Now that the 'diagnostics' command can detect duplicate UUID
values, it makes sense to incorporate that into unit tests that
employ multiple recurring tasks.
- When bulk tasks are modified, the "project changed" messages are
now retained until processing is completed, so that only one message
per project is generated.
- 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'.
- Change #819 test to pass, because the bug is deferred.
- Change #884 test to pass, because the bug is deferred.
- Added Najmi Ahmad Zabidi to AUTHORS file, for suggesting a specific
verbosity control.
- Added some stealth unit tests.
- Fixed bug #552, where 'rc.verbose=off' suppressed warnings (thanks to Peter
De Poorter).
- Fixed bug #863, which suppressed report labels with rc.verbose=off (thanks to
Michelle Crane).
- Fixed 'witching hour' bug in unit tests that causes problems when run
in assorted time zones. By using str2time to get the epoch value of
a known local time, this should fix failures that occur.
Signed-off-by: Paul Beckingham <paul@beckingham.net>
- Modified update-holidays.pl script to include the MIT license.
- Added the URLs used to download the data, in the data.
- Added a refresh script to freshen the files.
Manually include unistd.h in a couple of places get things building with gcc
4.7, which removed it from the global namespace. This fixes the following build
errors:
src/A3.cpp:283:3: error: 'STDIN_FILENO' was not declared in this scope
src/commands/CmdEdit.cpp:598:30: error: 'getpid' was not declared in this scope
src/commands/CmdEdit.cpp:603:47: error: 'chdir' was not declared in this scope
Signed-off-by: Paul Beckingham <paul@beckingham.net>
- Corrected performance measurement. The TDB2::gc requires data to
be loaded first, but load time is measured separately. This resulted
in repeat counting. Now the gc time subtracts any load time that is
accumulated *during* the gc. This is now a fair accounting of the time.
- Fixed bug that caused only parent recurring tasks to have their attributes
properly removed.
- When duplicating a parent recurring task, a new recurring parent task is
created. When a child recurring task is duplicated, a plain task is created.
- Added unit tests.
- Thanks to Jennifer Cormier.
- Added feature #632, which allows environment variables TASKRC and TASKDATA
to override .taskrc and .task directory locations (thanks to Steve Rader).
- Added unit tests.
+
- Tag matching was being performed using the regex \b<tag>\b, which makes
taskwarrior dependent on regex lib bugs for basic functionality. This is
now modified to use pseudo-operators _hastag_ and _notag_.
- lua_open has been declared as deprecated in lua 5.1 and removed from
5.2. Usage of luaL_newstate is thus recommended in both series.
Signed-off-by: Paul Beckingham <paul@beckingham.net>
- Fixed bug #636, which causes the burndown reports to not honor the
_forcecolor=off setting (thanks to Steve Rader, Uli Martens).
Signed-off-by: Paul Beckingham <paul@beckingham.net>
- Fixed bug #818, which caused partial tag matching (thanks to Joe Holloway).
- Note that the regex word boundary anchors are different for Solaris
and Linux, and largely broken on OSX.
- Added unit tests.
- Added support for more type-specific checks of attribute values.
- Added support for more type-specific attribute rendering.
- Improved generalized methods for checking columns in a report.
- Added unit tests.
- Minor code cleanup.
- Added secret hidden feature for internal testing.
- Fixed bug #910, which caused unexpected behavior when duplicating a recurring
task (thanks to Jennifer Cormier).
- Fixed typo in duplicate command that failed to remove the 'mask' attribute.
- The verbosity token 'special' now controls whether the feedback is provided
when special tags are added to a task.
- Added new 'special' verbosity token documentation to man page.
- Added missing 'next' special tag to man page.
- Added new localized strings for describing special tags.
- 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.
- The problem was that the routine dependencyIsCircular() changed its behaviour
in git revision 726fc33fe4, and the new version
only checked tasks by id - but all completed/deleted tasks have the id0, which
led to the problem. The fix is extremelly simple, just get the dependencies
by uuid instead of by id.
Signed-off-by: Paul Beckingham <paul@beckingham.net>
- The bug first occured in commit 36ed70ad93 and
seems to be caused by the rewritten break point detection. This adds linefeeds
into the table output, where they're not wanted. This can be fixed by marking
the respective tables as nonbreakable, as done in the attached patch.
Signed-off-by: Paul Beckingham <paul@beckingham.net>
- 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.
- Fixed bug #897, which omitted the UUID field from the 'completed'
report, which is essential if you need to modify a completed task
(thanks to Eli Lev).
- Restored a 'skip' unit test, because it works most of the time, and
only fails during the one end of daylight savings day. Along with
several others.
- Provided sample sqlite3 export script in Python, to serve as a
starting point for anyone wanting to migrate taskwarrior data into
a SQL database. Illustrates JSON parsing and separation of the
relational data.
Signed-off-by: Paul Beckingham <paul@beckingham.net>
- Provided sample sqlite3 export script in Python, to serve as a
starting point for anyone wanting to migrate taskwarrior data into
a SQL database. Illustrates JSON parsing and separation of the
relational data.
Signed-off-by: Paul Beckingham <paul@beckingham.net>
From Owen:
I tried mktime on Darwin an Linux; looks like they both default to UTC if the TZ
environment variable is unset but on Solaris it defaults to the local timezone.
I compiled and ran the tests and checked the behaviour by running:
date
TZ="" date
TZ="UTC" date
On Solaris the first two are in local time and the third is in UTC.
On Darwin and Linux the first one is in local time and the other two are in UTC.
Found this as a reference, too, which mentions the suggested implementation in
'man 3 timegm':
http://stackoverflow.com/questions/6467844/is-c-mktime-different-on-windows-and-gnu-linux
Signed-off-by: Paul Beckingham <paul@beckingham.net>
- Removed backlog file processing, which slows down processing. When
2.1 has taskd support, the backlog will be cleared, but until then there
is no point in accumulating transactions.
- Possible fix for bug #892, which I cannot replicate anyway. This fix
involves testing my suspicion that std::map autovivifies via
std::map::operator[], which is not nice. Will ask Dmitriy to confirm.
- Added indentTree function that will provide the basis for a new 'projects'
command, and potentially more. Includes unit tests. Based on a patch from
Ralph Bean.
- Removed unnecessary definitions of max() and min(), replaced existent calls
with std::max(). Precursor to Bugfix #887.
Signed-off-by: Paul Beckingham <paul@beckingham.net>
- 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 that was not properly evaluating cases where recurrence was
being removed from a task.
Signed-off-by: Paul Beckingham <paul@beckingham.net>
- Fixed an odd bug in the unit tests. If today is the 14th of the month,
then subtracting 14 * 86_400 from the current time results in a date that
is in the prior month. Except of course, for one month following the shift
from summer time to standard time, when the test is run between 11:00pm and
midnight. The reverse happens in the spring.
- Fixed bug #860, which prevented lower-case priority values from being
accepted (thanks to Michelle Crane).
- Added unit tests.
- Also included ChangeLog updates from other fixes that were misseed.
- Modified the 'modify' command so that it only applies changes if
the requested changes made a difference. For example if the command
task 1 mod pri:H
was followed by:
task 1 mod pri:H
then the second command will report 'task not changed'.
- Modified the meaning of 'rc.bulk'. The old meaning was: the largest number
of tasks that could be modified without confirmation. New meaning is: the
number of tasks that trigger bulk confirmation. Default was 2 (meaning that
2 tasks affected were not in need of confirmation), is now 3 (meaning 3 tasks
now trigger confirmation.
Despite the dog's dinner I made of the preceding statement, the configuration
variable is now easier to understand.
- Implemented new 'bulk.t' to test confirmation and bulk confirmation for
sets of 1, 2 and 3 tasks (single, multiple, bulk). This test file obsoletes
several unit tests in other files.
- Added 'taskd.server' and 'taskd.credentials' as supported configuration
variables.
- Added the 'taskd.server' values to the 'diagnostics' command output.
- Updated taskrc.5.in to mention the new variables.
- Updated task-tutorial.5.in with new syntax.
- Removed examples using implicit 'info' command.
- Updated examples for new syntax.
- Updated copyright.
- Note that the tutorial is still firmly a 1.9.3 tutorial, with no
new examples other than syntax changes.
- Updated the task-faq.5.in man page, various edits.
- Now confrms to new syntax.
- Includes new questions on multiple simultaneous installations.
- Corrected answer to the xterm title question.
- Added feature #827, which allows augmentation of default.command with extra
arguments, when default.command itself contains mulitple arguments (thanks to
Aikido Guy).
- Fixed bug #846, which prevented the default.command configuration from
handling multiple arguments (thanks to Uli Martens).
- 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 merge, with an egregious hack for now, by creating zero-byte undo.data
file. This goes against the whole TDB2 philosophy, so it is temporary.
- Updated PUNCHLIST.
- Removed old tdb comment from CmdMerge.
- Fixed a bug, or rather a side-effect of more efficient i/o. Now that
a TDB2::GC call does not write out files until the final TDB2::commit,
the GC has the effect of not modifying task IDs based on shuffling tasks
between pending.data and completed.data until the next command. Fixed.
- 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.
- While fixing bug.360.t, discovered a bigger problem, which is not yet
fixed. When a due date is removed from a recurring child task, the
imask, parent and recur attributes should also be removed. Similarly
when a recur frequency is removed from a recurring child task, the
imask and parent should also be removed.
- Net result: two new failing tests.
- Rewrote updateRecurrenceMask, which was hopelessly muddled after the
TDB -> TDB2 change.
- Modified associated code.
- Improved signal to noise ratio in unit tests.
- Lowered the precedence of tag detection so that dates and durations are
recognized first.
- Modified the allowable tokens for a tag to be almost anything.
- The operator_nomatch was not properly defaulting a "true" result.
- Improved signal to noise ratio in bug.hasnt.t.
- Removed obsolete entries in ANALYSIS file.
- Many tests referred to 'synch_key.data', which is not the correct
name. It should be 'synch.key'. This has no effect on the number
of passing tests though.
- Re-enabled shadow files, but in a new, simpler manner, that allows the
rc.shadow.command to override settings like color if necessary.
- Modifed A3 to capture program name and store it in the Context.
- 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 bug where regexec was not being properly called.
- Fixed bug where multiple subexpressions were not being properly handled.
- Fixed bug that allowed regex matching to run off the end of a string.
- Fixed bug that causes regex captures to not be properly offset into the input
string.
- Removed () from unit tests.
- Implemented the import-yaml.pl external script.
- Added unit tests.
- Fixed problem where the pending tasks were not loaded prior to uuid
verification.
- Added safety valve processing. Whenever a write-command omits a
filter, the command will affect every task. This is dangerous.
If rc.confirmation is disabled, the command is terminated.
- Fixed a silly bug whereby TDB2::gc, once it loaded the data, wiped the TF2
objects, such that TDB2::commit didn't know there was data to write.
Hmm. Time for a vacation.
- Removed the newly obsoleted Command::apply_defaults, which is now
merged into Task::validate, and therefore applied to all modifications
and new tasks.
- Converted the 'modify' command to TDB2. This has a negative impact
on unit tests, but that represents bugs and ommissions in TDB2,
not flaws in the 'modify' command. I hope.
- Converted the 'done' command to TDB2. This has a negative impact
on unit tests, but that represents bugs and ommissions in TDB2,
not flaws in the 'done' command.
- When handleRecurrence was cloning the parent task, it failed to set
a new ID, so all the child tasks were given the ID of the parent.
- Cleaned up bug.annual.t.
- Implemented expression escalation: when matching against description,
escalate to include annotations on failure. Needs adjustment to
DOM eval before it will work.
- 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.
- Stubbed the undo implementation in TB2::revert (undo as a name is
already taken), and in the process lose the capability.
- Add detection of <modifications> when running the 'undo' command
and generate an error.
- Added missing TDB2::commit call to commands that handleRecurrence.
The missing commit would have meant no updates to the data when
recurring tasks are generated.
- Modified the export scripts to use the right command, which is now
'export', not '_query', although '_query' is now an alias for backward
compatibility.
- Added unit tests for the 'import' command, which uses JSON as the
native format. This is the new default import/export format. All
other import/export formats are (to be) implemented as transforms
to JSON.
- Corrected maintenance of the _lines vector during TDB2::add_line.
- Implemented TDB2::modify_task undo maintenance.
- Added unit tests for TDB2. Which fail.
- Rescued the ::encode and ::decode funtions and put them in util.cpp.
This is because 2.0 will still need to perform the same encode/decode
operations without Att.cpp around.
- Added unit tests for bug 819, on behalf of Matt Kraai.
- Created a new, single test for cleanup that replaces 6. It's makes
for shorter unit tests, and adds less test count inflation. Over
time, all tests should be modified in a similar way. This will
probably cut the total number of unit tests in half, but that's not
the important metric.
- Full implementation of TDB2::add, which includes pending/completed, undo
and backlog.
- Removed obsolete TF2::commitUndo, which is no longer necessary.
- Added File::truncate method, to allow a TDB2 shortcut.
- Added feature #682, which allows the configuration variable 'defaultheight'
to override the assumed height of 24 lines when 'detection' is not enabled
(thanks to Steve Rader).
- Fixed some tests that used old message text.
- Fixed tests that relied on 'log'ed tasks still being written into
pending.data.
- Removed obsolete auto-info tests.
- Added a diagnostic dump of the TDB2 state in debug mode.
- Added a call to TDB2::dump at the start of TDB2::commit.
- Removed unnecessary calls to TDB2::dump.
- Removed support for ' 1 wk', namely spaces before and after the ordinal.
This removes (some) ambiguity in more complex command lines.
- Fixed unit tests accordingly.
- Added unit tests for the '<=' and '>=' operators. All tests pass,
which makes a nice treat.
- Added more tests to '<' and '>' operators, so that all three data
types are covered.
- Some attribute values (ie wait:tomorrow) when parsed, need to take
the data type of the attribute (date) and use that as an implied type
of the value (date literal).
- Arg renders type-less and category-less values as "", instead of "none".
Cleaner output.
- Allowed durations to be specified numerically as seconds, in string form.
This flexibility allows the removal of special-case handling that stores
recurrence periods in raw form ('monthly'), reducing code size. As a
consequence this means that recurrence may now be rendered according to
Duration::formatCompact, which is desirable.
- Added supporting unit tests.
- 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.
- Arg now has a _value member that reflects the value in play, rather
than the input _raw value. Only _value is used in eval.
- DOM expansion capabilities are now controlled by rc.dom.
- Arguments are now categorized as either "literal" or a specific
category, with accompanying type. Type is inferred for literals,
and referenced for attributes.
- The A3::Arg object is very similar to the E9::Term object, so the two are
being merged. First step is to separate A3::Arg into it's own space, then
add a _type member.
- Added more valid stop characters as terminators for various arg types.
- Removed redundant E9 special handling for dates, which is already built in
to the Date object.
- Addressed bug #804 by allowing rc.hyphenate to control whether hyphens are
inserted when long lines are broken. This may help prevent xterm from
mis-parsing URLs in task annotations, when wrapped (thanks to Yann Davin).
- Added unit tests.
- Duration were parsed as <int><unit> in A3, whereas <number><unit> is
correct.
- Added Nibbler::str method for internal access.
- Nibbler::save, ::restore now return positions. Useful for extracting
substrings.
- Modified countdown.t to use the (now) correct units for durations.
- When a date attribute is updated, the expression may have evaluated to
a duration, which at this point is simply a number. If it is below a
certain threshold (5y) then it is considered a duration and added to
'now', otherwise it is considered a date.
- Change the was performance measurements are taken. This in preparation
to automated daily perf charts, leading to efforts to speed up certain
operations.
- If a file (pending.data) is open and locked, trying to open it again
caused an error, whereas is now does nothing and reports success.
- Corrected timing info in Command::filter.
- Restored the <name>.<modifier>[:=]<value> syntax that was reduced
to just <name>.<modifier>:<value> to make parsing easier. Now that
A3 is more sophisticated, we can have our sugar back.
- Converted the 'cal' command to TDB2.
- Reinstated command line handling for 'cal' command, but realized there
is a conflict with filters. Filtering disabled for 'cal' until a good
solution is found.
- Converted recur.cpp to use TDB2, which eliminates the file locking
problems that occur when both TDB and TDB2 are in use at the same time.
This will cause other issues until all commands are converted to TDB2.
- Converted CmdCustom to use TDB2, which means that for the first time,
2.0 is now optimizing data load based on filter characteristics. This
means that "task list" and "task next" etc are now *fast*.
- Improved diagnostics for TDB2, for debugging.
- Made locking an integral part of the File object, so that a client
may now call File::lock multiple times with no effect beyond the first
call. This simplifies situations like the 'cal' command that must scan
for recurrence changes, modify tasks, then optionally run a second
report, all without locking issues.
- I had forgotten to remove the unit tests for the ~ inversion modifier.
This feature, though well implemented, is removed because enhancements
to filtering are going to be added to the new expressions. Attribute
modifiers will continue to be supported, but not enhanced beyond 1.9.4
functionality..
- Added logic to detect whether the unit tests were being run with output
attached to a TTY or not, and adjust the expected lines of output
accordingly. The !TTY case is the important one.
- The command line construct "tags.none:" is translated into the expression
"tags = ''", but instead of '=' I had entered '=='. Force of C/C++/Perl
habit.
- Removed two unit tests for data file syntax that is no longer
supported, namely unquoted values.
Supported: status:"pending"
Not supported: status:pending
- TDB2::load_lines was splitting the text on \n, but because the last
line contains \n, there was an additional blank line. This is what
split_minimal is for.
- split_minimal contained a copy/paste bug that added the extra line
if the input was non-trivial, instead of if the remainder was non-
trivial.
- Fixed incorrect unit test accordingly.
- When parsing duration literals, look-ahead now prevents an ordinal
such as '31st' (August 31st) from being interpreted as two tokens
'31s' (duration) and 't' (word). This is the same fix that was
applied to A3::is_number. I'll be there are more that I missed.
- Quoting problem. To prevent the shell from stripping quotes, the
command line must include \" ... \", but in a Perl string, that
needs to be \\" ... \\". Silly mistake.
- 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.
- When HAVE_SRANDOM is undefined in 1.9.4, the timeval struct can be omitted
causing a compile error. Patch received, but not applied to 2.0.0 branch
because that code has been rewritten already (thanks to Paolo Almeida).
- 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.
- Corrected all unit tests that used the old syntax "task done 1" to
use the new syntax "task 1 done". Similarly, "task 1 ..." is now
"task 1 modify ...".
- Fixed bug whereby arguments were categorized, then defaults were injected
but no subsequent categorization occurred.
- Added debug diagnostics for default.command, 'modify' and 'information'
default processing.
- Fixed DOM lookup of special-case attributes: id and urgency are
not stored in the usual manner, and must be handled differently.
- Removed the responsibility of DOM to evaluate literals, because
they are handled more effectively in A3::tokenize.
- Fixed old code that assumed ".id" instead of "id".
- Removed unnecessary diag call from annotate.t.
- Added feature #811, which makes the 'execute' command optional, and
controlled by '#define HAVE_EXECUTE 1' in cmake.h. This allows a build
that does not have the potential security hole, in the event that taskwarrior
is run at elevated privilege, or run in the context of a web server.
- When compiling the 2.0.0 branch of Taskwarrior with GCC 4.6.1, the compiler
generates a number of warnings. This patch eliminates these warnings.
Signed-off-by: Paul Beckingham <paul@beckingham.net>
- Implemented selective ID/UUID detection, allowing only a single
block of consecutive ID/UUID values to be considered a sequence.
- Implemented A3::sequence to expand task IDs and UUIDs into an
algebraic filter.
- Implemented A3::extract_pattern.
- Implemented A3::infix, which inserts 'and' operators where necessary
in expressions.
- Began implementation of A3::expand which converts old-style filters
(pri:H) to the new algebraic style (priority = H).
- Here's a patch to make Taskwarrior not display the prompt and not delete the
parent task if a recurring task is deleted when rc.confirmation is false.
Signed-off-by: Paul Beckingham <paul@beckingham.net>
- A3 now tracks whether a command is read-only, and builds filters accordingly.
- Implemented extract_filter, extract_modfications and extract_words stubs.
- Removed all E9 implementation details - this is going to be written from
scratch.
- Created A3.{h,cpp} which will be a simpler, lightweight version of
Arguments.{h,cpp} that does less, but does it better.
- Created E9.{h,cpp} which will be a better implementation of
Expression.{h,cpp} that does less, but does it better.
- Integrated A3 into Context::initialize, and Arguments and A3 will
coexist until A3 surpasses Arguments.
- Added Context::getColumns to return a vector of column names.
This is to help a shift toward using the Column objects to assist
in the parsing/validation of data entry/modifications.
- Added Column::modifiable to delegate an attributes readable/writeable
state. This means the columns will be in charge of their own
mutability, which will simplify and generalize Command::modify_task.
- Eliminated the . prefix for DOM references to the current task - it is
unnatural to state ".due < today".
- Prioritized parsing dates ahead of integers, which were masking all
dates.
- Implemented Nibbler::getWord.
- Re-implemented Nibbler::getDOM.
- Modified DOM addressed for context-based attributes from "due" to ".due",
the help disambiguate DOM references in expressions. There is now a
consistency:
<id>.due Task-specific
.due Contextual
<uuid>.due General
- Implemented associated unit tests.
- Commented out troublesome "distance_from_command" code.
- Commented out DOM diagnostics, for now.
- Commented out TDB2 diagnostics, for now.
- Category "seq" arguments are now assigned type "exp".
- All type "exp" arguments are now tokenized.
- Broke out expression handling into two distinct flavors: filter
and expression. Filters need lots of preparation and mapping,
which includes implicit 'AND' operators, expansion of syntactic
sugar like /pattern/ etc and evaluate to a Boolean. Expressions
are simpler wiht less preparation, and evaluate to a Variant.
- 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.
- Added feature #800, adding a new command 'columns' that lists all the columns
available for custom reports, and includes their formatting options (thanks
to T. Charles Yun).
- Implemented Command::filter_shortcut to detect when a filter begins
with "status:pending" and skip the loading/parsing of completed.data.
- Removed obsolete att.t.cpp tests.
- Removed diagnostics from TDB2::TDB2 that were causing a segfault.
I suppose there is no std::cout available during global ctors?
- 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.
- When a command is encountered on the command line, followed by an
ID or UUID, the distance (in arguments) between the command and
the sequence is measured in terms of arguments that are not rc: or
rc. overrides. It cannot exceed 1. This helps disambiguate
commands like 'task list Fedora 13', because the '13' is more than
one argument away from 'list', and is therefore not an ID.
- Re-enabled the modify command.
- Re-implemented Arguments::inject_defaults to accomodate the idea
of the default command, the modify command without the modify
keyword, and the automatic info command.
- 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.
- Implemented closeEnough, which does a truncated, caseless compare
between two strings. For example, "FoO" is cloneEnough to "food."
to be a match. Used to allow mixed case and abbreviated arguments.
- 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>
- Applied patches for bug #798 which allows out-of-source builds (thanks to
Ben Boeckel).
- Added Ben to the AUTHORS file.
Signed-off-by: Paul Beckingham <paul@beckingham.net>
- The dom.t tests were segfaulting because they used a blank Context
with no arguments, and when the DOM referecne 'context.program' was
queried, it failed because there was no Context::args[0].
- Added feature #559, which implements a new configuration variable,
rc.exit.on.missing.db, which causes taskwarrior to exit if the
rc.data.location is missing (thanks to Sander Marechal).
- Fixed 'limit:N' bug, whereby when a report specifies a limit, and
the user overrides it, there are potentially two limit arguments,
in which case the last one, not the first one is needed.
- Removed DOM caching, which appears to be a problem.
- Added 'id' and 'uuid' to DOM::get, which were missing, and therefore
caused all filters with sequences to fail.
- Modified CmdInfo to load all tasks, until TDB2 is here.
- Implemented support for rc.default.command.
- Implemented support for assumed info command.
- Implemented Arguments::inject_defaults to insert default arguments
at just the right location.
- Corrected CmdCustom handling of limit:page.
- 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.
- Implemented add and log commands using new infrastructure.
- Relaxed restriction about creating completed tasks with no dependencies.
- Localized CmdAdd.cpp CmdLog.cpp.
- Implemented Command::modify_task to apply command line arguments to a
specified task.
- Implemented Command::apply_defaults to apply various initial values to
a specified task, such as entry date.
- Refactored column objects to contain a ::validate method, for the
validation of incoming data.
- Context.columns is now a vector of one of each column object,
indexed by attribute name, for validation purposes.
- Implemented RegX class to maintain a separate compile, and match
method, thereby allowing efficient re-use of the regex. This is
critical to Expression::eval, where an identical regex might be
applied to every task.
- Obsoleted rx.{h,cpp}, which combined the compile and match steps
into a single call, and is therefore not efficient when used in
the context of filtering.
- Fixed some unit tests that weren't building. Now they do. They
don't work of course (don't be silly) but that's a problem for
another day.
- Modified all code that relies on rx.h to use RegX.h.
- DOM::get now returns the input name by default, rather than "", which
was the cause of many filter elements not working.
- Modified Variant to have no private data, which means fewer copies of
Variants and less code.
- Eliminated Variant::operator^ - not needed.
- Filter processing short-circuits if there is no filter.
- Variant code was not only incomplete, but very broken. It should not have
been used. It still doesn't handle dates and durations.
- Converted all logical and relational Variant operators to return Boolean
values.
- Stack size is now checked for every operator.
- All operators implemented (without any advanced special case handling) except
%, ~ and !~.
- Added lazy DOM expansion at the last possible moment.
- Implemented Expression::create_variant to create appropriate Variant instances
based on categorized and inferred type.
- Removed Variant math functions. No point.
- Debug code left in place for now.
- Command line arguments are now handled a little differently. Each
argument is subjected to further splitting, to break up expressions
early in the process, prior to categorization.
- Patterns are now treated as quoted string, where the quote character
is /.
- Output from the query command is now optionally surrounded by [ ... ]
to make this a syntactically correct JSON document. This is off by
default.
- Updated documents.
- Reordered operator table so that longer operators match first, thus
disambiguating between ! and !=.
- Eliminated Expression::expand_expression.
- Modified Nibbler to know what a DOM reference looks like.
- Removed alpha equivalent operators (lt, le, gt, ge, not, eq, ne) because
these are common in descriptions (French: le, ne).
- Modified Arguments and Nibbler unit tests.
- Support and documentation for rc.patterns, which enables/disables
support for /pattern/ command line arguments.
- Support and documentation for rc.expressions, which enables/disables
support for command line expressions.
- Now canonicalizes attribute names.
- Now canonicalizes modifier names.
- New colorization (temporary) that colors all Arguments::dump output
green when processed.
- New distinction between 'old' and 'new' style command lines. Old style
is "pro:A +foo pri.not:M" with implicit "and" operators. New style
includes operators but does not include "+foo" and "/foo/".
- Many tokens are converted directly to primitive types (int, number,
string) when no further processing is required.
- Restored CmdShow to functionality, and linearized the list of supported
configuration variables, for easier insertion.
- Modified arguments.t.cpp unit tests.
- Corrected interpretation of integers outside the location of a
sequence as a word.
- Corrected interpretation of uuids outside the location of a
sequence as a word.
- Removed the last uses of 'foreach'. What remains is only code that
is being obsoleted, and therefore there is no need to clean that up.
- The definition of 'foreach' in util.h must remain until last.
- Fixed some compiler warnings.
- Added DOM detection of primitives: int, double, string.
- Began implementation of DOM task access.
- Implemented support for .startswith, .endswith, .word and .noword.
- Removed obsolete subst.t.cpp.
- Implemented an operator lookup table with type, associativity and
precedence.
- Implemented Expression::to_postfix that generates a postfix
expression list using a Dijkstra Shunt.
- Began Expression::toInfix to upgrade old-style filters to infix
algebraic filters.
- Added operator support to Arguments::categorize.
- Modified CmdCustom.cpp as a read-only command guinea-pig for the
new argument processing.
- Implemented Arguments::extract_read_only_filter to isolate the
arguments that pertain to read-only command filters
- Implemented Arguments::extract_write_filter to isolate the arguments
that pertain to write command filters.
- Implemented Arguments::extract_modifications to isolate the arguments
that pertain to write command modifications.
- Created stubbed Expression object.
- Began integration of Expression and Arguments into commands/CmdCustom.
- 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.
- Eliminated stored arg_overrides and file_override in Context.
- Removed Filter, Subst, Task, Sequence from Context.
- Remove shadow file support. Hallelujah.
- Disabled/commented out most commands, ready for the big transition
to the new parsing style.
- Obsoleted Subst.{h,cpp}.
- Added argument categorization, and a colorful diagnostic output
in debug mode.
- Localized all argument parsing in Arguments object, while still
allowing specific commands to choose which elements are parsed
from the command line.
- 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.
- Obsoleted Cmd object.
- Removed Context::dispatch, renamed dispatch2 --> dispatch.
- Commented out import and custom report functionality that depends
on Cmd. This should be about as broken as taskwarrior gets. It's
all uphill from here.
- Fixed bug so that columns of type "string*" calculate ideal size
by taking into account \n characters in the data, rather than simply
the string length.
- Fixed bug #511, which caused display problem on Cygwin when colored output
used the full width of the terminal. The 'avoidlastcolumn' configuration
variable forces taskwarrior to never use the last column.
- 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.
- 'verify' is a utility intended to make sure that all the i18n strings
defined in src/en-US.h (and any other languages) are all used. In other
words it detects unused strings, which can presumably be removed.
- Fixed problem with incorrect Color vector addressing.
- Modified ViewText to not underline empty column headers.
- Implemented ViewText::set method to set only color.
- 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.
- Implemented CmdHelp object that replaces the report.cpp longUsage
function, and builds the output dynamically from other Command
objects. This is also why the help text right now is very short,
as only a few commands are migrated.
- Obsoleted longUsage function.
- Updated task.1 man page with 'execute' command details.
- Modified command.lua sample to include command usage.
- Removed "help" from old Context::dispatch, which means "help" is
the first migrated command.
- Added usage and description to all Cmd* objects.
- Implemented Command::usage and Command::description as base class
methods that simply return data that is specified by the derived
classes.
- New 'exec' command that runs external programs, implemented by
CmdExec.
- Restructured code so that only Commands implements ::read_only
and ::displays_id methods, while derived objects simply set flags.
- Corrected column alignment in summary report.
- Implemented the ability to iterate over installed Command objects,
to augment the '_commands' command.
- Renamed verbosity tokens, to de-pluralize them.
- 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.
- Corrected use of rc.fontunderline with the new Views.
- Added new sample todo.sh import data, thanks to Daniel Wilcox.
- Added rc.defaultwidth to various tests.
- Modified tests to accomodate new next report.
- Corrected regex in rc.override.t.
- Fixed bug that caused dependencies to be sorted by UUID, although
they are shown as IDs.
- Updated unit test to accomodate new comma-less formatting of
dependencies.
- The ColumnDepends object was failing to map uuid --> id and so
rendered no data for the blocked report.
- Code used the term 'blocked' when it should have used the term
'blocking'.
- Lack of Task default constructor, copy constructor and operator=
implementation details caused tasks stored in an STL container to
lose their cached urgency value.
- Info report now specifically formats urgency values, whereas the
default formatting adds justification spacing.
- Integrated ViewTask and ViewText completely.
- Obsoleted Table.{h,cpp}, Grid.{h,cpp}, grid.t.cpp
- Fixed ViewTask rendering bug that caused the full width to be used every time.
- Broke out View into ViewTask and ViewText, where the former uses an
external std::vector <Task> as storage, thus eliminating the additional
copy, and the latter that duplicates data and color into 2D vectors
for rendering non-task data.
- Changed the ::measure and ::render methods from pure virtual to
virtual.
- Fixed bug where recur.indicator used the length of the indicator
instead of the indicator.
- Implemented ColString.{h,cpp} to support generic Views based on
strings, not tasks.
- Implemented newly virtual Column:: methods.
- ColDescription::measure did not correctly account for annotation size.
- The macro 'max' was used with expensive arguments, which get evaluated
twice.
- Integrated new View in place of Table for all custom reports.
- Implemented legacy field mapping for columns and sort fields.
- Implemented rc.indent.report.
- Implemented rc.row.padding.
- Implemented rc.column.padding.
- Implemented rc.color.label.
- Modified default rc.indent.annotation from 1 to 2.
- Implemented urgency value caching.
- Implemented View truncation by line and row.
- Columns now know which report thy belong to, so they can use the
rc.report.<report>.dateformat override.
- Assorted bugs remain.
- Applied patch for Bug #771, which looks for libuuid if uuid_unparse_lower is
not located (thanks to Christopher J. Pilkington).
Signed-off-by: Paul Beckingham <paul@beckingham.net>
- Implemented 'description.default', 'description.count', and
'description.oneline'.
- New 'indent.annotation' for the 'description.default' field format.
- Removed debugging code.
- Implemented intra, extra and alternate colorization.
- Column::factory now parses <type>.<style> and properly initializes
the column objects.
- Documented the new layout algorithm.
- Used Nibbler for decomposing fields into word chunks.
- Implemented variable intra padding.
- Implemented variable left margin.
- Implemented variable extra padding.
- Implemented colored headers.
- Implemented wrappable headers.
- Eliminated need to specify fixed column size.
- Added unit tests - blank for now.
- Added stubbed ColProject, just so that ColID is not the only column.
- Renamed files for clarity and namespace reasons.
- Added new src/commands and src/columns intermediate libs.
- Began implementation of the first Command object.
- Began implementation of the first Column object.
- TDB2, Variant updates.
- Added 'status' as a reportable column (thanks to Peter De Poorter
and Bryce Harrington).
- Closed features pertaining to the 'task ids ... | task ...' (thanks
to Bryce Harrington and Eric Fluger).
- Created new scripts/extensions directory.
- Added README for extensions.
- Started priority.lua extension.
- Implemented api_task_get and api_task_set DOM accessors.
- Removed more obsolete API.
- Corrected unit tests for urgency.
- Modified default 'blocked' coefficient to be negative, to compensate
for the bug fix for #707 that inverted the test.
- Renamed all holiday files to include a locale, rather than just
a country code.
- Enhanced update-holidays.pl add-on script to support regions,
provide better error handling, error on missing Perl module,
warnings on unavailable data, and help text.
- Updated documentation accordingly.
- Began the new Context::initialize2, which will offer a different
rabbit-hole to go down. This method will instantiate Command
objects and the new Parser, rather than the monolithic alternative
dispatch method and command.cpp/report.cpp/custom.cpp files.
- 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.
- Added feature #710, which adds an attribute modifier prefix to return the
complement of a filtered set (thanks to Dan White).
- Added missing description to the 'help' command.
Signed-off-by: Paul Beckingham <paul@beckingham.net>
- 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
- Fixed bug that caused multiple recurring child tasks to be generated
under certain circumstances.
- Removed text.t.cpp tests that are not in task.
- Added Bryce Harrington to AUTHORS file.
- Corrected tests that were broken by the fix.
- Patrick R McDonald submitted a detailed bug report and backtrace
through Fedora's bugzilla. Worth a mention in the AUTHORS file,
although the bug is already fixed.
- Disallowed @ and / from an attribute name or modifier. This causes
input like 'user@host:path' to now be parsed as description, and not
as an unrecognized attribute.
- Incorporated (most of the) feedback from John's review of the code.
Got stuck on replacing 'import commands' with 'import subprocess',
and all that entails.
- Added unit test bug.c001.t to test for an unreported issue in 1.9.4
commit 2d50d1c that involves the creation of a recurring task not
incrementing the displayed Task ID.
- Migrated taskd JSON parser into task, to provide encode/decode
capability to Task::composeJSON.
- Migrated taskd utf8 code, replacing old unused code.
- Added unit tests or JSON.
- Migrated Tree updates from taskd.
- Fixed bug in journal annotations that omitted \n characters for
certain events, creating an unreadable journal entry.
- Relocated the 'Total active time' into the journal table, made
the text bold, and changed from "Xh XXm" format to Duration::format.
- improve compilation by removing the git sha1 dependency into its
own include file that is just used 2 times instead of auto.h that
is included in more places.
- removed previously introduced _sha1 helper command
- modified helper command _version to either display the version
or the sha1 depending if build from source tar ball or from git.
- When an ID was not specified, delete gave no feedback (thanks to
Steve Rader).
- Closer inspection showed this to be true for the urgency, query, delete,
start, stop, done, modify, append, prepend, duplicate, annotate and denotate
commands.
- Modified man page to acknowledge import from file or URL.
- Changed FEATURE_URL from #if to #ifdef, for consistency.
- Modified import.url.t to accomodate a new URL for the test.
- Applied patch to fix bug #618, so that the configuration setting
'edit.verbose' can be set to 'no' and eliminate the help text when using
the 'task edit' command (thanks to Steve Rader).
Signed-off-by: Paul Beckingham <paul@beckingham.net>
- Applied patch to fix bug #590, which makes the yes/no/all/quit
confirmation prompts consistent (thanks to Steve Rader).
- Patch modified to work with autocomplete.
Signed-off-by: Paul Beckingham <paul@beckingham.net>
- Missing projects are now consistently reported as "(none)" in the
summary chart and the projects command.
Signed-off-by: Paul Beckingham <paul@beckingham.net>
- moved configuration stuff from src to top level cmake file
- building static library task and using it for building task binary
- the static library will then be used as well in the unit tests
- added library checks to cmake
- added configuration of include files to cmake
- move package information into configurable include file
- cmake.h.in generates auto.h to be compatible with current
implementation of autoconf
- Fixed bug #595, where taskwarrior ignored changes to the wait date during
the edit command, consequently not changing task status (thanks to Eric
Fluger).
- Added 'urgency' as a reportable, sortable column. This will allow
us to test the urgency coefficients. Note that this is experimental,
and as such will not be documented.
- Fixed bug #587, where the man page needed clarification on quoting some
arguments to prevent them from being broken up by the shell (thanks to
Steve Rader).
- The burndown chart was reserving space for the y-axis labels based
on the maximum value in the data. This is wrong. Instead it should
have used the maximum *label*. Consider a graph with a maximum value
of 99, having a width of 2 characters. The graph labels should go up
to 100, not 99, and therefore will take up 3 characters.
- When rc.regex:on is set, filters with "+tag" elements were causing
a segfault because the "tag" word was converted to a non-capturing
regex, no results were captured, and array[0] failed. Now it is
implemented that tag elements in a filter never use regexes, which
maintains the idea the tags are not really words, but tokens that
either match or don't.
- Applied patch to fix bug #581, in which backslashes in annotations and
descriptions caused problems (thanks to Itay Perl).
- Corrected unit tests that were shown to be incorrect, after the patch
corrected other behavior.
- Fixed bug #579, which displayed incorrect counts when using the 'limit:N'
filter (thanks to Thomas Sattler).
- Changed wording from 'lines' to 'tasks', because the former was inaccurate.
- Adjusted limit.t tests accordingly.
- added a calendar offset that effectively changes the first
month to be displayed in the calendar report (thanks to
Michelle Crane)
- calendar.offset turns the featue off or on
- calendar.offset.value controls the number of month to be
applied for the offset
- Added ability to temporarily suspend GC (rc.gc:0) for a given command, which
helps scriptwriters implement shadow files externally (thanks to Sander
Marechal).
- Fixed bug #542, which sorted the countdown columns incorrectly (thanks to
Michelle Crane).
- Duration could not parse all varieties of it's own output, which is why the
sorting was broken, in particular negative durations and real numbers in
durations (such as (1.2y').
- Sorting in Table::sort_compare for Table::periodAscending and
Table::periodDescending was broken.
- Missing unit tests for countdown_compact.
- Imported Nibbler::getNumber from the Attitash project.
- Additional Duration unit tests.
- Additional Nibbler unit tests.
- Additional countdown.t unit tests.
- Added feature #546, which is a 'count' command that counts tasks, and is
intended to help scripts that manipulate task output.
- Added unit tests.
- Added man page description.
- Added discussion of the new burndown.bias configuration variable
to the NEWS file.
- Changed 'major' and 'minor' string names to avoid some clash with
gnu_version_major etc.
- Added missing include for Linux.
- Added new burndown configuration variables to the allowed list.
- Now renders (and wraps if necessary) a chart title, with additional
filter description.
- Removed more redundant code.
- Fixed divide-by-zero bug when the filter resulted in zero matches.
- Made the burndown commands read-only, so that filters apply.
- Child tasks now have their own entry date, instead of inheriting it
from the parent. This improves the ability to report new tasks in
the burndown charts, history report.
- Completed chart rendering for all three variations.
- Updated assorted documentation.
- Removed most of the obsolete code.
- Not completed:
- find rate calculation/algorithm
- fix rate calculation/algorithm
- completion date algorithm
- Infrastructure rewritten with the following benefits:
- greater performance
- reduced memory footprint
- generalized periods (daily, weekly, monthly)
- Currently graphs do not render, daily chart is still the old implementation
- Implemented burndown.daily, which is functional, but has outstanding
problems that need to be addressed:
- Slow
- Does not optimize output (i.e. contains /\S\s+$/)
- Needs generalized helper functions to reduce the size of the handler
- Fixed#555 that caused a segfault when 'log' was used with a project,
because the onProjectChange code assumes the files are still open, and
they were not. Checked all other commands for similar problem.
- Added Itay Perl to the AUTHORS file.
- Added unit test.
- Fixed bug #467, where recurring tasks were not honoring wait values.
- Fixed bug #493, which made waiting, recurring tasks invisible (thanks to
Alexander Schremmer).
- Improved feedback when announcing 'depends' attirubte changes. Now
uses task IDs instead of UUIDs, resulting in a shorter, clearer
message (thanks to Peter De Poorter).
- Fixed bug caused by using a high-resolution timer (gettimeofday) on
Windows, which only has a 10ms resolution timer. Consequently the
random number seed used was from a significantly reduced pool, which
leads to duplicate UUIDs.
- Added new 'diagnostics' command to assist with bug reporting,
testing. It answers questions such as "did you compile it yourself?",
and more.
- Specifically, it runs a UUID generation test to prove that the UUIDs
are really unique.
- Added Path::operator== for expanded path comparisons. Why was
that not already implemented?
- Added checks that the push/pull destination is not equal to
rc.data.location. That would be bad.
- Added comments, tweaked the wording on some messages. Stubbed out
confirmation of pull overwrite, while I think about it.
- Colorized the merge process.
- Added whitespace to the merge output for alignment and a less cramped
look.
- De-tabbed.
- Changed "(*foo).method ()" to "foo->method ()" or clarity.
- Removed two tests that relied upon the (removed) "Redo" message.
- Removed the urgency rating from the info report. Otherwise, we
will need to explain it, and without the corresponding new next
report, what can we say? It will be reenabled later.
- Imported text was not assigned a uuid.
- Although bug #494 was fixed a month ago, it was never acknowledged in
the issue list. This commit corrects that, and thanks Elizabeth for
reporting this serious issue (thanks to Elizabeth Maxson).
- Completed support for 'task 1 depends:2,-3' to manipulate the
dependencies.
- Now supports rc.dependency.reminder to indicate when to nag about
dependency chain violations, defaulting to on.
- Now supports rc.dependency.confirm to require confirmation before
fixing dependency chains, defaulting to on.
- New source file dependency.cpp which implements a low-level API for
determining dependency status, and assorted handlers for task state
changes.
- Adds blocking tasks to the 'next' report.
- Added more dependency unit tests, changed the wording in a couple of
them and numbered them for easy reference.
- Added 2010/2011 US holidays.
- Added 2010/2011 German holidays, to welcome our German users.
- Added 2010/2011 Swedish holidays, but butchered it. Fredde?
- Added dependencyGetBlocking and dependencyGetBlocked API calls, in
the ongoing effort to find a workable API for dependencies. The
goal is to make the calling code as small as possible when dealing
with dependencies.
- Corrected the algorithm for determining whether a task is blocked or
blocking to also check that the other task is pending or waiting.
For example:
task add one
task add two depends:1
task do 1
As the first task is completed, task 2 still depends on 1, but is
no longer blocked due to the completed status.
- Modified the "info" report to use the modified API.
- Cleaned up message that is generated when a recurring task is past
its until: date and all child tasks have been dismissed, as the
parent task is deleted.
- Added unit tests recur.until.t to prove that the above is working.
- Context::autoFilter was suppressing 'tags' filter terms due to the
+tag/-tag syntax, which we now know only augments attribute modifiers,
and doesn't replace them.
- Fixed three sets of unit tests that recently broke when TDB::add
started checking whether the uuid was really unique. This was
intended to prevent accidental double import, but also caused these
tests to break because they all shared the same uuid, which is wrong.
- Fixed bug #461, in which the filter 'due:today' failed, but 'due.is:today'
worked. This is because while iterating over tasks, not every task has a
due date, in which case Date::Date ("") was called, which fails.
- Moved 'wait' up to second position in the Att::type method, for efficiency.
- Added feature #481, allowing for user control of the color rule order
of precedence via the 'rule.precedence.color' configuration variable.
- Color rules now obey the rc.search.case.sensitive configuration option.
- The color.keyword.XXX color rule now applies to annotations too.
- Fixed a precision problem with average age on the summary report.
The problem was that average age is calculated as the sum of all
ages, divided by the count. The sum was already being stored as
a double, to allow for very high values, but was being truncated
to an int before being divided by the count. Classic precision
mishandling.
- Fixed bug #480, which didn't properly support @ characters in tags.
The problem was that the ctype.h ispunct() function considers @,
# and $ to be punctuation, which I don't. An override now allows
these characters in tags, and specificallt '+@context' style tags.
- Added unit tests.
- Updated the 'update' script that helps populate the package directory
structure for OSX packages, to include the scripts/fish directory and
contents.
- Modified argument parsing to prevent assertions and seg faults.
- Added support for month names, with autocomplete.
- Added autocomplete for "due".
- Added unit tests to exercise all combinations, and errors.
- Added "how can I help?".
- Updated the question on regenerating a .taskrc file, because it is now
a minimal set of settings.
- Updated the question on Cygwin color to mention mintty.
- Updated the question on building under Cygwin, referring to the README.build
file.
- All tests (I hope) now properly remove completed.data on exit, which
should prevent certain non-deterministic tinderbox results caused by
residual data.
- Fixed bug in import for YAML and TODO that failed to recognize that
a task was completed or deleted, and consequently set a Task::pending
status.
- Enhanced unit tests to verify this.
- Implemented YAML import/export roundtrip tests.
- Corrected export.yaml.t regarding headers.
- Modified export.yaml, export.csv and export.ical to clear any
context.headers messages so they don't interfere with the output.
- Made a partial fix that at least allows any editor to be launched,
and that can then locate the file.
- Not addressed is the fact that some launchable Windows editors need
Windows line encodings, and other are flexible.
- Completed sort_compare routine to mimic 1.9.2, but using std::sort.
- Added blank task to the unit tests to prove the sorting is working
(it wasn't), then fixed all.
- Fixed bug in color.duetoday.t: now that the definition of overdue
means 'due < now', adding a task with 'due:now' instantly creates
an overdue task, not a due task. To create a due task, use 'due:1hr'
or some duration which gets added to now.
- Fixed bug in extractLine that performed std::string::length when it
should have use the new characters function. The problem was incorrect
hyphenation with utf8 text in narrow fields.
- The dependencies.t unit test script failed to unlink completed.data,
which polluted the subsequent test script.
- Simplified some Perl in start.t.
- Allowed for line wrapping in start.t.
- Implemented export.yaml, import (yaml).
- Updated man page.
- 'export' is now an alias to 'export.yaml'.
- Added missing 'tags' attribute as an internal Att.
- Improved recognition of YAML.
- Added unit tests for export.yaml, import (yaml).
- Added missing unlink from dependencies.t
- Relocated the Table::getCharLength() from Johannes to text.cpp/characters()
because it is a general-purpose function, and will be the start of the UTF8
conversion of all text.cpp code.
- Added unit tests for characters().
- Applied patch from Johannes.
- Also included extra calls to getCharLength in other parts of the code.
Signed-off-by: Paul Beckingham <paul@beckingham.net>
- Patch to correct the sorting of priorities, which had a condition
flipped making the Table::descendingPriority consider a missing
priority to be 'higher' than 'H'.
- Fixed bug #449, so the wait: attribute can be applied to a task at any
time, not just on add.
- While searching for problems with the waiting status, noticed that
importCSV doesn't appear to set any tasks to pending status.
- Fixed bug #445, which caused task to not notice that the command 'h' is
ambiguous. This was caused by mistakenly first autoCompleting against
a set of alias names, during canonicalization, instead of autoCompleting
against the whole set of possible commands and aliases, then doing the
canonicalization. The order was reversed.
- Also populated list of all commands with alias names, so the above
could be corrected.
- Added feature #43, now task supports relative dates like '3wks',
'1 month', '4d' for 'due', 'wait' and 'until' dates. Essentially
durations are now allowed where dates are expected, and are treated
as relative to the current date/time.
- Now dates (due, wait, limit) are parsed first as Durations, and on
error reparsed as Date. When a Duration is found instead of a Date,
the Duration is added to the current date/time.
- Reorganized Duration::valid and Duration::parse to use the same list
of supported constructs.
- Added missing copy constructor.
- Added missing ctor initializer list.
- Corrected handling of negative time_t values.
- Added support for more duration formats.
- Corrected autoComplete use.
- Added Duration::negative.
- Corrected unit test descriptions.
- Fixed bug #438, correcting the sorting of the entry_time, start_time
and end_time columns (thanks to Michelle Crane).
- Reordered ChangeLog so that bugs, features are in sequence. Don't know
why I did this. Some inner compulsion.
- Deprecated silly start_time, end_time and entry_time columns, which are
now (and were) superseded by start, end and entry columns with time formats.
- Config.cpp now detects use of these deprecated fields and complains to the
show command.
- Date.cpp now uses the variable 'input' instead of 'mdy', which was confusing
and implied that it contained a date without a time.
- Obsoleted and removed Date::toStringWithTime, which ignored requested formats.
- When checking for an epoch, Date::isEpoch just looked for strings of more
than 8 digits. The additional restriction of less than or equal to 10 digits
was added. This was breaking unit tests using the dateformat YMDHNS, which is
reasonable.
- Removed the obsolete field format hooks format-entry_time, format-start_time
and format-end_time
- Removed the obsolete field format hook unit tests hook.format-entry_time.t,
hook.format-start_time.t and hook.format-end_time.t.
- Removed use of deprecated field in hook.format-countdown_compact.t.
- Added missing shortcut comparisons in Table::sort that was causing an
unnecessary full parse of dates even if they were identical as strings.
- Coded entry_time as a synonym for entry. Ditto for start_time and end_time.
- Marked the new synonyms as deprecated.
- Added bug.438.t unit test.
- Added deprecated fields to the NEWS file.
- task can now record the invocation of the 'start' and 'stop'
command as an annotation by setting journal.time to yes.
- the annoatation test can be customized with
journal.time.start.annoation and
journal.time.stop.annotation
Task edit was assuming a space as separator between the date and
text field of an annotation. As the dateformat for an annotation
now can be more flexible incl. time and spaces, task couldn't
parse the annotation lines of task edit correctly anymore. The bug
was fixed by introducing a new separator ' --' between the date
and text parts of an annotation.
- Fixed several tests that were broken, and generated diagnostic output,
but didn't fail in the traditional sense. This was found by looking
through the tinderbox data file.
- Minimized the default .taskrc file that is generated. It now relies
heavily on default values, but supplies data.location, and includes
the default theme.
- Updated taskrc.5 man page to include new depends column.
- Added 'depends' as a valid report column.
- Added 'depends' to the 'long' report.
- Updated hook.format*t unit tests to accommodate new long report.
- Added new join () function that handles std::vector<int>.
- Updated text.t unit tests.
- The "next" command had two control paths. One was via custom reports
(correct) and the other was a residual handler (obsolete), which is
now removed. This also simplifies a handleCustomReport/runCustomReport
issue.
- Preliminary export.yaml support. No unit tests yet, and no decision
on including this feature. It may be that libyaml is the right choice,
as an optional dependency.
- Found some inefficient string initialization in Table.cpp, report.cpp,
and in switching over to using more std::string capabilities, realized
a 25% boost in Table::render speed.
- Eliminated Table::suppressWS.
- Eliminated Table::clean.
- Added specific calendar colors to the rc file used in cal.t, so that
the colors in the tests (which are in the old theme) match the new
default theme.
+ Task now supports both a 'side' and 'diff' style of undo.
+ Undo now observes the 'color.undo.before' and 'color.undo.after'
configuration variables.
- Fixed bug #405, which incorrectly compared dates on tasks created by
versions earlier than 1.9.1 to those created by 1.9.1 or later (thanks to
Ivo Jimenez).
- Fixed bug #132, which failed to set a sort order so that active tasks sort
higher than inactive tasks, all things being equal.
- All reports that include the 'active' column now sort on that column.
- Fixed bug #418, which caused the attribute modifier 'due.before' to fail
if the year was not included in the dateformat (thanks to Michelle Crane).
- Bug was probably fixed when #416 was fixed, but now has it's own unit tests.
- Added support for more varied durations when specifying recurring tasks,
such as '3 mths' or '24 hrs'.
- Fixed bug #417, which caused sorting on countdown fields to be wrong
(thanks to Michell Crane).
- Durations are now based on seconds, rather than days, and can accept/parse
negative durations.
- Relocated util/formatSeconds and util/formatSecondsCompact into
Duration object.
- Relocated unit tests.
- Upgraded Duration object to use seconds, not days.
- Enhanced Duration so that it can now parse '4 mins' etc.
- Fixed bug #416, which caused sorting on a date to fail if the year was not
included in the dateformat (thanks to Michelle Crane).
- Added unit tests.
- Nibbler: Now locally stores input length rather than repeatedly calling
std::string::length.
- Nibbler: Makes greater use of std::string::find_first_not_of, instead of
looping.
- TDB: No longer applies empty filters to lists - just copies the lists.
- TDB: Now caches data when reading completed.data.
- TDB: During loadPending and loadCompleted, makes fewer copies of the data.
- TDB: In commit, breaks out of search loops after finding the right data.
- TDB: In gc, only writes out minimal pending or completed data, instead of
all data, all the time.
- TDB: No longer reads completed.data in gc, and simply appends completed
and deleted tasks to it.
- Fixed bug #414, that caused filtering on the presence or absence of tags
containing Unicode characters to fail (thanks to Michal Josífko).
+ + Fixed bug #414, that caused filtering on the presence or absence of tags
+ containing Unicode characters to fail (thanks to Michal Josífko).
------ old releases ------------------------------
- Added feature #415, which supports displaying just a single page of tasks,
by specifying either 'limit:page' to a command, or 'report.xxx.limit:page'
in a report specification (thanks to T. Charles Yun).
- Modified the 'next' report to only display a page, by default.
- Allows the 'projects' and 'tags' commands to be list all used
projects/tags, not just the ones used in current pending tasks.
Controlled by the 'list.all.projects' and 'list.all.tags' configuration
variables (thanks to Dirk Deimeke).
- Added unit tests.
- Updated man pages.
- Added new recurrence.limit value (default 1) to control the number of
future pending tasks generated from a recurring parent task.
- Added unit tests.
- Updated taskrc man page.
- introduced new show command to display configuration settings
- config command is used to just set config values
- modified documentation
- modified some unit tests calling 'task config' to 'task show'
- Added features #36 and #37, providing annual versions of the 'history'
and 'ghistory' command as 'history.annual' and 'ghistory.annual'.
- Uses new canonical names history.monthly, history.annual, ghistory.monthly
and ghistory.annual, with aliases providing original history and ghistory
commands.
- Updated man pages.
- Added feature #326, allowing tasks to be added in the completed state,
by using the 'log' command in place of 'add' (thanks to Cory Donnelly).
- Added log command to task.1 man page.
- Added log command to task-tutorial.5 man page.
- Added log command to help text.
- Added log command unit tests.
- The new auto-info command interfered with task modification. Should
have run all the unit tests before committing that change.
- Added auto-info command to the help text.
- Added feature #320, so the command "task 123" is interpreted as an
implicit "task info 123" command (thanks to John Florian).
- Modified task man page.
- Added unit tests.
- Updated supported platform lists with F13 and Ubuntu 10.04.
- Fixed incorrect regex in hook format unit tests. Note that this
doesn't show up in the tinderbox, because that version of task is
not built with Lua support.
- When a recurrence period is added to a pending task, the status should
change from pending to recurring, and a mask attribute should be added.
The lack of those changes meant that "task 1 recur:1w" did not do what
was expected. Thanks to T. Charles Yun.
- Fixed unit tests that broke because the unit test script took more
than one second to run. Ordinarily is a test script does this:
$ task add foo
$ task list
Then the age of the task is listed as '-', which means under one
second. But if the test does this:
$ task add foo
$ sleep 1
$ task list
Then the age is listed as '1 sec'. Sometimes, as in these tests,
the host may be just slow enough that the test script expects '-',
but gets '1 sec'.
- Applied patch from Emil Sköldberg.
Replace 'test ... == ...' with 'test ... = ...',
since [quoted from pkgsrc error message]:
The "test" command, as well as the "[" command, are not required to know
the "==" operator. Only a few implementations like bash and some
versions of ksh support it.
When you run "test foo == foo" on a platform that does not support the
"==" operator, the result will be "false" instead of "true". This can
lead to unexpected behavior.
Date: Sun, 28 Feb 2010 12:10:06 -0500
Subject: [PATCH] Enhancement - time support in the Date object.
- Added ability to parse and display time, using:
h - single digit hour
H - double digit hour
N - double digit minutes
S - double digit seconds
- Added a request for mktime() to automatically determine whether
summer time should be considered.
- Added Date::Date (m, d, y, hr, mi, se) constructor.
- Added Date::sameHour comparison method.
- Added unit tests.
- Implemented API calls: task_get_due, task_get_end, task_get_entry,
task_get_start, task_get_until and task_get_wait.
- Implemented unit tests for API calls.
- Implemented new Record::get_ulong method.
- Implemented unit tests for get_ulong.
- Added a few more new keywords to bring up to date with current feature set:
+ active.indicator
+ tag.indicator
+ recurrence.indicator
+ color.due.today
+ color.calendar.due.today
- Added include of auto.h to allow #ifdef SOLARIS to work.
- Put #ifdef around glob arguments that aren't supported on Solaris.
- Fixed uninitialized variable that only gcc on Solaris spotted.
- Allows rc.tag.indicator to replace the default + indicator.
- Allows rc.active.indicator to replace the default * indicator.
- Allows rc.recurrence.indicator to replace the default R indicator.
- Modified configure.ac to allow inclusion/exclusion of both ncurses
and Lua.
- Also allows specification of include and lib directories for ncurses
and Lua separately.
- This addresses a recent problem with Cygwin 1.7, where the most recent
patches relocated ncurses from /usr/include to /usr/include/ncurses,
and consequently broke task's default configuration, which was not
very clever.
- Create 'update' script to handle the population of the tree used to
create OSX packages.
- Cleaned out the old tree, because it can now be recreated at will.
- Corrected problem in unit test that expected the wrong result.
- Fixed Color::Color (const std::string&) so that the foreground and
background are now considered two different colors, are upgraded
separately, if necessary, and then blended. The problem affected
all instances of "<256-color> on <16-color>". Hooray for unit
tests.
- Oddly, there were no unit tests for the Color object. Now there are
1,033.
- Three of these tests fail, which justifies adding them in the first place.
- Changed the default .taskrc file to have the color rules listed
in their precedence order, along with a comment to that effect
(thanks to John Florian)
- Fixed bug #371 which caused task to mis-apply certain color rules, like
color.alternate, which was (a) not applied first, and (b) not blended
with the other color rules (thanks to Richard Querin).
- Task was preventing removal of due date from any task that had a due date,
which is wrong. It should be any task with a recur: value and a due date
(thanks to John Florian).
- Implemented all command hooks.
- Implemented several field hooks.
- Implemented several task hooks.
- Reorganized event validation code.
- Finalized Hooks -> API::call* mechanism.
- Implemented several hook unit tests.
- Corrected unit tests that didn't specify rc.hooks=on.
- Corrected builds that include Lua.
- Implemented a master switch rc.hooks=off that can shut off all
hooks. Seems like a good idea.
- Added support for 'hooks' and 'hook.*' as valid configuration
entries.
- Added a couple of good questions to the task-faq man page. One is
a discussion of the ID number resequencing, which really should have
been addressed in this way years ago.
- improved dateformat handling now defaulting to YMD set via
dateformat.holiday variable
- fixed missing sorting in holiday table output when running
calendar.holidays=full
- renamed reportdateformat to dateformat.report
- added config file checking for calendar.holidays and calendar.details
- added 2 holiday files for SE and US (watertown, MA)
- Implemented pre-completed, post-completed events.
- Added debug info for event triggers.
- Removed support for pre-file-unlock, post-file-unlock, as they are
called from TDB::~TDB in Context::~Context, which is after Hooks::~Hooks,
which means segfault.
- added displaying of holidays in 'task cal'
via calendar.holidays
- the legend in the calendar can now be turned off
- weeknumbers in the calendar can now be color-coded
- changed variable name from annotation.details to annotations
- added report.X.annotations
- changed values from 2, 1, 0 to full, sparse, none
- made reportdateformat available in timesheet
- Added Lua copyright notice to the version command.
- Added Lua copyright details to API.cpp, which is the only file that
interacts with Lua.
- Added hook-type detection.
- Added a hook-type calling mechanism in Hooks.
- Implemented the post-start and pre-exit event triggers.
- Context::initialize now calls Hooks::initialize, which in turn calls
API::initialize. We have liftoff!
- Added bare bones autoconf changes to support Lua.
- Added API class from metatask.git.
- Added skeleton Hooks class.
- Added 'with_lua' helper script.
- Now supports 'task config name value', 'task config name ""', and
'task config name' to directly modify the .taskrc file.
- Updated man page.
- Added unit tests.
- Modified existing config command to also display configuration
variables that have no values.
- Implemented Path::operator (std::string) const, to provide an
automatic cast to std::string for any Path, File or Directory.
- Made use of new cast in various code.
- Changed use of spaces in atoi () calls.
- Switched from std::string::data () to std::string::c_str () calls.
- Added Federico Hernandez to the task copyright, based on the amount
of work and commits to the project, in the areas of Date handling and
the calendar report.
- Bumped Cory Donnelly up to Contributing Author for the large quantity
of ideas, suggestions and testing.
- Implemented replacement Config::get* methods.
- Replaced all calls throughout the code, with the new methods which
have no static values as defaults.
- Config is now providing a default set of all configuration variables.
- The default set is used to both initialize a Config object, and to
create a sample .taskrc.
- added new reportdateformat to extend the formatting of due dates
in the reports and "task info"
- added new conversion sequences a, A, b, B and Y to be used with
reportdateformat
- This is the structure that the OSX package requires. Note that the
task binary is 'represented' by an empty file.
- With more time, this could possibly be converted to a tree of symlinks,
but I'm not sure whether PackageManager deals with them as expected.
- Changed the official code repo URL from github to tasktools.org.
The github copy is going away.
- Added an FAQ about recreating a .taskrc, or creating a second one
for comparison.
- Merged Path, File and Directory handling objects from metatask.git.
- Merged unit tests.
- These objects will replace a fair amount of code in task 1.9 and
more in 2.0.
- Added 1 new color configuration variables to colorize weekend days
in the calendar: 'calendar.color.weekend'.
- Changed the default colors in the calendar.
- Added 3 new color configuration variables to colorize today, days with due tasks
and days with overdue tasks in the calendar:
'calendar.color.today', 'color.calendar.due' and 'calendar.calendar.overdue'
- added 2 new configuration variables 'calendar.details' and
'calendar.details.report' that make it possible to display
details of task with due date when doing 'task cal'
- Added support for displaying color samples. If you run the command
'task color red on grey12' then task will show you a sample of this
color, along with other examples. This is helpful if you are trying
to choose colors for auto colorization rules.
- version now only displays the version number and copyright notice
- config displays the task configuration that version used to show
- configuration variable longversion is not longer needed
- Gathers timing for runs of the list report for 1, 10, 100 and 1000
tasks. This will create a history of data in the tinderbox runs
for later analysis.
- Fixed Timer class to use a fixed precision, that for some reason,
does not work on Haiku. Put a conditional compile around it for
now - perhaps later Haiku alpha releases will change things?
- Added benchmark2.t, which enables high-resolution timers for a
single 'list' command, with 10, 100 and 1000 task databases. Then
it emits readily-found and parsed data for charts.
- Eliminated obsolete benchmark data for hardware I no longer own.
- Added unit tests to make sure formatSeconds is doing the right thing.
It isn't, and it needs to change, but at least now we can see what is
wrong with it.
- Fixed broken unit tests that relied on the string 'ABSOLUTELY NO
WARRANTY' being present in the output of the version command. The
tests now rely upon 'GNU General Public License' instead.
- Added a simple _version command that displays only the version
number and a newline. This makes it easier for external task support
scripts to determine which version of task is installed - easier than
parsing the version command output.
- With P.C. Shyamshankar's blessing, updated the _task script for zsh
by using the new task built-in _commands command to enumerate all
supported commands. This replaces code that forces task usage output,
and parses it for commands.
- Note that _task for zsh lacks attribute completion. We need a zsh
developer to make this enhancement.
- Fixed util.cpp formatSeconds and formatSecondsCompact, that were using
an algorithm that accentuated rounding errors.
- Fixed unit tests that were expecting wrong answers from the wrong
algorithm above.
- Added include file support to Config.cpp.
- Implemented isAbsolutePath helper.
- Added unit tests for isAbsolutePath.
- Fixed small bug in bug.bulk.t.
- Added TODO items to config.t.cpp.
- The 'version' command now complains about use of deprecated color names and
duplicate entries.
- Unit tests verify duplicate detection.
- Unit tests verify deprecated color detection.
- Most validation code moved from command.cpp to Config.cpp.
- Added new attribute modifiers 'word' and 'noword' which find the existence
of whole words, or prove the non-existence of whole words. If a task has
the description "Pay the bill", then "description.word:the" will match, but
"description.word:th" will not. For partial word matches, there is still
"description.contains:th".
- Added unit tests for the text.cpp functions.
- Added unit tests including the new modifiers in filters.
- Added unit tests to parse the new modifiers.
- Modified man page.
- Modified the Context::autoFilter processing to use the new modifiers for
+tag and -tag filtering.
- Added a support email to an error message, while looking at the filter code.
- Added new modifiers to the help report.
- Modified a utf8.t unit test to include an alphanumeric tag, rather than a
smiley face.
- Fixed a broken fix (e7c8114dff) for
the calendar command - previously if task could find no tasks with
due dates, no calendar was displayed, and an error message shown.
That broken fix was only on the 1.9.0 branch and never released.
The correct behavior is to show a line of months. This bug broke
15 unit tests.
- Fixed minor problem in unit tests where the output was not captured,
although this has no bearing on the results.
- Added feature #341 that makes explicit references to the task and taskrc
man pages, both in the auto-generated .taskrc file and the version command
output (thanks to Cory Donnelly).
- Fixed bug #317 which colored tasks in the 'completed' report according to
due dates, which are no longer relevant to a completed task (thanks to
Cory Donnelly).
- Fixed bug that was causing the 'completed' report to sort incorrectly.
- If a color is specified using the deprecated 'on_red' instead of
'on red', generate a warning in the version report. The version
report is becoming a report where .taskrc sanity checks occur.
Is this good?
- Fixed bug in annotate.t, where a custom report named 'r' was used
in the unit tests. This name had to be lengthened to 'rrr' to avoid
conflict with the 'recurring' report. This, in itself, is a different
bug.
- Task now supports both "rc.name:value" and "rc.name=value", not because
this is generally a good idea, but because it is a very common mistake
that we are all making, and shouldn't the software be forgiving in an
unambiguous case like this?
- Made Color::colorize (const std::string&, const std::string&) static,
so that it is now simple to colorize a string:
std::cout << Color::colorize ("text", "red");
- Added sample foreground and background colors to the "color" command,
and used the above shortcut to simplify handleOnColor.
- Fixed bug that caused the alternate line coloration to ignore whether
color was enabled or not. This (once again) added color codes to the
shadow file. This happens repeatedly - I think a unit test for this
mistake is needed.
- Inverted the _COLOR_NOFG to be _COLOR_HASFG, for better readability and
the added benefit of having newly constructed color with no specification
having a value of 0.
and set a configuration variable to a certain value. The equal sign ("=") is used to separate the variable
name from the value to be set.
The hash mark, or pound sign ("#") is used as a "comment" character. It can be used to annotate the
configuration file. All text after the character to the end of the line is ignored.
.SHCONFIGURATIONVARIABLES
Valid variable names and their default values are:
.SSFILES
.TP
.Bdata.location=$HOME/.task
This is a path to the directory containing all the task files. By default, it is set up to be ~/.task,
for example: /home/paul/.task
.TP
.Blocking=on
Determines whether task uses file locking when accessing the pending.data and completed.data files.
Default to "on". Solaris users who store the task data files on an NFS mount may need to set locking
to "off". Note that setting this value to "off" is dangerous. It means that another program may write
to the task.pending file when task is attempting to do the same.
.SSTERMINAL
.TP
.Bcurses=on
Determines whether task uses ncurses to establish the size of the window you are
using, for text wrapping.
.TP
.Bdefaultwidth=80
The width of tables used when ncurses support is not available. Defaults to 80.
.TP
.Beditor=vi
Specifies which text editor you wish to use for when the
.Btaskedit<ID>
command is used. Task will first look for this configuration variable. If found, it is used.
Otherwise task will look for the $VISUAL or $EDITOR environment variables, before it defaults
to using "vi".
.SSMISCELLANEOUS
.TP
.Blocale=en-US
The locale is a combination of ISO 639-1 language code and ISO 3166 country
code. If not specified, task will assume en-US. If specified, task will locate
the correct file of localized strings and proceed. It is an error to specify a
locale for which there is no strings file.
.TP
.Bconfirmation=yes
May be "yes" or "no", and determines whether task will ask for confirmation before deleting a task or doing bulk changes.
.TP
.Becho.command=yes
May be "yes" or "no", and causes task to display the ID and description of any task when you run the start, stop, do, undo or delete commands. The default value is "yes".
.TP
.Bnext=2
Is a number, defaulting to 2, which is the number of tasks for each project that are shown in the
.Btasknext
command.
.TP
.Bbulk=2
Is a number, defaulting to 2. When more than this number of tasks are modified in a single command, confirmation will be required, unless the
.Bconfirmation
variable is "no".
.TP
.Bnag=Youhavehigherprioritytasks.
This may be a string of text, or blank. It is used as a prompt when a task is completed
that is not considered high priority. The "task next" command lists important tasks, and
completing one of those does not generate this nagging. Default value is: You have higher
priority tasks.
.TP
.Bcomplete.all.projects=yes
May be yes or no, and determines whether the tab completion scripts consider all the
project names you have used, or just the ones used in active tasks.
.TP
.Bcomplete.all.tags=yes
May be yes or no, and determines whether the tab completion scripts consider all the
tag names you have used, or just the ones used in active tasks.
.SSDATES
.TP
.Bdateformat=m/d/Y
This is a string of characters that define how task formats dates. The default value is: m/d/Y.
The string should contain the characters
.RS
m minimal-digit month, for example 1 or 12
.br
d minimal-digit day, for example 1 or 30
.br
y two-digit year, for example 09
.br
D two-digit day, for example 01 or 30
.br
M two-digit month, for example 01 or 12
.br
Y four-digit year, for example 2009
.RE
The string may also contain other characters to act as spacers, or formatting. Examples for other
variable values:
.RS
.br
d/m/Y would output 24/7/2009
.br
YMD would output 20090724
.br
m-d-y would output 07-24-09
.RE
.TP
.Bweekstart=Sunday
Determines the day a week starts. Valid values are Sunday or Monday only.
.TP
.Bdisplayweeknumber=yes
Determines if week numbers are displayed when using the "task calendar" command.
The week number is dependent on the day a week starts.
.TP
.Bdue=7
This is the number of days into the future that define when a task is considered due,
and is colored accordingly. Defaults to 7.
.TP
.Bmonthsperline=2
Determines how many months the "task calendar" command renders across the screen.
Defaults to however many will fit. If more months that will fit are specified,
task will only show as many that will fit.
.SSCOLORCONTROLS
.TP
.Bcolor=on
May be "on" or "off". Determines whether task uses color. When "off", task will
use dashes (-----) to underline column headings.
.TP
.Bfontunderline=on
Determines if font underlines or ASCII dashes should be used to underline
headers.
Task has a number of coloration rules. They correspond to a particular attribute
of a task, such as it being due, or being active, and specifies the automatic
coloring of that task. A list of valid color, depending on your terminal, can be
obtained by running the command
.RS
.Btaskcolor
.RE
.RS
The coloration rules and their defaults are:
.RE
.RS
.RS
.Bcolor.overdue=bold_red
The color for overdue tasks.
.br
.Bcolor.due=bold_yellow
The color of due tasks.
.br
.Bcolor.pri.H=bold
The color of priority:H tasks.
.br
.Bcolor.pri.M=on_yellow
The color of priority:M tasks.
.br
.Bcolor.pri.L=on_green
The color of priority:L tasks.
.br
.Bcolor.pri.none=whiteon_blue
The color of priority: tasks.
.br
.Bcolor.active=bold_cyan
The color of active tasks.
.br
.Bcolor.tagged=yellow
The color of tagged tasks.
.br
.Bcolor.recurring=on_red
The color for recurring tasks.
.RE
.RE
.RS
The value for the coloration rules may be one optional foreground color and one optional
color. For example, the value may be
.RE
.RS
.RS
bold_red on_bright_yellow
.RE
.RE
.RS
Certain attributes like tags, projects and keywords can also have their own coloration rules.
.RE
.RS
.TP
.Bcolor.tag.X=yellow
Colors any task that has the tag X.
.TP
.Bcolor.project.X=on_green
Colors any task assigned to project X.
.TP
.Bcolor.keyword.X=on_blue
Colors any task where the description contains X.
.TP
.Bcolor.header=green
Colors any of the messages printed prior to the report output.
.TP
.Bcolor.message=green
Colors any of the messages printed after the report output.
.TP
.Bcolor.footnote=green
Colors any of the messages printed last.
.RE
.SSSHADOWFILE
.TP
.B
shadow.file=$HOME/.task/shadow.txt
If specified, designates a file path that will be automatically written to by task,
whenever the task database changes. In other words, it is automatically kept up to date.
The shadow.command configuration variable is used to determine which report is written
to the shadow file. There is no color used in the shadow file. This feature can be useful
in maintaining a current file for use by programs like GeekTool, Conky or Samurize.
.TP
.B
shadow.command=list
This is the command that is run to maintain the shadow file, determined by the
.Ishadow.file
configuration variable. The format is identical to that of
.Idefault.command
\&. Please see the corresponding documentation for that command.
.TP
.B
shadow.notify=on
When this value is set to "on", task will display a message whenever the shadow
file is updated by some task command.
.SSDEFAULTS
.TP
.B
default.project=foo
Provides a default project name for the
.Itaskadd
command.
.TP
.B
default.priority=M
Provides a default priority for the
.Itaskadd
command.
.TP
.B
default.command=list
Provides a default command that is run every time task is invoked with no arguments.
For example, if set to:
.RS
.RS
default.command=list project:foo
.RE
.RE
.RS
then task will run the "list project:foo" command if no command is specified. This means that
by merely typing
.RE
.RS
.RS
$ task
.br
[task list project:foo]
.br
\&
.br
ID Project Pri Description
1 foo H Design foo
2 foo Build foo
.RE
.RE
.SSREPORTS
The reports can be customized by using the following configuration variables.
The output columns, their labels and the sort order can be set using the
corresponding variables for each report. Each report name is used as a
"command" name. For example
.TP
.Btaskoverdue
.TP
.Breport.X.description
The description for report X when running the "task help" command.
.TP
.Breport.X.columns
The columns that will be used when generating the report X. Valid columns are:
# The task program has a built-in set of default strings, which are UTF8 encoded
# for the en-US locale. A file such as this is used to override those defaults.
# This means that a strings file is merely a delta applied to the built-in
# strings, so an empty string file means you get en-US.
#
# To use another string file, add the following entry to your .taskrc file:
#
# locale=sv-SE # Swedish string set
# 1xx task shell
100 Okänt fel. #Unknown Error.
101 Kunde inte läsa hemkatalogen från passwd filen. #Could not read home directory from the passwd file.
102 (j/n) #(y/n)
103 Ogiltig ID i sekvens #Invalid ID in sequence
104 Ogiltig ID i spännvidd #Invalid ID in range
105 Inverterad sekvens spännvidd hög-låg #Inverted sequence range high-low
106 ID spännvidd för stor #ID Range too large
107 Ingen sekvens. #Not a sequence.
108 Interaktiv task är bara tillgänglig när den kompilerades med support för ncurses. #Interactive task is only available when built with ncurses support.
109 Tom post i ingångsdata #Empty record in input
110 Okänt tecknen på slutet av raden. #Unrecognized characters at end of line
111 Post inte indentifierad som format 4 #Record not recognized as format 4
112 Substitution av tom teckensträng är inte möjligt #Cannot substitute an empty string
113 Pkänt tecken vid slutet av substitution #Unrecognized character(s) at end of substitution
114 Ogiltig substitution #Malformed substitution
115 Taggar får inte innehåller komman #Tags are not permitted to contain commas
<pkmkdocspec="1.12"><properties><title>Task 1.9.4</title><build>/Users/paul/Desktop/task-1.9.4-sl.pkg</build><organization>com.beckingham</organization><userSeesui="both"/><min-targetos="3"/><domainanywhere="true"system="true"/></properties><distribution><versionsmin-spec="1.000000"/><scripts></scripts></distribution><description>Task 1.9.4 install for Snow Leopard.</description><contents><choicetitle="local"id="choice37"starts_selected="true"starts_enabled="true"starts_hidden="false"><pkgrefid="com.gbf.task194.local.pkg"/></choice></contents><resourcesbg-scale="proportional"bg-align="center"><localelang="en"><resourcemod="true"type="license">/Users/paul/task-1.9.4.git/package-config/osx/COPYING.txt</resource><resourcemod="true"type="readme">/Users/paul/task-1.9.4.git/package-config/osx/README.txt</resource></locale></resources><requirements><requirementid="tosv"operator="ge"value="'10.6.0'"><message>Task requires Mac OSX 10.6.0 (Snow Leopard) or later.</message></requirement></requirements><flags/><itemtype="file">01local.xml</item><mod>properties.title</mod><mod>properties.customizeOption</mod><mod>description</mod><mod>properties.anywhereDomain</mod><mod>properties.systemDomain</mod></pkmkdoc>
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.