Commit 0f2266c0 authored by Bram Schoenmakers's avatar Bram Schoenmakers

Add parents-of and children-of support to the add subcommand

Similar to the functionality in the dep subcommand, introduced in commit
4ed21654.
parent 4ed21654
...@@ -268,6 +268,61 @@ class AddCommandTest(CommandTest): ...@@ -268,6 +268,61 @@ class AddCommandTest(CommandTest):
self.assertEqual(self.output, "|wb3| {today} Bar p:1 @Context\n|wb3| {today} Bar @Context\n".format(today=self.today)) self.assertEqual(self.output, "|wb3| {today} Bar p:1 @Context\n|wb3| {today} Bar @Context\n".format(today=self.today))
def add_parentsof_helper(self, p_tag):
command = AddCommand.AddCommand(["Foo"], self.todolist, self.out,
self.error)
command.execute()
command = AddCommand.AddCommand(["Bar before:1"], self.todolist,
self.out, self.error)
command.execute()
command = AddCommand.AddCommand(["Baz {}:2".format(p_tag)],
self.todolist, self.out, self.error)
command.execute()
self.assertTrue(self.todolist.todo(3).has_tag('p', '1'))
def test_add_dep_parentsof01(self):
self.add_parentsof_helper('parentsof')
def test_add_dep_parentsof02(self):
self.add_parentsof_helper('parentof')
def test_add_dep_parentsof03(self):
self.add_parentsof_helper('parents-of')
def test_add_dep_parentsof04(self):
self.add_parentsof_helper('parent-of')
def add_childrenof_helper(self, p_tag):
command = AddCommand.AddCommand(["Foo"], self.todolist, self.out,
self.error)
command.execute()
command = AddCommand.AddCommand(["Bar before:1"], self.todolist,
self.out, self.error)
command.execute()
command = AddCommand.AddCommand(["Baz {}:1".format(p_tag)],
self.todolist, self.out, self.error)
command.execute()
self.assertTrue(self.todolist.todo(3).has_tag('id', '2'))
self.assertTrue(self.todolist.todo(2).has_tag('p', '2'))
def test_add_dep_childrenof01(self):
self.add_childrenof_helper('childrenof')
def test_add_dep_childrenof02(self):
self.add_childrenof_helper('childof')
def test_add_dep_childrenof03(self):
self.add_childrenof_helper('children-of')
def test_add_dep_childrenof04(self):
self.add_childrenof_helper('child-of')
def test_add_reldate1(self): def test_add_reldate1(self):
command = AddCommand.AddCommand(["Foo due:today"], self.todolist, command = AddCommand.AddCommand(["Foo due:today"], self.todolist,
self.out, self.error) self.out, self.error)
......
...@@ -96,6 +96,12 @@ class AddCommand(Command): ...@@ -96,6 +96,12 @@ class AddCommand(Command):
self.todolist.add_dependency(p_todo, dep) self.todolist.add_dependency(p_todo, dep)
elif p_tag == 'before' or p_tag == 'partof': elif p_tag == 'before' or p_tag == 'partof':
self.todolist.add_dependency(dep, p_todo) self.todolist.add_dependency(dep, p_todo)
elif p_tag.startswith('parent'):
for parent in self.todolist.parents(dep):
self.todolist.add_dependency(parent, p_todo)
elif p_tag.startswith('child'):
for child in self.todolist.children(dep):
self.todolist.add_dependency(p_todo, child)
except InvalidTodoException: except InvalidTodoException:
pass pass
...@@ -104,9 +110,22 @@ class AddCommand(Command): ...@@ -104,9 +110,22 @@ class AddCommand(Command):
convert_date(config().tag_start()) convert_date(config().tag_start())
convert_date(config().tag_due()) convert_date(config().tag_due())
add_dependencies('partof') keywords = [
add_dependencies('before') 'after',
add_dependencies('after') 'before',
'child-of',
'childof',
'children-of',
'childrenof',
'parent-of',
'parentof',
'parents-of',
'parentsof',
'partof',
]
for keyword in keywords:
add_dependencies(keyword)
if config().auto_creation_date(): if config().auto_creation_date():
p_todo.set_creation_date(date.today()) p_todo.set_creation_date(date.today())
...@@ -149,9 +168,9 @@ TEXT may contain: ...@@ -149,9 +168,9 @@ TEXT may contain:
* Priorities mid-sentence. Example: add "Water flowers (C)" * Priorities mid-sentence. Example: add "Water flowers (C)"
* Dependencies using before, after and partof tags. They are translated to the * Dependencies using before, after, partof, parents-of and children-of tags.
corresponding 'id' and 'p' tags. The values of these tags correspond to the These are translated to the corresponding 'id' and 'p' tags. The values of
todo number (not the dependency number). these tags correspond to the todo number (not the dependency number).
Example: add "Subtask partof:1" Example: add "Subtask partof:1"
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment