Inital commit
[patchwork] / apps / patchwork / bin / update-patchwork-status.py
1 #!/usr/bin/env python
2 #
3 # Patchwork - automated patch tracking system
4 # Copyright (C) 2008 Jeremy Kerr <jk@ozlabs.org>
5 #
6 # This file is part of the Patchwork package.
7 #
8 # Patchwork is free software; you can redistribute it and/or modify
9 # it under the terms of the GNU General Public License as published by
10 # the Free Software Foundation; either version 2 of the License, or
11 # (at your option) any later version.
12 #
13 # Patchwork is distributed in the hope that it will be useful,
14 # but WITHOUT ANY WARRANTY; without even the implied warranty of
15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 # GNU General Public License for more details.
17 #
18 # You should have received a copy of the GNU General Public License
19 # along with Patchwork; if not, write to the Free Software
20 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
21
22
23 import sys
24 import subprocess
25 from optparse import OptionParser
26
27 def commits(options, revlist):
28     cmd = ['git-rev-list', revlist]
29     proc = subprocess.Popen(cmd, stdout = subprocess.PIPE, cwd = options.repodir)
30
31     revs = []
32
33     for line in proc.stdout.readlines():
34         revs.append(line.strip())
35
36     return revs
37
38 def commit(options, rev):
39     cmd = ['git-diff', '%(rev)s^..%(rev)s' % {'rev': rev}]
40     proc = subprocess.Popen(cmd, stdout = subprocess.PIPE, cwd = options.repodir)
41
42     buf = proc.communicate()[0]
43
44     return buf
45
46
47 def main(args):
48     parser = OptionParser(usage = '%prog [options] revspec')
49     parser.add_option("-p", "--project", dest = "project", action = 'store',
50                   help="use project PROJECT", metavar="PROJECT")
51     parser.add_option("-d", "--dir", dest = "repodir", action = 'store',
52                   help="use git repo in DIR", metavar="DIR")
53
54     (options, args) = parser.parse_args(args[1:])
55
56     if len(args) != 1:
57         parser.error("incorrect number of arguments")
58
59     revspec = args[0]
60     revs = commits(options, revspec)
61
62     for rev in revs:
63         print rev
64         print commit(options, rev)
65
66
67 if __name__ == '__main__':
68     sys.exit(main(sys.argv))
69
70