changeset 11989 | f853873fc66d |
parent 11985 | 81edef14922e |
child 12040 | 529e712cb1ba |
11988:8380ed691df8 | 11989:f853873fc66d |
---|---|
4 # |
4 # |
5 # This software may be used and distributed according to the terms of the |
5 # This software may be used and distributed according to the terms of the |
6 # GNU General Public License version 2 or any later version. |
6 # GNU General Public License version 2 or any later version. |
7 |
7 |
8 from i18n import _ |
8 from i18n import _ |
9 import os, sys, atexit, signal, pdb, socket, errno, shlex, time, traceback |
9 import os, sys, atexit, signal, pdb, socket, errno, shlex, time, traceback, re |
10 import util, commands, hg, fancyopts, extensions, hook, error |
10 import util, commands, hg, fancyopts, extensions, hook, error |
11 import cmdutil, encoding |
11 import cmdutil, encoding |
12 import ui as uimod |
12 import ui as uimod |
13 |
13 |
14 def run(): |
14 def run(): |
212 |
212 |
213 return |
213 return |
214 |
214 |
215 if self.definition.startswith('!'): |
215 if self.definition.startswith('!'): |
216 def fn(ui, *args): |
216 def fn(ui, *args): |
217 cmd = '%s %s' % (self.definition[1:], ' '.join(args)) |
217 env = {'HG_ARGS': ' '.join((self.name,) + args)} |
218 return util.system(cmd) |
218 def _checkvar(m): |
219 if int(m.groups()[0]) <= len(args): |
|
220 return m.group() |
|
221 else: |
|
222 return '' |
|
223 cmd = re.sub(r'\$(\d+)', _checkvar, self.definition[1:]) |
|
224 replace = dict((str(i + 1), arg) for i, arg in enumerate(args)) |
|
225 replace['0'] = self.name |
|
226 replace['@'] = ' '.join(args) |
|
227 cmd = util.interpolate(r'\$', replace, cmd) |
|
228 return util.system(cmd, environ=env) |
|
219 self.fn = fn |
229 self.fn = fn |
220 return |
230 return |
221 |
231 |
222 args = shlex.split(self.definition) |
232 args = shlex.split(self.definition) |
223 cmd = args.pop(0) |
233 cmd = args.pop(0) |
272 |
282 |
273 def __call__(self, ui, *args, **opts): |
283 def __call__(self, ui, *args, **opts): |
274 if self.shadows: |
284 if self.shadows: |
275 ui.debug("alias '%s' shadows command\n" % self.name) |
285 ui.debug("alias '%s' shadows command\n" % self.name) |
276 |
286 |
277 return util.checksignature(self.fn)(ui, *args, **opts) |
287 if self.definition.startswith('!'): |
288 return self.fn(ui, *args, **opts) |
|
289 else: |
|
290 return util.checksignature(self.fn)(ui, *args, **opts) |
|
278 |
291 |
279 def addaliases(ui, cmdtable): |
292 def addaliases(ui, cmdtable): |
280 # aliases are processed after extensions have been loaded, so they |
293 # aliases are processed after extensions have been loaded, so they |
281 # may use extension commands. Aliases can also use other alias definitions, |
294 # may use extension commands. Aliases can also use other alias definitions, |
282 # but only if they have been defined prior to the current definition. |
295 # but only if they have been defined prior to the current definition. |