blob: d81e5f3c0b1f5517f0747e78ec017a4d9425e062 [file] [log] [blame]
#!/usr/bin/env bash
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# Auto completion script for GemFire's gfsh script
#
# Either explicitly source it into your shell enviroment, set it up in your
# .bashrc or .bash_profile or copy it to /etc/bash_completion.d
#
_gfsh() {
# The main verbs gfsh understands
declare -r VERBS="compact describe encrypt help run start status stop validate version"
# The nouns relevant to the verbs
declare -r N_compact="offline-disk-store"
declare -r N_describe="offline-disk-store"
declare -r N_encrypt="password"
declare -r N_help="$VERBS"
declare -r N_start="jconsole jvisualvm locator pulse server vsd"
declare -r N_status="locator server"
declare -r N_stop="locator server"
declare -r N_validate="offline-disk-store"
# The options relevant to each verb-noun combination
declare -r OPT_compact_offline_disk_store="--name --disk-dirs --max-oplog-size --J"
declare -r OPT_describe_offline_disk_store="--name=value --disk-dirs --region"
declare -r OPT_encrypt_password="--password"
declare -r OPT_run="--file --quiet --continue-on-error"
declare -r OPT_start_jconsole="--interval --notile --pluginpath --version --J"
declare -r OPT_start_jvisualvm="--J"
declare -r OPT_start_locator="--name --bind-address --force --group \
--hostname-for-clients --locators --log-level --mcast-address \
--mcast-port --port --dir --properties-file --security-properties-file \
--initial-heap --max-heap --J --connect --enable-cluster-configuration \
--load-cluster-configuration-from-dir"
declare -r OPT_start_pulse="--url"
declare -r OPT_start_server="--name --assign-buckets --bind-address \
--cache-xml-file --classpath --disable-default-server \
--disable-exit-when-out-of-memory --enable-time-statistics --force \
--properties-file --security-properties-file --group \
--locators \
--log-level --mcast-address --mcast-port --name --memcached-port \
--memcached-protocol --rebalance --server-bind-address --server-port \
--spring-xml-location --statistic-archive-file --dir --initial-heap \
--max-heap --use-cluster-configuration --J --critical-heap-percentage \
--eviction-heap-percentage --hostname-for-clients --max-connections \
--message-time-to-live --max-message-count --max-threads --socket-buffer-size"
declare -r OPT_start_vsd="--file"
declare -r OPT_status_locator="--name --host --port --pid --dir"
declare -r OPT_status_server="--name --pid --dir"
declare -r OPT_stop_locator="--name --pid --dir"
declare -r OPT_stop_server="--name --pid --dir"
declare -r OPT_validate_offline_disk_store="--name --disk-dirs"
declare -r OPT_version="--full"
local cur=${COMP_WORDS[COMP_CWORD]}
local use="VERBS"
local verb=${COMP_WORDS[1]}
local noun=${COMP_WORDS[2]}
# Ignore potential options
noun=${noun##-*}
# Because variable names can't have dashes
noun=${noun//-/_}
if [[ -n "$noun" ]]; then
use="OPT_${verb}_${noun}"
if [[ -z "${!use}" ]]; then
use="N_$verb"
fi
elif [[ -n "$verb" ]]; then
# Special handling for these as they don't have associated nouns
if [[ "$verb" = "run" || "$verb" = "version" ]]; then
use="OPT_$verb"
else
use="N_$verb"
if [[ -z "${!use}" ]]; then
use="VERBS"
fi
fi
fi
COMPREPLY=( $( compgen -W "${!use}" -- "$cur" ) )
}
complete -F _gfsh gfsh