#!/usr/bin/env sh # Pi-hole: A black hole for Internet advertisements # (c) 2017 Pi-hole, LLC (https://pi-hole.net) # Network-wide ad blocking via your own hardware. # # Show version numbers # # This file is copyright under the latest version of the EUPL. # Please see LICENSE file for your rights under this license. # Source the versions file poupulated by updatechecker.sh cachedVersions="/etc/pihole/versions" if [ -f ${cachedVersions} ]; then # shellcheck disable=SC1090 . "$cachedVersions" else echo "Could not find /etc/pihole/versions. Running update now." pihole updatechecker # shellcheck disable=SC1090 . "$cachedVersions" fi getLocalVersion() { case ${1} in "Pi-hole" ) echo "${CORE_VERSION:=N/A}";; "web" ) echo "${WEB_VERSION:=N/A}";; "FTL" ) echo "${FTL_VERSION:=N/A}";; esac } getLocalHash() { case ${1} in "Pi-hole" ) echo "${CORE_HASH:=N/A}";; "web" ) echo "${WEB_HASH:=N/A}";; "FTL" ) echo "${FTL_HASH:=N/A}";; esac } getRemoteHash(){ case ${1} in "Pi-hole" ) echo "${GITHUB_CORE_HASH:=N/A}";; "web" ) echo "${GITHUB_WEB_HASH:=N/A}";; "FTL" ) echo "${GITHUB_FTL_HASH:=N/A}";; esac } getRemoteVersion(){ case ${1} in "Pi-hole" ) echo "${GITHUB_CORE_VERSION:=N/A}";; "web" ) echo "${GITHUB_WEB_VERSION:=N/A}";; "FTL" ) echo "${GITHUB_FTL_VERSION:=N/A}";; esac } getLocalBranch(){ case ${1} in "Pi-hole" ) echo "${CORE_BRANCH:=N/A}";; "web" ) echo "${WEB_BRANCH:=N/A}";; "FTL" ) echo "${FTL_BRANCH:=N/A}";; esac } versionOutput() { [ "$2" = "-c" ] || [ "$2" = "--current" ] || [ -z "$2" ] && current=$(getLocalVersion "${1}") && branch=$(getLocalBranch "${1}") [ "$2" = "-l" ] || [ "$2" = "--latest" ] || [ -z "$2" ] && latest=$(getRemoteVersion "${1}") if [ "$2" = "--hash" ]; then [ "$3" = "-c" ] || [ "$3" = "--current" ] || [ -z "$3" ] && curHash=$(getLocalHash "${1}") && branch=$(getLocalBranch "${1}") [ "$3" = "-l" ] || [ "$3" = "--latest" ] || [ -z "$3" ] && latHash=$(getRemoteHash "${1}") && branch=$(getLocalBranch "${1}") fi # We do not want to show the branch name when we are on master, # blank out the variable in this case if [ "$branch" = "master" ]; then branch="" else branch="$branch " fi if [ -n "$current" ] && [ -n "$latest" ]; then output="${1} version is $branch$current (Latest: $latest)" elif [ -n "$current" ] && [ -z "$latest" ]; then output="Current ${1} version is $branch$current" elif [ -z "$current" ] && [ -n "$latest" ]; then output="Latest ${1} version is $latest" elif [ -n "$curHash" ] && [ -n "$latHash" ]; then output="Local ${1} hash is $curHash (Remote: $latHash)" elif [ -n "$curHash" ] && [ -z "$latHash" ]; then output="Current local ${1} hash is $curHash" elif [ -z "$curHash" ] && [ -n "$latHash" ]; then output="Latest remote ${1} hash is $latHash" elif [ -z "$curHash" ] && [ -z "$latHash" ]; then output="Hashes for ${1} not available" else errorOutput return 1 fi [ -n "$output" ] && echo " $output" } errorOutput() { echo " Invalid Option! Try 'pihole -v --help' for more information." exit 1 } defaultOutput() { versionOutput "Pi-hole" "$@" versionOutput "web" "$@" versionOutput "FTL" "$@" } helpFunc() { echo "Usage: pihole -v [repo | option] [option] Example: 'pihole -v -p -l' Show Pi-hole, Admin Console & FTL versions Repositories: -p, --pihole Only retrieve info regarding Pi-hole repository -a, --admin Only retrieve info regarding web repository -f, --ftl Only retrieve info regarding FTL repository Options: -c, --current Return the current version -l, --latest Return the latest version --hash Return the GitHub hash from your local repositories -h, --help Show this help dialog" exit 0 } case "${1}" in "-p" | "--pihole" ) shift; versionOutput "Pi-hole" "$@";; "-a" | "--admin" ) shift; versionOutput "web" "$@";; "-f" | "--ftl" ) shift; versionOutput "FTL" "$@";; "-h" | "--help" ) helpFunc;; * ) defaultOutput "$@";; esac