Mercurial > hg > gut
annotate gut/main.py @ 0:9688c72a93c3
initial commit of gut, probably doesnt actually work
author | Jeff Hammel <jhammel@mozilla.com> |
---|---|
date | Fri, 16 Jul 2010 13:55:58 -0700 |
parents | |
children | 54b30e8f6f82 |
rev | line source |
---|---|
0
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
1 #!/usr/bin/env python |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
2 """ |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
3 a workflow for git |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
4 """ |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
5 |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
6 import os |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
7 import subprocess |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
8 import sys |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
9 |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
10 from command import CommandParser |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
11 |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
12 def call(command, **kw): |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
13 if isinstance(command, basestring): |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
14 kw['shell'] = True |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
15 output = kw.pop('output', True) |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
16 if output or kw.pop('pipe', False): |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
17 kw['stdout'] = subprocess.PIPE |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
18 kw['stderr'] = subprocess.PIPE |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
19 check = kw.pop('check', True) |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
20 process = subprocess.Popen(command, **kw) |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
21 stdout, stderr = process.communicate() |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
22 code = process.poll() |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
23 if check and code: |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
24 if isinstance(command, basestring): |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
25 cmdstr = command |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
26 else: |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
27 cmdstr = ' '.join(command) |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
28 raise SystemExit("Command `%s` exited with code %d" % (cmdstr, code)) |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
29 if output: |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
30 print stdout |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
31 print stderr |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
32 return dict(stdout=stdout, stderr=stderr, code=code) |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
33 |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
34 class gut(object): |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
35 """ |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
36 a workflow for git |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
37 """ |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
38 |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
39 def __init__(self, remote=None): |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
40 self.remote = remote |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
41 |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
42 def hello(self, name='world'): |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
43 print 'hello %s' % name |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
44 |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
45 def update(self): |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
46 """update the master and the branch you're on""" |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
47 call(['git', 'checkout', 'master']) |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
48 call(['git', 'pull', 'origin', 'master']) |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
49 if self.remote: |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
50 call(['git', 'pull', self.remote, 'master']) |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
51 |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
52 def feature(self, name): |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
53 """make a new feature branch""" |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
54 call(['git', 'checkout', 'master']) |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
55 call(['git', 'checkout', '-b', name]) |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
56 call(['git', 'push', 'origin', name]) |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
57 |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
58 def patch(self, output=None): |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
59 """generate a patch for review""" |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
60 if not output: |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
61 output = self.branch() + '.diff' |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
62 diff = call(['git', 'diff', 'master'], pipe=True, output=False) |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
63 diff = diff['stdout'] |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
64 log = call(['git', 'log', 'master..'], pipe=True, output=False) |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
65 log = log['stdout'] |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
66 f = file(output) # write the output to a patch file |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
67 return log |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
68 |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
69 def branch(self): |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
70 """print what branch you're on""" |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
71 output = call(['git', 'branch'], output=False) |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
72 for line in output['stdout'].splitlines(): |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
73 if line.startswith('*'): |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
74 return line[1:].strip() |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
75 |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
76 def main(args=sys.argv[1:]): |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
77 parser = CommandParser(gut) |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
78 options, args = parser.parse_args(args) |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
79 parser.invoke(args) |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
80 |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
81 if __name__ == '__main__': |
9688c72a93c3
initial commit of gut, probably doesnt actually work
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
82 main() |