Mercurial > hg > mercurial-crew-with-dirclash
view contrib/bash_completion @ 1721:801756d0ca84
add pretxncommit hook.
hook allows check of changeset after create, but before transaction
is committed. hook failure rolls transaction back.
makes place for local policies like commit message must contain bug id
or reviewer signoff.
change also adds parent changeset ids to commit hook environment,
because is cheap and useful.
author | Vadim Gelfer <vadim.gelfer@gmail.com> |
---|---|
date | Tue, 14 Feb 2006 17:13:18 -0800 |
parents | cf930b2452d3 |
children | 2af98c4b2587 |
line wrap: on
line source
shopt -s extglob _hg_command_list() { "$hg" --debug help 2>/dev/null | \ awk 'function command_line(line) { gsub(/,/, "", line) gsub(/:.*/, "", line) split(line, aliases) command = aliases[1] delete aliases[1] print command for (i in aliases) if (index(command, aliases[i]) != 1) print aliases[i] } /^list of commands:/ {commands=1} commands && /^ debug/ {a[i++] = $0; next;} commands && /^ [^ ]/ {command_line($0)} /^global options:/ {exit 0} END {for (i in a) command_line(a[i])}' } _hg_option_list() { "$hg" -v help $1 2>/dev/null | \ awk '/^ *-/ { for (i = 1; i <= NF; i ++) { if (index($i, "-") != 1) break; print $i; } }' } _hg_commands() { local all commands result all=$(_hg_command_list) commands=${all%%$'\n'debug*} result=$(compgen -W '$commands' -- "$cur") # hide debug commands from users, but complete them if # there is no other possible command if [ "$result" = "" ]; then local debug debug=debug${all#*$'\n'debug} result=$(compgen -W '$debug' -- "$cur") fi COMPREPLY=(${COMPREPLY[@]:-} $result) } _hg_paths() { local paths="$("$hg" paths 2>/dev/null | sed -e 's/ = .*$//')" COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$paths' -- "$cur")) } _hg_repos() { local i for i in $(compgen -d -- "$cur"); do test ! -d "$i"/.hg || COMPREPLY=(${COMPREPLY[@]:-} "$i") done } _hg_status() { local files="$("$hg" status -n$1 . 2>/dev/null)" COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$files' -- "$cur")) } _hg_tags() { local tags="$("$hg" tags 2>/dev/null | sed -e 's/[0-9]*:[a-f0-9]\{40\}$//; s/ *$//')" COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$tags' -- "$cur")) } # this is "kind of" ugly... _hg_count_non_option() { local i count=0 local filters="$1" for ((i=1; $i<=$COMP_CWORD; i++)); do if [[ "${COMP_WORDS[i]}" != -* ]]; then if [[ ${COMP_WORDS[i-1]} == @($filters|$global_args) ]]; then continue fi count=$(($count + 1)) fi done echo $(($count - 1)) } _hg() { local cur prev cmd opts i # global options that receive an argument local global_args='--cwd|-R|--repository' local hg="$1" COMPREPLY=() cur="$2" prev="$3" # searching for the command # (first non-option argument that doesn't follow a global option that # receives an argument) for ((i=1; $i<=$COMP_CWORD; i++)); do if [[ ${COMP_WORDS[i]} != -* ]]; then if [[ ${COMP_WORDS[i-1]} != @($global_args) ]]; then cmd="${COMP_WORDS[i]}" break fi fi done if [[ "$cur" == -* ]]; then opts=$(_hg_option_list $cmd) COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$opts' -- "$cur")) return fi # global options case "$prev" in -R|--repository) _hg_repos return ;; --cwd) # Stick with default bash completion return ;; esac if [ -z "$cmd" ] || [ $COMP_CWORD -eq $i ]; then _hg_commands return fi # canonicalize command name cmd=$("$hg" -q help "$cmd" 2>/dev/null | sed -e 's/^hg //; s/ .*//; 1q') if [ "$cmd" != status ] && [ "$prev" = -r ] || [ "$prev" = --rev ]; then _hg_tags return fi case "$cmd" in help) _hg_commands ;; export|manifest|update) _hg_tags ;; pull|push|outgoing|incoming) _hg_paths _hg_repos ;; paths) _hg_paths ;; add) _hg_status "u" ;; commit) _hg_status "mar" ;; remove) _hg_status "d" ;; forget) _hg_status "a" ;; diff) _hg_status "mar" ;; revert) _hg_status "mard" ;; clone) local count=$(_hg_count_non_option) if [ $count = 1 ]; then _hg_paths fi _hg_repos ;; debugindex|debugindexdot) COMPREPLY=(${COMPREPLY[@]:-} $(compgen -f -X "!*.i" -- "$cur")) ;; debugdata) COMPREPLY=(${COMPREPLY[@]:-} $(compgen -f -X "!*.d" -- "$cur")) ;; esac } complete -o bashdefault -o default -F _hg hg 2>/dev/null \ || complete -o default -F _hg hg