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 "$@"