From c29dfb136a302d3bfe2f7f41d35ea87df179cdc9 Mon Sep 17 00:00:00 2001 From: "Ethan P." Date: Wed, 13 Sep 2023 11:53:49 -0700 Subject: [PATCH] batdiff: Show error when not in git repo This is instead of allowing `git` to dump its own warning to the console. --- src/batdiff.sh | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/batdiff.sh b/src/batdiff.sh index 0dad3b6..aa4a120 100755 --- a/src/batdiff.sh +++ b/src/batdiff.sh @@ -110,9 +110,24 @@ fi # Append arguments for git. GIT_ARGS+=(-U"$OPT_CONTEXT") +# ----------------------------------------------------------------------------- +# Functions: +# ----------------------------------------------------------------------------- + +ensure_git_directory() { + if ! "$EXECUTABLE_GIT" rev-parse --show-toplevel &>/dev/null; then + print_error "Not a git repository." + printc "\n%s\nTo view a diff between two files, use %{CYAN}%s [file] [file]%{CLEAR}." \ + "To view a diff between staged files and the working directory, enter a git repository." \ + "$PROGRAM" + exit 1 + fi +} + # ----------------------------------------------------------------------------- # Printing: # ----------------------------------------------------------------------------- + print_bat_diff() { local files=("$@") @@ -123,6 +138,7 @@ print_bat_diff() { fi # Diff staged git file. + ensure_git_directory if "$OPT_STAGED"; then if false && "$SUPPORTS_DELTA"; then # bat doesn't support diffing staged changes against the HEAD. @@ -156,6 +172,7 @@ print_delta_diff() { fi # Diff git file. + ensure_git_directory "$EXECUTABLE_GIT" diff "${GIT_ARGS[@]}" "${files[0]}" | "$EXECUTABLE_DELTA" "${DELTA_ARGS[@]}" } @@ -193,6 +210,7 @@ fi # ----------------------------------------------------------------------------- main() { if [[ "${#FILES[@]}" -eq 0 ]] || "$OPT_ALL_CHANGES"; then + ensure_git_directory local file while read -r file; do if [[ -f "$file" ]]; then