remove english based git output dependencies

This commit is contained in:
fatalerrors
2026-07-09 16:29:09 +02:00
parent 97773515eb
commit 03ca259c4c

View File

@@ -115,6 +115,14 @@ gst()
done done
local target="${1:-.}" local target="${1:-.}"
if ! command -v git >/dev/null 2>&1; then
disp E "git command not found."
return 1
fi
if ! git -C "$target" rev-parse --is-inside-work-tree >/dev/null 2>&1; then
disp E "'$target' is not inside a git repository."
return 1
fi
git -C "$target" status --short --branch git -C "$target" status --short --branch
} }
export -f gst export -f gst
@@ -241,7 +249,10 @@ gacp()
fi fi
eval set -- "$PARSED" eval set -- "$PARSED"
local msg="" auto_add="$GIT_GACP_AUTO_ADD" local msg="" auto_add=0
case "${GIT_GACP_AUTO_ADD,,}" in
1|true|yes|on) auto_add=1 ;;
esac
while true; do while true; do
case "$1" in case "$1" in
-h|--help) -h|--help)
@@ -411,16 +422,26 @@ greset()
if ! git diff --quiet || ! git diff --cached --quiet || [[ -n $(git ls-files --others --exclude-standard) ]]; then if ! git diff --quiet || ! git diff --cached --quiet || [[ -n $(git ls-files --others --exclude-standard) ]]; then
stash_msg="greset:${branch}:$(date +'%Y-%m-%d %H:%M:%S')" stash_msg="greset:${branch}:$(date +'%Y-%m-%d %H:%M:%S')"
disp I "Stashing local changes as '$stash_msg'..." disp I "Stashing local changes as '$stash_msg'..."
local stash_before stash_after
stash_before=$(git rev-parse --quiet --verify refs/stash 2>/dev/null) || true
stash_out=$(git stash push -u -m "$stash_msg" 2>&1) || { stash_out=$(git stash push -u -m "$stash_msg" 2>&1) || {
disp E "Failed to stash local changes." disp E "Failed to stash local changes."
printf "%s\n" "$stash_out" printf "%s\n" "$stash_out"
return 1 return 1
} }
[[ $stash_out != "No local changes to save"* ]] && stash_created=1 stash_after=$(git rev-parse --quiet --verify refs/stash 2>/dev/null) || true
# A new stash means the top refs/stash sha changed (locale-independent).
[[ -n $stash_after && $stash_after != "$stash_before" ]] && stash_created=1
fi fi
disp I "Fetching from $remote..." # Only fetch when the derived remote is an actual configured remote; a bare
git fetch --prune "$remote" || return 1 # tag or local-branch target has no remote to update from.
if git remote get-url "$remote" >/dev/null 2>&1; then
disp I "Fetching from $remote..."
git fetch --prune "$remote" || return 1
else
disp I "Target '$target' is not a remote ref; skipping fetch."
fi
if ! git rev-parse --verify --quiet "$target" >/dev/null; then if ! git rev-parse --verify --quiet "$target" >/dev/null; then
disp E "Target '$target' does not exist." disp E "Target '$target' does not exist."
@@ -562,7 +583,7 @@ gprune()
[[ $b == "master" || $b == "main" || $b == "develop" || $b == "dev" ]] && continue [[ $b == "master" || $b == "main" || $b == "develop" || $b == "dev" ]] && continue
git branch -d "$b" >/dev/null 2>&1 && { git branch -d "$b" >/dev/null 2>&1 && {
printf "Deleted (merged): %s\n" "$b" printf "Deleted (merged): %s\n" "$b"
((deleted++)) deleted=$((deleted+1))
} }
done < <(git branch --merged "$base" | sed -E 's/^\*?\s*//') done < <(git branch --merged "$base" | sed -E 's/^\*?\s*//')
@@ -571,22 +592,24 @@ gprune()
disp I "Deep mode: pruning remote-tracking refs, then checking for gone branches..." disp I "Deep mode: pruning remote-tracking refs, then checking for gone branches..."
git fetch --prune --quiet git fetch --prune --quiet
local upstream sha
while IFS= read -r b; do while IFS= read -r b; do
[[ -z $b ]] && continue [[ -z $b ]] && continue
[[ $b == "$current" ]] && continue [[ $b == "$current" ]] && continue
[[ $b == "$base" ]] && continue [[ $b == "$base" ]] && continue
[[ $b == "master" || $b == "main" || $b == "develop" || $b == "dev" ]] && continue [[ $b == "master" || $b == "main" || $b == "develop" || $b == "dev" ]] && continue
# Verify the upstream is truly gone (not just unset). # Detect a gone upstream without relying on localized "gone]" text:
local upstream # resolve the branch's upstream, then check its remote-tracking ref.
upstream=$(git rev-parse --abbrev-ref "${b}@{upstream}" 2>/dev/null) upstream=$(git rev-parse --abbrev-ref "${b}@{upstream}" 2>/dev/null) || true
[[ -z "$upstream" ]] && continue # no tracking branch at all — skip [[ -z "$upstream" ]] && continue # no tracking branch at all — skip
# If the remote ref still exists, skip (not deleted upstream). # If the remote-tracking ref still exists, the upstream is not gone.
git show-ref --verify --quiet "refs/remotes/$upstream" 2>/dev/null && continue git show-ref --verify --quiet "refs/remotes/$upstream" 2>/dev/null && continue
sha=$(git rev-parse --short "$b" 2>/dev/null)
git branch -D "$b" >/dev/null 2>&1 && { git branch -D "$b" >/dev/null 2>&1 && {
printf "Deleted (gone upstream): %s\n" "$b" printf "Deleted (gone upstream): %s (%s)\n" "$b" "$sha"
((deleted++)) deleted=$((deleted+1))
} }
done < <(git branch -vv | sed -E 's/^\*?\s*//' | awk '/: gone]/ {print $1}') done < <(git for-each-ref --format='%(refname:short)' refs/heads/)
fi fi
(( deleted == 0 )) && disp I "No branches to delete." (( deleted == 0 )) && disp I "No branches to delete."