Fix false posives for non-option words in _parse_help (Alioth: #312750, Stephen Gildea).

This commit is contained in:
Ville Skyttä 2010-10-11 00:01:51 +03:00
parent dff4241998
commit 95399f638c
3 changed files with 69 additions and 1 deletions

View File

@ -46,6 +46,9 @@ bash-completion (2.x)
* Add *.part (partially downloaded) to mplayer and xine-based player
completions (Alioth: #312657).
[ Stephen Gildea ]
* Fix false posives for non-option words in _parse_help (Alioth: #312750).
-- David Paleino <d.paleino@gmail.com> Wed, 16 Jun 2010 17:53:22 +0200
bash-completion (1.2)

View File

@ -677,7 +677,7 @@ _split_longopt()
#
_parse_help() {
$1 ${2:---help} 2>&1 | command grep -- "^[[:space:]]*-" | tr "," " " | \
awk '{print $1; if ($2 ~ /-.*/) { print $2 } }' | sed -e "s:=.*::g"
awk '{print $1; if ($2 ~ /^-.*/) { print $2 } }' | sed -e "s:=.*::g"
}
# This function completes on signal names

65
test/unit/_parse_help.exp Normal file
View File

@ -0,0 +1,65 @@
# By Stephen Gildea, October 2010.
proc setup {} {
save_env
}
proc teardown {} {
assert_env_unmodified {
/declare -f fn/d
}
}
setup
set cmd {fn() { printf '%s\n' ""; }; _parse_help fn}
assert_bash_list "" $cmd "empty"
sync_after_int
set cmd {fn() { printf '%s\n' "no dashes here"; }; _parse_help fn}
assert_bash_list "" $cmd "no dashes"
sync_after_int
set cmd {fn() { printf '%s\n' "internal-dash"; }; _parse_help fn}
assert_bash_list "" $cmd "internal dash 1"
sync_after_int
set cmd {fn() { printf '%s\n' "no -leading-dashes"; }; _parse_help fn}
assert_bash_list "" $cmd "no leading dash"
sync_after_int
set cmd {fn() { printf '%s\n' "-one dash"; }; _parse_help fn}
assert_bash_list "-one" $cmd "one dash"
sync_after_int
set cmd {fn() { printf '%s\n' " -space dash"; }; _parse_help fn}
assert_bash_list "-space" $cmd "one dash after space"
sync_after_int
set cmd {fn() { printf '%s\n' "-one -two dashes"; }; _parse_help fn}
assert_bash_list "-one\n-two" $cmd "two dashes, space-separated"
sync_after_int
set cmd {fn() { printf '%s\n' "-one,-t dashes"; }; _parse_help fn}
assert_bash_list "-one\n-t" $cmd "two dashes, comma-separated"
sync_after_int
set cmd {fn() { printf '%s\n' "-one dash-inside"; }; _parse_help fn}
assert_bash_list "-one" $cmd "internal dash 2"
sync_after_int
set cmd {fn() { printf '%s\n' "--long-arg=value"; }; _parse_help fn}
assert_bash_list "--long-arg" $cmd "value stripped"
sync_after_int
set cmd {fn() { printf '%s\n' "--long-arg=-value"; }; _parse_help fn}
assert_bash_list "--long-arg" $cmd "value not seen as option"
sync_after_int
set cmd {fn() { printf '%s\n' "--long-arg=-value,--opt2=val"; }; _parse_help fn}
assert_bash_list "--long-arg\n--opt2" $cmd "two options with values"
sync_after_int
teardown