Mercurial > hg > mercurial-crew-with-dirclash
comparison contrib/zsh_completion @ 3511:060aefba4459
zsh: rewrite
This version of zsh completion handles global options more correctly,
completes options for command abbreviations, and does much more lazy
evaluation.
author | Brendan Cully <brendan@kublai.com> |
---|---|
date | Wed, 25 Oct 2006 15:08:40 -0700 |
parents | 776c317566b6 |
children | a6dd7ab568cc |
comparison
equal
deleted
inserted
replaced
3510:9383af6f236d | 3511:060aefba4459 |
---|---|
11 # Software Foundation; either version 2 of the License, or (at your | 11 # Software Foundation; either version 2 of the License, or (at your |
12 # option) any later version. | 12 # option) any later version. |
13 # | 13 # |
14 | 14 |
15 local curcontext="$curcontext" state line | 15 local curcontext="$curcontext" state line |
16 typeset -A opt_args | 16 local repos newFiles addedFiles commitMessage |
17 local repos newFiles addedFiles includeExclude commitMessage | 17 typeset -A _hg_cmd_globals |
18 local ridx _hgroot | 18 |
19 | 19 _hg() { |
20 # FIXME: why isn't opt_args available? | 20 local cmd |
21 [[ -d .hg ]] && _hgroot="$PWD" | 21 integer i=2 |
22 ridx=$words[(i)-R] | 22 _hg_cmd_globals=() |
23 (( $ridx < $#words )) && _hgroot="${words[$ridx+1]}" | 23 |
24 | 24 while (( i < $#words )) |
25 # hg dispatch (borrowed from _cvs) | 25 do |
26 (( $+functions[_hg_cmd] )) || | 26 case "$words[$i]" in |
27 _hg_cmd () { | 27 -R|--repository|--cwd|--config) |
28 _call_program hg hg -R "$_hgroot" "$@" | 28 # pass along arguments to hg completer |
29 } | 29 _hg_cmd_globals+="$words[$i]" |
30 | 30 _hg_cmd_globals+="$words[$i+1]" |
31 (( $+functions[_hg_state] )) || | 31 (( i += 2 )) |
32 _hg_state () { | 32 continue |
33 case "$state" in | 33 ;; |
34 (tags) | 34 -R*) |
35 compadd $(_hg_cmd tags 2> /dev/null | | 35 _hg_cmd_globals+="$words[$i]" |
36 sed -e 's/[0-9]*:[a-f0-9]*$//; s/ *$//') | 36 (( i++ )) |
37 ;; | 37 continue |
38 (qapplied) | 38 ;; |
39 compadd $(_hg_cmd qapplied) | 39 -*) |
40 ;; | 40 # skip option |
41 (qunapplied) | 41 (( i++ )) |
42 compadd $(_hg_cmd qunapplied) | 42 continue |
43 ;; | 43 ;; |
44 esac | 44 esac |
45 } | 45 if [[ -z "$cmd" ]] |
46 | 46 then |
47 (( $+_hg_commands )) || | 47 cmd="$words[$i]" |
48 _hg_commands=($(hg -v help | sed -e '1,/^list of commands:/d' \ | 48 words[$i]=() |
49 -e '/^global options:/,$d' -e '/^ [^ ]/!d; s/[,:].*//g;')) | 49 (( CURRENT-- )) |
50 | |
51 # A lot of commands have these arguments | |
52 includeExclude=( | |
53 '*-I-[include names matching the given patterns]:dir:_files -W $(_hg_cmd root) -/' | |
54 '*--include-[include names matching the given patterns]:dir:_files -W $(_hg_cmd root) -/' | |
55 '*-X-[exclude names matching the given patterns]:dir:_files -W $(_hg_cmd root) -/' | |
56 '*--exclude-[exclude names matching the given patterns]:dir:_files -W $(_hg_cmd root) -/') | |
57 | |
58 styleOpts=( | |
59 '--style[display using template map file]:' | |
60 '--template[display with template]:') | |
61 | |
62 commitMessage=( | |
63 '(-m --message -l --logfile --edit)-e[edit commit message]' | |
64 '(-m --message -l --logfile -e)--edit[edit commit message]' | |
65 '(-e --edit -l --logfile --message)-m[use <text> as commit message]:message:' | |
66 '(-e --edit -l --logfile -m)--message[use <text> as commit message]:message:' | |
67 '(-e --edit -m --message --logfile)-l[read the commit message from <file>]:log file:_files' | |
68 '(-e --edit -m --message -l)--logfile[read the commit message from <file>]:log file:_files') | |
69 | |
70 if [[ $service == "hg" ]]; then | |
71 _arguments -C -A "-*" \ | |
72 '(--repository)-R[repository root directory]:root:_files -/' \ | |
73 '(-R)--repository[repository root directory]:root:_files -/' \ | |
74 '--cwd[change working directory]:new working directory:_files -/' \ | |
75 '(--noninteractive)-y[do not prompt, assume yes for any required answers]' \ | |
76 '(-y)--noninteractive[do not prompt, assume yes for any required answers]' \ | |
77 '(--verbose)-v[enable additional output]' \ | |
78 '(-v)--verbose[enable additional output]' \ | |
79 '(--quiet)-q[suppress output]' \ | |
80 '(-q)--quiet[suppress output]' \ | |
81 '(--help)-h[display help and exit]' \ | |
82 '(-h)--help[display help and exit]' \ | |
83 '--debug[debug mode]' \ | |
84 '--debugger[start debugger]' \ | |
85 '--traceback[print traceback on exception]' \ | |
86 '--time[time how long the command takes]' \ | |
87 '--profile[profile]' \ | |
88 '--version[output version information and exit]' \ | |
89 '*::command:->subcmd' && return 0 | |
90 | |
91 if (( CURRENT == 1 )); then | |
92 _wanted commands expl 'hg command' compadd -a _hg_commands | |
93 return | |
94 fi | 50 fi |
95 service="$words[1]" | 51 (( i++ )) |
96 curcontext="${curcontext%:*}=$service:" | 52 done |
97 fi | 53 |
98 | 54 if [[ -z "$cmd" ]] |
99 case $service in | 55 then |
100 (add) | 56 _arguments -s -w : $_hg_global_opts \ |
101 newFiles=(${(ps:\0:)"$(_hg_cmd status -0un .)"}) | 57 ':mercurial command:_hg_commands' |
102 _arguments $includeExclude \ | 58 return |
103 '*:file:->unknown' | 59 fi |
104 _wanted files expl 'unknown files' compadd -a newFiles | 60 |
105 ;; | 61 # resolve abbreviations and aliases |
106 | 62 if ! (( $+functions[_hg_cmd_${cmd}] )) |
107 (addremove) | 63 then |
108 _arguments $includeExclude \ | 64 local cmdexp |
109 '*:directories:_files -/' # assume they want to add/remove a dir | 65 (( $#_hg_cmd_list )) || _hg_get_commands |
110 ;; | 66 |
111 | 67 cmdexp=$_hg_cmd_list[(r)${cmd}*] |
112 (forget) | 68 if [[ $cmdexp == $_hg_cmd_list[(R)${cmd}*] ]] |
113 addedFiles=(${(ps:\0:)"$(_hg_cmd status -0an .)"}) | 69 then |
114 _arguments $includeExclude \ | 70 # might be nice to rewrite the command line with the expansion |
115 '*:file:->added' | 71 cmd="$cmdexp" |
116 _wanted files expl 'newly added files' compadd -a addedFiles | 72 fi |
117 ;; | 73 if [[ -n $_hg_alias_list[$cmd] ]] |
118 | 74 then |
119 (remove|rm) | 75 cmd=$_hg_alias_list[$cmd] |
120 _arguments $includeExclude \ | 76 fi |
121 '*:file:_files' | 77 fi |
122 ;; | 78 |
123 | 79 if (( $+functions[_hg_cmd_${cmd}] )) |
124 (copy|cp) | 80 then |
125 _arguments $includeExclude \ | 81 curcontext="${curcontext%:*:*}:hg-${cmd}:" |
126 '(--after)-A[record a copy that has already occurred]' \ | 82 _hg_cmd_${cmd} |
127 '(-A)--after[record a copy that has already occurred]' \ | 83 return |
128 '(--force)-f[forcibly copy over an existing managed file]' \ | 84 fi |
129 '(-f)--force[forcibly copy over an existing managed file]' \ | 85 } |
130 '(--parents)-p[append source path to dest]' \ | 86 |
131 '(-p)--parents[append source path to dest]' \ | 87 _hg_get_commands() { |
132 '*:files:_files' | 88 typeset -ga _hg_cmd_list |
133 ;; | 89 typeset -gA _hg_alias_list |
134 | 90 local hline cmd cmdalias |
135 (rename|mv) | 91 _call_program help hg --verbose help | while read -A hline |
136 if (( CURRENT == 2 )); then | 92 do |
137 _arguments $includeExclude \ | 93 cmd="$hline[1]" |
138 '(--after)-A[record a rename that has already occurred]' \ | 94 case $cmd in |
139 '(-A)--after[record a rename that has already occurred]' \ | 95 *:) |
140 '(--force)-f[replace destination if it exists]' \ | 96 cmd=${cmd%:} |
141 '(-F)--force[replace destination if it exists]' \ | 97 _hg_cmd_list+=($cmd) |
142 '(--parents)-p[append source path to dest]' \ | 98 ;; |
143 '(-p)--parents[append source path to dest]' \ | 99 *,) |
144 '*:files:_files' | 100 cmd=${cmd%,} |
145 else | 101 _hg_cmd_list+=($cmd) |
146 _arguments '*:destination:_files' | 102 integer i=2 |
147 fi | 103 while (( i <= $#hline )) |
148 ;; | 104 do |
149 | 105 cmdalias=${hline[$i]%(:|,)} |
150 (diff) | 106 _hg_cmd_list+=($cmdalias) |
151 _arguments $includeExclude \ | 107 _hg_alias_list+=($cmdalias $cmd) |
152 '*-r[revision]:revision:->tags' \ | 108 (( i++ )) |
153 '*--rev[revision]:revision:->tags' \ | 109 done |
154 '(--text)-a[treat all files as text]' \ | 110 ;; |
155 '(-a)--text[treat all files as text]' \ | 111 esac |
156 '*:file:_files' | 112 done |
157 ;; | 113 } |
158 | 114 |
159 (status|st) | 115 _hg_commands() { |
160 _arguments $includeExclude \ | 116 (( $#_hg_cmd_list )) || _hg_get_commands |
161 '(--no-status)-n[hide status prefix]' \ | 117 _describe -t hg-commands 'Mercurial command' _hg_cmd_list |
162 '(-n)--no-status[hide status prefix]' \ | 118 } |
163 '(--print0)-0[end filenames with NUL, for use with xargs]' \ | 119 |
164 '(-0)--print0[end filenames with NUL, for use with xargs]' \ | 120 _hg_tags() { |
165 '(--modified)-m[show only modified files]' \ | 121 typeset -a tags |
166 '(-m)--modified[show only modified files]' \ | 122 local tag rev |
167 '(--added)-a[show only added files]' \ | 123 |
168 '(-a)--added[show only added files]' \ | 124 _hg_cmd tags 2> /dev/null | while read tag rev |
169 '(--removed)-r[show only removed files]' \ | 125 do |
170 '(-r)--removed[show only removed files]' \ | 126 tags+=($tag) |
171 '(--unknown)-u[show only unknown files]' \ | 127 done |
172 '(-u)--unknown[show only unknown files]' \ | 128 (( $#tags )) && _describe -t hg-tags 'tags' tags |
173 '*:search pattern, then files:_files' | 129 } |
174 ;; | 130 |
175 | 131 _hg_status() { |
176 (revert) | 132 status_files=(${(ps:\0:)"$(_hg_cmd status -0n$1 .)"}) |
177 addedFiles=(${(ps:\0:)"$(_hg_cmd status -0amrn .)"}) | 133 } |
178 _arguments \ | 134 |
179 '(--rev)-r[revision to revert to]:revision:->tags' \ | 135 _hg_unknown() { |
180 '(-r)--rev[revision to revert to]:revision:->tags' \ | 136 typeset -a status_files |
181 '(--nonrecursive)-n[do not recurse into subdirectories]' \ | 137 _hg_status u |
182 '(-n)--nonrecursive[do not recurse into subdirectories]' \ | 138 (( $#status_files )) && _describe -t hg-unknown-files 'unknown files' status_files |
183 '*:file:->modified' | 139 } |
184 _wanted files expl 'mofified files' compadd -a addedFiles | 140 |
185 ;; | 141 _hg_missing() { |
186 | 142 typeset -a status_files |
187 (commit|ci) | 143 _hg_status d |
188 addedFiles=(${(ps:\0:)"$(_hg_cmd status -0amrn .)"}) | 144 (( $#status_files )) && _describe -t hg-missing-files 'missing files' status_files |
189 _arguments $includeExclude \ | 145 } |
190 '(--addremove)-A[run addremove during commit]' \ | 146 |
191 '(-A)--addremove[run addremove during commit]' \ | 147 _hg_addremove() { |
192 '(--message)-m[use <txt> as commit message]:string:' \ | 148 _alternative "unknown files:unknown files:_hg_unknown" \ |
193 '(-m)--message[use <txt> as commit message]:string:' \ | 149 "missing files:missing files:_hg_missing" |
194 '(--logfile)-l[read commit message from <file>]:.log file:_file -g \*.txt' \ | 150 } |
195 '(-l)--logfile[read commit message from <file>]:.log file:_file -g \*.txt' \ | 151 |
196 '(--date)-d[record datecode as commit date]:date code:' \ | 152 _hg_paths() { |
197 '(-d)--date[record datecode as commit date]:date code:' \ | 153 typeset -a paths pnames |
198 '(--user)-u[record user as commiter]:user:' \ | 154 _hg_cmd paths 2> /dev/null | while read -A pnames |
199 '(-u)--user[record user as commiter]:user:' \ | 155 do |
200 '*:file:->modified' | 156 paths+=($pnames[1]) |
201 _wanted files expl 'mofified files' compadd -a addedFiles | 157 done |
202 ;; | 158 (( $#paths )) && _describe -t hg-paths 'repository aliases' paths |
203 | 159 } |
204 (cat) | 160 |
205 _arguments $includeExclude \ | 161 _hg_remote() { |
206 '(--output)-o[print output to file with formatted name]:filespec:' \ | 162 _alternative 'repository aliases:repository aliases:_hg_paths' \ |
207 '(-o)--output[print output to file with formatted name]:filespec:' \ | 163 'directory:directory:_files -/' |
208 '(--rev)-r[revision]:revision:->tags' \ | 164 } |
209 '(-r)--rev[revision]:revision:->tags' \ | 165 |
210 '*:file:_files' | 166 _hg_qseries() { |
211 ;; | 167 typeset -a patches |
212 | 168 patches=($(_hg_cmd qseries)) |
213 (annotate) | 169 (( $#patches )) && _describe -t hg-patches 'patches' patches |
214 _arguments $includeExclude \ | 170 } |
215 '(--rev)-r[annotate the specified revision]:revision:->tags' \ | 171 |
216 '(-r)--rev[annotate the specified revision]:revision:->tags' \ | 172 _hg_qapplied() { |
217 '(--text)-a[treat all files as text]' \ | 173 typeset -a patches |
218 '(-a)--text[treat all files as text]' \ | 174 patches=($(_hg_cmd qapplied)) |
219 '(--user)-u[list the author]' \ | 175 (( $#patches )) && _describe -t hg-applied-patches 'applied patches' patches |
220 '(-u)--user[list the author]' \ | 176 } |
221 '(--changeset)-c[list the changeset]' \ | 177 |
222 '(-c)--changeset[list the changeset]' \ | 178 _hg_qunapplied() { |
223 '(--number)-n[list the revision number (default)]' \ | 179 typeset -a patches |
224 '(-n)--number[list the revision number (default)]' \ | 180 patches=($(_hg_cmd qunapplied)) |
225 '*:files:_files' | 181 (( $#patches )) && _describe -t hg-unapplied-patches 'unapplied patches' patches |
226 ;; | 182 } |
227 | 183 |
228 (grep) | 184 # Common options |
229 _arguments $includeExclude \ | 185 _hg_global_opts=( |
230 '*-r[search in given revision range]:revision:->tags' \ | 186 '(--repository)-R+[repository root directory]:repository:_files -/' |
231 '*--rev[search in given revision range]:revision:->tags' \ | 187 '(-R)--repository[repository root directory]:repository:_files -/' |
232 '--all[print all revisions with matches]' \ | 188 '--cwd[change working directory]:new working directory:_files -/' |
233 '(-print0)-0[end filenames with NUL, for use with xargs]' \ | 189 '(--noninteractive)-y[do not prompt, assume yes for any required answers]' |
234 '(-0)--print0[end filenames with NUL, for use with xargs]' \ | 190 '(-y)--noninteractive[do not prompt, assume yes for any required answers]' |
235 '(--ignore-case)-i[ignore case when matching]' \ | 191 '(--verbose)-v[enable additional output]' |
236 '(-i)--ignore-case[ignore case when matching]' \ | 192 '(-v)--verbose[enable additional output]' |
237 '(--files-with-matches)-l[print names of files and revs that match]' \ | 193 '(--quiet)-q[suppress output]' |
238 '(-l)--files-with-matches[print names of files and revs that match]' \ | 194 '(-q)--quiet[suppress output]' |
239 '(--line-number)-n[print matching line numbers]' \ | 195 '(--help)-h[display help and exit]' |
240 '(-n)--line-number[print matching line numbers]' \ | 196 '(-h)--help[display help and exit]' |
241 '(--user)-u[print user who committed change]' \ | 197 '--debug[debug mode]' |
242 '(-u)--user[print user who committed change]' \ | 198 '--debugger[start debugger]' |
243 '*:search pattern:' | 199 '--traceback[print traceback on exception]' |
244 ;; | 200 '--time[time how long the command takes]' |
245 | 201 '--profile[profile]' |
246 (locate) | 202 '--version[output version information and exit]' |
247 _arguments $includeExclude \ | 203 ) |
248 '(--rev)-r[search repository as it stood at revision]:revision:->tags' \ | 204 |
249 '(-r)--rev[search repository as it stood at revision]:revision:->tags' \ | 205 _hg_pat_opts=( |
250 '(--print0)-0[end filenames with NUL, for use with xargs]' \ | 206 '*-I+[include names matching the given patterns]:dir:_files -W $(_hg_cmd root) -/' |
251 '(-0)--print0[end filenames with NUL, for use with xargs]' \ | 207 '*--include[include names matching the given patterns]:dir:_files -W $(_hg_cmd root) -/' |
252 '(--fullpath)-f[print complete paths]' \ | 208 '*-X+[exclude names matching the given patterns]:dir:_files -W $(_hg_cmd root) -/' |
253 '(-f)--fullpath[print complete paths]' \ | 209 '*--exclude[exclude names matching the given patterns]:dir:_files -W $(_hg_cmd root) -/') |
254 '*:search pattern:' | 210 |
255 ;; | 211 _hg_diff_opts=( |
256 | 212 '(--text)-a[treat all files as text]' |
257 (log|history) | 213 '(-a)--text[treat all files as text]' |
258 _arguments $includeExclude $styleOpts \ | 214 '(--git)-g[use git extended diff format]' |
259 '*-r[show the specified revision or range]:revision:->tags' \ | 215 '(-g)--git[use git extended diff format]' |
260 '*--rev[show the specified revision or range]:revision:->tags' \ | 216 "--nodates[don't include dates in diff headers]") |
261 '(--no-merges -M --only-merges)-m[show only merge revisions]' \ | 217 |
262 '(--no-merges -M -m)--only-merges[show only merge revisions]' \ | 218 _hg_dryrun_opts=( |
263 '(--only-merges -m --no-merges)-M[do not show merge revisions]' \ | 219 '(--dry-run)-n[do not perform actions, just print output]' |
264 '(--only-merges -m -M)--no-merges[do not show merge revisions]' \ | 220 '(-n)--dry-run[do not perform actions, just print output]') |
265 '(--keyword)-k[search for a keyword]:keyword:' \ | 221 |
266 '(-k)--keyword[search for a keyword]:keyword:' \ | 222 _hg_style_opts=( |
267 '(--branch)-b[show branches]' \ | 223 '--style[display using template map file]:' |
268 '(-b)--branch[show branches]' \ | 224 '--template[display with template]:') |
269 '(--patch)-p[show patch]' \ | 225 |
270 '(-p)--patch[show patch]' \ | 226 _hg_commit_opts=( |
271 '*:file:_files' | 227 '(-m --message -l --logfile --edit)-e[edit commit message]' |
272 ;; | 228 '(-m --message -l --logfile -e)--edit[edit commit message]' |
273 | 229 '(-e --edit -l --logfile --message)-m+[use <text> as commit message]:message:' |
274 (update|checkout|co) | 230 '(-e --edit -l --logfile -m)--message[use <text> as commit message]:message:' |
275 _arguments \ | 231 '(-e --edit -m --message --logfile)-l+[read the commit message from <file>]:log file:_files' |
276 '(--branch)-b[checkout the head of a specific branch]' \ | 232 '(-e --edit -m --message -l)--logfile[read the commit message from <file>]:log file:_files') |
277 '(-b)--branch[checkout the head of a specific branch]' \ | 233 |
278 '(-C --clean --merge)-m[allow merging of branches]' \ | 234 _hg_remote_opts=( |
279 '(-C --clean -m)--merge[allow merging of branches]' \ | 235 '(--ssh)-e+[specify ssh command to use]:' |
280 '(-m --merge --clean)-C[overwrite locally modified files]' \ | 236 '(-e)--ssh[specify ssh command to use]:' |
281 '(-m --merge -C)--clean[overwrite locally modified files]' \ | 237 '--remotecmd[specify hg command to run on the remote side]:') |
282 '*:revision or tag:->tags' | 238 |
283 ;; | 239 _hg_cmd() { |
284 | 240 _call_program hg hg "$_hg_cmd_globals[@]" "$@" |
285 (tag) | 241 } |
286 _arguments \ | 242 |
287 '(--local)-l[make the tag local]' \ | 243 _hg_cmd_add() { |
288 '(-l)--local[make the tag local]' \ | 244 _arguments -s -w : $_hg_global_opts $_hg_pat_opts $_hg_dryrun_opts \ |
289 '(--message)-m[message for tag commit log entry]:string:' \ | 245 '*:unknown files:_hg_unknown' |
290 '(-m)--message[message for tag commit log entry]:string:' \ | 246 } |
291 '(--date)-d[record datecode as commit date]:date code:' \ | 247 |
292 '(-d)--date[record datecode as commit date]:date code:' \ | 248 _hg_cmd_addremove() { |
293 '(--user)-u[record user as commiter]:user:' \ | 249 _arguments -s -w : $_hg_global_opts $_hg_pat_opts $_hg_dryrun_opts \ |
294 '(-u)--user[record user as commiter]:user:' \ | 250 '(--similarity)-s[guess renamed files by similarity (0<=s<=100)]:' \ |
295 '*:name, then revision:->tags' | 251 '(-s)--similarity[guess renamed files by similarity (0<=s<=100)]:' \ |
296 ;; | 252 '*:unknown or missing files:_hg_addremove' |
297 | 253 } |
298 (clone) | 254 |
299 if (( CURRENT == 2 )); then | 255 _hg_cmd_annotate() { |
300 repos=( $(_hg_cmd paths | sed -e 's/^.*= //') ) | 256 _arguments -s -w : $_hg_global_opts $_hg_pat_opts \ |
301 _arguments \ | 257 '(--rev)-r+[annotate the specified revision]:revision:_hg_tags' \ |
302 '(--no-update)-U[do not update the new working directory]' \ | 258 '(-r)--rev[annotate the specified revision]:revision:_hg_tags' \ |
303 '(-U)--no-update[do not update the new working directory]' \ | 259 '(--follow)-f[follow file copies and renames]' \ |
304 '(--ssh)-e[specify ssh command to use]:string:' \ | 260 '(-f)--follow[follow file copies and renames]' \ |
305 '(-e)--ssh[specify ssh command to use]:string:' \ | 261 '(--text)-a[treat all files as text]' \ |
306 '--pull[use pull protocol to copy metadata]' \ | 262 '(-a)--text[treat all files as text]' \ |
307 '--remotecmd[specify hg command to run on the remote side]:remote hg:' \ | 263 '(--user)-u[list the author]' \ |
308 '*:local repo:_files -/' | 264 '(-u)--user[list the author]' \ |
309 _wanted source expl 'source repository' compadd -a repos | 265 '(--date)-d[list the date]' \ |
310 elif (( CURRENT == 3 )); then | 266 '(-d)--date[list the date]' \ |
311 _arguments '*:dest repo:_files -/' | 267 '(--number)-n[list the revision number (default)]' \ |
312 fi | 268 '(-n)--number[list the revision number (default)]' \ |
313 ;; | 269 '(--changeset)-c[list the changeset]' \ |
314 | 270 '(-c)--changeset[list the changeset]' \ |
315 (rawcommit) | 271 '*:files:_files -W $(_hg_cmd root)' |
316 _arguments \ | 272 } |
317 '(--parent)-p[parent revision]:revision:->tags' \ | 273 |
318 '(-p)--parent[parent revision]:revision:->tags' \ | 274 _hg_cmd_archive() { |
319 '(--date)-d[record datecode as commit date]:date code:' \ | 275 _arguments -s -w : $_hg_global_opts $_hg_pat_opts \ |
320 '(-d)--date[record datecode as commit date]:date code:' \ | 276 '--no-decode[do not pass files through decoders]' \ |
321 '(--user)-u[record user as commiter]:user:' \ | 277 '(--prefix)-p+[directory prefix for files in archive]:' \ |
322 '(-u)--user[record user as commiter]:user:' \ | 278 '(-p)--prefix[directory prefix for files in archive]:' \ |
323 '(--message)-m[use <txt> as commit message]:string:' \ | 279 '(--rev)-r+[revision to distribute]:revision:_hg_tags' \ |
324 '(-m)--message[use <txt> as commit message]:string:' \ | 280 '(-r)--rev[revision to distribute]:revision:_hg_tags' \ |
325 '(--logfile)-l[read commit message from <file>]:.log file:_file -g \*.txt' \ | 281 '(--type)-t+[type of distribution to create]:archive type:(files tar tbz2 tgz uzip zip)' \ |
326 '(-l)--logfile[read commit message from <file>]:.log file:_file -g \*.txt' \ | 282 '(-t)--type[type of distribution to create]:archive type:(files tar tbz2 tgz uzip zip)' \ |
327 '(--files)-F[file list]:file list:_files' \ | 283 '*:destination:_files' |
328 '(-F)--files[file list]:file list:_files' \ | 284 } |
329 '*:files to commit:_files' | 285 |
330 ;; | 286 _hg_cmd_bundle() { |
331 | 287 _arguments -s -w : $_hg_global_opts $_hg_remote_opts \ |
332 (bundle) | 288 '(--force)-f[run even when remote repository is unrelated]' \ |
333 if (( CURRENT == 2 )); then | 289 '(-f)--force[run even when remote repository is unrelated]' \ |
334 _arguments '*:changegroup file:_files -g \*.hg' | 290 '(2)*--base[a base changeset to specify instead of a destination]:revision:_hg_tags' \ |
335 elif (( CURRENT == 3 )); then | 291 ':output file:_files' \ |
336 _arguments '*:other repo:_files -/' | 292 ':destination repository:_files -/' |
337 fi | 293 } |
338 ;; | 294 |
339 | 295 _hg_cmd_cat() { |
340 (unbundle) | 296 _arguments -s -w : $_hg_global_opts $_hg_pat_opts \ |
341 _arguments '*:changegroup .hg file:_files -g \*.hg' | 297 '(--output)-o+[print output to file with formatted name]:filespec:' \ |
342 ;; | 298 '(-o)--output[print output to file with formatted name]:filespec:' \ |
343 | 299 '(--rev)-r+[revision]:revision:_hg_tags' \ |
344 (incoming) | 300 '(-r)--rev[revision]:revision:_hg_tags' \ |
345 _arguments $styleOpts \ | 301 '*:file:_files -W $(_hg_cmd root)' |
346 '(--patch)-p[show patch]' \ | 302 } |
347 '(-p)--patch[show patch]' \ | 303 |
348 '(--no-merges)-M[do not show merge revisions]' \ | 304 _hg_cmd_clone() { |
349 '(-M)--no-merges[do not show merge revisions]' \ | 305 _arguments -s -w : $_hg_global_opts $_hg_remote_opts \ |
350 '(--newest-first)-n[show newest record first]' \ | 306 '(--noupdate)-U[do not update the new working directory]' \ |
351 '(-n)--newest-first[show newest record first]' \ | 307 '(-U)--noupdate[do not update the new working directory]' \ |
352 '*:mercurial repository:_files -/' | 308 '(--rev)-r+[a changeset you would like to have after cloning]:' \ |
353 ;; | 309 '(-r)--rev[a changeset you would like to have after cloning]:' \ |
354 | 310 '--uncompressed[use uncompressed transfer (fast over LAN)]' \ |
355 (import|patch) | 311 ':source repository:_hg_remote' \ |
356 _arguments \ | 312 ':destination:_files -/' |
357 '(--strip)-p[directory strip option for patch (default: 1)]:count:' \ | 313 } |
358 '(-p)--strip[directory strip option for patch (default: 1)]:count:' \ | 314 |
359 '(--force)-f[skip check for outstanding uncommitted changes]' \ | 315 _hg_cmd_commit() { |
360 '(-f)--force[skip check for outstanding uncommitted changes]' \ | 316 _arguments -s -w : $_hg_global_opts $_hg_pat_opts \ |
361 '(--base)-b[base directory to read patches from]:file:_files -W $(_hg_cmd root) -/' \ | 317 '(--addremove)-A[mark new/missing files as added/removed before committing]' |
362 '(-b)--base[base directory to read patches from]:file:_files -W $(_hg_cmd root) -/' \ | 318 '(-A)--addremove[mark new/missing files as added/removed before committing]' |
363 '*:patch file:_files' | 319 '(--message)-m+[use <text> as commit message]:text:' \ |
364 ;; | 320 '(-m)--message[use <text> as commit message]:text:' \ |
365 | 321 '(--logfile)-l+[read commit message from <file>]:.log file:_file -g \*.txt' \ |
366 (pull) | 322 '(-l)--logfile[read commit message from <file>]:.log file:_file -g \*.txt' \ |
367 repos=( $(_hg_cmd paths | sed -e 's/^.*= //') ) | 323 '(--date)-d+[record datecode as commit date]:date code:' \ |
368 _arguments \ | 324 '(-d)--date[record datecode as commit date]:date code:' \ |
369 '(--update)-u[update working directory to tip after pull]' \ | 325 '(--user)-u+[record user as commiter]:user:' \ |
370 '(-u)--update[update working directory to tip after pull]' \ | 326 '(-u)--user[record user as commiter]:user:' \ |
371 '(--ssh)-e[specify ssh command to use]:ssh command:' \ | 327 '*:file:_files -W $(_hg_cmd root)' |
372 '(-e)--ssh[specify ssh command to use]:ssh command:' \ | 328 } |
373 '--remotecmd[specify hg command to run on the remote side]:remote hg:' \ | 329 |
374 '*:local repo:_files -/' | 330 _hg_cmd_copy() { |
375 _wanted source expl 'source repository' compadd -a repos | 331 _arguments -s -w : $_hg_global_opts $_hg_pat_opts $_hg_dryrun_opts \ |
376 ;; | 332 '(--after)-A[record a copy that has already occurred]' \ |
377 | 333 '(-A)--after[record a copy that has already occurred]' \ |
378 (outgoing) | 334 '(--force)-f[forcibly copy over an existing managed file]' \ |
379 _arguments $styleOpts \ | 335 '(-f)--force[forcibly copy over an existing managed file]' \ |
380 '(--patch)-p[show patch]' \ | 336 '*:file:_files -W $(_hg_cmd root)' |
381 '(-p)--patch[show patch]' \ | 337 } |
382 '(--no-merges)-M[do not show merge revisions]' \ | 338 |
383 '(-M)--no-merges[do not show merge revisions]' \ | 339 _hg_cmd_diff() { |
384 '(--newest-first)-n[show newest record first]' \ | 340 _arguments -s -w : $_hg_global_opts $_hg_pat_opts $_hg_diff_opts \ |
385 '(-n)--newest-first[show newest record first]' \ | 341 '*'{-r,--rev}'+[revision]:revision:_hg_tags ' \ |
386 '*:local repo:_files -/' | 342 '(--show-function)-p[show which function each change is in]' \ |
387 _wanted source expl 'source repository' compadd -a repos | 343 '(-p)--show-function[show which function each change is in]' \ |
388 ;; | 344 '(--ignore-all-space)-w[ignore white space when comparing lines]' \ |
389 | 345 '(-w)--ignore-all-space[ignore white space when comparing lines]' \ |
390 (export) | 346 '(--ignore-space-change)-b[ignore changes in the amount of white space]' \ |
391 _arguments \ | 347 '(-b)--ignore-space-change[ignore changes in the amount of white space]' \ |
392 '(--outout)-o[print output to file with formatted name]:filespec:' \ | 348 '(--ignore-blank-lines)-B[ignore changes whose lines are all blank]' \ |
393 '(-o)--output[print output to file with formatted name]:filespec:' \ | 349 '(-B)--ignore-blank-lines[ignore changes whose lines are all blank]' \ |
394 '(--text)-a[treat all files as text]' \ | 350 '*:file:_files -W $(_hg_cmd root)' |
395 '(-a)--text[treat all files as text]' \ | 351 } |
396 '*:revision:->revs' | 352 |
397 _wanted revs expl 'revision or tag' compadd -a tags | 353 _hg_cmd_export() { |
398 ;; | 354 _arguments -s -w : $_hg_global_opts $_hg_diff_opts \ |
399 | 355 '(--outout)-o+[print output to file with formatted name]:filespec:' \ |
400 (push) | 356 '(-o)--output[print output to file with formatted name]:filespec:' \ |
401 repos=( $(_hg_cmd paths | sed -e 's/^.*= //') ) | 357 '--switch-parent[diff against the second parent]' \ |
402 _arguments \ | 358 '*:revision:_hg_tags' |
403 '(--force)-f[force push]' \ | 359 } |
404 '(-f)--force[force push]' \ | 360 |
405 '(--ssh)-e[specify ssh command to use]:ssh command:' \ | 361 _hg_cmd_grep() { |
406 '(-e)--ssh[specify ssh command to use]:ssh command:' \ | 362 _arguments -s -w : $_hg_global_opts $_hg_pat_opts \ |
407 '--remotecmd[specify hg command to run on the remote side]:remote hg:' \ | 363 '(-print0)-0[end filenames with NUL]' \ |
408 '*:local repo:_files -/' | 364 '(-0)--print0[end filenames with NUL]' \ |
409 _wanted source expl 'source repository' compadd -a repos | 365 '--all[print all revisions with matches]' \ |
410 ;; | 366 '(--follow)-f[follow changeset or file history]' \ |
411 | 367 '(-f)--follow[follow changeset or file history]' \ |
412 (serve) | 368 '(--ignore-case)-i[ignore case when matching]' \ |
413 _arguments \ | 369 '(-i)--ignore-case[ignore case when matching]' \ |
414 '(--accesslog)-A[name of access log file]:log file:_files' \ | 370 '(--files-with-matches)-l[print only filenames and revs that match]' \ |
415 '(-A)--accesslog[name of access log file]:log file:_files' \ | 371 '(-l)--files-with-matches[print only filenames and revs that match]' \ |
416 '(--errorlog)-E[name of error log file]:log file:_files' \ | 372 '(--line-number)-n[print matching line numbers]' \ |
417 '(-E)--errorlog[name of error log file]:log file:_files' \ | 373 '(-n)--line-number[print matching line numbers]' \ |
418 '(--port)-p[listen port]:listen port:' \ | 374 '*-r+[search in given revision range]:revision:_hg_tags' \ |
419 '(-p)--port[listen port]:listen port:' \ | 375 '*--rev[search in given revision range]:revision:_hg_tags' \ |
420 '(--address)-a[interface address]:interface address:' \ | 376 '(--user)-u[print user who committed change]' \ |
421 '(-a)--address[interface address]:interface address:' \ | 377 '(-u)--user[print user who committed change]' \ |
422 '(--name)-n[name to show in web pages]:repository name:' \ | 378 '*:search pattern:_files -W $(_hg_cmd root)' |
423 '(-n)--name[name to show in web pages]:repository name:' \ | 379 } |
424 '(--templates)-t[web template directory]:template dir:_files -/' \ | 380 |
425 '(-t)--templates[web template directory]:template dir:_files -/' \ | 381 _hg_cmd_heads() { |
426 '--style[web template style]:style' \ | 382 _arguments -s -w : $_hg_global_opts $_hg_style_opts \ |
427 '--stdio[for remote clients]' \ | 383 '(--rev)-r+[show only heads which are descendants of rev]:revision:_hg_tags' \ |
428 '(--ipv6)-6[use IPv6 in addition to IPv4]' \ | 384 '(-r)--rev[show only heads which are descendants of rev]:revision:_hg_tags' |
429 '(-6)--ipv6[use IPv6 in addition to IPv4]' | 385 } |
430 ;; | 386 |
431 | 387 _hg_cmd_help() { |
432 (help) | 388 _arguments -s -w : $_hg_global_opts \ |
433 _wanted commands expl 'hg command' compadd -a _hg_commands | 389 '*:mercurial command:_hg_commands' |
434 ;; | 390 } |
435 | 391 |
436 (heads) | 392 _hg_cmd_import() { |
437 _arguments $styleOpts \ | 393 _arguments -s -w : $_hg_global_opts \ |
438 '(--branches)-b[find branch info]' \ | 394 '(--strip)-p+[directory strip option for patch (default: 1)]:count:' \ |
439 '(-b)--branches[find branch info]' | 395 '(-p)--strip[directory strip option for patch (default: 1)]:count:' \ |
440 ;; | 396 '(--message)-m+[use <text> as commit message]:text:' \ |
441 | 397 '(-m)--message[use <text> as commit message]:text:' \ |
442 (paths) | 398 '(--force)-f[skip check for outstanding uncommitted changes]' \ |
443 _arguments '*:symbolic name:(default default-push)' | 399 '(-f)--force[skip check for outstanding uncommitted changes]' \ |
444 ;; | 400 '*:patch:_files' |
445 | 401 } |
446 (init) | 402 |
447 _arguments '*:new repo directory:_files -/' | 403 _hg_cmd_incoming() { |
448 ;; | 404 _arguments -s -w : $_hg_global_opts $_hg_remote_opts $_hg_style_opts \ |
449 | 405 '(--no-merges)-M[do not show merge revisions]' \ |
450 (manifest) | 406 '(-M)--no-merges[do not show merge revisions]' \ |
451 _arguments '*:revision:->tags' | 407 '(--force)-f[run even when the remote repository is unrelated]' \ |
452 ;; | 408 '(-f)--force[run even when the remote repository is unrelated]' \ |
453 | 409 '(--patch)-p[show patch]' \ |
454 (par*) | 410 '(-p)--patch[show patch]' \ |
455 _arguments $styleOpts \ | 411 '(--rev)-r+[a specific revision up to which you would like to pull]' \ |
456 '(--rev 1)-r[show parents of the specified rev]:revision:->tags' \ | 412 '(-r)--rev[a specific revision up to which you would like to pull]' \ |
457 '(-r 1)--rev[show parents of the specified rev]:revision:->tags' \ | 413 '(--newest-first)-n[show newest record first]' \ |
458 '::revision:->tags' | 414 '(-n)--newest-first[show newest record first]' \ |
459 ;; | 415 '--bundle[file to store the bundles into]:bundle file:_files' \ |
460 | 416 ':source:_hg_remote' |
461 (identify|recover|root|undo|verify|version|ct|tags) | 417 } |
462 # no arguments for these commands | 418 |
463 ;; | 419 _hg_cmd_init() { |
464 | 420 _arguments -s -w : $_hg_global_opts $_hg_remote_opts \ |
465 # HGK | 421 ':dir:_files -/' |
466 (vi*) | 422 } |
467 _arguments \ | 423 |
468 '(--limit)-l[limit number of changes displayed]:' \ | 424 _hg_cmd_locate() { |
469 '(-l)--limit[limit number of changes displayed]:' \ | 425 _arguments -s -w : $_hg_global_opts $_hg_pat_opts \ |
470 '::revision range:->tags' | 426 '(--rev)-r+[search repository as it stood at revision]:revision:_hg_tags' \ |
471 ;; | 427 '(-r)--rev[search repository as it stood at revision]:revision:_hg_tags' \ |
472 | 428 '(--print0)-0[end filenames with NUL, for use with xargs]' \ |
473 # MQ commands | 429 '(-0)--print0[end filenames with NUL, for use with xargs]' \ |
474 (qdel*|qrm|qrem*) | 430 '(--fullpath)-f[print complete paths]' \ |
475 _arguments \ | 431 '(-f)--fullpath[print complete paths]' \ |
476 {-k,--keep}'[keep patch file]' \ | 432 '*:search pattern:_files -W $(_hg_cmd root)' |
477 {-r,--rev}'[revision]:applied patch:->qapplied' \ | 433 } |
478 '*:unapplied patches:->qunapplied' | 434 |
479 ;; | 435 _hg_cmd_log() { |
480 | 436 _arguments -s -w : $_hg_global_opts $_hg_pat_opts $_hg_style_opts \ |
481 (qnew) | 437 '(--follow --follow-first)-f[follow changeset or history]' \ |
482 _arguments $commitMessage \ | 438 '(-f --follow-first)--follow[follow changeset or history]' \ |
483 {-f,--force}'[import uncommitted changes into patch]' \ | 439 '(-f --follow)--follow-first[only follow the first parent of merge changesets]' \ |
484 ':patch name:' | 440 '(--copies)-C[show copied files]' \ |
485 ;; | 441 '(-C)--copies[show copied files]' \ |
486 | 442 '(--keyword)-k+[search for a keyword]:' \ |
487 (qpo*) | 443 '(-k)--keyword[search for a keyword]:' \ |
488 _arguments \ | 444 '(--limit)-l+[limit number of changes displayed]:' \ |
489 (1){-a,--all}'[pop all patches]' \ | 445 '(-l)--limit[limit number of changes displayed]:' \ |
490 {-f,--force}'[forget any local changes]' \ | 446 '*'{-r,--rev}'[show the specified revision or range]:revision:_hg_tags' \ |
491 ':applied patch:->qapplied' | 447 '(--no-merges)-M[do not show merges]' \ |
492 ;; | 448 '(-M)--no-merges[do not show merges]' \ |
493 | 449 '(--only-merges)-m[show only merges]' \ |
494 (qpu*) | 450 '(-m)--only-merges[show only merges]' \ |
495 _arguments \ | 451 '(--patch)-p[show patch]' \ |
496 (1){-a,--all}'[apply all patches]' \ | 452 '(-p)--patch[show patch]' \ |
497 {-f,--force}'[apply if the patch has rejects]' \ | 453 '(--prune)-P+[do not display revision or any of its ancestors]:revision:_hg_tags' \ |
498 ':unapplied patch:->qunapplied' | 454 '(-P)--prune[do not display revision or any of its ancestors]:revision:_hg_tags' \ |
499 ;; | 455 '*:files:_files -W $(_hg_cmd root)' |
500 (qref*) | 456 } |
501 _arguments $commitMessage $includeExclude \ | 457 |
502 {-g,--git}'[use git extended diff format]' \ | 458 _hg_cmd_manifest() { |
503 {-s,--short}'[short refresh]' | 459 _arguments -s -w : $_hg_global_opts \ |
504 ;; | 460 ':revision:_hg_tags' |
505 | 461 } |
506 (*) | 462 |
507 _message "unknown hg command completion: $service" | 463 _hg_cmd_outgoing() { |
508 ;; | 464 _arguments -s -w : $_hg_global_opts $_hg_remote_opts $_hg_style_opts \ |
509 esac | 465 '(--no-merges)-M[do not show merge revisions]' \ |
510 | 466 '(-M)--no-merges[do not show merge revisions]' \ |
511 _hg_state | 467 '(--force)-f[run even when the remote repository is unrelated]' \ |
468 '(-f)--force[run even when the remote repository is unrelated]' \ | |
469 '(--patch)-p[show patch]' \ | |
470 '(-p)--patch[show patch]' \ | |
471 '(--rev)-r+[a specific revision you would like to push]' \ | |
472 '(-r)--rev[a specific revision you would like to push]' \ | |
473 '(--newest-first)-n[show newest record first]' \ | |
474 '(-n)--newest-first[show newest record first]' \ | |
475 ':destination:_hg_remote' | |
476 } | |
477 | |
478 _hg_cmd_parents() { | |
479 _arguments -s -w : $_hg_global_opts $_hg_style_opts \ | |
480 '(--rev)-r[show parents of the specified rev]:revision:_hg_tags' \ | |
481 '(-r)--rev[show parents of the specified rev]:revision:_hg_tags' \ | |
482 ':revision:_hg_tags' | |
483 } | |
484 | |
485 _hg_cmd_paths() { | |
486 _arguments -s -w : $_hg_global_opts \ | |
487 ':path:_hg_paths' | |
488 } | |
489 | |
490 _hg_cmd_pull() { | |
491 _arguments -s -w : $_hg_global_opts $_hg_remote_opts \ | |
492 '(--force)-f[run even when the remote repository is unrelated]' \ | |
493 '(-f)--force[run even when the remote repository is unrelated]' \ | |
494 '(--update)-u[update to new tip if changesets were pulled]' \ | |
495 '(-u)--update[update to new tip if changesets were pulled]' \ | |
496 ':source:_hg_remote' | |
497 } | |
498 | |
499 _hg_cmd_push() { | |
500 _arguments -s -w : $_hg_global_opts $_hg_remote_opts \ | |
501 '(--force)-f[force push]' \ | |
502 '(-f)--force[force push]' \ | |
503 '(--rev)-r+[a specific revision you would like to push]' \ | |
504 '(-r)--rev[a specific revision you would like to push]' \ | |
505 ':destination:_hg_remote' | |
506 } | |
507 | |
508 _hg_cmd_remove() { | |
509 _arguments -s -w : $_hg_global_opts $_hg_pat_opts \ | |
510 '(--after)-A[record remove that has already occurred]' \ | |
511 '(-A)--after[record remove that has already occurred]' \ | |
512 '(--force)-f[remove file even if modified]' \ | |
513 '(-f)--force[remove file even if modified]' \ | |
514 '*:file:_files -W $(_hg_cmd root)' | |
515 } | |
516 | |
517 _hg_cmd_rename() { | |
518 _arguments -s -w : $_hg_global_opts $_hg_pat_opts $_hg_dryrun_opts \ | |
519 '(--after)-A[record a rename that has already occurred]' \ | |
520 '(-A)--after[record a rename that has already occurred]' \ | |
521 '(--force)-f[forcibly copy over an existing managed file]' \ | |
522 '(-f)--force[forcibly copy over an existing managed file]' \ | |
523 '*:file:_files -W $(_hg_cmd root)' | |
524 } | |
525 | |
526 _hg_cmd_revert() { | |
527 _arguments -s -w : $_hg_global_opts $_hg_pat_opts $_hg_dryrun_opts \ | |
528 '(--all :)-a[revert all changes when no arguments given]' \ | |
529 '(-a :)--all[revert all changes when no arguments given]' \ | |
530 '(--rev)-r+[revision to revert to]:revision:_hg_tags' \ | |
531 '(-r)--rev[revision to revert to]:revision:_hg_tags' \ | |
532 '--no-backup[do not save backup copies of files]' \ | |
533 '*:file:_files -W $(_hg_cmd root)' | |
534 } | |
535 | |
536 _hg_cmd_serve() { | |
537 _arguments -s -w : $_hg_global_opts \ | |
538 '(--accesslog)-A+[name of access log file]:log file:_files' \ | |
539 '(-A)--accesslog[name of access log file]:log file:_files' \ | |
540 '(--errorlog)-E+[name of error log file]:log file:_files' \ | |
541 '(-E)--errorlog[name of error log file]:log file:_files' \ | |
542 '(--daemon)-d[run server in background]' \ | |
543 '(-d)--daemon[run server in background]' \ | |
544 '(--port)-p+[listen port]:listen port:' \ | |
545 '(-p)--port[listen port]:listen port:' \ | |
546 '(--address)-a+[interface address]:interface address:' \ | |
547 '(-a)--address[interface address]:interface address:' \ | |
548 '(--name)-n+[name to show in web pages]:repository name:' \ | |
549 '(-n)--name[name to show in web pages]:repository name:' \ | |
550 '(--templates)-t[web template directory]:template dir:_files -/' \ | |
551 '(-t)--templates[web template directory]:template dir:_files -/' \ | |
552 '--style[web template style]:style' \ | |
553 '--stdio[for remote clients]' \ | |
554 '(--ipv6)-6[use IPv6 in addition to IPv4]' \ | |
555 '(-6)--ipv6[use IPv6 in addition to IPv4]' | |
556 } | |
557 | |
558 _hg_cmd_status() { | |
559 _arguments -s -w : $_hg_global_opts $_hg_pat_opts \ | |
560 '(--all)-A[show status of all files]' \ | |
561 '(-A)--all[show status of all files]' \ | |
562 '(--modified)-m[show only modified files]' \ | |
563 '(-m)--modified[show only modified files]' \ | |
564 '(--added)-a[show only added files]' \ | |
565 '(-a)--added[show only added files]' \ | |
566 '(--removed)-r[show only removed files]' \ | |
567 '(-r)--removed[show only removed files]' \ | |
568 '(--deleted)-d[show only deleted (but tracked) files]' \ | |
569 '(-d)--deleted[show only deleted (but tracked) files]' \ | |
570 '(--clean)-c[show only files without changes]' \ | |
571 '(-c)--clean[show only files without changes]' \ | |
572 '(--unknown)-u[show only unknown files]' \ | |
573 '(-u)--unknown[show only unknown files]' \ | |
574 '(--ignored)-i[show ignored files]' \ | |
575 '(-i)--ignored[show ignored files]' \ | |
576 '(--no-status)-n[hide status prefix]' \ | |
577 '(-n)--no-status[hide status prefix]' \ | |
578 '(--copies)-C[show source of copied files]' \ | |
579 '(-C)--copies[show source of copied files]' \ | |
580 '(--print0)-0[end filenames with NUL, for use with xargs]' \ | |
581 '(-0)--print0[end filenames with NUL, for use with xargs]' \ | |
582 '--rev[show difference from revision]:revision:_hg_tags' \ | |
583 '*:files:_files' | |
584 } | |
585 | |
586 _hg_cmd_tag() { | |
587 _arguments -s -w : $_hg_global_opts \ | |
588 '(--local)-l[make the tag local]' \ | |
589 '(-l)--local[make the tag local]' \ | |
590 '(--message)-m+[message for tag commit log entry]:message:' \ | |
591 '(-m)--message[message for tag commit log entry]:message:' \ | |
592 '(--date)-d+[record datecode as commit date]:date code:' \ | |
593 '(-d)--date[record datecode as commit date]:date code:' \ | |
594 '(--user)-u+[record user as commiter]:user:' \ | |
595 '(-u)--user[record user as commiter]:user:' \ | |
596 '(--rev)-r+[revision to tag]:revision:_hg_tags' \ | |
597 '(-r)--rev[revision to tag]:revision:_hg_tags' \ | |
598 ':tag name:' | |
599 } | |
600 | |
601 _hg_cmd_tip() { | |
602 _arguments -s -w : $_hg_global_opts $_hg_style_opts \ | |
603 '(--patch)-p[show patch]' \ | |
604 '(-p)--patch[show patch]' | |
605 } | |
606 | |
607 _hg_cmd_unbundle() { | |
608 _arguments -s -w : $_hg_global_opts \ | |
609 '(--update)-u[update to new tip if changesets were unbundled]' \ | |
610 '(-u)--update[update to new tip if changesets were unbundled]' \ | |
611 ':files:_files' | |
612 } | |
613 | |
614 _hg_cmd_update() { | |
615 _arguments -s -w : $_hg_global_opts \ | |
616 '(--clean)-C[overwrite locally modified files]' \ | |
617 '(-C)--clean[overwrite locally modified files]' \ | |
618 '(--force)-f[force a merge with outstanding changes]' \ | |
619 '(-f)--force[force a merge with outstanding changes]' \ | |
620 ':revision:_hg_tags' | |
621 } | |
622 | |
623 # HGK | |
624 _hg_cmd_view() { | |
625 _arguments -s -w : $_hg_global_opts \ | |
626 '(--limit)-l+[limit number of changes displayed]:' \ | |
627 '(-l)--limit[limit number of changes displayed]:' \ | |
628 ':revision range:_hg_tags' | |
629 } | |
630 | |
631 # MQ | |
632 _hg_cmd_qdelete() { | |
633 _arguments -s -w : $_hg_global_opts \ | |
634 '(--keep)-k[keep patch file]' \ | |
635 '(-k)--keep[keep patch file]' \ | |
636 '*-r+[stop managing a revision]:applied patch:_hg_qapplied' \ | |
637 '*--revision[stop managing a revision]:applied patch:_hg_qapplied' \ | |
638 '*:patch:_hg_qunapplied' | |
639 } | |
640 | |
641 _hg_cmd_qheader() { | |
642 _arguments -s -w : $_hg_global_opts \ | |
643 ':patch:_hg_qseries' | |
644 } | |
645 | |
646 _hg_cmd_qnew() { | |
647 _arguments -s -w : $_hg_global_opts $_hg_commit_opts \ | |
648 '(--force)-f[import uncommitted changes into patch]' \ | |
649 '(-f)--force[import uncommitted changes into patch]' \ | |
650 ':patch:' | |
651 } | |
652 | |
653 _hg_cmd_qpop() { | |
654 _arguments -s -w : $_hg_global_opts \ | |
655 '(--all :)-a[pop all patches]' \ | |
656 '(-a :)--all[pop all patches]' \ | |
657 '(--name)-n+[queue name to pop]:' \ | |
658 '(-n)--name[queue name to pop]:' \ | |
659 '(--force)-f[forget any local changes]' \ | |
660 '(-f)--force[forget any local changes]' \ | |
661 ':patch:_hg_qapplied' | |
662 } | |
663 | |
664 _hg_cmd_qpush() { | |
665 _arguments -s -w : $_hg_global_opts \ | |
666 '(--all :)-a[apply all patches]' \ | |
667 '(-a :)--all[apply all patches]' \ | |
668 '(--list)-l[list patch name in commit text]' \ | |
669 '(-l)--list[list patch name in commit text]' \ | |
670 '(--merge)-m+[merge from another queue]:' \ | |
671 '(-m)--merge[merge from another queue]:' \ | |
672 '(--name)-n+[merge queue name]:' \ | |
673 '(-n)--name[merge queue name]:' \ | |
674 '(--force)-f[apply if the patch has rejects]' \ | |
675 '(-f)--force[apply if the patch has rejects]' \ | |
676 ':patch:_hg_qunapplied' | |
677 } | |
678 | |
679 _hg_cmd_qrefresh() { | |
680 _arguments -s -w : $_hg_global_opts $_hg_pat_opts $_hg_commit_opts \ | |
681 '(--git)-g[use git extended diff format]' \ | |
682 '(-g)--git[use git extended diff format]' \ | |
683 '(--short)-s[short refresh]' \ | |
684 '(-s)--short[short refresh]' \ | |
685 '*:files:_files -W $(_hg_cmd root)' | |
686 } | |
687 | |
688 _hg_cmd_strip() { | |
689 _arguments -s -w : $_hg_global_opts \ | |
690 '(--force)-f[force multi-head removal]' \ | |
691 '(-f)--force[force multi-head removal]' \ | |
692 '(--backup)-b[bundle unrelated changesets]' \ | |
693 '(-b)--backup[bundle unrelated changesets]' \ | |
694 '(--nobackup)-n[no backups]' \ | |
695 '(-n)--nobackup[no backups]' \ | |
696 ':revision:_hg_tags' | |
697 } | |
698 | |
699 _hg "$@" |