Show More
@@ -100,6 +100,29 b' This section describes the different sec' | |||
|
100 | 100 | Mercurial "hgrc" file, the purpose of each section, its possible |
|
101 | 101 | keys, and their possible values. |
|
102 | 102 | |
|
103 | [[alias]] | |
|
104 | alias:: | |
|
105 | Defines command aliases. | |
|
106 | Aliases allow you to define your own commands in terms of other | |
|
107 | commands (or aliases), optionally including arguments. | |
|
108 | + | |
|
109 | Alias definitions consist of lines of the form: | |
|
110 | + | |
|
111 | <alias> = <command> [<argument]... | |
|
112 | + | |
|
113 | For example, this definition: | |
|
114 | + | |
|
115 | latest = log --limit 5 | |
|
116 | + | |
|
117 | creates a new command `latest` that shows only the five most recent | |
|
118 | changesets. You can define subsequent aliases using earlier ones: | |
|
119 | + | |
|
120 | stable5 = latest -b stable | |
|
121 | + | |
|
122 | *Note*: It is possible to create aliases with the same names as | |
|
123 | existing commands, which will then override the original | |
|
124 | definitions. This is almost always a bad idea! | |
|
125 | ||
|
103 | 126 | [[auth]] |
|
104 | 127 | auth:: |
|
105 | 128 | Authentication credentials for HTTP authentication. |
@@ -161,6 +161,74 b' def _findrepo(p):' | |||
|
161 | 161 | |
|
162 | 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 | 232 | def _parse(ui, args): |
|
165 | 233 | options = {} |
|
166 | 234 | cmdoptions = {} |
@@ -175,6 +243,7 b' def _parse(ui, args):' | |||
|
175 | 243 | aliases, i = cmdutil.findcmd(cmd, commands.table, |
|
176 | 244 | ui.config("ui", "strict")) |
|
177 | 245 | cmd = aliases[0] |
|
246 | args = aliasargs(i[0]) + args | |
|
178 | 247 | defaults = ui.config("defaults", cmd) |
|
179 | 248 | if defaults: |
|
180 | 249 | args = shlex.split(defaults) + args |
@@ -301,6 +370,9 b' def _dispatch(ui, args):' | |||
|
301 | 370 | % (name, " ".join(overrides))) |
|
302 | 371 | commands.table.update(cmdtable) |
|
303 | 372 | _loaded.add(name) |
|
373 | ||
|
374 | addaliases(lui, commands.table) | |
|
375 | ||
|
304 | 376 | # check for fallback encoding |
|
305 | 377 | fallback = lui.config('ui', 'fallbackencoding') |
|
306 | 378 | if fallback: |
@@ -1,18 +1,17 b'' | |||
|
1 | 1 | #!/bin/sh |
|
2 | 2 | |
|
3 | 3 | cat >> $HGRCPATH <<EOF |
|
4 | [extensions] | |
|
5 | alias= | |
|
6 | ||
|
7 | 4 | [alias] |
|
8 | 5 | myinit = init |
|
9 | 6 | cleanstatus = status -c |
|
10 | 7 | unknown = bargle |
|
11 | 8 | ambiguous = s |
|
12 | 9 | recursive = recursive |
|
10 | nodefinition = | |
|
13 | 11 | mylog = log |
|
14 | 12 | lognull = log -r null |
|
15 | 13 | shortlog = log --template '{rev} {node|short} | {date|isodate}\n' |
|
14 | dln = lognull --debug | |
|
16 | 15 | |
|
17 | 16 | [defaults] |
|
18 | 17 | mylog = -q |
@@ -32,6 +31,9 b' hg ambiguous' | |||
|
32 | 31 | echo '% recursive' |
|
33 | 32 | hg recursive |
|
34 | 33 | |
|
34 | echo '% no definition' | |
|
35 | hg nodef | |
|
36 | ||
|
35 | 37 | cd alias |
|
36 | 38 | echo foo > foo |
|
37 | 39 | hg ci -Amfoo |
@@ -45,3 +47,6 b' hg shortlog' | |||
|
45 | 47 | echo '% interaction with defaults' |
|
46 | 48 | hg mylog |
|
47 | 49 | hg lognull |
|
50 | ||
|
51 | echo '% properly recursive' | |
|
52 | hg dln |
@@ -1,10 +1,12 b'' | |||
|
1 | 1 | % basic |
|
2 | 2 | % unknown |
|
3 | *** [alias] unknown: command bargle is unknown | |
|
3 | alias 'unknown' resolves to unknown command 'bargle' | |
|
4 | 4 | % ambiguous |
|
5 | *** [alias] ambiguous: command s is ambiguous | |
|
5 | alias 'ambiguous' resolves to ambiguous command 's' | |
|
6 | 6 | % recursive |
|
7 | *** [alias] recursive: circular dependency on recursive | |
|
7 | alias 'recursive' resolves to unknown command 'recursive' | |
|
8 | % no definition | |
|
9 | no definition for alias 'nodefinition' | |
|
8 | 10 | adding foo |
|
9 | 11 | % with opts |
|
10 | 12 | C foo |
@@ -13,3 +15,12 b' 0 e63c23eaa88a | 1970-01-01 00:00 +0000' | |||
|
13 | 15 | % interaction with defaults |
|
14 | 16 | 0:e63c23eaa88a |
|
15 | 17 | -1:000000000000 |
|
18 | % properly recursive | |
|
19 | changeset: -1:0000000000000000000000000000000000000000 | |
|
20 | parent: -1:0000000000000000000000000000000000000000 | |
|
21 | parent: -1:0000000000000000000000000000000000000000 | |
|
22 | manifest: -1:0000000000000000000000000000000000000000 | |
|
23 | user: | |
|
24 | date: Thu Jan 01 00:00:00 1970 +0000 | |
|
25 | extra: branch=default | |
|
26 |
|
1 | NO CONTENT: file was removed |
General Comments 0
You need to be logged in to leave comments.
Login now