diff options
Diffstat (limited to 'git_taskrepo/sub_commands/cmd_list.py')
-rw-r--r-- | git_taskrepo/sub_commands/cmd_list.py | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/git_taskrepo/sub_commands/cmd_list.py b/git_taskrepo/sub_commands/cmd_list.py new file mode 100644 index 0000000..20197b0 --- /dev/null +++ b/git_taskrepo/sub_commands/cmd_list.py @@ -0,0 +1,81 @@ + +# -*- coding: utf-8 -*- + +import xml.dom.minidom +from git_taskrepo.command import Command + +class List(Command): + """List tasks available in taskrepo. see --help for more options""" + enabled = True + + def options(self): + self.parser.usage = "%%prog %s" % self.normalized_name + self.parser.add_option( + "--runfor", + metavar="PACKAGE", + action="append", + help="List tasks that should be run for PACKAGE") + self.parser.add_option( + "--type", + metavar="TYPE", + action="append", + help="List tasks only of TYPE") + self.parser.add_option( + "--job", + default=False, + action="store_true", + help="Generate job xml") + + def run(self, *args, **kwargs): + self.set_repo(**kwargs) + self.set_taskrepo(**kwargs) + conn = self.taskrepo + with conn: + cur = conn.cursor() + cur.execute("SELECT origin FROM config") + result = cur.fetchone() + origin = result[0] + + values = [] + joins = [] + where = [] + extra = "" + if kwargs.get("type"): + for x in range(0, len(kwargs.get("type"))): + joins.append("LEFT JOIN types AS t_%d ON t_%d.task_id = tasks.id" % (x, x)) + where.append("t_%d.value=?" % (x,)) + values.append(kwargs.get("type")[x]) + + if kwargs.get("runfor"): + for x in range(0, len(kwargs.get("runfor"))): + joins.append("LEFT JOIN runfor AS rf_%d ON rf_%d.task_id = tasks.id" % (x, x)) + where.append("rf_%d.value=?" % (x,)) + values.append(kwargs.get("runfor")[x]) + + if where: + extra = ' '.join(joins) + extra = "%s WHERE %s" % (extra, ' AND '.join(where)) + + cur.execute("SELECT name, description, owner FROM tasks %s" % extra, values) + rows = cur.fetchall() + if kwargs.get("job"): + xmldoc = xml.dom.minidom.Document() + job = xmldoc.createElement('job') + recipeset = xmldoc.createElement('recipeSet') + job.appendChild(recipeset) + recipe = xmldoc.createElement('recipe') + recipeset.appendChild(recipe) + + for row in rows: + if kwargs.get("job"): + task = xmldoc.createElement('task') + recipe.appendChild(task) + task.setAttribute('name',"/%s/%s" % (self.repo.working_tree_dir.split('/')[-1], + row[0])) + fetch = xmldoc.createElement('fetch') + task.appendChild(fetch) + fetch.setAttribute('url', "%s?%s#%s" % (origin, self.repo.active_branch.name, row[0])) + else: + print "%s\n\t[%s, %s]" % (row[0], row[1], row[2]) + if kwargs.get("job"): + print job.toprettyxml() |