Mercurial > dotfiles
comparison .zfun/_hg @ 55:846d556d9619
Add a custom _hg (modified off of recent crew) and fix up function path stuff in hg to improve my hg tab completions.
author | Augie Fackler <durin42@gmail.com> |
---|---|
date | Fri, 20 Feb 2009 11:47:12 -0600 |
parents | |
children | 1c75cab141ae |
comparison
equal
deleted
inserted
replaced
54:7755c3adb60d | 55:846d556d9619 |
---|---|
1 #compdef hg | |
2 | |
3 # Zsh completion script for mercurial. Rename this file to _hg and copy | |
4 # it into your zsh function path (/usr/share/zsh/site-functions for | |
5 # instance) | |
6 # | |
7 # Copyright (C) 2005-6 Steve Borho | |
8 # Copyright (C) 2006-8 Brendan Cully <brendan@kublai.com> | |
9 # | |
10 # This is free software; you can redistribute it and/or modify it under | |
11 # the terms of the GNU General Public License as published by the Free | |
12 # Software Foundation; either version 2 of the License, or (at your | |
13 # option) any later version. | |
14 | |
15 emulate -LR zsh | |
16 setopt extendedglob | |
17 | |
18 local curcontext="$curcontext" state line | |
19 typeset -A _hg_cmd_globals | |
20 | |
21 _hg() { | |
22 local cmd _hg_root | |
23 integer i=2 | |
24 _hg_cmd_globals=() | |
25 | |
26 while (( i < $#words )) | |
27 do | |
28 case "$words[$i]" in | |
29 -R|--repository) | |
30 eval _hg_root="$words[$i+1]" | |
31 _hg_cmd_globals+=("$words[$i]" "$_hg_root") | |
32 (( i += 2 )) | |
33 continue | |
34 ;; | |
35 -R*) | |
36 _hg_cmd_globals+="$words[$i]" | |
37 eval _hg_root="${words[$i]#-R}" | |
38 (( i++ )) | |
39 continue | |
40 ;; | |
41 --cwd|--config) | |
42 # pass along arguments to hg completer | |
43 _hg_cmd_globals+=("$words[$i]" "$words[$i+1]") | |
44 (( i += 2 )) | |
45 continue | |
46 ;; | |
47 -*) | |
48 # skip option | |
49 (( i++ )) | |
50 continue | |
51 ;; | |
52 esac | |
53 if [[ -z "$cmd" ]] | |
54 then | |
55 cmd="$words[$i]" | |
56 words[$i]=() | |
57 (( CURRENT-- )) | |
58 fi | |
59 (( i++ )) | |
60 done | |
61 | |
62 if [[ -z "$cmd" ]] | |
63 then | |
64 _arguments -s -w : $_hg_global_opts \ | |
65 ':mercurial command:_hg_commands' | |
66 return | |
67 fi | |
68 | |
69 # resolve abbreviations and aliases | |
70 if ! (( $+functions[_hg_cmd_${cmd}] )) | |
71 then | |
72 local cmdexp | |
73 (( $#_hg_cmd_list )) || _hg_get_commands | |
74 | |
75 cmdexp=$_hg_cmd_list[(r)${cmd}*] | |
76 if [[ $cmdexp == $_hg_cmd_list[(R)${cmd}*] ]] | |
77 then | |
78 # might be nice to rewrite the command line with the expansion | |
79 cmd="$cmdexp" | |
80 fi | |
81 if [[ -n $_hg_alias_list[$cmd] ]] | |
82 then | |
83 cmd=$_hg_alias_list[$cmd] | |
84 fi | |
85 fi | |
86 | |
87 curcontext="${curcontext%:*:*}:hg-${cmd}:" | |
88 | |
89 zstyle -s ":completion:$curcontext:" cache-policy update_policy | |
90 | |
91 if [[ -z "$update_policy" ]] | |
92 then | |
93 zstyle ":completion:$curcontext:" cache-policy _hg_cache_policy | |
94 fi | |
95 | |
96 if (( $+functions[_hg_cmd_${cmd}] )) | |
97 then | |
98 _hg_cmd_${cmd} | |
99 else | |
100 # complete unknown commands normally | |
101 _arguments -s -w : $_hg_global_opts \ | |
102 '*:files:_hg_files' | |
103 fi | |
104 } | |
105 | |
106 _hg_cache_policy() { | |
107 typeset -a old | |
108 | |
109 # cache for a minute | |
110 old=( "$1"(mm+10) ) | |
111 (( $#old )) && return 0 | |
112 | |
113 return 1 | |
114 } | |
115 | |
116 _hg_get_commands() { | |
117 typeset -ga _hg_cmd_list | |
118 typeset -gA _hg_alias_list | |
119 local hline cmd cmdalias | |
120 | |
121 _call_program hg hg debugcomplete -v 2>/dev/null | while read -A hline | |
122 do | |
123 cmd=$hline[1] | |
124 _hg_cmd_list+=($cmd) | |
125 | |
126 for cmdalias in $hline[2,-1] | |
127 do | |
128 _hg_cmd_list+=($cmdalias) | |
129 _hg_alias_list+=($cmdalias $cmd) | |
130 done | |
131 done | |
132 } | |
133 | |
134 _hg_commands() { | |
135 (( $#_hg_cmd_list )) || _hg_get_commands | |
136 _describe -t commands 'mercurial command' _hg_cmd_list | |
137 } | |
138 | |
139 _hg_revrange() { | |
140 compset -P 1 '*:' | |
141 _hg_tags "$@" | |
142 } | |
143 | |
144 _hg_tags() { | |
145 typeset -a tags | |
146 local tag rev | |
147 | |
148 _hg_cmd tags 2> /dev/null | while read tag | |
149 do | |
150 tags+=(${tag/ # [0-9]#:*}) | |
151 done | |
152 (( $#tags )) && _describe -t tags 'tags' tags | |
153 } | |
154 | |
155 _hg_branches() { | |
156 typeset -a branches | |
157 local branch | |
158 | |
159 _hg_cmd branches -a 2> /dev/null | while read branch | |
160 do | |
161 branches+=(${branch/ # [0-9]#:*}) | |
162 done | |
163 (( $#branches )) && _describe -t branches 'branches' branches | |
164 } | |
165 | |
166 _hg_branchtags() { | |
167 typeset -a branchtags | |
168 local branch tag | |
169 | |
170 _hg_cmd tags 2> /dev/null | while read tag | |
171 do | |
172 branchtags+=(${tag/ # [0-9]#:*}) | |
173 done | |
174 | |
175 _hg_cmd branches -a 2> /dev/null | while read branch | |
176 do | |
177 branchtags+=(${branch/ # [0-9]#:*}) | |
178 done | |
179 (( $#branchtags )) && _describe -t branchtags 'branchtags' branchtags | |
180 } | |
181 | |
182 _hg_files() { | |
183 if [[ -n "$_hg_root" ]] | |
184 then | |
185 [[ -d "$_hg_root/.hg" ]] || return | |
186 case "$_hg_root" in | |
187 /*) | |
188 _files -W $_hg_root | |
189 ;; | |
190 *) | |
191 _files -W $PWD/$_hg_root | |
192 ;; | |
193 esac | |
194 else | |
195 _files | |
196 fi | |
197 } | |
198 | |
199 _hg_status() { | |
200 [[ -d $PREFIX ]] || PREFIX=$PREFIX:h | |
201 status_files=(${(ps:\0:)"$(_hg_cmd status -0n$1 ./$PREFIX 2>/dev/null)"}) | |
202 } | |
203 | |
204 _hg_unknown() { | |
205 typeset -a status_files | |
206 _hg_status u | |
207 _wanted files expl 'unknown files' _multi_parts / status_files | |
208 } | |
209 | |
210 _hg_missing() { | |
211 typeset -a status_files | |
212 _hg_status d | |
213 _wanted files expl 'missing files' _multi_parts / status_files | |
214 } | |
215 | |
216 _hg_modified() { | |
217 typeset -a status_files | |
218 _hg_status m | |
219 _wanted files expl 'modified files' _multi_parts / status_files | |
220 } | |
221 | |
222 _hg_resolve() { | |
223 local rstate rpah | |
224 | |
225 [[ -d $PREFIX ]] || PREFIX=$PREFIX:h | |
226 | |
227 _hg_cmd resolve -l ./$PREFIX 2> /dev/null | while read rstate rpath | |
228 do | |
229 [[ $rstate == 'R' ]] && resolved_files+=($rpath) | |
230 [[ $rstate == 'U' ]] && unresolved_files+=($rpath) | |
231 done | |
232 } | |
233 | |
234 _hg_resolved() { | |
235 typeset -a resolved_files unresolved_files | |
236 _hg_resolve | |
237 _wanted files expl 'resolved files' _multi_parts / resolved_files | |
238 } | |
239 | |
240 _hg_unresolved() { | |
241 typeset -a resolved_files unresolved_files | |
242 _hg_resolve | |
243 _wanted files expl 'unresolved files' _multi_parts / unresolved_files | |
244 } | |
245 | |
246 _hg_config() { | |
247 typeset -a items | |
248 items=(${${(%f)"$(_call_program hg hg showconfig)"}%%\=*}) | |
249 (( $#items )) && _describe -t config 'config item' items | |
250 } | |
251 | |
252 _hg_addremove() { | |
253 _alternative 'files:unknown files:_hg_unknown' \ | |
254 'files:missing files:_hg_missing' | |
255 } | |
256 | |
257 _hg_ssh_urls() { | |
258 if [[ -prefix */ ]] | |
259 then | |
260 if zstyle -T ":completion:${curcontext}:files" remote-access | |
261 then | |
262 local host=${PREFIX%%/*} | |
263 typeset -a remdirs | |
264 compset -p $(( $#host + 1 )) | |
265 local rempath=${(M)PREFIX##*/} | |
266 local cacheid="hg:${host}-${rempath//\//_}" | |
267 cacheid=${cacheid%[-_]} | |
268 compset -P '*/' | |
269 if _cache_invalid "$cacheid" || ! _retrieve_cache "$cacheid" | |
270 then | |
271 remdirs=(${${(M)${(f)"$(_call_program files ssh -a -x $host ls -1FL "${(q)rempath}" 2> /dev/null)"}##*/}%/}) | |
272 _store_cache "$cacheid" remdirs | |
273 fi | |
274 _describe -t directories 'remote directory' remdirs -S/ | |
275 else | |
276 _message 'remote directory' | |
277 fi | |
278 else | |
279 if compset -P '*@' | |
280 then | |
281 _hosts -S/ | |
282 else | |
283 _alternative 'hosts:remote host name:_hosts -S/' \ | |
284 'users:user:_users -S@' | |
285 fi | |
286 fi | |
287 } | |
288 | |
289 _hg_urls() { | |
290 if compset -P bundle:// | |
291 then | |
292 _files | |
293 elif compset -P ssh:// | |
294 then | |
295 _hg_ssh_urls | |
296 elif [[ -prefix *: ]] | |
297 then | |
298 _urls | |
299 else | |
300 local expl | |
301 compset -S '[^:]*' | |
302 _wanted url-schemas expl 'URL schema' compadd -S '' - \ | |
303 http:// https:// ssh:// bundle:// | |
304 fi | |
305 } | |
306 | |
307 _hg_paths() { | |
308 typeset -a paths pnames | |
309 _hg_cmd paths 2> /dev/null | while read -A pnames | |
310 do | |
311 paths+=($pnames[1]) | |
312 done | |
313 (( $#paths )) && _describe -t path-aliases 'repository alias' paths | |
314 } | |
315 | |
316 _hg_remote() { | |
317 _alternative 'path-aliases:repository alias:_hg_paths' \ | |
318 'directories:directory:_files -/' \ | |
319 'urls:URL:_hg_urls' | |
320 } | |
321 | |
322 _hg_clone_dest() { | |
323 _alternative 'directories:directory:_files -/' \ | |
324 'urls:URL:_hg_urls' | |
325 } | |
326 | |
327 # Common options | |
328 _hg_global_opts=( | |
329 '(--repository -R)'{-R+,--repository}'[repository root directory]:repository:_files -/' | |
330 '--cwd[change working directory]:new working directory:_files -/' | |
331 '(--noninteractive -y)'{-y,--noninteractive}'[do not prompt, assume yes for any required answers]' | |
332 '(--verbose -v)'{-v,--verbose}'[enable additional output]' | |
333 '*--config[set/override config option]:defined config items:_hg_config' | |
334 '(--quiet -q)'{-q,--quiet}'[suppress output]' | |
335 '(--help -h)'{-h,--help}'[display help and exit]' | |
336 '--debug[debug mode]' | |
337 '--debugger[start debugger]' | |
338 '--encoding[set the charset encoding (default: UTF8)]' | |
339 '--encodingmode[set the charset encoding mode (default: strict)]' | |
340 '--lsprof[print improved command execution profile]' | |
341 '--traceback[print traceback on exception]' | |
342 '--time[time how long the command takes]' | |
343 '--profile[profile]' | |
344 '--version[output version information and exit]' | |
345 ) | |
346 | |
347 _hg_pat_opts=( | |
348 '*'{-I+,--include}'[include names matching the given patterns]:dir:_files -W $(_hg_cmd root) -/' | |
349 '*'{-X+,--exclude}'[exclude names matching the given patterns]:dir:_files -W $(_hg_cmd root) -/') | |
350 | |
351 _hg_diff_opts=( | |
352 '(--text -a)'{-a,--text}'[treat all files as text]' | |
353 '(--git -g)'{-g,--git}'[use git extended diff format]' | |
354 "--nodates[don't include dates in diff headers]") | |
355 | |
356 _hg_dryrun_opts=( | |
357 '(--dry-run -n)'{-n,--dry-run}'[do not perform actions, just print output]') | |
358 | |
359 _hg_style_opts=( | |
360 '--style[display using template map file]:' | |
361 '--template[display with template]:') | |
362 | |
363 _hg_commit_opts=( | |
364 '(-m --message -l --logfile --edit -e)'{-e,--edit}'[edit commit message]' | |
365 '(-e --edit -l --logfile --message -m)'{-m+,--message}'[use <text> as commit message]:message:' | |
366 '(-e --edit -m --message --logfile -l)'{-l+,--logfile}'[read the commit message from <file>]:log file:_files') | |
367 | |
368 _hg_remote_opts=( | |
369 '(--ssh -e)'{-e+,--ssh}'[specify ssh command to use]:' | |
370 '--remotecmd[specify hg command to run on the remote side]:') | |
371 | |
372 _hg_cmd() { | |
373 _call_program hg hg "$_hg_cmd_globals[@]" "$@" | |
374 } | |
375 | |
376 _hg_cmd_add() { | |
377 _arguments -s -w : $_hg_global_opts $_hg_pat_opts $_hg_dryrun_opts \ | |
378 '*:unknown files:_hg_unknown' | |
379 } | |
380 | |
381 _hg_cmd_addremove() { | |
382 _arguments -s -w : $_hg_global_opts $_hg_pat_opts $_hg_dryrun_opts \ | |
383 '(--similarity -s)'{-s+,--similarity}'[guess renamed files by similarity (0<=s<=100)]:' \ | |
384 '*:unknown or missing files:_hg_addremove' | |
385 } | |
386 | |
387 _hg_cmd_annotate() { | |
388 _arguments -s -w : $_hg_global_opts $_hg_pat_opts \ | |
389 '(--rev -r)'{-r+,--rev}'[annotate the specified revision]:revision:_hg_tags' \ | |
390 '(--follow -f)'{-f,--follow}'[follow file copies and renames]' \ | |
391 '(--text -a)'{-a,--text}'[treat all files as text]' \ | |
392 '(--user -u)'{-u,--user}'[list the author]' \ | |
393 '(--date -d)'{-d,--date}'[list the date]' \ | |
394 '(--number -n)'{-n,--number}'[list the revision number (default)]' \ | |
395 '(--changeset -c)'{-c,--changeset}'[list the changeset]' \ | |
396 '*:files:_hg_files' | |
397 } | |
398 | |
399 _hg_cmd_archive() { | |
400 _arguments -s -w : $_hg_global_opts $_hg_pat_opts \ | |
401 '--no-decode[do not pass files through decoders]' \ | |
402 '(--prefix -p)'{-p+,--prefix}'[directory prefix for files in archive]:' \ | |
403 '(--rev -r)'{-r+,--rev}'[revision to distribute]:revision:_hg_tags' \ | |
404 '(--type -t)'{-t+,--type}'[type of distribution to create]:archive type:(files tar tbz2 tgz uzip zip)' \ | |
405 '*:destination:_files' | |
406 } | |
407 | |
408 _hg_cmd_backout() { | |
409 _arguments -s -w : $_hg_global_opts $_hg_pat_opts \ | |
410 '--merge[merge with old dirstate parent after backout]' \ | |
411 '(--date -d)'{-d+,--date}'[record datecode as commit date]:date code:' \ | |
412 '--parent[parent to choose when backing out merge]' \ | |
413 '(--user -u)'{-u+,--user}'[record user as commiter]:user:' \ | |
414 '(--rev -r)'{-r+,--rev}'[revision]:revision:_hg_tags' \ | |
415 '(--message -m)'{-m+,--message}'[use <text> as commit message]:text:' \ | |
416 '(--logfile -l)'{-l+,--logfile}'[read commit message from <file>]:log file:_files -g \*.txt' | |
417 } | |
418 | |
419 _hg_cmd_bundle() { | |
420 _arguments -s -w : $_hg_global_opts $_hg_remote_opts \ | |
421 '(--force -f)'{-f,--force}'[run even when remote repository is unrelated]' \ | |
422 '(2)*--base[a base changeset to specify instead of a destination]:revision:_hg_tags' \ | |
423 ':output file:_files' \ | |
424 ':destination repository:_files -/' | |
425 } | |
426 | |
427 _hg_cmd_cat() { | |
428 _arguments -s -w : $_hg_global_opts $_hg_pat_opts \ | |
429 '(--output -o)'{-o+,--output}'[print output to file with formatted name]:filespec:' \ | |
430 '(--rev -r)'{-r+,--rev}'[revision]:revision:_hg_tags' \ | |
431 '*:file:_hg_files' | |
432 } | |
433 | |
434 _hg_cmd_clone() { | |
435 _arguments -s -w : $_hg_global_opts $_hg_remote_opts \ | |
436 '(--noupdate -U)'{-U,--noupdate}'[do not update the new working directory]' \ | |
437 '(--rev -r)'{-r+,--rev}'[a changeset you would like to have after cloning]:' \ | |
438 '--uncompressed[use uncompressed transfer (fast over LAN)]' \ | |
439 ':source repository:_hg_remote' \ | |
440 ':destination:_hg_clone_dest' | |
441 } | |
442 | |
443 _hg_cmd_commit() { | |
444 _arguments -s -w : $_hg_global_opts $_hg_pat_opts \ | |
445 '(--addremove -A)'{-A,--addremove}'[mark new/missing files as added/removed before committing]' \ | |
446 '(--message -m)'{-m+,--message}'[use <text> as commit message]:text:' \ | |
447 '(--logfile -l)'{-l+,--logfile}'[read commit message from <file>]:log file:_files -g \*.txt' \ | |
448 '(--date -d)'{-d+,--date}'[record datecode as commit date]:date code:' \ | |
449 '(--user -u)'{-u+,--user}'[record user as commiter]:user:' \ | |
450 '*:file:_hg_files' | |
451 } | |
452 | |
453 _hg_cmd_copy() { | |
454 _arguments -s -w : $_hg_global_opts $_hg_pat_opts $_hg_dryrun_opts \ | |
455 '(--after -A)'{-A,--after}'[record a copy that has already occurred]' \ | |
456 '(--force -f)'{-f,--force}'[forcibly copy over an existing managed file]' \ | |
457 '*:file:_hg_files' | |
458 } | |
459 | |
460 _hg_cmd_diff() { | |
461 typeset -A opt_args | |
462 _arguments -s -w : $_hg_global_opts $_hg_pat_opts $_hg_diff_opts \ | |
463 '*'{-r,--rev}'+[revision]:revision:_hg_revrange' \ | |
464 '(--show-function -p)'{-p,--show-function}'[show which function each change is in]' \ | |
465 '(--ignore-all-space -w)'{-w,--ignore-all-space}'[ignore white space when comparing lines]' \ | |
466 '(--ignore-space-change -b)'{-b,--ignore-space-change}'[ignore changes in the amount of white space]' \ | |
467 '(--ignore-blank-lines -B)'{-B,--ignore-blank-lines}'[ignore changes whose lines are all blank]' \ | |
468 '*:file:->diff_files' | |
469 | |
470 if [[ $state == 'diff_files' ]] | |
471 then | |
472 if [[ -n $opt_args[-r] ]] | |
473 then | |
474 _hg_files | |
475 else | |
476 _hg_modified | |
477 fi | |
478 fi | |
479 } | |
480 | |
481 _hg_cmd_export() { | |
482 _arguments -s -w : $_hg_global_opts $_hg_diff_opts \ | |
483 '(--outout -o)'{-o+,--output}'[print output to file with formatted name]:filespec:' \ | |
484 '--switch-parent[diff against the second parent]' \ | |
485 '*:revision:_hg_tags' | |
486 } | |
487 | |
488 _hg_cmd_grep() { | |
489 _arguments -s -w : $_hg_global_opts $_hg_pat_opts \ | |
490 '(--print0 -0)'{-0,--print0}'[end filenames with NUL]' \ | |
491 '--all[print all revisions with matches]' \ | |
492 '(--follow -f)'{-f,--follow}'[follow changeset or file history]' \ | |
493 '(--ignore-case -i)'{-i,--ignore-case}'[ignore case when matching]' \ | |
494 '(--files-with-matches -l)'{-l,--files-with-matches}'[print only filenames and revs that match]' \ | |
495 '(--line-number -n)'{-n,--line-number}'[print matching line numbers]' \ | |
496 '*'{-r+,--rev}'[search in given revision range]:revision:_hg_revrange' \ | |
497 '(--user -u)'{-u,--user}'[print user who committed change]' \ | |
498 '1:search pattern:' \ | |
499 '*:files:_hg_files' | |
500 } | |
501 | |
502 _hg_cmd_heads() { | |
503 _arguments -s -w : $_hg_global_opts $_hg_style_opts \ | |
504 '(--rev -r)'{-r+,--rev}'[show only heads which are descendants of rev]:revision:_hg_tags' | |
505 } | |
506 | |
507 _hg_cmd_help() { | |
508 _arguments -s -w : $_hg_global_opts \ | |
509 '*:mercurial command:_hg_commands' | |
510 } | |
511 | |
512 _hg_cmd_identify() { | |
513 _arguments -s -w : $_hg_global_opts \ | |
514 '(--rev -r)'{-r+,--rev}'[identify the specified rev]:revision:_hg_tags' \ | |
515 '(--num -n)'{-n+,--num}'[show local revision number]' \ | |
516 '(--id -i)'{-i+,--id}'[show global revision id]' \ | |
517 '(--branch -b)'{-b+,--branch}'[show branch]' \ | |
518 '(--tags -t)'{-t+,--tags}'[show tags]' | |
519 } | |
520 | |
521 _hg_cmd_import() { | |
522 _arguments -s -w : $_hg_global_opts \ | |
523 '(--strip -p)'{-p+,--strip}'[directory strip option for patch (default: 1)]:count:' \ | |
524 '(--message -m)'{-m+,--message}'[use <text> as commit message]:text:' \ | |
525 '(--force -f)'{-f,--force}'[skip check for outstanding uncommitted changes]' \ | |
526 '*:patch:_files' | |
527 } | |
528 | |
529 _hg_cmd_incoming() { | |
530 _arguments -s -w : $_hg_global_opts $_hg_remote_opts $_hg_style_opts \ | |
531 '(--no-merges -M)'{-M,--no-merges}'[do not show merge revisions]' \ | |
532 '(--force -f)'{-f,--force}'[run even when the remote repository is unrelated]' \ | |
533 '(--patch -p)'{-p,--patch}'[show patch]' \ | |
534 '(--rev -r)'{-r+,--rev}'[a specific revision up to which you would like to pull]:revision:_hg_tags' \ | |
535 '(--newest-first -n)'{-n,--newest-first}'[show newest record first]' \ | |
536 '--bundle[file to store the bundles into]:bundle file:_files' \ | |
537 ':source:_hg_remote' | |
538 } | |
539 | |
540 _hg_cmd_init() { | |
541 _arguments -s -w : $_hg_global_opts $_hg_remote_opts \ | |
542 ':dir:_files -/' | |
543 } | |
544 | |
545 _hg_cmd_locate() { | |
546 _arguments -s -w : $_hg_global_opts $_hg_pat_opts \ | |
547 '(--rev -r)'{-r+,--rev}'[search repository as it stood at revision]:revision:_hg_tags' \ | |
548 '(--print0 -0)'{-0,--print0}'[end filenames with NUL, for use with xargs]' \ | |
549 '(--fullpath -f)'{-f,--fullpath}'[print complete paths]' \ | |
550 '*:search pattern:_hg_files' | |
551 } | |
552 | |
553 _hg_cmd_log() { | |
554 _arguments -s -w : $_hg_global_opts $_hg_pat_opts $_hg_style_opts \ | |
555 '(--follow --follow-first -f)'{-f,--follow}'[follow changeset or history]' \ | |
556 '(-f --follow)--follow-first[only follow the first parent of merge changesets]' \ | |
557 '(--copies -C)'{-C,--copies}'[show copied files]' \ | |
558 '(--keyword -k)'{-k+,--keyword}'[search for a keyword]:' \ | |
559 '(--limit -l)'{-l+,--limit}'[limit number of changes displayed]:' \ | |
560 '*'{-r,--rev}'[show the specified revision or range]:revision:_hg_revrange' \ | |
561 '(--no-merges -M)'{-M,--no-merges}'[do not show merges]' \ | |
562 '(--only-merges -m)'{-m,--only-merges}'[show only merges]' \ | |
563 '(--patch -p)'{-p,--patch}'[show patch]' \ | |
564 '(--prune -P)'{-P+,--prune}'[do not display revision or any of its ancestors]:revision:_hg_tags' \ | |
565 '*:files:_hg_files' | |
566 } | |
567 | |
568 _hg_cmd_manifest() { | |
569 _arguments -s -w : $_hg_global_opts \ | |
570 ':revision:_hg_tags' | |
571 } | |
572 | |
573 _hg_cmd_outgoing() { | |
574 _arguments -s -w : $_hg_global_opts $_hg_remote_opts $_hg_style_opts \ | |
575 '(--no-merges -M)'{-M,--no-merges}'[do not show merge revisions]' \ | |
576 '(--force -f)'{-f,--force}'[run even when the remote repository is unrelated]' \ | |
577 '(--patch -p)'{-p,--patch}'[show patch]' \ | |
578 '(--rev -r)'{-r+,--rev}'[a specific revision you would like to push]' \ | |
579 '(--newest-first -n)'{-n,--newest-first}'[show newest record first]' \ | |
580 ':destination:_hg_remote' | |
581 } | |
582 | |
583 _hg_cmd_parents() { | |
584 _arguments -s -w : $_hg_global_opts $_hg_style_opts \ | |
585 '(--rev -r)'{-r+,--rev}'[show parents of the specified rev]:revision:_hg_tags' \ | |
586 ':last modified file:_hg_files' | |
587 } | |
588 | |
589 _hg_cmd_paths() { | |
590 _arguments -s -w : $_hg_global_opts \ | |
591 ':path:_hg_paths' | |
592 } | |
593 | |
594 _hg_cmd_pull() { | |
595 _arguments -s -w : $_hg_global_opts $_hg_remote_opts \ | |
596 '(--force -f)'{-f,--force}'[run even when the remote repository is unrelated]' \ | |
597 '(--update -u)'{-u,--update}'[update to new tip if changesets were pulled]' \ | |
598 '(--rev -r)'{-r+,--rev}'[a specific revision up to which you would like to pull]:revision:' \ | |
599 ':source:_hg_remote' | |
600 } | |
601 | |
602 _hg_cmd_push() { | |
603 _arguments -s -w : $_hg_global_opts $_hg_remote_opts \ | |
604 '(--force -f)'{-f,--force}'[force push]' \ | |
605 '(--rev -r)'{-r+,--rev}'[a specific revision you would like to push]:revision:_hg_tags' \ | |
606 ':destination:_hg_remote' | |
607 } | |
608 | |
609 _hg_cmd_remove() { | |
610 _arguments -s -w : $_hg_global_opts $_hg_pat_opts \ | |
611 '(--after -A)'{-A,--after}'[record remove that has already occurred]' \ | |
612 '(--force -f)'{-f,--force}'[remove file even if modified]' \ | |
613 '*:file:_hg_files' | |
614 } | |
615 | |
616 _hg_cmd_rename() { | |
617 _arguments -s -w : $_hg_global_opts $_hg_pat_opts $_hg_dryrun_opts \ | |
618 '(--after -A)'{-A,--after}'[record a rename that has already occurred]' \ | |
619 '(--force -f)'{-f,--force}'[forcibly copy over an existing managed file]' \ | |
620 '*:file:_hg_files' | |
621 } | |
622 | |
623 _hg_cmd_resolve() { | |
624 local context state line | |
625 typeset -A opt_args | |
626 | |
627 _arguments -s -w : $_hg_global_opts \ | |
628 '(--list -l --mark -m --unmark -u)'{-l,--list}'[list state of files needing merge]:*:merged files:->resolve_files' \ | |
629 '(--mark -m --list -l --unmark -u)'{-m,--mark}'[mark files as resolved]:*:unresolved files:_hg_unresolved' \ | |
630 '(--unmark -u --list -l --mark -m)'{-u,--unmark}'[unmark files as resolved]:*:resolved files:_hg_resolved' \ | |
631 '*:file:_hg_unresolved' | |
632 | |
633 if [[ $state == 'resolve_files' ]] | |
634 then | |
635 _alternative 'files:resolved files:_hg_resolved' \ | |
636 'files:unresolved files:_hg_unresolved' | |
637 fi | |
638 } | |
639 | |
640 _hg_cmd_revert() { | |
641 local context state line | |
642 typeset -A opt_args | |
643 | |
644 _arguments -s -w : $_hg_global_opts $_hg_pat_opts $_hg_dryrun_opts \ | |
645 '(--all -a :)'{-a,--all}'[revert all changes when no arguments given]' \ | |
646 '(--rev -r)'{-r+,--rev}'[revision to revert to]:revision:_hg_tags' \ | |
647 '--no-backup[do not save backup copies of files]' \ | |
648 '*:file:->diff_files' | |
649 | |
650 if [[ $state == 'diff_files' ]] | |
651 then | |
652 if [[ -n $opt_args[-r] ]] | |
653 then | |
654 _hg_files | |
655 else | |
656 typeset -a status_files | |
657 _hg_status mard | |
658 _wanted files expl 'modified, added, removed or deleted file' _multi_parts / status_files | |
659 fi | |
660 fi | |
661 } | |
662 | |
663 _hg_cmd_serve() { | |
664 _arguments -s -w : $_hg_global_opts \ | |
665 '(--accesslog -A)'{-A+,--accesslog}'[name of access log file]:log file:_files' \ | |
666 '(--errorlog -E)'{-E+,--errorlog}'[name of error log file]:log file:_files' \ | |
667 '(--daemon -d)'{-d,--daemon}'[run server in background]' \ | |
668 '(--port -p)'{-p+,--port}'[listen port]:listen port:' \ | |
669 '(--address -a)'{-a+,--address}'[interface address]:interface address:' \ | |
670 '(--name -n)'{-n+,--name}'[name to show in web pages]:repository name:' \ | |
671 '(--templates -t)'{-t,--templates}'[web template directory]:template dir:_files -/' \ | |
672 '--style[web template style]:style' \ | |
673 '--stdio[for remote clients]' \ | |
674 '(--ipv6 -6)'{-6,--ipv6}'[use IPv6 in addition to IPv4]' | |
675 } | |
676 | |
677 _hg_cmd_showconfig() { | |
678 _arguments -s -w : $_hg_global_opts \ | |
679 '(--untrusted -u)'{-u+,--untrusted}'[show untrusted configuration options]' \ | |
680 ':config item:_hg_config' | |
681 } | |
682 | |
683 _hg_cmd_status() { | |
684 _arguments -s -w : $_hg_global_opts $_hg_pat_opts \ | |
685 '(--all -A)'{-A,--all}'[show status of all files]' \ | |
686 '(--modified -m)'{-m,--modified}'[show only modified files]' \ | |
687 '(--added -a)'{-a,--added}'[show only added files]' \ | |
688 '(--removed -r)'{-r,--removed}'[show only removed files]' \ | |
689 '(--deleted -d)'{-d,--deleted}'[show only deleted (but tracked) files]' \ | |
690 '(--clean -c)'{-c,--clean}'[show only files without changes]' \ | |
691 '(--unknown -u)'{-u,--unknown}'[show only unknown files]' \ | |
692 '(--ignored -i)'{-i,--ignored}'[show ignored files]' \ | |
693 '(--no-status -n)'{-n,--no-status}'[hide status prefix]' \ | |
694 '(--copies -C)'{-C,--copies}'[show source of copied files]' \ | |
695 '(--print0 -0)'{-0,--print0}'[end filenames with NUL, for use with xargs]' \ | |
696 '--rev[show difference from revision]:revision:_hg_tags' \ | |
697 '*:files:_files' | |
698 } | |
699 | |
700 _hg_cmd_tag() { | |
701 _arguments -s -w : $_hg_global_opts \ | |
702 '(--local -l)'{-l,--local}'[make the tag local]' \ | |
703 '(--message -m)'{-m+,--message}'[message for tag commit log entry]:message:' \ | |
704 '(--date -d)'{-d+,--date}'[record datecode as commit date]:date code:' \ | |
705 '(--user -u)'{-u+,--user}'[record user as commiter]:user:' \ | |
706 '(--rev -r)'{-r+,--rev}'[revision to tag]:revision:_hg_tags' \ | |
707 ':tag name:' | |
708 } | |
709 | |
710 _hg_cmd_tip() { | |
711 _arguments -s -w : $_hg_global_opts $_hg_style_opts \ | |
712 '(--patch -p)'{-p,--patch}'[show patch]' | |
713 } | |
714 | |
715 _hg_cmd_unbundle() { | |
716 _arguments -s -w : $_hg_global_opts \ | |
717 '(--update -u)'{-u,--update}'[update to new tip if changesets were unbundled]' \ | |
718 ':files:_files' | |
719 } | |
720 | |
721 _hg_cmd_update() { | |
722 _arguments -s -w : $_hg_global_opts \ | |
723 '(--clean -C)'{-C,--clean}'[overwrite locally modified files]' \ | |
724 '(--rev -r)'{-r+,--rev}'[revision]:revision:_hg_branchtags' \ | |
725 ':revision:_hg_branchtags' | |
726 } | |
727 | |
728 # bisect extension | |
729 _hg_cmd_bisect() { | |
730 _arguments -s -w : $_hg_global_opts ':evaluation:(help init reset next good bad)' | |
731 } | |
732 | |
733 # HGK | |
734 _hg_cmd_view() { | |
735 _arguments -s -w : $_hg_global_opts \ | |
736 '(--limit -l)'{-l+,--limit}'[limit number of changes displayed]:' \ | |
737 ':revision range:_hg_tags' | |
738 } | |
739 | |
740 # MQ | |
741 _hg_qseries() { | |
742 typeset -a patches | |
743 patches=(${(f)"$(_hg_cmd qseries 2>/dev/null)"}) | |
744 (( $#patches )) && _describe -t hg-patches 'patches' patches | |
745 } | |
746 | |
747 _hg_qapplied() { | |
748 typeset -a patches | |
749 patches=(${(f)"$(_hg_cmd qapplied 2>/dev/null)"}) | |
750 if (( $#patches )) | |
751 then | |
752 patches+=(qbase qtip) | |
753 _describe -t hg-applied-patches 'applied patches' patches | |
754 fi | |
755 } | |
756 | |
757 _hg_qunapplied() { | |
758 typeset -a patches | |
759 patches=(${(f)"$(_hg_cmd qunapplied 2>/dev/null)"}) | |
760 (( $#patches )) && _describe -t hg-unapplied-patches 'unapplied patches' patches | |
761 } | |
762 | |
763 _hg_qguards() { | |
764 typeset -a guards | |
765 local guard | |
766 compset -P "+|-" | |
767 _hg_cmd qselect -s 2>/dev/null | while read guard | |
768 do | |
769 guards+=(${guard#(+|-)}) | |
770 done | |
771 (( $#guards )) && _describe -t hg-guards 'guards' guards | |
772 } | |
773 | |
774 _hg_qseries_opts=( | |
775 '(--summary -s)'{-s,--summary}'[print first line of patch header]') | |
776 | |
777 _hg_cmd_qapplied() { | |
778 _arguments -s -w : $_hg_global_opts $_hg_qseries_opts | |
779 } | |
780 | |
781 _hg_cmd_qdelete() { | |
782 _arguments -s -w : $_hg_global_opts \ | |
783 '(--keep -k)'{-k,--keep}'[keep patch file]' \ | |
784 '*'{-r+,--rev}'[stop managing a revision]:applied patch:_hg_revrange' \ | |
785 '*:unapplied patch:_hg_qunapplied' | |
786 } | |
787 | |
788 _hg_cmd_qdiff() { | |
789 _arguments -s -w : $_hg_global_opts $_hg_pat_opts \ | |
790 '*:pattern:_hg_files' | |
791 } | |
792 | |
793 _hg_cmd_qfold() { | |
794 _arguments -s -w : $_hg_global_opts $_h_commit_opts \ | |
795 '(--keep,-k)'{-k,--keep}'[keep folded patch files]' \ | |
796 '*:unapplied patch:_hg_qunapplied' | |
797 } | |
798 | |
799 _hg_cmd_qgoto() { | |
800 _arguments -s -w : $_hg_global_opts \ | |
801 '(--force -f)'{-f,--force}'[overwrite any local changes]' \ | |
802 ':patch:_hg_qseries' | |
803 } | |
804 | |
805 _hg_cmd_qguard() { | |
806 _arguments -s -w : $_hg_global_opts \ | |
807 '(--list -l)'{-l,--list}'[list all patches and guards]' \ | |
808 '(--none -n)'{-n,--none}'[drop all guards]' \ | |
809 ':patch:_hg_qseries' \ | |
810 '*:guards:_hg_qguards' | |
811 } | |
812 | |
813 _hg_cmd_qheader() { | |
814 _arguments -s -w : $_hg_global_opts \ | |
815 ':patch:_hg_qseries' | |
816 } | |
817 | |
818 _hg_cmd_qimport() { | |
819 _arguments -s -w : $_hg_global_opts \ | |
820 '(--existing -e)'{-e,--existing}'[import file in patch dir]' \ | |
821 '(--name -n 2)'{-n+,--name}'[patch file name]:name:' \ | |
822 '(--force -f)'{-f,--force}'[overwrite existing files]' \ | |
823 '*'{-r+,--rev}'[place existing revisions under mq control]:revision:_hg_revrange' \ | |
824 '*:patch:_files' | |
825 } | |
826 | |
827 _hg_cmd_qnew() { | |
828 _arguments -s -w : $_hg_global_opts $_hg_commit_opts \ | |
829 '(--force -f)'{-f,--force}'[import uncommitted changes into patch]' \ | |
830 ':patch:' | |
831 } | |
832 | |
833 _hg_cmd_qnext() { | |
834 _arguments -s -w : $_hg_global_opts $_hg_qseries_opts | |
835 } | |
836 | |
837 _hg_cmd_qpop() { | |
838 _arguments -s -w : $_hg_global_opts \ | |
839 '(--all -a :)'{-a,--all}'[pop all patches]' \ | |
840 '(--name -n)'{-n+,--name}'[queue name to pop]:' \ | |
841 '(--force -f)'{-f,--force}'[forget any local changes]' \ | |
842 ':patch:_hg_qapplied' | |
843 } | |
844 | |
845 _hg_cmd_qprev() { | |
846 _arguments -s -w : $_hg_global_opts $_hg_qseries_opts | |
847 } | |
848 | |
849 _hg_cmd_qpush() { | |
850 _arguments -s -w : $_hg_global_opts \ | |
851 '(--all -a :)'{-a,--all}'[apply all patches]' \ | |
852 '(--list -l)'{-l,--list}'[list patch name in commit text]' \ | |
853 '(--merge -m)'{-m+,--merge}'[merge from another queue]:' \ | |
854 '(--name -n)'{-n+,--name}'[merge queue name]:' \ | |
855 '(--force -f)'{-f,--force}'[apply if the patch has rejects]' \ | |
856 ':patch:_hg_qunapplied' | |
857 } | |
858 | |
859 _hg_cmd_qrefresh() { | |
860 _arguments -s -w : $_hg_global_opts $_hg_pat_opts $_hg_commit_opts \ | |
861 '(--git -g)'{-g,--git}'[use git extended diff format]' \ | |
862 '(--short -s)'{-s,--short}'[short refresh]' \ | |
863 '*:files:_hg_files' | |
864 } | |
865 | |
866 _hg_cmd_qrename() { | |
867 _arguments -s -w : $_hg_global_opts \ | |
868 ':patch:_hg_qseries' \ | |
869 ':destination:' | |
870 } | |
871 | |
872 _hg_cmd_qselect() { | |
873 _arguments -s -w : $_hg_global_opts \ | |
874 '(--none -n :)'{-n,--none}'[disable all guards]' \ | |
875 '(--series -s :)'{-s,--series}'[list all guards in series file]' \ | |
876 '--pop[pop to before first guarded applied patch]' \ | |
877 '--reapply[pop and reapply patches]' \ | |
878 '*:guards:_hg_qguards' | |
879 } | |
880 | |
881 _hg_cmd_qseries() { | |
882 _arguments -s -w : $_hg_global_opts $_hg_qseries_opts \ | |
883 '(--missing -m)'{-m,--missing}'[print patches not in series]' | |
884 } | |
885 | |
886 _hg_cmd_qunapplied() { | |
887 _arguments -s -w : $_hg_global_opts $_hg_qseries_opts | |
888 } | |
889 | |
890 _hg_cmd_qtop() { | |
891 _arguments -s -w : $_hg_global_opts $_hg_qseries_opts | |
892 } | |
893 | |
894 _hg_cmd_strip() { | |
895 _arguments -s -w : $_hg_global_opts \ | |
896 '(--force -f)'{-f,--force}'[force multi-head removal]' \ | |
897 '(--backup -b)'{-b,--backup}'[bundle unrelated changesets]' \ | |
898 '(--nobackup -n)'{-n,--nobackup}'[no backups]' \ | |
899 ':revision:_hg_tags' | |
900 } | |
901 | |
902 _hg "$@" |