zsh_completion
875 lines
| 26.3 KiB
| text/plain
|
TextLexer
/ contrib / zsh_completion
|
r1362 | #compdef hg | ||
# Zsh completion script for mercurial. Rename this file to _hg and copy | ||||
# it into your zsh function path (/usr/share/zsh/site-functions for | ||||
# instance) | ||||
# | ||||
|
r7466 | # Copyright (C) 2005-6 Steve Borho | ||
|
r7384 | # Copyright (C) 2006-8 Brendan Cully <brendan@kublai.com> | ||
|
r1362 | # | ||
# This is free software; you can redistribute it and/or modify it under | ||||
# the terms of the GNU General Public License as published by the Free | ||||
# Software Foundation; either version 2 of the License, or (at your | ||||
# option) any later version. | ||||
|
r5868 | emulate -LR zsh | ||
setopt extendedglob | ||||
|
r1362 | local curcontext="$curcontext" state line | ||
|
r3537 | typeset -A _hg_cmd_globals | ||
_hg() { | ||||
|
r3603 | local cmd _hg_root | ||
|
r3537 | integer i=2 | ||
_hg_cmd_globals=() | ||||
while (( i < $#words )) | ||||
do | ||||
case "$words[$i]" in | ||||
|
r3603 | -R|--repository) | ||
|
r3605 | eval _hg_root="$words[$i+1]" | ||
|
r3603 | _hg_cmd_globals+=("$words[$i]" "$_hg_root") | ||
|
r3537 | (( i += 2 )) | ||
continue | ||||
;; | ||||
-R*) | ||||
_hg_cmd_globals+="$words[$i]" | ||||
|
r3605 | eval _hg_root="${words[$i]#-R}" | ||
|
r3537 | (( i++ )) | ||
continue | ||||
;; | ||||
|
r3603 | --cwd|--config) | ||
# pass along arguments to hg completer | ||||
_hg_cmd_globals+=("$words[$i]" "$words[$i+1]") | ||||
(( i += 2 )) | ||||
continue | ||||
;; | ||||
|
r3537 | -*) | ||
# skip option | ||||
(( i++ )) | ||||
continue | ||||
;; | ||||
esac | ||||
if [[ -z "$cmd" ]] | ||||
then | ||||
cmd="$words[$i]" | ||||
words[$i]=() | ||||
(( CURRENT-- )) | ||||
fi | ||||
(( i++ )) | ||||
done | ||||
if [[ -z "$cmd" ]] | ||||
then | ||||
_arguments -s -w : $_hg_global_opts \ | ||||
':mercurial command:_hg_commands' | ||||
return | ||||
fi | ||||
# resolve abbreviations and aliases | ||||
if ! (( $+functions[_hg_cmd_${cmd}] )) | ||||
then | ||||
local cmdexp | ||||
(( $#_hg_cmd_list )) || _hg_get_commands | ||||
cmdexp=$_hg_cmd_list[(r)${cmd}*] | ||||
if [[ $cmdexp == $_hg_cmd_list[(R)${cmd}*] ]] | ||||
then | ||||
# might be nice to rewrite the command line with the expansion | ||||
cmd="$cmdexp" | ||||
fi | ||||
if [[ -n $_hg_alias_list[$cmd] ]] | ||||
then | ||||
cmd=$_hg_alias_list[$cmd] | ||||
fi | ||||
fi | ||||
|
r3600 | curcontext="${curcontext%:*:*}:hg-${cmd}:" | ||
zstyle -s ":completion:$curcontext:" cache-policy update_policy | ||||
if [[ -z "$update_policy" ]] | ||||
then | ||||
zstyle ":completion:$curcontext:" cache-policy _hg_cache_policy | ||||
fi | ||||
|
r3537 | if (( $+functions[_hg_cmd_${cmd}] )) | ||
then | ||||
_hg_cmd_${cmd} | ||||
|
r3597 | else | ||
# complete unknown commands normally | ||||
_arguments -s -w : $_hg_global_opts \ | ||||
|
r3603 | '*:files:_hg_files' | ||
|
r3537 | fi | ||
} | ||||
|
r3497 | |||
|
r3600 | _hg_cache_policy() { | ||
typeset -a old | ||||
# cache for a minute | ||||
old=( "$1"(mm+10) ) | ||||
(( $#old )) && return 0 | ||||
return 1 | ||||
} | ||||
|
r3537 | _hg_get_commands() { | ||
typeset -ga _hg_cmd_list | ||||
typeset -gA _hg_alias_list | ||||
|
r7510 | local hline cmd cmdalias | ||
|
r7466 | |||
|
r7510 | _call_program hg hg debugcomplete -v 2>/dev/null | while read -A hline | ||
do | ||||
cmd=$hline[1] | ||||
_hg_cmd_list+=($cmd) | ||||
for cmdalias in $hline[2,-1] | ||||
do | ||||
_hg_cmd_list+=($cmdalias) | ||||
_hg_alias_list+=($cmdalias $cmd) | ||||
done | ||||
|
r3537 | done | ||
} | ||||
_hg_commands() { | ||||
(( $#_hg_cmd_list )) || _hg_get_commands | ||||
|
r3548 | _describe -t commands 'mercurial command' _hg_cmd_list | ||
|
r3537 | } | ||
|
r3550 | _hg_revrange() { | ||
compset -P 1 '*:' | ||||
_hg_tags "$@" | ||||
} | ||||
|
r3537 | _hg_tags() { | ||
typeset -a tags | ||||
local tag rev | ||||
|
r5868 | _hg_cmd tags 2> /dev/null | while read tag | ||
|
r3537 | do | ||
|
r5868 | tags+=(${tag/ # [0-9]#:*}) | ||
|
r3537 | done | ||
|
r3548 | (( $#tags )) && _describe -t tags 'tags' tags | ||
|
r3537 | } | ||
|
r3603 | _hg_files() { | ||
if [[ -n "$_hg_root" ]] | ||||
then | ||||
[[ -d "$_hg_root/.hg" ]] || return | ||||
case "$_hg_root" in | ||||
/*) | ||||
_files -W $_hg_root | ||||
;; | ||||
*) | ||||
_files -W $PWD/$_hg_root | ||||
;; | ||||
esac | ||||
else | ||||
_files | ||||
fi | ||||
} | ||||
|
r3537 | _hg_status() { | ||
|
r3878 | [[ -d $PREFIX ]] || PREFIX=$PREFIX:h | ||
|
r3817 | status_files=(${(ps:\0:)"$(_hg_cmd status -0n$1 ./$PREFIX 2>/dev/null)"}) | ||
|
r3537 | } | ||
|
r3487 | |||
|
r3537 | _hg_unknown() { | ||
typeset -a status_files | ||||
_hg_status u | ||||
|
r3587 | _wanted files expl 'unknown files' _multi_parts / status_files | ||
|
r3537 | } | ||
_hg_missing() { | ||||
typeset -a status_files | ||||
_hg_status d | ||||
|
r3587 | _wanted files expl 'missing files' _multi_parts / status_files | ||
} | ||||
_hg_modified() { | ||||
typeset -a status_files | ||||
_hg_status m | ||||
_wanted files expl 'modified files' _multi_parts / status_files | ||||
|
r3537 | } | ||
|
r7384 | _hg_resolve() { | ||
local rstate rpah | ||||
[[ -d $PREFIX ]] || PREFIX=$PREFIX:h | ||||
_hg_cmd resolve -l ./$PREFIX 2> /dev/null | while read rstate rpath | ||||
do | ||||
[[ $rstate == 'R' ]] && resolved_files+=($rpath) | ||||
[[ $rstate == 'U' ]] && unresolved_files+=($rpath) | ||||
done | ||||
} | ||||
_hg_resolved() { | ||||
typeset -a resolved_files unresolved_files | ||||
_hg_resolve | ||||
_wanted files expl 'resolved files' _multi_parts / resolved_files | ||||
} | ||||
_hg_unresolved() { | ||||
typeset -a resolved_files unresolved_files | ||||
_hg_resolve | ||||
_wanted files expl 'unresolved files' _multi_parts / unresolved_files | ||||
} | ||||
|
r5309 | _hg_config() { | ||
typeset -a items | ||||
|
r6804 | items=(${${(%f)"$(_call_program hg hg showconfig)"}%%\=*}) | ||
|
r5309 | (( $#items )) && _describe -t config 'config item' items | ||
} | ||||
|
r3537 | _hg_addremove() { | ||
|
r3548 | _alternative 'files:unknown files:_hg_unknown' \ | ||
'files:missing files:_hg_missing' | ||||
|
r3537 | } | ||
|
r3598 | _hg_ssh_urls() { | ||
if [[ -prefix */ ]] | ||||
then | ||||
if zstyle -T ":completion:${curcontext}:files" remote-access | ||||
then | ||||
local host=${PREFIX%%/*} | ||||
typeset -a remdirs | ||||
compset -p $(( $#host + 1 )) | ||||
local rempath=${(M)PREFIX##*/} | ||||
|
r3602 | local cacheid="hg:${host}-${rempath//\//_}" | ||
cacheid=${cacheid%[-_]} | ||||
|
r3598 | compset -P '*/' | ||
|
r3600 | if _cache_invalid "$cacheid" || ! _retrieve_cache "$cacheid" | ||
then | ||||
remdirs=(${${(M)${(f)"$(_call_program files ssh -a -x $host ls -1FL "${(q)rempath}" 2> /dev/null)"}##*/}%/}) | ||||
_store_cache "$cacheid" remdirs | ||||
fi | ||||
|
r3598 | _describe -t directories 'remote directory' remdirs -S/ | ||
else | ||||
_message 'remote directory' | ||||
fi | ||||
else | ||||
|
r3602 | if compset -P '*@' | ||
then | ||||
_hosts -S/ | ||||
else | ||||
_alternative 'hosts:remote host name:_hosts -S/' \ | ||||
'users:user:_users -S@' | ||||
fi | ||||
|
r3598 | fi | ||
} | ||||
|
r3560 | _hg_urls() { | ||
if compset -P bundle:// | ||||
then | ||||
_files | ||||
|
r3598 | elif compset -P ssh:// | ||
then | ||||
_hg_ssh_urls | ||||
|
r3560 | elif [[ -prefix *: ]] | ||
then | ||||
_urls | ||||
else | ||||
local expl | ||||
compset -S '[^:]*' | ||||
_wanted url-schemas expl 'URL schema' compadd -S '' - \ | ||||
http:// https:// ssh:// bundle:// | ||||
fi | ||||
} | ||||
|
r3537 | _hg_paths() { | ||
typeset -a paths pnames | ||||
_hg_cmd paths 2> /dev/null | while read -A pnames | ||||
do | ||||
paths+=($pnames[1]) | ||||
done | ||||
|
r3560 | (( $#paths )) && _describe -t path-aliases 'repository alias' paths | ||
|
r3537 | } | ||
_hg_remote() { | ||||
|
r3560 | _alternative 'path-aliases:repository alias:_hg_paths' \ | ||
'directories:directory:_files -/' \ | ||||
|
r3598 | 'urls:URL:_hg_urls' | ||
|
r3537 | } | ||
|
r3601 | _hg_clone_dest() { | ||
_alternative 'directories:directory:_files -/' \ | ||||
'urls:URL:_hg_urls' | ||||
} | ||||
|
r3537 | # Common options | ||
_hg_global_opts=( | ||||
|
r3539 | '(--repository -R)'{-R+,--repository}'[repository root directory]:repository:_files -/' | ||
|
r3537 | '--cwd[change working directory]:new working directory:_files -/' | ||
|
r3539 | '(--noninteractive -y)'{-y,--noninteractive}'[do not prompt, assume yes for any required answers]' | ||
'(--verbose -v)'{-v,--verbose}'[enable additional output]' | ||||
|
r6804 | '*--config[set/override config option]:defined config items:_hg_config' | ||
|
r3539 | '(--quiet -q)'{-q,--quiet}'[suppress output]' | ||
'(--help -h)'{-h,--help}'[display help and exit]' | ||||
|
r3537 | '--debug[debug mode]' | ||
'--debugger[start debugger]' | ||||
|
r6804 | '--encoding[set the charset encoding (default: UTF8)]' | ||
'--encodingmode[set the charset encoding mode (default: strict)]' | ||||
'--lsprof[print improved command execution profile]' | ||||
|
r3537 | '--traceback[print traceback on exception]' | ||
'--time[time how long the command takes]' | ||||
'--profile[profile]' | ||||
'--version[output version information and exit]' | ||||
) | ||||
_hg_pat_opts=( | ||||
|
r3539 | '*'{-I+,--include}'[include names matching the given patterns]:dir:_files -W $(_hg_cmd root) -/' | ||
'*'{-X+,--exclude}'[exclude names matching the given patterns]:dir:_files -W $(_hg_cmd root) -/') | ||||
|
r3537 | |||
_hg_diff_opts=( | ||||
|
r3539 | '(--text -a)'{-a,--text}'[treat all files as text]' | ||
'(--git -g)'{-g,--git}'[use git extended diff format]' | ||||
|
r3537 | "--nodates[don't include dates in diff headers]") | ||
_hg_dryrun_opts=( | ||||
|
r3539 | '(--dry-run -n)'{-n,--dry-run}'[do not perform actions, just print output]') | ||
|
r3537 | |||
_hg_style_opts=( | ||||
'--style[display using template map file]:' | ||||
'--template[display with template]:') | ||||
_hg_commit_opts=( | ||||
|
r3539 | '(-m --message -l --logfile --edit -e)'{-e,--edit}'[edit commit message]' | ||
'(-e --edit -l --logfile --message -m)'{-m+,--message}'[use <text> as commit message]:message:' | ||||
'(-e --edit -m --message --logfile -l)'{-l+,--logfile}'[read the commit message from <file>]:log file:_files') | ||||
|
r3537 | |||
_hg_remote_opts=( | ||||
|
r3539 | '(--ssh -e)'{-e+,--ssh}'[specify ssh command to use]:' | ||
|
r3537 | '--remotecmd[specify hg command to run on the remote side]:') | ||
_hg_cmd() { | ||||
_call_program hg hg "$_hg_cmd_globals[@]" "$@" | ||||
} | ||||
_hg_cmd_add() { | ||||
_arguments -s -w : $_hg_global_opts $_hg_pat_opts $_hg_dryrun_opts \ | ||||
'*:unknown files:_hg_unknown' | ||||
} | ||||
_hg_cmd_addremove() { | ||||
_arguments -s -w : $_hg_global_opts $_hg_pat_opts $_hg_dryrun_opts \ | ||||
|
r3539 | '(--similarity -s)'{-s+,--similarity}'[guess renamed files by similarity (0<=s<=100)]:' \ | ||
|
r3537 | '*:unknown or missing files:_hg_addremove' | ||
} | ||||
_hg_cmd_annotate() { | ||||
_arguments -s -w : $_hg_global_opts $_hg_pat_opts \ | ||||
|
r3539 | '(--rev -r)'{-r+,--rev}'[annotate the specified revision]:revision:_hg_tags' \ | ||
'(--follow -f)'{-f,--follow}'[follow file copies and renames]' \ | ||||
'(--text -a)'{-a,--text}'[treat all files as text]' \ | ||||
'(--user -u)'{-u,--user}'[list the author]' \ | ||||
'(--date -d)'{-d,--date}'[list the date]' \ | ||||
'(--number -n)'{-n,--number}'[list the revision number (default)]' \ | ||||
'(--changeset -c)'{-c,--changeset}'[list the changeset]' \ | ||||
|
r3603 | '*:files:_hg_files' | ||
|
r3537 | } | ||
_hg_cmd_archive() { | ||||
_arguments -s -w : $_hg_global_opts $_hg_pat_opts \ | ||||
'--no-decode[do not pass files through decoders]' \ | ||||
|
r3539 | '(--prefix -p)'{-p+,--prefix}'[directory prefix for files in archive]:' \ | ||
'(--rev -r)'{-r+,--rev}'[revision to distribute]:revision:_hg_tags' \ | ||||
'(--type -t)'{-t+,--type}'[type of distribution to create]:archive type:(files tar tbz2 tgz uzip zip)' \ | ||||
|
r3537 | '*:destination:_files' | ||
} | ||||
|
r5309 | _hg_cmd_backout() { | ||
_arguments -s -w : $_hg_global_opts $_hg_pat_opts \ | ||||
'--merge[merge with old dirstate parent after backout]' \ | ||||
'(--date -d)'{-d+,--date}'[record datecode as commit date]:date code:' \ | ||||
'--parent[parent to choose when backing out merge]' \ | ||||
'(--user -u)'{-u+,--user}'[record user as commiter]:user:' \ | ||||
'(--rev -r)'{-r+,--rev}'[revision]:revision:_hg_tags' \ | ||||
'(--message -m)'{-m+,--message}'[use <text> as commit message]:text:' \ | ||||
'(--logfile -l)'{-l+,--logfile}'[read commit message from <file>]:log file:_files -g \*.txt' | ||||
} | ||||
|
r3537 | _hg_cmd_bundle() { | ||
_arguments -s -w : $_hg_global_opts $_hg_remote_opts \ | ||||
|
r3539 | '(--force -f)'{-f,--force}'[run even when remote repository is unrelated]' \ | ||
|
r3537 | '(2)*--base[a base changeset to specify instead of a destination]:revision:_hg_tags' \ | ||
':output file:_files' \ | ||||
':destination repository:_files -/' | ||||
} | ||||
_hg_cmd_cat() { | ||||
_arguments -s -w : $_hg_global_opts $_hg_pat_opts \ | ||||
|
r3539 | '(--output -o)'{-o+,--output}'[print output to file with formatted name]:filespec:' \ | ||
'(--rev -r)'{-r+,--rev}'[revision]:revision:_hg_tags' \ | ||||
|
r3603 | '*:file:_hg_files' | ||
|
r3537 | } | ||
_hg_cmd_clone() { | ||||
_arguments -s -w : $_hg_global_opts $_hg_remote_opts \ | ||||
|
r3539 | '(--noupdate -U)'{-U,--noupdate}'[do not update the new working directory]' \ | ||
'(--rev -r)'{-r+,--rev}'[a changeset you would like to have after cloning]:' \ | ||||
|
r3537 | '--uncompressed[use uncompressed transfer (fast over LAN)]' \ | ||
':source repository:_hg_remote' \ | ||||
|
r3601 | ':destination:_hg_clone_dest' | ||
|
r3537 | } | ||
_hg_cmd_commit() { | ||||
_arguments -s -w : $_hg_global_opts $_hg_pat_opts \ | ||||
|
r3666 | '(--addremove -A)'{-A,--addremove}'[mark new/missing files as added/removed before committing]' \ | ||
|
r3539 | '(--message -m)'{-m+,--message}'[use <text> as commit message]:text:' \ | ||
|
r4441 | '(--logfile -l)'{-l+,--logfile}'[read commit message from <file>]:log file:_files -g \*.txt' \ | ||
|
r3539 | '(--date -d)'{-d+,--date}'[record datecode as commit date]:date code:' \ | ||
'(--user -u)'{-u+,--user}'[record user as commiter]:user:' \ | ||||
|
r3603 | '*:file:_hg_files' | ||
|
r3537 | } | ||
_hg_cmd_copy() { | ||||
_arguments -s -w : $_hg_global_opts $_hg_pat_opts $_hg_dryrun_opts \ | ||||
|
r3539 | '(--after -A)'{-A,--after}'[record a copy that has already occurred]' \ | ||
'(--force -f)'{-f,--force}'[forcibly copy over an existing managed file]' \ | ||||
|
r3603 | '*:file:_hg_files' | ||
|
r3537 | } | ||
_hg_cmd_diff() { | ||||
|
r3587 | typeset -A opt_args | ||
|
r3537 | _arguments -s -w : $_hg_global_opts $_hg_pat_opts $_hg_diff_opts \ | ||
|
r3550 | '*'{-r,--rev}'+[revision]:revision:_hg_revrange' \ | ||
|
r3539 | '(--show-function -p)'{-p,--show-function}'[show which function each change is in]' \ | ||
'(--ignore-all-space -w)'{-w,--ignore-all-space}'[ignore white space when comparing lines]' \ | ||||
'(--ignore-space-change -b)'{-b,--ignore-space-change}'[ignore changes in the amount of white space]' \ | ||||
'(--ignore-blank-lines -B)'{-B,--ignore-blank-lines}'[ignore changes whose lines are all blank]' \ | ||||
|
r3587 | '*:file:->diff_files' | ||
if [[ $state == 'diff_files' ]] | ||||
then | ||||
if [[ -n $opt_args[-r] ]] | ||||
then | ||||
|
r3603 | _hg_files | ||
|
r3587 | else | ||
_hg_modified | ||||
fi | ||||
fi | ||||
|
r3487 | } | ||
|
r1362 | |||
|
r3537 | _hg_cmd_export() { | ||
_arguments -s -w : $_hg_global_opts $_hg_diff_opts \ | ||||
|
r3539 | '(--outout -o)'{-o+,--output}'[print output to file with formatted name]:filespec:' \ | ||
|
r3537 | '--switch-parent[diff against the second parent]' \ | ||
'*:revision:_hg_tags' | ||||
} | ||||
|
r3487 | |||
|
r3537 | _hg_cmd_grep() { | ||
_arguments -s -w : $_hg_global_opts $_hg_pat_opts \ | ||||
|
r3539 | '(--print0 -0)'{-0,--print0}'[end filenames with NUL]' \ | ||
|
r3537 | '--all[print all revisions with matches]' \ | ||
|
r3539 | '(--follow -f)'{-f,--follow}'[follow changeset or file history]' \ | ||
'(--ignore-case -i)'{-i,--ignore-case}'[ignore case when matching]' \ | ||||
'(--files-with-matches -l)'{-l,--files-with-matches}'[print only filenames and revs that match]' \ | ||||
'(--line-number -n)'{-n,--line-number}'[print matching line numbers]' \ | ||||
|
r3550 | '*'{-r+,--rev}'[search in given revision range]:revision:_hg_revrange' \ | ||
|
r3539 | '(--user -u)'{-u,--user}'[print user who committed change]' \ | ||
|
r5309 | '1:search pattern:' \ | ||
'*:files:_hg_files' | ||||
|
r3537 | } | ||
|
r1362 | |||
|
r3537 | _hg_cmd_heads() { | ||
_arguments -s -w : $_hg_global_opts $_hg_style_opts \ | ||||
|
r3539 | '(--rev -r)'{-r+,--rev}'[show only heads which are descendants of rev]:revision:_hg_tags' | ||
|
r3537 | } | ||
_hg_cmd_help() { | ||||
_arguments -s -w : $_hg_global_opts \ | ||||
'*:mercurial command:_hg_commands' | ||||
} | ||||
|
r1362 | |||
|
r5309 | _hg_cmd_identify() { | ||
_arguments -s -w : $_hg_global_opts \ | ||||
'(--rev -r)'{-r+,--rev}'[identify the specified rev]:revision:_hg_tags' \ | ||||
'(--num -n)'{-n+,--num}'[show local revision number]' \ | ||||
'(--id -i)'{-i+,--id}'[show global revision id]' \ | ||||
'(--branch -b)'{-b+,--branch}'[show branch]' \ | ||||
'(--tags -t)'{-t+,--tags}'[show tags]' | ||||
} | ||||
|
r3537 | _hg_cmd_import() { | ||
_arguments -s -w : $_hg_global_opts \ | ||||
|
r3539 | '(--strip -p)'{-p+,--strip}'[directory strip option for patch (default: 1)]:count:' \ | ||
'(--message -m)'{-m+,--message}'[use <text> as commit message]:text:' \ | ||||
'(--force -f)'{-f,--force}'[skip check for outstanding uncommitted changes]' \ | ||||
|
r3537 | '*:patch:_files' | ||
} | ||||
|
r1438 | |||
|
r3537 | _hg_cmd_incoming() { | ||
_arguments -s -w : $_hg_global_opts $_hg_remote_opts $_hg_style_opts \ | ||||
|
r3539 | '(--no-merges -M)'{-M,--no-merges}'[do not show merge revisions]' \ | ||
'(--force -f)'{-f,--force}'[run even when the remote repository is unrelated]' \ | ||||
'(--patch -p)'{-p,--patch}'[show patch]' \ | ||||
|
r5309 | '(--rev -r)'{-r+,--rev}'[a specific revision up to which you would like to pull]:revision:_hg_tags' \ | ||
|
r3539 | '(--newest-first -n)'{-n,--newest-first}'[show newest record first]' \ | ||
|
r3537 | '--bundle[file to store the bundles into]:bundle file:_files' \ | ||
':source:_hg_remote' | ||||
} | ||||
|
r1438 | |||
|
r3537 | _hg_cmd_init() { | ||
_arguments -s -w : $_hg_global_opts $_hg_remote_opts \ | ||||
':dir:_files -/' | ||||
} | ||||
|
r1438 | |||
|
r3537 | _hg_cmd_locate() { | ||
_arguments -s -w : $_hg_global_opts $_hg_pat_opts \ | ||||
|
r3539 | '(--rev -r)'{-r+,--rev}'[search repository as it stood at revision]:revision:_hg_tags' \ | ||
'(--print0 -0)'{-0,--print0}'[end filenames with NUL, for use with xargs]' \ | ||||
'(--fullpath -f)'{-f,--fullpath}'[print complete paths]' \ | ||||
|
r3603 | '*:search pattern:_hg_files' | ||
|
r3537 | } | ||
|
r1438 | |||
|
r3537 | _hg_cmd_log() { | ||
_arguments -s -w : $_hg_global_opts $_hg_pat_opts $_hg_style_opts \ | ||||
|
r3539 | '(--follow --follow-first -f)'{-f,--follow}'[follow changeset or history]' \ | ||
|
r3537 | '(-f --follow)--follow-first[only follow the first parent of merge changesets]' \ | ||
|
r3539 | '(--copies -C)'{-C,--copies}'[show copied files]' \ | ||
'(--keyword -k)'{-k+,--keyword}'[search for a keyword]:' \ | ||||
'(--limit -l)'{-l+,--limit}'[limit number of changes displayed]:' \ | ||||
|
r3550 | '*'{-r,--rev}'[show the specified revision or range]:revision:_hg_revrange' \ | ||
|
r3539 | '(--no-merges -M)'{-M,--no-merges}'[do not show merges]' \ | ||
'(--only-merges -m)'{-m,--only-merges}'[show only merges]' \ | ||||
'(--patch -p)'{-p,--patch}'[show patch]' \ | ||||
'(--prune -P)'{-P+,--prune}'[do not display revision or any of its ancestors]:revision:_hg_tags' \ | ||||
|
r3603 | '*:files:_hg_files' | ||
|
r3537 | } | ||
|
r1438 | |||
|
r3537 | _hg_cmd_manifest() { | ||
_arguments -s -w : $_hg_global_opts \ | ||||
':revision:_hg_tags' | ||||
} | ||||
|
r1438 | |||
|
r3537 | _hg_cmd_outgoing() { | ||
_arguments -s -w : $_hg_global_opts $_hg_remote_opts $_hg_style_opts \ | ||||
|
r3539 | '(--no-merges -M)'{-M,--no-merges}'[do not show merge revisions]' \ | ||
'(--force -f)'{-f,--force}'[run even when the remote repository is unrelated]' \ | ||||
'(--patch -p)'{-p,--patch}'[show patch]' \ | ||||
'(--rev -r)'{-r+,--rev}'[a specific revision you would like to push]' \ | ||||
'(--newest-first -n)'{-n,--newest-first}'[show newest record first]' \ | ||||
|
r3537 | ':destination:_hg_remote' | ||
} | ||||
|
r1438 | |||
|
r3537 | _hg_cmd_parents() { | ||
_arguments -s -w : $_hg_global_opts $_hg_style_opts \ | ||||
|
r3539 | '(--rev -r)'{-r+,--rev}'[show parents of the specified rev]:revision:_hg_tags' \ | ||
|
r5309 | ':last modified file:_hg_files' | ||
|
r3537 | } | ||
_hg_cmd_paths() { | ||||
_arguments -s -w : $_hg_global_opts \ | ||||
':path:_hg_paths' | ||||
} | ||||
_hg_cmd_pull() { | ||||
_arguments -s -w : $_hg_global_opts $_hg_remote_opts \ | ||||
|
r3539 | '(--force -f)'{-f,--force}'[run even when the remote repository is unrelated]' \ | ||
'(--update -u)'{-u,--update}'[update to new tip if changesets were pulled]' \ | ||||
|
r5309 | '(--rev -r)'{-r+,--rev}'[a specific revision up to which you would like to pull]:revision:' \ | ||
|
r3537 | ':source:_hg_remote' | ||
} | ||||
|
r1438 | |||
|
r3537 | _hg_cmd_push() { | ||
_arguments -s -w : $_hg_global_opts $_hg_remote_opts \ | ||||
|
r3539 | '(--force -f)'{-f,--force}'[force push]' \ | ||
|
r5309 | '(--rev -r)'{-r+,--rev}'[a specific revision you would like to push]:revision:_hg_tags' \ | ||
|
r3537 | ':destination:_hg_remote' | ||
} | ||||
|
r1438 | |||
|
r3537 | _hg_cmd_remove() { | ||
_arguments -s -w : $_hg_global_opts $_hg_pat_opts \ | ||||
|
r3539 | '(--after -A)'{-A,--after}'[record remove that has already occurred]' \ | ||
'(--force -f)'{-f,--force}'[remove file even if modified]' \ | ||||
|
r3603 | '*:file:_hg_files' | ||
|
r3537 | } | ||
|
r1438 | |||
|
r3537 | _hg_cmd_rename() { | ||
_arguments -s -w : $_hg_global_opts $_hg_pat_opts $_hg_dryrun_opts \ | ||||
|
r3539 | '(--after -A)'{-A,--after}'[record a rename that has already occurred]' \ | ||
'(--force -f)'{-f,--force}'[forcibly copy over an existing managed file]' \ | ||||
|
r3603 | '*:file:_hg_files' | ||
|
r3537 | } | ||
|
r1362 | |||
|
r7384 | _hg_cmd_resolve() { | ||
local context state line | ||||
typeset -A opt_args | ||||
_arguments -s -w : $_hg_global_opts \ | ||||
'(--list -l --mark -m --unmark -u)'{-l,--list}'[list state of files needing merge]:*:merged files:->resolve_files' \ | ||||
'(--mark -m --list -l --unmark -u)'{-m,--mark}'[mark files as resolved]:*:unresolved files:_hg_unresolved' \ | ||||
|
r7386 | '(--unmark -u --list -l --mark -m)'{-u,--unmark}'[unmark files as resolved]:*:resolved files:_hg_resolved' \ | ||
'*:file:_hg_unresolved' | ||||
|
r7384 | |||
if [[ $state == 'resolve_files' ]] | ||||
then | ||||
_alternative 'files:resolved files:_hg_resolved' \ | ||||
'files:unresolved files:_hg_unresolved' | ||||
fi | ||||
} | ||||
|
r3537 | _hg_cmd_revert() { | ||
|
r7384 | local context state line | ||
typeset -A opt_args | ||||
|
r3537 | _arguments -s -w : $_hg_global_opts $_hg_pat_opts $_hg_dryrun_opts \ | ||
|
r3539 | '(--all -a :)'{-a,--all}'[revert all changes when no arguments given]' \ | ||
'(--rev -r)'{-r+,--rev}'[revision to revert to]:revision:_hg_tags' \ | ||||
|
r3537 | '--no-backup[do not save backup copies of files]' \ | ||
|
r3587 | '*:file:->diff_files' | ||
if [[ $state == 'diff_files' ]] | ||||
then | ||||
if [[ -n $opt_args[-r] ]] | ||||
then | ||||
|
r3603 | _hg_files | ||
|
r3587 | else | ||
typeset -a status_files | ||||
_hg_status mard | ||||
_wanted files expl 'modified, added, removed or deleted file' _multi_parts / status_files | ||||
fi | ||||
fi | ||||
|
r3537 | } | ||
|
r1438 | |||
|
r3537 | _hg_cmd_serve() { | ||
_arguments -s -w : $_hg_global_opts \ | ||||
|
r3539 | '(--accesslog -A)'{-A+,--accesslog}'[name of access log file]:log file:_files' \ | ||
'(--errorlog -E)'{-E+,--errorlog}'[name of error log file]:log file:_files' \ | ||||
'(--daemon -d)'{-d,--daemon}'[run server in background]' \ | ||||
'(--port -p)'{-p+,--port}'[listen port]:listen port:' \ | ||||
'(--address -a)'{-a+,--address}'[interface address]:interface address:' \ | ||||
'(--name -n)'{-n+,--name}'[name to show in web pages]:repository name:' \ | ||||
'(--templates -t)'{-t,--templates}'[web template directory]:template dir:_files -/' \ | ||||
|
r3537 | '--style[web template style]:style' \ | ||
'--stdio[for remote clients]' \ | ||||
|
r3539 | '(--ipv6 -6)'{-6,--ipv6}'[use IPv6 in addition to IPv4]' | ||
|
r3537 | } | ||
|
r1438 | |||
|
r5309 | _hg_cmd_showconfig() { | ||
_arguments -s -w : $_hg_global_opts \ | ||||
'(--untrusted -u)'{-u+,--untrusted}'[show untrusted configuration options]' \ | ||||
':config item:_hg_config' | ||||
} | ||||
|
r3537 | _hg_cmd_status() { | ||
_arguments -s -w : $_hg_global_opts $_hg_pat_opts \ | ||||
|
r3539 | '(--all -A)'{-A,--all}'[show status of all files]' \ | ||
'(--modified -m)'{-m,--modified}'[show only modified files]' \ | ||||
'(--added -a)'{-a,--added}'[show only added files]' \ | ||||
'(--removed -r)'{-r,--removed}'[show only removed files]' \ | ||||
'(--deleted -d)'{-d,--deleted}'[show only deleted (but tracked) files]' \ | ||||
'(--clean -c)'{-c,--clean}'[show only files without changes]' \ | ||||
'(--unknown -u)'{-u,--unknown}'[show only unknown files]' \ | ||||
'(--ignored -i)'{-i,--ignored}'[show ignored files]' \ | ||||
'(--no-status -n)'{-n,--no-status}'[hide status prefix]' \ | ||||
'(--copies -C)'{-C,--copies}'[show source of copied files]' \ | ||||
'(--print0 -0)'{-0,--print0}'[end filenames with NUL, for use with xargs]' \ | ||||
|
r3537 | '--rev[show difference from revision]:revision:_hg_tags' \ | ||
'*:files:_files' | ||||
} | ||||
|
r1438 | |||
|
r3537 | _hg_cmd_tag() { | ||
_arguments -s -w : $_hg_global_opts \ | ||||
|
r3539 | '(--local -l)'{-l,--local}'[make the tag local]' \ | ||
'(--message -m)'{-m+,--message}'[message for tag commit log entry]:message:' \ | ||||
'(--date -d)'{-d+,--date}'[record datecode as commit date]:date code:' \ | ||||
'(--user -u)'{-u+,--user}'[record user as commiter]:user:' \ | ||||
'(--rev -r)'{-r+,--rev}'[revision to tag]:revision:_hg_tags' \ | ||||
|
r3537 | ':tag name:' | ||
} | ||||
|
r1438 | |||
|
r3537 | _hg_cmd_tip() { | ||
_arguments -s -w : $_hg_global_opts $_hg_style_opts \ | ||||
|
r3539 | '(--patch -p)'{-p,--patch}'[show patch]' | ||
|
r3537 | } | ||
|
r1438 | |||
|
r3537 | _hg_cmd_unbundle() { | ||
_arguments -s -w : $_hg_global_opts \ | ||||
|
r3539 | '(--update -u)'{-u,--update}'[update to new tip if changesets were unbundled]' \ | ||
|
r3537 | ':files:_files' | ||
} | ||||
|
r1362 | |||
|
r3537 | _hg_cmd_update() { | ||
_arguments -s -w : $_hg_global_opts \ | ||||
|
r3539 | '(--clean -C)'{-C,--clean}'[overwrite locally modified files]' \ | ||
|
r5309 | '(--rev -r)'{-r+,--rev}'[revision]:revision:_hg_tags' \ | ||
|
r3537 | ':revision:_hg_tags' | ||
} | ||||
|
r1362 | |||
|
r5309 | # bisect extension | ||
_hg_cmd_bisect() { | ||||
_arguments -s -w : $_hg_global_opts ':evaluation:(help init reset next good bad)' | ||||
} | ||||
|
r3537 | # HGK | ||
_hg_cmd_view() { | ||||
_arguments -s -w : $_hg_global_opts \ | ||||
|
r3539 | '(--limit -l)'{-l+,--limit}'[limit number of changes displayed]:' \ | ||
|
r3537 | ':revision range:_hg_tags' | ||
} | ||||
|
r1362 | |||
|
r3537 | # MQ | ||
|
r3541 | _hg_qseries() { | ||
typeset -a patches | ||||
|
r5868 | patches=(${(f)"$(_hg_cmd qseries 2>/dev/null)"}) | ||
|
r3541 | (( $#patches )) && _describe -t hg-patches 'patches' patches | ||
} | ||||
_hg_qapplied() { | ||||
typeset -a patches | ||||
|
r5868 | patches=(${(f)"$(_hg_cmd qapplied 2>/dev/null)"}) | ||
|
r3549 | if (( $#patches )) | ||
then | ||||
patches+=(qbase qtip) | ||||
_describe -t hg-applied-patches 'applied patches' patches | ||||
fi | ||||
|
r3541 | } | ||
_hg_qunapplied() { | ||||
typeset -a patches | ||||
|
r5868 | patches=(${(f)"$(_hg_cmd qunapplied 2>/dev/null)"}) | ||
|
r3541 | (( $#patches )) && _describe -t hg-unapplied-patches 'unapplied patches' patches | ||
} | ||||
_hg_qguards() { | ||||
typeset -a guards | ||||
local guard | ||||
|
r3543 | compset -P "+|-" | ||
|
r3559 | _hg_cmd qselect -s 2>/dev/null | while read guard | ||
|
r3541 | do | ||
guards+=(${guard#(+|-)}) | ||||
done | ||||
(( $#guards )) && _describe -t hg-guards 'guards' guards | ||||
} | ||||
_hg_qseries_opts=( | ||||
'(--summary -s)'{-s,--summary}'[print first line of patch header]') | ||||
_hg_cmd_qapplied() { | ||||
_arguments -s -w : $_hg_global_opts $_hg_qseries_opts | ||||
} | ||||
|
r3537 | _hg_cmd_qdelete() { | ||
_arguments -s -w : $_hg_global_opts \ | ||||
|
r3539 | '(--keep -k)'{-k,--keep}'[keep patch file]' \ | ||
|
r3550 | '*'{-r+,--rev}'[stop managing a revision]:applied patch:_hg_revrange' \ | ||
|
r3541 | '*:unapplied patch:_hg_qunapplied' | ||
} | ||||
_hg_cmd_qdiff() { | ||||
_arguments -s -w : $_hg_global_opts $_hg_pat_opts \ | ||||
|
r3603 | '*:pattern:_hg_files' | ||
|
r3541 | } | ||
_hg_cmd_qfold() { | ||||
_arguments -s -w : $_hg_global_opts $_h_commit_opts \ | ||||
'(--keep,-k)'{-k,--keep}'[keep folded patch files]' \ | ||||
'*:unapplied patch:_hg_qunapplied' | ||||
} | ||||
|
r5868 | _hg_cmd_qgoto() { | ||
_arguments -s -w : $_hg_global_opts \ | ||||
'(--force -f)'{-f,--force}'[overwrite any local changes]' \ | ||||
':patch:_hg_qseries' | ||||
} | ||||
|
r3541 | _hg_cmd_qguard() { | ||
_arguments -s -w : $_hg_global_opts \ | ||||
'(--list -l)'{-l,--list}'[list all patches and guards]' \ | ||||
'(--none -n)'{-n,--none}'[drop all guards]' \ | ||||
':patch:_hg_qseries' \ | ||||
'*:guards:_hg_qguards' | ||||
|
r3537 | } | ||
|
r1362 | |||
|
r3537 | _hg_cmd_qheader() { | ||
_arguments -s -w : $_hg_global_opts \ | ||||
':patch:_hg_qseries' | ||||
} | ||||
|
r1362 | |||
|
r3541 | _hg_cmd_qimport() { | ||
_arguments -s -w : $_hg_global_opts \ | ||||
'(--existing -e)'{-e,--existing}'[import file in patch dir]' \ | ||||
'(--name -n 2)'{-n+,--name}'[patch file name]:name:' \ | ||||
'(--force -f)'{-f,--force}'[overwrite existing files]' \ | ||||
|
r3550 | '*'{-r+,--rev}'[place existing revisions under mq control]:revision:_hg_revrange' \ | ||
|
r3541 | '*:patch:_files' | ||
} | ||||
|
r3537 | _hg_cmd_qnew() { | ||
_arguments -s -w : $_hg_global_opts $_hg_commit_opts \ | ||||
|
r3539 | '(--force -f)'{-f,--force}'[import uncommitted changes into patch]' \ | ||
|
r3537 | ':patch:' | ||
} | ||||
|
r1368 | |||
|
r3541 | _hg_cmd_qnext() { | ||
_arguments -s -w : $_hg_global_opts $_hg_qseries_opts | ||||
} | ||||
|
r3537 | _hg_cmd_qpop() { | ||
_arguments -s -w : $_hg_global_opts \ | ||||
|
r3539 | '(--all -a :)'{-a,--all}'[pop all patches]' \ | ||
'(--name -n)'{-n+,--name}'[queue name to pop]:' \ | ||||
'(--force -f)'{-f,--force}'[forget any local changes]' \ | ||||
|
r3537 | ':patch:_hg_qapplied' | ||
} | ||||
|
r3487 | |||
|
r3541 | _hg_cmd_qprev() { | ||
_arguments -s -w : $_hg_global_opts $_hg_qseries_opts | ||||
} | ||||
|
r3537 | _hg_cmd_qpush() { | ||
_arguments -s -w : $_hg_global_opts \ | ||||
|
r3539 | '(--all -a :)'{-a,--all}'[apply all patches]' \ | ||
'(--list -l)'{-l,--list}'[list patch name in commit text]' \ | ||||
'(--merge -m)'{-m+,--merge}'[merge from another queue]:' \ | ||||
'(--name -n)'{-n+,--name}'[merge queue name]:' \ | ||||
'(--force -f)'{-f,--force}'[apply if the patch has rejects]' \ | ||||
|
r3537 | ':patch:_hg_qunapplied' | ||
} | ||||
|
r3487 | |||
|
r3537 | _hg_cmd_qrefresh() { | ||
_arguments -s -w : $_hg_global_opts $_hg_pat_opts $_hg_commit_opts \ | ||||
|
r3539 | '(--git -g)'{-g,--git}'[use git extended diff format]' \ | ||
'(--short -s)'{-s,--short}'[short refresh]' \ | ||||
|
r3603 | '*:files:_hg_files' | ||
|
r3537 | } | ||
|
r3487 | |||
|
r3541 | _hg_cmd_qrename() { | ||
_arguments -s -w : $_hg_global_opts \ | ||||
':patch:_hg_qseries' \ | ||||
':destination:' | ||||
} | ||||
_hg_cmd_qselect() { | ||||
_arguments -s -w : $_hg_global_opts \ | ||||
'(--none -n :)'{-n,--none}'[disable all guards]' \ | ||||
'(--series -s :)'{-s,--series}'[list all guards in series file]' \ | ||||
'--pop[pop to before first guarded applied patch]' \ | ||||
'--reapply[pop and reapply patches]' \ | ||||
'*:guards:_hg_qguards' | ||||
} | ||||
_hg_cmd_qseries() { | ||||
_arguments -s -w : $_hg_global_opts $_hg_qseries_opts \ | ||||
'(--missing -m)'{-m,--missing}'[print patches not in series]' | ||||
} | ||||
_hg_cmd_qunapplied() { | ||||
_arguments -s -w : $_hg_global_opts $_hg_qseries_opts | ||||
} | ||||
_hg_cmd_qtop() { | ||||
_arguments -s -w : $_hg_global_opts $_hg_qseries_opts | ||||
} | ||||
|
r3537 | _hg_cmd_strip() { | ||
_arguments -s -w : $_hg_global_opts \ | ||||
|
r3539 | '(--force -f)'{-f,--force}'[force multi-head removal]' \ | ||
'(--backup -b)'{-b,--backup}'[bundle unrelated changesets]' \ | ||||
'(--nobackup -n)'{-n,--nobackup}'[no backups]' \ | ||||
|
r3537 | ':revision:_hg_tags' | ||
} | ||||
|
r3493 | |||
|
r3537 | _hg "$@" | ||