# HG changeset patch # User Bryan O'Sullivan # Date 1363908689 25200 # Node ID a821ec835223492b9605e4804abfaaec8700cbb3 # Parent 10669e24eb6c664f13110cf6012e381778c730b3 completion: selectively use debugpathcomplete in bash_completion The current bash_completion code can be very slow in a large working directory. It always uses "hg status" to generate possibly matching files, which checks the status of every file. We often don't care about status when completing, so that cost is very high. As the new debugpathcomplete command does not check the status of files, it offers much better performance for commands that only care about completing names. diff -r 10669e24eb6c -r a821ec835223 contrib/bash_completion --- a/contrib/bash_completion Thu Mar 21 16:31:28 2013 -0700 +++ b/contrib/bash_completion Thu Mar 21 16:31:29 2013 -0700 @@ -80,6 +80,14 @@ done } +_hg_debugpathcomplete() +{ + local files="$(_hg_cmd debugpathcomplete $1 "$cur")" + local IFS=$'\n' + compopt -o filenames 2>/dev/null + COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$files' -- "$cur")) +} + _hg_status() { local files="$(_hg_cmd status -n$1 "glob:$cur**")" @@ -241,16 +249,16 @@ _hg_status "mar" ;; remove) - _hg_status "mcd" + _hg_debugpathcomplete -n ;; forget) - _hg_status "a" + _hg_debugpathcomplete -fa ;; diff) _hg_status "mar" ;; revert) - _hg_status "mard" + _hg_debugpathcomplete ;; clone) local count=$(_hg_count_non_option)