Merge branch '2.3.0' of tasktools.org:task into 2.3.0

This commit is contained in:
Paul Beckingham 2013-10-06 20:55:28 -04:00
commit 2074a6e31b
9 changed files with 40 additions and 21 deletions

View file

@ -182,3 +182,6 @@ suggestions:
Friedrich Heusler Friedrich Heusler
Ben Armstrong Ben Armstrong
XTaran XTaran
John West
Dmitriy Matrosov
Michele Santullo

View file

@ -67,7 +67,11 @@ Bugs
Wilk). Wilk).
+ #1263 The 'waiting' report properly lists only pending tasks with a wait date + #1263 The 'waiting' report properly lists only pending tasks with a wait date
(thanks to Fidel Mato). (thanks to Fidel Mato).
+ #1268 Edit doesn't accept changes, if task has completed dependency (thanks
to Dmitriy Matrosov, Michele Santullo).
+ #1270 The 'undo' command is now properly removing backlog entries. + #1270 The 'undo' command is now properly removing backlog entries.
+ #1273 Query with negative relative date differs greatly from absolute date
in past (thanks to John West).
+ #1279 Assorted corrections to the task-ref.pdf document (thanks to Benjamin + #1279 Assorted corrections to the task-ref.pdf document (thanks to Benjamin
Weber). Weber).
+ #1286 Cannot use "sow", "som", etc in "entry.after", "end.after" filters + #1286 Cannot use "sow", "som", etc in "entry.after", "end.after" filters
@ -80,6 +84,7 @@ Bugs
+ #1387 ZSH Auto-Completion dates are not current (thanks to Benjamin Weber). + #1387 ZSH Auto-Completion dates are not current (thanks to Benjamin Weber).
+ #1388 Updated task(1) man pages with import/export script examples (thanks to + #1388 Updated task(1) man pages with import/export script examples (thanks to
Benjamin Weber). Benjamin Weber).
+ #1410 Incomplete Date Synonym List in man task (thanks to Benjamin Weber).
+ Fixed bug so that 'limit:page' now considers footnote messages. + Fixed bug so that 'limit:page' now considers footnote messages.
+ Fixed bug where specifying an ID of 0 yielded all completed/deleted tasks + Fixed bug where specifying an ID of 0 yielded all completed/deleted tasks
(thanks to greenskeleton). (thanks to greenskeleton).

View file

@ -890,6 +890,22 @@ This sets the wait date to 1/18/2038.
.TP .TP
Next occurring weekday Next occurring weekday
task ... due:fri task ... due:fri
.TP
Predictable holidays
task ... due:goodfriday
.br
task ... due:easter
.br
task ... due:eastermonday
.br
task ... due:ascension
.br
task ... due:pentecost
.br
task ... due:midsommar
.br
task ... due:midsommarafton
.RE .RE
.SS FREQUENCIES .SS FREQUENCIES

View file

@ -368,6 +368,8 @@ bool Duration::valid (const std::string& input)
Nibbler n (lower_input); Nibbler n (lower_input);
n.getNumber (value); n.getNumber (value);
// Negative values are valid, but do not need to complicate the validation
// check.
if (value < 0.0) if (value < 0.0)
value = -value; value = -value;

View file

@ -185,6 +185,9 @@ void E9::eval (const Task& task, std::vector <Arg>& value_stack)
{ {
Duration dur (operand._raw); Duration dur (operand._raw);
Date now; Date now;
if (dur.negative ())
now -= (int)(time_t) dur;
else
now += (int)(time_t) dur; now += (int)(time_t) dur;
operand._value = now.toEpochString (); operand._value = now.toEpochString ();
} }

View file

@ -990,11 +990,6 @@ void Task::addDependency (const std::string& uuid)
if (uuid == get ("uuid")) if (uuid == get ("uuid"))
throw std::string (STRING_TASK_DEPEND_ITSELF); throw std::string (STRING_TASK_DEPEND_ITSELF);
// Check that uuid is resolvable.
int id = context.tdb2.pending.id (uuid);
if (id == 0)
throw format (STRING_TASK_DEPEND_MISS_CREA, id);
// Store the dependency. // Store the dependency.
std::string depends = get ("depends"); std::string depends = get ("depends");
if (depends != "") if (depends != "")

View file

@ -660,20 +660,10 @@ void CmdEdit::parseTask (Task& task, const std::string& after, const std::string
std::vector <std::string>::iterator dep; std::vector <std::string>::iterator dep;
for (dep = dependencies.begin (); dep != dependencies.end (); ++dep) for (dep = dependencies.begin (); dep != dependencies.end (); ++dep)
{ {
std::vector <int> ids; if (dep->length () >= 7)
task.addDependency (*dep);
// Crude UUID check
if (dep->length () == 36)
{
int id = context.tdb2.pending.id (*dep);
ids.push_back (id);
}
else else
A3::extract_id (*dep, ids); task.addDependency ((int) strtol (dep->c_str (), NULL, 10));
std::vector <int>::iterator id;
for (id = ids.begin (); id != ids.end(); id++)
task.addDependency (*id);
} }
// UDAs // UDAs

View file

@ -463,7 +463,7 @@ void Command::modify_task (
std::string& description) std::string& description)
{ {
// Utilize Task::modify // Utilize Task::modify
task.modify(arguments, description); task.modify (arguments, description);
} }
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////

View file

@ -51,7 +51,7 @@ int convertDuration (const std::string& input)
int main (int argc, char** argv) int main (int argc, char** argv)
{ {
UnitTest t (644); UnitTest t (646);
// Ensure environment has no influence. // Ensure environment has no influence.
unsetenv ("TASKDATA"); unsetenv ("TASKDATA");
@ -728,6 +728,11 @@ int main (int argc, char** argv)
t.is (convertDuration ("10d"), 10, "valid duration 10d"); t.is (convertDuration ("10d"), 10, "valid duration 10d");
t.is (convertDuration ("-"), 0, "valid duration -"); t.is (convertDuration ("-"), 0, "valid duration -");
d = Duration ("-4d");
t.is ((time_t)d, 4*86400, "-4d == 4*86400");
t.ok (d.negative (), "-4d == negative");
try try
{ {
Duration left, right; Duration left, right;