Merge branch 'fvu'
This commit is contained in:
commit
57565c1ce2
125
bash_completion
125
bash_completion
@ -1152,76 +1152,75 @@ _known_hosts_real()
|
|||||||
|
|
||||||
# If we have known_hosts files to use
|
# If we have known_hosts files to use
|
||||||
if [ ${#kh[@]} -gt 0 -o ${#khd[@]} -gt 0 -o -n "$configfile" ]; then
|
if [ ${#kh[@]} -gt 0 -o ${#khd[@]} -gt 0 -o -n "$configfile" ]; then
|
||||||
# Escape slashes and dots in paths for awk
|
# Escape slashes and dots in paths for awk
|
||||||
awkcur=${cur//\//\\\/}
|
awkcur=${cur//\//\\\/}
|
||||||
awkcur=${awkcur//\./\\\.}
|
awkcur=${awkcur//\./\\\.}
|
||||||
curd=$awkcur
|
curd=$awkcur
|
||||||
|
|
||||||
if [[ "$awkcur" == [0-9]*.* ]]; then
|
if [[ "$awkcur" == [0-9]*.* ]]; then
|
||||||
# Digits followed by a dot - just search for that
|
# Digits followed by a dot - just search for that
|
||||||
awkcur="^$awkcur.*"
|
awkcur="^$awkcur.*"
|
||||||
elif [[ "$awkcur" == [0-9]* ]]; then
|
elif [[ "$awkcur" == [0-9]* ]]; then
|
||||||
# Digits followed by no dot - search for digits followed
|
# Digits followed by no dot - search for digits followed
|
||||||
# by a dot
|
# by a dot
|
||||||
awkcur="^$awkcur.*\."
|
awkcur="^$awkcur.*\."
|
||||||
elif [ -z "$awkcur" ]; then
|
elif [ -z "$awkcur" ]; then
|
||||||
# A blank - search for a dot or an alpha character
|
# A blank - search for a dot or an alpha character
|
||||||
awkcur="[a-z.]"
|
awkcur="[a-z.]"
|
||||||
else
|
else
|
||||||
awkcur="^$awkcur"
|
awkcur="^$awkcur"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ ${#kh[@]} -gt 0 ]; then
|
if [ ${#kh[@]} -gt 0 ]; then
|
||||||
|
# FS needs to look for a comma separated list
|
||||||
# FS needs to look for a comma separated list
|
COMPREPLY=( $( awk 'BEGIN {FS=","}
|
||||||
COMPREPLY=( $( awk 'BEGIN {FS=","}
|
|
||||||
/^\s*[^|\#]/ {for (i=1; i<=2; ++i) { \
|
/^\s*[^|\#]/ {for (i=1; i<=2; ++i) { \
|
||||||
gsub(" .*$", "", $i); \
|
gsub(" .*$", "", $i); \
|
||||||
if ($i ~ /'$awkcur'/) {print $i} \
|
if ($i ~ /'$awkcur'/) {print $i} \
|
||||||
}}' "${kh[@]}" 2>/dev/null ) )
|
}}' "${kh[@]}" 2>/dev/null ) )
|
||||||
fi
|
fi
|
||||||
if [ ${#khd[@]} -gt 0 ]; then
|
if [ ${#khd[@]} -gt 0 ]; then
|
||||||
# Needs to look for files called
|
# Needs to look for files called
|
||||||
# .../.ssh2/key_22_<hostname>.pub
|
# .../.ssh2/key_22_<hostname>.pub
|
||||||
# dont fork any processes, because in a cluster environment,
|
# dont fork any processes, because in a cluster environment,
|
||||||
# there can be hundreds of hostkeys
|
# there can be hundreds of hostkeys
|
||||||
for i in "${khd[@]}" ; do
|
for i in "${khd[@]}" ; do
|
||||||
if [[ "$i" == *key_22_$awkcurd*.pub ]] && [ -r "$i" ] ; then
|
if [[ "$i" == *key_22_$awkcurd*.pub ]] && [ -r "$i" ] ; then
|
||||||
host=${i/#*key_22_/}
|
host=${i/#*key_22_/}
|
||||||
host=${host/%.pub/}
|
host=${host/%.pub/}
|
||||||
COMPREPLY=( "${COMPREPLY[@]}" $host )
|
COMPREPLY=( "${COMPREPLY[@]}" $host )
|
||||||
fi
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
# append any available aliases from config files
|
||||||
|
if [ ${#config[@]} -gt 0 ] && [ -n "$aliases" ]; then
|
||||||
|
local host_aliases=$( sed -ne 's/^[ \t]*[Hh][Oo][Ss][Tt]\([Nn][Aa][Mm][Ee]\)\?['"$'\t '"']\+\([^#*?]*\)\(#.*\)\?$/\2/p' "${config[@]}" )
|
||||||
|
hosts=$( compgen -W "$host_aliases" -- $cur )
|
||||||
|
COMPREPLY=( "${COMPREPLY[@]}" $hosts )
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Add hosts reported by avahi, if it's available
|
||||||
|
# and if the daemon is started.
|
||||||
|
# The original call to avahi-browse also had "-k", to avoid
|
||||||
|
# lookups into avahi's services DB. We don't need the name
|
||||||
|
# of the service, and if it contains ";", it may mistify
|
||||||
|
# the result. But on Gentoo (at least), -k isn't available
|
||||||
|
# (even if mentioned in the manpage), so...
|
||||||
|
if type avahi-browse >&/dev/null; then
|
||||||
|
if [ -n "$(pidof avahi-daemon)" ]; then
|
||||||
|
COMPREPLY=( "${COMPREPLY[@]}" $(
|
||||||
|
compgen -W "$( avahi-browse -cpr _workstation._tcp | \
|
||||||
|
grep ^= | cut -d\; -f7 | sort -u )" -- $cur ) )
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Now add results of normal hostname completion
|
||||||
|
COMPREPLY=( "${COMPREPLY[@]}" $( compgen -A hostname -- $cur ) )
|
||||||
|
|
||||||
|
# apply suffix and prefix
|
||||||
|
for (( i=0; i < ${#COMPREPLY[@]}; i++ )); do
|
||||||
|
COMPREPLY[i]=$prefix$user${COMPREPLY[i]}$suffix
|
||||||
done
|
done
|
||||||
fi
|
|
||||||
# append any available aliases from config files
|
|
||||||
if [ ${#config[@]} -gt 0 ] && [ -n "$aliases" ]; then
|
|
||||||
local host_aliases=$( sed -ne 's/^[ \t]*[Hh][Oo][Ss][Tt]\([Nn][Aa][Mm][Ee]\)\?['"$'\t '"']\+\([^#*?]*\)\(#.*\)\?$/\2/p' "${config[@]}" )
|
|
||||||
hosts=$( compgen -W "$host_aliases" -- $cur )
|
|
||||||
COMPREPLY=( "${COMPREPLY[@]}" $hosts )
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Add hosts reported by avahi, if it's available
|
|
||||||
# and if the daemon is started.
|
|
||||||
# The original call to avahi-browse also had "-k", to avoid
|
|
||||||
# lookups into avahi's services DB. We don't need the name
|
|
||||||
# of the service, and if it contains ";", it may mistify
|
|
||||||
# the result. But on Gentoo (at least), -k isn't available
|
|
||||||
# (even if mentioned in the manpage), so...
|
|
||||||
if type avahi-browse >&/dev/null; then
|
|
||||||
if [ -n "$(pidof avahi-daemon)" ]; then
|
|
||||||
COMPREPLY=( "${COMPREPLY[@]}" $(
|
|
||||||
compgen -W "$( avahi-browse -cpr _workstation._tcp | \
|
|
||||||
grep ^= | cut -d\; -f7 | sort -u )" -- $cur ) )
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Now add results of normal hostname completion
|
|
||||||
COMPREPLY=( "${COMPREPLY[@]}" $( compgen -A hostname -- $cur ) )
|
|
||||||
|
|
||||||
# apply suffix and prefix
|
|
||||||
for (( i=0; i < ${#COMPREPLY[@]}; i++ )); do
|
|
||||||
COMPREPLY[i]=$prefix$user${COMPREPLY[i]}$suffix
|
|
||||||
done
|
|
||||||
elif [ -z "$configfile" ]; then
|
elif [ -z "$configfile" ]; then
|
||||||
# Just do normal hostname completion
|
# Just do normal hostname completion
|
||||||
COMPREPLY=( $( compgen -A hostname -S "$suffix" -- $cur ) )
|
COMPREPLY=( $( compgen -A hostname -S "$suffix" -- $cur ) )
|
||||||
|
68
test/generate
Executable file
68
test/generate
Executable file
@ -0,0 +1,68 @@
|
|||||||
|
#!/bin/bash -eu
|
||||||
|
# Generate skeleton files for completion of specified command.
|
||||||
|
# Test skeleton files are generated as well.
|
||||||
|
# @param $1 string Command, e.g. 'make'
|
||||||
|
# @param $2 string Completion function, e.g. _command
|
||||||
|
# @param $3 string Completion arguments, e.g. '-o filenames'
|
||||||
|
|
||||||
|
|
||||||
|
# Generate test code
|
||||||
|
# @param $1 string Command, e.g. 'make'
|
||||||
|
generate_test_completion() {
|
||||||
|
local path="completion/$1.exp"
|
||||||
|
# Does file already exist?
|
||||||
|
#if [ ! -f "$path" ]; then
|
||||||
|
# No, file doesn't exist; generate file
|
||||||
|
cat <<EXPECT > "$path"
|
||||||
|
if {[assert_bash_type $1]} {
|
||||||
|
source "lib/completions/$1.exp"
|
||||||
|
}; # if
|
||||||
|
EXPECT
|
||||||
|
#fi
|
||||||
|
} # generate_test_completion()
|
||||||
|
|
||||||
|
|
||||||
|
# Generate test code
|
||||||
|
# @param $1 string Command, e.g. 'make'
|
||||||
|
# @param $2 string Completion function, e.g. _command
|
||||||
|
# @param $3 string Completion arguments, e.g. ' -o filenames'
|
||||||
|
generate_test_lib_completions() {
|
||||||
|
local path="lib/completions/$1.exp"
|
||||||
|
# Does file already exist?
|
||||||
|
#if [ ! -f "$path" ]; then
|
||||||
|
# No, file doesn't exist; generate file
|
||||||
|
cat <<EXPECT > "$path"
|
||||||
|
proc setup {} {
|
||||||
|
save_env
|
||||||
|
}; # setup()
|
||||||
|
|
||||||
|
|
||||||
|
proc teardown {} {
|
||||||
|
assert_env_unmodified
|
||||||
|
}; # teardown()
|
||||||
|
|
||||||
|
|
||||||
|
setup
|
||||||
|
|
||||||
|
|
||||||
|
assert_complete_any "$1 "
|
||||||
|
|
||||||
|
|
||||||
|
sync_after_int
|
||||||
|
|
||||||
|
|
||||||
|
teardown
|
||||||
|
EXPECT
|
||||||
|
#fi
|
||||||
|
} # generate_test_lib_completions()
|
||||||
|
|
||||||
|
|
||||||
|
# If argument count is wrong, show help
|
||||||
|
if [ $# -ne 1 ]; then
|
||||||
|
echo "Usage: $0 command"
|
||||||
|
echo "Example: $0 make"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
generate_test_completion "$1"
|
||||||
|
generate_test_lib_completions "$1"
|
Loading…
x
Reference in New Issue
Block a user