remove english based git output dependencies
This commit is contained in:
@@ -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
|
||||||
|
|
||||||
|
# Only fetch when the derived remote is an actual configured remote; a bare
|
||||||
|
# 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..."
|
disp I "Fetching from $remote..."
|
||||||
git fetch --prune "$remote" || return 1
|
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."
|
||||||
|
|||||||
Reference in New Issue
Block a user