Mercurial > hg
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 |