httm 0.49.9

A CLI tool for viewing snapshot file versions on ZFS and btrfs datasets
#!/usr/bin/env bash

#       ___           ___           ___           ___
#      /\__\         /\  \         /\  \         /\__\
#     /:/  /         \:\  \        \:\  \       /::|  |
#    /:/__/           \:\  \        \:\  \     /:|:|  |
#   /::\  \ ___       /::\  \       /::\  \   /:/|:|__|__
#  /:/\:\  /\__\     /:/\:\__\     /:/\:\__\ /:/ |::::\__\
#  \/__\:\/:/  /    /:/  \/__/    /:/  \/__/ \/__/~~/:/  /
#       \::/  /    /:/  /        /:/  /            /:/  /
#       /:/  /     \/__/         \/__/            /:/  /
#      /:/  /                                    /:/  /
#      \/__/                                     \/__/
#
# Copyright (c) 2023, Robert Swinford <robert.swinford<...at...>gmail.com>
#
# For the full copyright and license information, please view the LICENSE file
# that was distributed with this source code.

set -euf -o pipefail
#set -x

print_err_exit() {
	print_err "${@}"
	exit 1
}

print_err() {
	printf "%s\n" "ERROR: $*" 1>&2
}

print_warn_exit() {
	print_warn "${@}"
	exit 0
}

print_warn() {
	printf "%s\n" "WARN: $*"
}

graceful_shutdown() {
	printf "%s\n" "--"
	exit 0
}

prep_exec() {
	[[ -n "$(
		command -v cut
		exit 0
	)" ]] || print_err_exit "'cut' is required to execute 'httm --preview'.  Please check that 'cut' is in your path."
}

bootstrap_preview() {
	prep_exec

	local raw_input=""
	local snap_file=""

	raw_input={}

	[[ -n $raw_input ]] || print_err_exit "Selection is empty."

	[[ $raw_input !=*]] || graceful_shutdown

	# remove first and last chars in string in case they are also quotes 
	# possible we drop good chars, but these chars are unnecessary for parsing
	snap_file="$(echo ${raw_input} | cut -d'"' -f2)"

	[[ -n "$snap_file" ]] || print_err_exit "Snap file path is empty."

	[[ -f "$snap_file" ]] || [[ -d "$snap_file" ]] || [[ -L "$snap_file" ]] || print_warn_exit "Selection does not refer to a valid file, link or directory."

	exec 0<&-
	{command} 2>&1
}

bootstrap_preview