summaryrefslogtreecommitdiffstats
path: root/git_taskrepo/sub_commands/cmd_list.py
diff options
context:
space:
mode:
Diffstat (limited to 'git_taskrepo/sub_commands/cmd_list.py')
-rw-r--r--git_taskrepo/sub_commands/cmd_list.py81
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()