#!/usr/bin/env dash # shellcheck source=/dev/null SHELL_LIBRARY_VERSION="2.0.13" . %SHELL_LIBRARY_PATH # needed for help() and version # shellcheck disable=2034 AUTHORS="Soispha" # shellcheck disable=2034 YEARS="2024" # shellcheck disable=2034 VERSION="1.0.0" # NAME is from the wrapper # shellcheck disable=SC2269 NAME="$NAME" help() { cat < "$GIT_DIR/.git/EDIT_INDEX_PATCH" git add "$1" git restore --staged "$1" cat "$1" > "$GIT_DIR/.git/EDIT_INDEX_FILE" git restore "$1" git apply "$GIT_DIR/.git/EDIT_INDEX_PATCH" "$EDITOR" "$1" git add "$1" mv "$GIT_DIR/.git/EDIT_INDEX_FILE" "$1" } edit() { files_to_add="$(mktmp)"; realpath --relative-to=. "$@" >"$files_to_add"; index_files="$(mktmp)"; git diff --name-only --cached --diff-filter=AM >"$index_files" while read -r file; do if grep -q "$file" "$files_to_add"; then sed -i "s|$file||" "$files_to_add"; materialize_file "$file"; fi done <"$index_files" files_to_check="$(mktmp)"; clean "$files_to_add" > "$files_to_check" if [ "$(wc -l < "$files_to_check")" -gt 0 ]; then warn "Could not edit every file:" cat "$files_to_add"; fi } for arg in "$@"; do case "$arg" in "--help" | "-h") help; ;; "--version" | "-v") version; ;; "--") break; ;; esac done edit "$@" # vim: ft=sh