Add ability to add an option comment when adding a record

This addition requires a number of changes including:

- the addition of a new `_join` function
- reformatting of the `add` function to facilitate the longer lines
This commit is contained in:
William Melody 2015-03-20 18:06:00 -07:00
parent 023aa0503f
commit 312f5909fa
2 changed files with 40 additions and 11 deletions

View File

@ -16,7 +16,7 @@ To install with homebrew, use the following command:
Usage: Usage:
hosts hosts
hosts add <ip> <hostname> hosts add <ip> <hostname> [comment]
hosts remove ( <ip> | <hostname> | <search string> ) [--force] hosts remove ( <ip> | <hostname> | <search string> ) [--force]
hosts list [enabled | disabled | <search string>] hosts list [enabled | disabled | <search string>]
hosts show ( <ip> | <hostname> | <search string> ) hosts show ( <ip> | <hostname> | <search string> )
@ -37,9 +37,9 @@ For help with a particular command, try:
## Commands ## Commands
###### `hosts add <ip> <hostname>` ###### `hosts add <ip> <hostname> [comment]`
Add a given IP address and hostname pair. Add a given IP address and hostname pair, along with an optional comment.
###### `hosts remove ( <ip> | <hostname> | <search string> ) [--force]` ###### `hosts remove ( <ip> | <hostname> | <search string> ) [--force]`

45
hosts
View File

@ -365,6 +365,22 @@ _contains() {
return 1 return 1
} }
# _join()
#
# Takes a separator and a list of items, joining that list of items with the
# separator.
#
# Usage:
# _join "," a b c
# _join "${an_array[@]}"
_join() {
local separator="$1"
local target_array=(${@:2})
local dirty="$(printf "${separator}%s" "${target_array[@]}")"
local clean="${dirty:${#separator}}"
printf "%s" "${clean}"
}
# _command_argv_includes() # _command_argv_includes()
# #
# Takes a possible command argument and determines whether it is included in # Takes a possible command argument and determines whether it is included in
@ -494,7 +510,7 @@ Version: $_VERSION
Usage: Usage:
$_me $_me
$_me add <ip> <hostname> $_me add <ip> <hostname> [comment]
$_me remove ( <ip> | <hostname> | <search string> ) [--force] $_me remove ( <ip> | <hostname> | <search string> ) [--force]
$_me list [enabled | disabled | <search string>] $_me list [enabled | disabled | <search string>]
$_me show ( <ip> | <hostname> | <search string> ) $_me show ( <ip> | <hostname> | <search string> )
@ -573,15 +589,16 @@ commands() {
desc add <<EOM desc add <<EOM
Usage: Usage:
$_me add <ip> <hostname> $_me add <ip> <hostname> [comment]
Description: Description:
Add a given IP address and hostname pair. Add a given IP address and hostname pair, along with an optional comment.
EOM EOM
add() { add() {
_verify_write_permissions _verify_write_permissions
local ip=${1:-} local ip=${1:-}
local hostname=${2:-} local hostname=${2:-}
local comment=${*:3}
if [[ -z ${ip} ]]; then if [[ -z ${ip} ]]; then
$_me help add $_me help add
exit 1 exit 1
@ -589,12 +606,24 @@ add() {
printf "Please include a hostname\n" printf "Please include a hostname\n"
$_me help add $_me help add
exit 1 exit 1
elif grep "^${ip}.*[^A-Za-z0-9\.]${hostname}$" "${HOSTS_PATH}" ; then elif grep \
_die printf \ -e "^${ip}\t${hostname}$" \
"Duplicate address/host combination, %s unchanged.\n" \ -e "^${ip}\t${hostname}\t.*$" "${HOSTS_PATH}" ; then
"${HOSTS_PATH}" _die printf \
"Duplicate address/host combination, %s unchanged.\n" \
"${HOSTS_PATH}"
else else
printf "%s\t%s\n" "${ip}" "${hostname}" >> "${HOSTS_PATH}" if [[ -n ${comment} ]]; then
local formmatted_comment=$(_join " " "${comment[@]}")
printf "%s\t%s\t# %s\n" \
"${ip}" \
"${hostname}" \
"${formmatted_comment}" >> "${HOSTS_PATH}"
else
printf "%s\t%s\n" \
"${ip}" \
"${hostname}" >> "${HOSTS_PATH}"
fi
fi fi
} }