comparison mercurial/dispatch.py @ 8655:21688b8a594b

Move alias into core
author Brendan Cully <brendan@kublai.com>
date Sat, 30 May 2009 11:32:23 -0700
parents 991ca609ccd6
children eb7b247a98ea 62e3b9466700
comparison
equal deleted inserted replaced
8654:f6cc3638f468 8655:21688b8a594b
159 if p == oldp: 159 if p == oldp:
160 return None 160 return None
161 161
162 return p 162 return p
163 163
164 def aliasargs(fn):
165 if hasattr(fn, 'args'):
166 return fn.args
167 return []
168
169 class cmdalias(object):
170 def __init__(self, name, definition, cmdtable):
171 self.name = name
172 self.definition = definition
173 self.args = []
174 self.opts = []
175 self.help = ''
176 self.norepo = True
177
178 try:
179 cmdutil.findcmd(self.name, cmdtable, True)
180 self.shadows = True
181 except error.UnknownCommand:
182 self.shadows = False
183
184 if not self.definition:
185 def fn(ui, *args):
186 ui.warn(_("no definition for alias '%s'\n") % self.name)
187 return 1
188 self.fn = fn
189
190 return
191
192 args = shlex.split(self.definition)
193 cmd = args.pop(0)
194 opts = []
195 help = ''
196
197 try:
198 self.fn, self.opts, self.help = cmdutil.findcmd(cmd, cmdtable, False)[1]
199 self.args = aliasargs(self.fn) + args
200 if cmd not in commands.norepo.split(' '):
201 self.norepo = False
202 except error.UnknownCommand:
203 def fn(ui, *args):
204 ui.warn(_("alias '%s' resolves to unknown command '%s'\n") \
205 % (self.name, cmd))
206 return 1
207 self.fn = fn
208 except error.AmbiguousCommand:
209 def fn(ui, *args):
210 ui.warn(_("alias '%s' resolves to ambiguous command '%s'\n") \
211 % (self.name, cmd))
212 return 1
213 self.fn = fn
214
215 def __call__(self, ui, *args, **opts):
216 if self.shadows:
217 ui.debug(_("alias '%s' shadows command\n") % self.name)
218
219 return self.fn(ui, *args, **opts)
220
221 def addaliases(ui, cmdtable):
222 # aliases are processed after extensions have been loaded, so they
223 # may use extension commands. Aliases can also use other alias definitions,
224 # but only if they have been defined prior to the current definition.
225 for alias, definition in ui.configitems('alias'):
226 aliasdef = cmdalias(alias, definition, cmdtable)
227
228 cmdtable[alias] = (aliasdef, aliasdef.opts, aliasdef.help)
229 if aliasdef.norepo:
230 commands.norepo += ' %s' % alias
231
164 def _parse(ui, args): 232 def _parse(ui, args):
165 options = {} 233 options = {}
166 cmdoptions = {} 234 cmdoptions = {}
167 235
168 try: 236 try:
173 if args: 241 if args:
174 cmd, args = args[0], args[1:] 242 cmd, args = args[0], args[1:]
175 aliases, i = cmdutil.findcmd(cmd, commands.table, 243 aliases, i = cmdutil.findcmd(cmd, commands.table,
176 ui.config("ui", "strict")) 244 ui.config("ui", "strict"))
177 cmd = aliases[0] 245 cmd = aliases[0]
246 args = aliasargs(i[0]) + args
178 defaults = ui.config("defaults", cmd) 247 defaults = ui.config("defaults", cmd)
179 if defaults: 248 if defaults:
180 args = shlex.split(defaults) + args 249 args = shlex.split(defaults) + args
181 c = list(i[1]) 250 c = list(i[1])
182 else: 251 else:
299 if overrides: 368 if overrides:
300 ui.warn(_("extension '%s' overrides commands: %s\n") 369 ui.warn(_("extension '%s' overrides commands: %s\n")
301 % (name, " ".join(overrides))) 370 % (name, " ".join(overrides)))
302 commands.table.update(cmdtable) 371 commands.table.update(cmdtable)
303 _loaded.add(name) 372 _loaded.add(name)
373
374 addaliases(lui, commands.table)
375
304 # check for fallback encoding 376 # check for fallback encoding
305 fallback = lui.config('ui', 'fallbackencoding') 377 fallback = lui.config('ui', 'fallbackencoding')
306 if fallback: 378 if fallback:
307 encoding.fallbackencoding = fallback 379 encoding.fallbackencoding = fallback
308 380