Mercurial > hg > MakeItSo
comparison makeitso/makeitso.py @ 30:1549be7f0fcb
dont point at trunk tempital; as expected, hg repos dont work with setuptools :(
author | Jeff Hammel <jhammel@mozilla.com> |
---|---|
date | Wed, 22 Dec 2010 14:34:20 -0800 |
parents | dc18d6db4956 |
children | 17f46f0e0a4a |
comparison
equal
deleted
inserted
replaced
29:7e8a5da34eee | 30:1549be7f0fcb |
---|---|
1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
2 """ | 2 """ |
3 filesystem template interpreter | 3 filesystem template interpreter |
4 """ | 4 """ |
5 | 5 |
6 import inspect | |
6 import os | 7 import os |
7 import re | 8 import re |
8 import shutil | 9 import shutil |
9 import subprocess | 10 import subprocess |
10 import sys | 11 import sys |
58 import tempita | 59 import tempita |
59 except: | 60 except: |
60 cleanup() | 61 cleanup() |
61 raise NotImplementedError('This should say something like youre not connected to the net') | 62 raise NotImplementedError('This should say something like youre not connected to the net') |
62 | 63 |
63 | 64 # does tempita support delimeters? |
65 has_delimeters = 'delimeters' in inspect.getargspec(tempita.Template.__init__).args | |
64 | 66 |
65 # regular expressions for finding the shebang | 67 # regular expressions for finding the shebang |
66 shebang_re = '#!.*makeitso.*' | 68 shebang_re = '#!.*makeitso.*' |
67 shebang_re = re.compile(shebang_re) | 69 shebang_re = re.compile(shebang_re) |
68 | |
69 class MissingVariablesException(Exception): | |
70 def __init__(self, message, missing): | |
71 self.missing = missing | |
72 | |
73 def call(command, *args, **kw): | |
74 code = subprocess.call(command, *args, **kw) | |
75 if code: | |
76 if isinstance(command, basestring): | |
77 cmdstr = command | |
78 else: | |
79 cmdstr = ' '.join(command) | |
80 raise SystemExit("Command `%s` exited with code %d" % (cmdstr, code)) | |
81 | 70 |
82 def base_uri(uri): | 71 def base_uri(uri): |
83 if '://' in uri: | 72 if '://' in uri: |
84 return 'uri'.rsplit('/', 1)[0] + '/' | 73 return 'uri'.rsplit('/', 1)[0] + '/' |
85 else: | 74 else: |
89 | 78 |
90 def include(uri): | 79 def include(uri): |
91 f, headers = urllib.urlretrieve(uri) | 80 f, headers = urllib.urlretrieve(uri) |
92 return file(f).read() | 81 return file(f).read() |
93 | 82 |
94 ### functions for variables | 83 ### things that deal with variables |
95 | 84 |
96 defaults = {'include': include} | 85 defaults = {'include': include} |
86 | |
87 class MissingVariablesException(Exception): | |
88 """exception for (non-interactive) missing variables""" | |
89 def __init__(self, message, missing): | |
90 self.missing = missing | |
97 | 91 |
98 def get_missing(name_error): | 92 def get_missing(name_error): |
99 """ | 93 """ |
100 This is a horrible hack because python doesn't do the proper thing | 94 This is a horrible hack because python doesn't do the proper thing |
101 via eval and return the name of the variable; instead, it just gives | 95 via eval and return the name of the variable; instead, it just gives |
167 usage = '%prog [options] template <template> <...>' | 161 usage = '%prog [options] template <template> <...>' |
168 parser = OptionParser(usage, description=__doc__) | 162 parser = OptionParser(usage, description=__doc__) |
169 | 163 |
170 # delimeters | 164 # delimeters |
171 # XXX needs tempita trunk | 165 # XXX needs tempita trunk |
172 parser.add_option('-[', '--start-braces', dest='start_braces', | 166 if has_delimeters: |
173 help='starting delimeter') | 167 parser.add_option('-[', '--start-braces', dest='start_braces', |
174 parser.add_option('-]', '--end-braces', dest='end_braces', | 168 help='starting delimeter') |
175 help='starting delimeter') | 169 parser.add_option('-]', '--end-braces', dest='end_braces', |
170 help='starting delimeter') | |
176 | 171 |
177 # options about where to put things | 172 # options about where to put things |
178 parser.add_option('--in-place', dest='in_place', | 173 parser.add_option('--in-place', dest='in_place', |
179 action='store_true', default=False, | 174 action='store_true', default=False, |
180 help='interpret files in place') # TODO: unused | 175 help='interpret files in place') # TODO: unused |