1
0
mirror of https://github.com/octoleo/hosts.git synced 2024-06-17 13:42:21 +00:00

Compare commits

...

64 Commits

Author SHA1 Message Date
William Melody
8916c43efa Add .github configuration. 2023-06-27 16:59:08 -07:00
William Melody
9ea716f861
Use two-step homebrew install in README. 2020-10-06 23:13:23 -07:00
William Melody
9a929dc70f Update to version 3.6.4 2020-09-11 18:22:23 -07:00
William Melody
80699292a4 Use 'entries' terminology consistently. 2020-09-11 17:46:18 -07:00
William Melody
06ad3e8deb Add exit status to list and associated subcommands. 2020-09-11 17:40:47 -07:00
William Melody
c74671613b Improve exit status documentation. 2020-09-11 17:22:02 -07:00
William Melody
0201480ffb Group helper variables and functions in Helpers section. 2020-09-11 17:01:29 -07:00
William Melody
0ce875c210 Use sed -i via a _sed_i() wrapper. 2020-09-11 17:01:29 -07:00
William Melody
6a58eb693d
Update README 2020-08-23 13:34:58 -07:00
William Melody
245188025a Improve realpath / readlink handling. 2020-08-16 10:14:48 -07:00
William Melody
39a182b47e Update Usage: ordering in backups. 2020-06-08 09:49:36 -07:00
William Melody
bd7edba09b Improve spacing and comments in subcommands. 2020-06-08 09:42:58 -07:00
William Melody
5049abe817 Use alpha ordering for subcommand handling in backup. 2020-06-08 09:36:16 -07:00
William Melody
5c87ad62b0 Update version to 3.6.3 2020-06-07 18:07:12 -07:00
William Melody
ca51f3f742 Remove extra newline. 2020-06-07 18:05:18 -07:00
William Melody
ade1109cba Add missing _warn statements. 2020-06-07 17:22:20 -07:00
William Melody
3c383581c5 Update version to 3.6.2 2020-06-07 17:17:00 -07:00
William Melody
2346f6f814 Add missing _download_from() function. 2020-06-07 17:15:51 -07:00
William Melody
0715b9ec66 Update version to 3.6.1 2020-06-07 15:42:50 -07:00
William Melody
42a2a9f3d4 Use __ prefix for variables in loops. 2020-06-07 15:42:11 -07:00
William Melody
c11f22e558 Update error message in _main(). 2020-06-07 15:38:29 -07:00
William Melody
0d5f41537d Fix spacing in option parsing. 2020-06-07 15:13:23 -07:00
William Melody
0a98202f84 Remove additional _debug() statement. 2020-06-07 15:06:29 -07:00
William Melody
040593bd51 Improve _load_subcommands(). 2020-06-07 15:04:45 -07:00
William Melody
0b79763874 Update Make install instructions. 2020-06-07 14:59:31 -07:00
William Melody
d6e3a8a128 Update version to 3.6.0 2020-06-07 14:57:43 -07:00
William Melody
0fa9b240c6 Remove extra space in _load_subcommands(). 2020-06-07 14:51:12 -07:00
William Melody
83bb517312 Update help and README.md for subcommands. 2020-06-07 14:49:59 -07:00
William Melody
d396c5eefb Fix order in $_SUBCOMMANDS. 2020-06-07 14:44:57 -07:00
William Melody
8ab47640f0 Rename commands to subcommands. 2020-06-07 14:44:10 -07:00
William Melody
c3be802faf Fix function name in _debug statement. 2020-06-07 14:41:35 -07:00
William Melody
768acb5d80 Rename $_DEFINED_COMMANDS to $_DEFINED_SUBCOMMANDS. 2020-06-07 14:41:05 -07:00
William Melody
379f99f4e1 Rename _load_commands() to _load_subcommands(). 2020-06-07 14:40:03 -07:00
William Melody
28fea3a599 Rename global variable to $HOSTS_DEFAULT_SUBCOMMAND. 2020-06-07 14:39:18 -07:00
William Melody
bf65fbcad8 Replace $_CMD with $_SUBCOMMAND. 2020-06-07 14:37:10 -07:00
William Melody
5d4a9dfb28 Remove extra comments in _main(). 2020-06-07 14:36:21 -07:00
William Melody
0bd86e533d Move program functions to bottom of script. 2020-06-07 14:29:41 -07:00
William Melody
a39c60aafa Use curly braces for all $_ME variable references. 2020-06-07 14:18:20 -07:00
William Melody
1da838faeb Remove extra comment. 2020-06-07 14:17:02 -07:00
William Melody
6e1d408ad5 Improve header formatting. 2020-06-07 14:14:13 -07:00
William Melody
c381c8bd98 Add MIT license text to header.
resolves gh-10
2020-06-07 14:11:15 -07:00
William Melody
426f2ed602 Improve global variable comments. 2020-06-07 14:04:37 -07:00
William Melody
7596a2901f Improve variable names in _print_entries(). 2020-06-07 14:00:28 -07:00
William Melody
4e9ad74697 Improve alignment. 2020-06-07 13:57:07 -07:00
William Melody
051e8b3840 Don't use quotes when assigning empty strings. 2020-06-07 13:54:21 -07:00
William Melody
f585447612 Improve variable handling in _print_entries(). 2020-06-07 13:51:00 -07:00
William Melody
4238e8bd81 Add completions help to README.md 2020-06-07 13:45:14 -07:00
William Melody
a64c20bdd8 Rearrange commands in script. 2020-06-07 13:43:04 -07:00
William Melody
5865f92977 Remove version from default help output. 2020-06-07 13:40:11 -07:00
William Melody
2b81ea530f Remove unused utility functions. 2020-06-07 13:39:01 -07:00
William Melody
1e6af9b309 Improve comment in $_SED_I_COMMAND assignment. 2020-06-07 13:38:17 -07:00
William Melody
47b5d51fa3 Remove unused helper functions. 2020-06-07 13:36:33 -07:00
William Melody
d775353c9a Use quotes when assigning function name. 2020-06-07 13:35:21 -07:00
William Melody
73ecc3119e Clean up program option parsing section. 2020-06-07 13:34:00 -07:00
William Melody
d242aed463 Remove obsolete $_COMMAND_ARGV variable. 2020-06-07 13:31:46 -07:00
William Melody
9bf7f782c9 Use improved _contains(). 2020-06-07 13:26:27 -07:00
William Melody
f0ebb08cd4 Use improved _join(). 2020-06-07 13:25:03 -07:00
William Melody
4aeab14d2d Remove obsolete _command_argv_includes(). 2020-06-07 13:23:54 -07:00
William Melody
952e2465b3 Add _warn() and use in completions. 2020-06-07 13:20:33 -07:00
William Melody
23d6a1c653 Move completion installation into the main script. 2020-06-07 13:20:12 -07:00
William Melody
17b2615820 Improve header, with note about LICENSE.
gh-10
2020-06-07 13:19:43 -07:00
William Melody
68b421f95a Combine Environment and Globals. 2020-06-07 12:45:07 -07:00
William Melody
a09e7b2468 Improve section dividers. 2020-06-07 12:40:44 -07:00
William Melody
dfbc83e12c Improve _debug(). 2020-06-07 12:34:55 -07:00
18 changed files with 989 additions and 769 deletions

2
.github/FUNDING.yml vendored Normal file
View File

@ -0,0 +1,2 @@
github: xwmx
custom: https://paypal.me/WilliamMelody

84
.github/workflows/tests.yml vendored Normal file
View File

@ -0,0 +1,84 @@
###############################################################################
# .github/workflows/tests.yml
#
# NOTE: GitHub Actions does not allocate a TTY, preventing detection of
# piped input using `[[ -t 0 ]]`.
#
# More information:
#
# https://github.com/actions/runner/issues/241
#
# faketty is a GitHub action that uses work-arounds to provide a tty:
#
# https://github.com/marketplace/actions/faketty
#
# Scripts used by faketty for each platform:
#
# linux: `faketty`
#
# ```bash
# #!/bin/bash
#
# script -q -e -c "$*"
# ```
#
# win32: `faketty.ps1`
#
# ```posh
# Invoke-Expression "$args"
# ```
#
# darwin: `faketty`
#
# requires: `brew install expect`
#
# ```bash
# #!/bin/bash
#
# unbuffer $*
# ```
###############################################################################
name: "hosts · Test Suite"
on:
pull_request:
branches: [ master ]
push:
branches: [ master ]
workflow_dispatch:
jobs:
test-macos-11:
name: "Test: macOS Big Sur 11.0"
runs-on: macos-11.0
steps:
- uses: actions/checkout@v3
- name: "Setup"
run: |
brew update
brew install bats-core
brew install expect
- name: "Set $TERM=xterm"
run: printf "TERM=xterm\\n" >> $GITHUB_ENV
- name: "Run bats tests"
run: unbuffer bats test
test-ubuntu-latest:
name: "Test: Ubuntu Latest"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: "Setup"
run: |
sudo apt-get update
sudo apt-get install bats -y
- name: "Install bats-core"
run: |
git clone https://github.com/bats-core/bats-core.git "${HOME}/bats-core" &&
cd "${HOME}/bats-core"
git checkout 2e2e5df6adf0b846b411b6b2f7bb654cbc3e2c4e
sudo ./install.sh /usr/local
- name: "Set $TERM=xterm"
run: printf "TERM=xterm\\n" >> $GITHUB_ENV
- name: "Run bats tests"
run: script -q -e -c "bats test"

View File

@ -5,6 +5,14 @@
# https://github.com/koalaman/shellcheck/wiki/Ignore
###############################################################################
# Disable SC2183
#
# Running into this: https://github.com/koalaman/shellcheck/issues/1310
# TODO: Check if resolved.
#
#https://github.com/koalaman/shellcheck/wiki/SC2183
disable=SC2183
# Disable SC2206 and SC2207
#
# `IFS` and `noglob` are set.

View File

@ -1,18 +0,0 @@
jobs:
include:
- os: linux
addons:
apt:
sources:
- sourceline: 'ppa:duggan/bats'
packages:
- bats
dist: bionic
language: minimal
- os: osx
before_install:
- brew install bats-core
osx_image: xcode11.3
script: bats test

View File

@ -3,8 +3,8 @@ PREFIX ?= /usr/local
install:
install $(BIN) $(PREFIX)/bin
./scripts/hosts-completion install
./$(BIN) completions install
uninstall:
rm -f $(PREFIX)/bin/$(BIN)
./scripts/hosts-completion uninstall
./$(BIN) completions uninstall

124
README.md
View File

@ -1,4 +1,4 @@
[![Build Status](https://travis-ci.org/xwmx/hosts.svg?branch=master)](https://travis-ci.org/xwmx/hosts)
[![Build Status](https://img.shields.io/github/actions/workflow/status/xwmx/hosts/tests.yml?branch=master)](https://github.com/xwmx/hosts/actions)
__ __
/ /_ ____ _____/ /______
@ -25,7 +25,8 @@ single, portable script that can be `curl`ed into any environment.
To install with [Homebrew](http://brew.sh/):
```bash
brew install xwmx/taps/hosts
brew tap xwmx/taps
brew install hosts
```
### npm
@ -50,18 +51,50 @@ To install with [Make](https://en.wikipedia.org/wiki/Make_(software)),
clone this repository, navigate to the clone's root directory, and run:
```bash
make install
sudo make install
```
### Manual
To install manually, simply add the `hosts` script to your `$PATH`. If
you already have a `~/bin` directory, you can use the following command:
To install as an administrator, copy and paste one of the following multi-line
commands:
```bash
# install using wget
sudo wget https://raw.github.com/xwmx/hosts/master/hosts -O /usr/local/bin/hosts &&
sudo chmod +x /usr/local/bin/hosts &&
sudo hosts completions install
# install using curl
sudo curl -L https://raw.github.com/xwmx/hosts/master/hosts -o /usr/local/bin/hosts &&
sudo chmod +x /usr/local/bin/hosts &&
sudo hosts completions install
```
###### User-only Installation
To install with just user permissions, simply add the `hosts` script to your
`$PATH`. If you already have a `~/bin` directory, for example, you can use
one of the following commands:
```bash
# download with wget
wget https://raw.github.com/xwmx/hosts/master/hosts -O ~/bin/hosts && chmod +x ~/bin/hosts
# download with curl
curl -L https://raw.github.com/xwmx/hosts/master/hosts -o ~/bin/hosts && chmod +x ~/bin/hosts
```
Installing with just user permissions doesn't install the completions, but
`hosts` works without them. If you have `sudo` access and want to install the
completion scripts, run the following command:
```bash
sudo hosts completions install
```
### Arch Linux
A package for Arch users is also
[available in the AUR](https://aur.archlinux.org/packages/hosts/).
@ -127,7 +160,7 @@ address, domain, or regular expression:
```bash
> hosts remove example.com
Removing the following records:
Removing the following entries:
127.0.0.1 example.com
Are you sure you want to proceed? [y/N] y
Removed:
@ -159,7 +192,7 @@ Removed:
### Enabling / Disabling Entries
Add entries are enabled by default. Disabiling an entry comments it out
All entries are enabled by default. Disabiling an entry comments it out
so it has no effect, but remains in the hosts file ready to be enabled
again.
@ -299,6 +332,7 @@ Usage:
hosts add <ip> <hostname> [<comment>]
hosts backups [create | (compare | delete | restore | show) <filename>]
hosts block <hostname>...
hosts completions (check | install [-d | --download] | uninstall)
hosts disable (<ip> | <hostname> | <search string>)
hosts disabled
hosts edit
@ -308,6 +342,7 @@ Usage:
hosts list [enabled | disabled | <search string>]
hosts search <search string>
hosts show (<ip> | <hostname> | <search string>)
hosts subcommands [--raw]
hosts remove (<ip> | <hostname> | <search string>) [--force]
hosts unblock <hostname>...
hosts --auto-sudo
@ -342,7 +377,7 @@ hosts help <command name>
<a href="#hosts-add">add</a>
<a href="#hosts-backups">backups</a>
<a href="#hosts-block">block</a>
<a href="#hosts-commands">commands</a>
<a href="#hosts-completions">completions</a>
<a href="#hosts-disable">disable</a>
<a href="#hosts-disabled">disabled</a>
<a href="#hosts-edit">edit</a>
@ -354,6 +389,7 @@ hosts help <command name>
<a href="#hosts-remove">remove</a>
<a href="#hosts-search">search</a>
<a href="#hosts-show">show</a>
<a href="#hosts-subcommands">subcommands</a>
<a href="#hosts-unblock">unblock</a>
<a href="#hosts-version">version</a>
</p>
@ -366,7 +402,7 @@ Usage:
Description:
List the existing IP / hostname pairs, optionally limited to a specified
state. When provided with a seach string, all matching enabled records will
state. When provided with a seach string, all matching enabled entries will
be printed.
Alias for `hosts list`
@ -382,7 +418,7 @@ Description:
Add a given IP address and hostname pair, along with an optional comment.
Exit status:
0 Success.
0 Entry successfully added.
1 Invalid parameters or entry exists.
```
@ -427,7 +463,7 @@ Description:
for IPv4 and both `fe80::1%lo0` and `::1` for IPv6.
Exit status:
0 Success.
0 <hostname> successfully blocked.
1 Invalid parameters or entry exists.
```
@ -436,17 +472,22 @@ Exit status:
- [jmdugan/blocklists](https://github.com/jmdugan/blocklists)
- [notracking/hosts-blocklists](https://github.com/notracking/hosts-blocklists)
### `hosts commands`
### `hosts completions`
```text
Usage:
hosts commands [--raw]
hosts completions (check | install [-d | --download] | uninstall)
Options:
--raw Display the command list without formatting.
-d, --download Download the completion scripts and install.
Description:
Display the list of available commands.
Manage completion scripts. For more information, visit:
https://github.com/xwmx/hosts/blob/master/etc/README.md
Exit status:
0 Completions successfully installed.
1 Invalid parameters or other error.
```
### `hosts disable`
@ -456,11 +497,11 @@ Usage:
hosts disable (<ip> | <hostname> | <search string>)
Description:
Disable one or more records based on a given ip address, hostname, or
Disable one or more entries based on a given ip address, hostname, or
search string.
Exit status:
0 Success.
0 Entry successfully disabled.
1 Invalid parameters or entry not found.
```
@ -471,7 +512,11 @@ Usage:
hosts disabled
Description:
List all disabled records. This is an alias for `hosts list disabled`.
List all disabled entries. This is an alias for `hosts list disabled`.
Exit status:
0 One or more disabled entries found.
1 Invalid parameters or no disabled entries found.
```
### `hosts edit`
@ -491,11 +536,11 @@ Usage:
hosts enable (<ip> | <hostname> | <search string>)
Description:
Enable one or more disabled records based on a given ip address, hostname,
Enable one or more disabled entries based on a given ip address, hostname,
or search string.
Exit status:
0 Success.
0 Entry successfully enabled.
1 Invalid parameters or entry not found.
```
@ -506,7 +551,11 @@ Usage:
hosts enabled
Description:
List all enabled records. This is an alias for `hosts list enabled`.
List all enabled entries. This is an alias for `hosts list enabled`.
Exit status:
0 One or more enabled entries found.
1 Invalid parameters or no enabled entries found.
```
### `hosts file`
@ -537,8 +586,12 @@ Usage:
Description:
List the existing IP / hostname pairs, optionally limited to a specified
state. When provided with a seach string, all matching enabled records will
state. When provided with a seach string, all matching enabled entries will
be printed.
Exit status:
0 One or more matching entries found.
1 Invalid parameters or entry not found.
```
### `hosts remove`
@ -552,12 +605,12 @@ Options:
--force Skip the confirmation prompt.
Description:
Remove one or more records based on a given IP address, hostname, or search
string. If an IP and hostname are both provided, only records matching the
Remove one or more entries based on a given IP address, hostname, or search
string. If an IP and hostname are both provided, only entries matching the
IP and hostname pair will be removed.
Exit status:
0 Success.
0 Entry successfully removed.
1 Invalid parameters or entry not found.
```
@ -569,6 +622,10 @@ Usage:
Description:
Search entries for <search string>.
Exit status:
0 One or more matching entries found.
1 Invalid parameters or entry not found.
```
### `hosts show`
@ -581,10 +638,23 @@ Description:
Print entries matching a given IP address, hostname, or search string.
Exit status:
0 Success.
0 One or more matching entries found.
1 Invalid parameters or entry not found.
```
### `hosts subcommands`
```text
Usage:
hosts subcommands [--raw]
Options:
--raw Display the subcommands list without formatting.
Description:
Display the list of available subcommands.
```
### `hosts unblock`
```text
@ -595,7 +665,7 @@ Description:
Unblock one or more hostnames by removing the entries from the hosts file.
Exit status:
0 Success.
0 <hostname> successfully unblocked.
1 Invalid parameters or entry not found
```

View File

@ -22,42 +22,41 @@ Completion installed: /usr/local/share/zsh/site-functions/_hosts
If completion is working after installing through any of these methods, then
you don't need to do anything else.
## `scripts/hosts-completion`
## `hosts completions`
`hosts` includes a script for installing and uninstalling `hosts` completions
that is used in installation hooks:
[hosts-completion](../scripts/hosts-completion)
To run this script directly, navigate to this directory in your terminal, and
run:
The `hosts completions` subcommand can be used for installing and uninstalling
completion scripts. Depending on your configuration, you might need to use
`sudo` to install completion scripts easily:
```bash
./hosts-completion
```
> sudo hosts completions check
Completion scripts not found.
To install completions:
> sudo hosts completions install
Completion script installed: /usr/share/bash-completion/completions/hosts
Completion script installed: /usr/local/share/zsh/site-functions/_hosts
```bash
./hosts-completion install
```
To uninstall:
```bash
./hosts-completion uninstall
```
Use the `check` subcommand to determine if completion scripts are installed:
```bash
> ./hosts-completion check
Exists: /usr/local/etc/bash_completion.d/hosts
> sudo hosts completions check
Exists: /usr/share/bash-completion/completions/hosts
Exists: /usr/local/share/zsh/site-functions/_hosts
> sudo hosts completions uninstall
Completion script removed: /usr/share/bash-completion/completions/hosts
Completion script removed: /usr/local/share/zsh/site-functions/_hosts
```
This script will try to determine the completion installation
locations from your environment. If completion doesn't work, you might
need to try installing manually.
If you installed `hosts` manually by downloading just the `hosts` script,
the completion scripts won't be immediately available for
`hosts completions install`. You can try installing the completions with
the `--download` flag, which will get the latest version from GitHub:
```bash
sudo hosts completions install --download
```
`hosts completions` will try to determine the completion script directories
from your environment. If `hosts completions` isn't able to install
the completion scripts, you can try installing them manually.
## Manual Installation

1115
hosts

File diff suppressed because it is too large Load Diff

2
package-lock.json generated
View File

@ -1,5 +1,5 @@
{
"name": "hosts.sh",
"version": "3.5.1",
"version": "3.6.4",
"lockfileVersion": 1
}

View File

@ -1,6 +1,6 @@
{
"name": "hosts.sh",
"version": "3.5.1",
"version": "3.6.4",
"description": "A command line tool for managing hosts file entries.",
"global": true,
"install": "make install",
@ -12,8 +12,8 @@
},
"scripts": {
"test": "bats test",
"postinstall": "scripts/hosts-completion install",
"preuninstall": "scripts/hosts-completion uninstall"
"postinstall": "./hosts completions install",
"preuninstall": "./hosts completions uninstall"
},
"repository": {
"type": "git",

View File

@ -1,199 +0,0 @@
#!/usr/bin/env bash
###############################################################################
# hosts / scripts / hosts-completion
#
# Install and uninstall completions for `hosts`.
#
# https://github.com/xwmx/hosts
###############################################################################
###############################################################################
# Strict Mode
#
# More Information:
# https://github.com/xwmx/bash-boilerplate#bash-strict-mode
###############################################################################
set -o nounset
set -o errexit
set -o errtrace
set -o pipefail
IFS=$'\n\t'
###############################################################################
export _MY_DIR=
_MY_DIR="$(cd "$(dirname "$0")"; pwd)"
if [[ -z "${_MY_DIR}" ]] || [[ ! -d "${_MY_DIR}" ]]
then
exit 1
fi
# Usage: _get_bash_completion_path
_get_bash_completion_path() {
local _bash_completion_path=
if [[ -n "${BASH_COMPLETION_COMPAT_DIR:-}" ]] &&
[[ -w "${BASH_COMPLETION_COMPAT_DIR:-}" ]]
then
_bash_completion_path="${BASH_COMPLETION_COMPAT_DIR}"
fi
if [[ -z "${_bash_completion_path:-}" ]]
then
local _maybe_path
_maybe_path="$(
pkg-config --variable=completionsdir bash-completion 2>/dev/null || true
)"
if [[ -n "${_maybe_path:-}" ]] &&
[[ -w "${_maybe_path:-}" ]]
then
_bash_completion_path="${_maybe_path}"
fi
fi
if [[ -z "${_bash_completion_path:-}" ]] &&
[[ -d "/usr/local/etc/bash_completion.d" ]] &&
[[ -w "/usr/local/etc/bash_completion.d" ]]
then
_bash_completion_path="/usr/local/etc/bash_completion.d"
fi
if [[ -z "${_bash_completion_path:-}" ]] &&
[[ -d "/etc/bash_completion.d" ]] &&
[[ -w "/etc/bash_completion.d" ]]
then
_bash_completion_path="/etc/bash_completion.d"
fi
printf "%s\\n" "${_bash_completion_path:-}"
}
# subcommands ################################################### subcommands #
# Usage: _check
_check() {
local _bash_completion_path=
_bash_completion_path="$(_get_bash_completion_path)"
local _exists=0
if [[ -n "${_bash_completion_path:-}" ]] &&
[[ -d "${_bash_completion_path}" ]] &&
[[ -w "${_bash_completion_path}" ]] &&
[[ -e "${_bash_completion_path}/hosts" ]]
then
_exists=1
printf "Exists: %s\\n" "${_bash_completion_path}/hosts"
fi
local _zsh_completion_path="/usr/local/share/zsh/site-functions"
if [[ -d "${_zsh_completion_path}" ]] &&
[[ -w "${_zsh_completion_path}" ]] &&
[[ -e "${_zsh_completion_path}/_hosts" ]]
then
_exists=1
printf "Exists: %s\\n" "${_zsh_completion_path}/_hosts"
fi
((_exists)) || return 1
}
# Usage: _install
_install() {
local _bash_completion_path=
_bash_completion_path="$(_get_bash_completion_path)"
if [[ -n "${_bash_completion_path:-}" ]] &&
[[ -d "${_bash_completion_path}" ]] &&
[[ -w "${_bash_completion_path}" ]] &&
[[ ! -e "${_bash_completion_path}/hosts" ]]
then
cp \
"${_MY_DIR}/../etc/hosts-completion.bash" \
"${_bash_completion_path}/hosts"
printf "Completion installed: %s\\n" "${_bash_completion_path}/hosts"
# Cleanup old completion script.
if [[ -e "${_bash_completion_path}/hosts-completion.bash" ]]
then
rm "${_bash_completion_path}/hosts-completion.bash"
fi
fi
local _zsh_completion_path="/usr/local/share/zsh/site-functions"
if [[ -d "${_zsh_completion_path}" ]] &&
[[ -w "${_zsh_completion_path}" ]] &&
[[ ! -e "${_zsh_completion_path}/_hosts" ]]
then
cp \
"${_MY_DIR}/../etc/hosts-completion.zsh" \
"${_zsh_completion_path}/_hosts"
printf "Completion installed: %s\\n" "${_zsh_completion_path}/_hosts"
fi
}
# Usage: _uninstall
_uninstall() {
local _bash_completion_path=
_bash_completion_path="$(_get_bash_completion_path)"
if [[ -n "${_bash_completion_path:-}" ]] &&
[[ -d "${_bash_completion_path}" ]] &&
[[ -w "${_bash_completion_path}" ]] &&
[[ -e "${_bash_completion_path}/hosts" ]]
then
rm "${_bash_completion_path}/hosts"
printf "Completion removed: %s\\n" "${_bash_completion_path}/hosts"
# Cleanup old completion script.
if [[ -e "${_bash_completion_path}/hosts-completion.bash" ]]
then
rm "${_bash_completion_path}/hosts-completion.bash"
fi
fi
local _zsh_completion_path="/usr/local/share/zsh/site-functions"
if [[ -d "${_zsh_completion_path}" ]] &&
[[ -w "${_zsh_completion_path}" ]] &&
[[ -e "${_zsh_completion_path}/_hosts" ]]
then
rm "${_zsh_completion_path}/_hosts"
printf "Completion removed: %s\\n" "${_zsh_completion_path}/_hosts"
fi
}
# main ################################################################# main #
# Usage: _main <args>...
_main() {
_subcommand="${1:-}"
case "${_subcommand}" in
check)
_check
;;
install)
_install
;;
uninstall)
_uninstall
;;
*)
cat <<HEREDOC
hosts-completion
Usage:
hosts-completion [check | install | uninstall]
Description:
Manage completion scripts for \`hosts\`.
HEREDOC
;;
esac
} && _main "$@"

View File

@ -18,7 +18,7 @@ load test_helper
[[ ${status} -eq 0 ]]
}
@test "\`disabled\` with no arguments prints list of disabled records." {
@test "\`disabled\` with no arguments prints list of disabled entries." {
{
run "${_HOSTS}" add 0.0.0.0 example.com
run "${_HOSTS}" add 0.0.0.0 example.net
@ -34,6 +34,13 @@ load test_helper
[[ "${lines[2]}" == "" ]]
}
@test "\`disabled\` exits with status 1 when no matching entries found." {
run "${_HOSTS}" disabled
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
[[ ${status} -eq 1 ]]
}
# help ########################################################################
@test "\`help disabled\` exits with status 0." {

View File

@ -18,7 +18,7 @@ load test_helper
[[ ${status} -eq 0 ]]
}
@test "\`enabled\` with no arguments prints list of enabled records." {
@test "\`enabled\` with no arguments prints list of enabled entries." {
{
run "${_HOSTS}" add 0.0.0.0 example.com
run "${_HOSTS}" add 0.0.0.0 example.net
@ -36,6 +36,18 @@ load test_helper
[[ "${lines[4]}" =~ 127.0.0.2[[:space:]]+example.com ]]
}
@test "\`enabled\` exits with status 1 when no matching entries found." {
{
run "${_HOSTS}" disable localhost
run "${_HOSTS}" disable broadcasthost
}
run "${_HOSTS}" enabled
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
[[ ${status} -eq 1 ]]
}
# help ########################################################################
@test "\`help enabled\` exits with status 0." {

View File

@ -18,7 +18,7 @@ load test_helper
[[ ${status} -eq 0 ]]
}
@test "\`list\` prints lists of enabled and disabled records." {
@test "\`list\` prints lists of enabled and disabled entries." {
{
run "${_HOSTS}" add 0.0.0.0 example.com
run "${_HOSTS}" add 0.0.0.0 example.net
@ -60,7 +60,7 @@ Disabled:
[[ ${status} -eq 0 ]]
}
@test "\`list enabled\` prints list of enabled records." {
@test "\`list enabled\` prints list of enabled entries." {
{
run "${_HOSTS}" add 0.0.0.0 example.com
run "${_HOSTS}" add 0.0.0.0 example.net
@ -78,6 +78,18 @@ Disabled:
[[ "${lines[4]}" =~ 127\.0\.0\.2[[:space:]]+example.com ]]
}
@test "\`list enabled\` exits with status 1 when no matching entries found." {
{
run "${_HOSTS}" disable localhost
run "${_HOSTS}" disable broadcasthost
}
run "${_HOSTS}" list enabled
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
[[ ${status} -eq 1 ]]
}
# `hosts list disabled` #######################################################
@test "\`list disabled\` exits with status 0." {
@ -94,7 +106,7 @@ Disabled:
[[ ${status} -eq 0 ]]
}
@test "\`list disabled\` prints list of disabled records." {
@test "\`list disabled\` prints list of disabled entries." {
{
run "${_HOSTS}" add 0.0.0.0 example.com
run "${_HOSTS}" add 0.0.0.0 example.net
@ -110,6 +122,13 @@ Disabled:
[[ "${lines[2]}" == "" ]]
}
@test "\`list disabled\` exits with status 1 when no matching entries found." {
run "${_HOSTS}" list disabled
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
[[ ${status} -eq 1 ]]
}
# `hosts list <search string>` ################################################
@test "\`list <search string>\` exits with status 0." {
@ -125,7 +144,7 @@ Disabled:
[[ ${status} -eq 0 ]]
}
@test "\`list <search string>\` prints list of matching records." {
@test "\`list <search string>\` prints list of matching entries." {
{
run "${_HOSTS}" add 0.0.0.0 example.com
run "${_HOSTS}" add 0.0.0.0 example.net
@ -140,7 +159,7 @@ Disabled:
[[ "${lines[2]}" == "" ]]
}
@test "\`list <search string>\` prints records with matching comments." {
@test "\`list <search string>\` prints entries with matching comments." {
{
run "${_HOSTS}" add 0.0.0.0 example.com
run "${_HOSTS}" add 0.0.0.0 example.net "Example Comment"
@ -155,7 +174,7 @@ Disabled:
}
@test "\`list <search string>\` prints disabled records with matching comments." {
@test "\`list <search string>\` prints disabled entries with matching comments." {
{
run "${_HOSTS}" add 0.0.0.0 example.com
run "${_HOSTS}" add 0.0.0.0 example.net "Example Comment"
@ -172,6 +191,13 @@ Disabled:
[[ "${lines[4]}" == "" ]]
}
@test "\`list <search string>\` exits with status 1 when no matching entries found." {
run "${_HOSTS}" list query-that-matches-no-entries
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
[[ ${status} -eq 1 ]]
}
# help ########################################################################
@test "\`help list\` exits with status 0." {

View File

@ -53,7 +53,7 @@ load test_helper
run "${_HOSTS}" remove 127.0.0.3 --force
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
[[ ${output} == "${_ERROR_PREFIX}No matching records found." ]]
[[ ${output} == "${_ERROR_PREFIX}No matching entries found." ]]
}
# `hosts remove <ip> --force` #################################################

View File

@ -29,14 +29,8 @@ load test_helper
run "${_HOSTS}" search
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
_expected="\
Usage:
hosts search <search string>
Description:
Search entries for <search string>."
_compare "'${_expected}'" "'${output}'"
[[ "${output}" == "${_expected}" ]]
[[ "${lines[0]}" == "Usage:" ]]
[[ "${lines[1]}" == " hosts search <search string>" ]]
}
# `hosts search enabled` ######################################################
@ -55,7 +49,7 @@ Description:
[[ ${status} -eq 0 ]]
}
@test "\`search enabled\` prints list of enabled records." {
@test "\`search enabled\` prints list of enabled entries." {
{
run "${_HOSTS}" add 0.0.0.0 example.com
run "${_HOSTS}" add 0.0.0.0 example.net
@ -73,6 +67,18 @@ Description:
[[ "${lines[4]}" =~ 127.0.0.2[[:space:]]+example.com ]]
}
@test "\`search enabled\` exits with status 1 when no matching entries found." {
{
run "${_HOSTS}" disable localhost
run "${_HOSTS}" disable broadcasthost
}
run "${_HOSTS}" search enabled
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
[[ ${status} -eq 1 ]]
}
# `hosts search disabled` #####################################################
@test "\`search disabled\` exits with status 0." {
@ -89,7 +95,7 @@ Description:
[[ ${status} -eq 0 ]]
}
@test "\`search disabled\` prints list of disabled records." {
@test "\`search disabled\` prints list of disabled entries." {
{
run "${_HOSTS}" add 0.0.0.0 example.com
run "${_HOSTS}" add 0.0.0.0 example.net
@ -105,6 +111,13 @@ Description:
[[ "${lines[2]}" == "" ]]
}
@test "\`search disabled\` exits with status 1 when no matching entries found." {
run "${_HOSTS}" search disabled
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
[[ ${status} -eq 1 ]]
}
# `hosts search <search string>` ################################################
@test "\`search <search string>\` exits with status 0." {
@ -120,7 +133,7 @@ Description:
[[ ${status} -eq 0 ]]
}
@test "\`search <search string>\` prints list of matching records." {
@test "\`search <search string>\` prints list of matching entries." {
{
run "${_HOSTS}" add 0.0.0.0 example.com
run "${_HOSTS}" add 0.0.0.0 example.net
@ -135,7 +148,7 @@ Description:
[[ "${lines[2]}" == "" ]]
}
@test "\`search <search string>\` prints records with matching comments." {
@test "\`search <search string>\` prints entries with matching comments." {
{
run "${_HOSTS}" add 0.0.0.0 example.com
run "${_HOSTS}" add 0.0.0.0 example.net "Example Comment"
@ -149,7 +162,7 @@ Description:
[[ "${lines[2]}" == "" ]]
}
@test "\`search <search string>\` prints disabled records with matching comments." {
@test "\`search <search string>\` prints disabled entries with matching comments." {
{
run "${_HOSTS}" add 0.0.0.0 example.com
run "${_HOSTS}" add 0.0.0.0 example.net "Example Comment"
@ -166,6 +179,13 @@ Description:
[[ "${lines[4]}" == "" ]]
}
@test "\`search <search string>\` exits with status 1 when no matching entries found." {
run "${_HOSTS}" search query-that-matches-no-entries
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
[[ ${status} -eq 1 ]]
}
# help ########################################################################
@test "\`help search\` exits with status 0." {

View File

@ -21,7 +21,7 @@ load test_helper
# `hosts show <no matching>` ##################################################
@test "\`show <query>\` with no matching records with status 1." {
@test "\`show <query>\` with no matching entries with status 1." {
{
run "${_HOSTS}" add 0.0.0.0 example.com
run "${_HOSTS}" add 0.0.0.0 example.net
@ -77,7 +77,7 @@ load test_helper
# `hosts show <search string>` ################################################
@test "\`show <search string>\` exits with status 0 and shows matching records." {
@test "\`show <search string>\` exits with status 0 and shows matching entries." {
{
run "${_HOSTS}" add 0.0.0.0 example.com
run "${_HOSTS}" add 0.0.0.0 example.net
@ -94,7 +94,7 @@ load test_helper
[[ "${lines[2]}" == "" ]]
}
@test "\`show <search string>\` prints records with matching comments." {
@test "\`show <search string>\` prints entries with matching comments." {
{
run "${_HOSTS}" add 0.0.0.0 example.com
run "${_HOSTS}" add 0.0.0.0 example.net "Example Comment"
@ -109,7 +109,7 @@ load test_helper
[[ "${lines[2]}" == "" ]]
}
@test "\`show <search string>\` prints disabled records with matching comments." {
@test "\`show <search string>\` prints disabled entries with matching comments." {
{
run "${_HOSTS}" add 0.0.0.0 example.com
run "${_HOSTS}" add 0.0.0.0 example.net "Example Comment"

View File

@ -49,7 +49,7 @@ load test_helper
run "${_HOSTS}" unblock example.net
printf "\${status}: %s\\n" "${status}"
printf "\${output}: '%s'\\n" "${output}"
[[ ${output} == "${_ERROR_PREFIX}No matching records found." ]]
[[ ${output} == "${_ERROR_PREFIX}No matching entries found." ]]
}
# `hosts unblock <hostname>` ##################################################