summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/bash/include.bash130
1 files changed, 130 insertions, 0 deletions
diff --git a/include/bash/include.bash b/include/bash/include.bash
new file mode 100644
index 0000000..1d73ab2
--- /dev/null
+++ b/include/bash/include.bash
@@ -0,0 +1,130 @@
+# colored output
+# --------------
+
+BOLD=$(tput bold)
+RST=$(tput sgr0)
+RED=$(tput setaf 1)
+GREEN=$(tput setaf 2)
+YELLOW=$(tput setaf 3)
+CYAN=$(tput setaf 6)
+VERBOSE=
+
+echoinfo() {
+ >&2 echo "${CYAN}$@${RST}"
+}
+
+echoerr() {
+ >&2 echo "${RED}${BOLD}error:${RST}${RED} $@${RST}"
+}
+
+echowarn() {
+ >&2 echo "${YELLOW}${BOLD}warning:${RST}${YELLOW} $@${RST}"
+}
+
+die() {
+ echoerr "$@"
+ exit 1
+}
+
+debug() {
+ if [ -n "$VERBOSE" ]; then
+ >&2 echo "$@"
+ fi
+}
+
+
+# measuring executing time
+# ------------------------
+
+__time_started=
+
+time_start() {
+ __time_started=$(date +%s)
+}
+
+time_elapsed() {
+ local fin=$(date +%s)
+ echo $(( fin - __time_started ))
+}
+
+
+# config parsing
+# --------------
+
+read_config() {
+ local config_file="$1"
+ local dst="$2"
+
+ [ -f "$config_file" ] || die "read_config: $config_file: no such file"
+
+ local n=0
+ local failed=
+ local key
+ local value
+
+ while read line; do
+ n=$(( n+1 ))
+
+ # skip empty lines or comments
+ if [ -z "$line" ] || [[ "$line" =~ ^#.* ]]; then
+ continue
+ fi
+
+ if [[ $line = *"="* ]]; then
+ key="${line%%=*}"
+ value="${line#*=}"
+ eval "$dst[$key]=\"$value\""
+ else
+ echoerr "config: invalid line $n"
+ failed=1
+ fi
+ done < <(cat "$config_file")
+
+ [ -z "$failed" ]
+}
+
+check_config() {
+ local var="$1"
+ local keys="$2"
+
+ local failed=
+
+ for key in $keys; do
+ if [ -z "$(eval "echo -n \${$var[$key]}")" ]; then
+ echoerr "config: ${BOLD}${key}${RST}${RED} is missing"
+ failed=1
+ fi
+ done
+
+ [ -z "$failed" ]
+}
+
+
+# other functions
+# ---------------
+
+installed() {
+ command -v "$1" > /dev/null
+ return $?
+}
+
+download() {
+ local source="$1"
+ local target="$2"
+
+ if installed curl; then
+ curl -f -s -o "$target" "$source"
+ elif installed wget; then
+ wget -q -O "$target" "$source"
+ else
+ die "neither curl nor wget found, can't proceed"
+ fi
+}
+
+file_in_use() {
+ [ -n "$(lsof "$1")" ]
+}
+
+file_mtime() {
+ stat -c %Y "$1"
+}