git-jira-shortcuts 1.0.9 → 1.0.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/shell/git-extras.sh +21 -7
package/package.json
CHANGED
package/shell/git-extras.sh
CHANGED
|
@@ -953,7 +953,6 @@ alias tj='testJira' # testJira | Test Jira API connection
|
|
|
953
953
|
|
|
954
954
|
gclean() { # gclean [--dry-run] | Delete local branches already merged to master (skips recent)
|
|
955
955
|
local dry_run=0
|
|
956
|
-
local days_recent=7
|
|
957
956
|
|
|
958
957
|
for arg in "$@"; do
|
|
959
958
|
case "$arg" in
|
|
@@ -962,6 +961,17 @@ gclean() { # gclean [--dry-run] | Delete local branches already merged to master
|
|
|
962
961
|
;;
|
|
963
962
|
esac
|
|
964
963
|
done
|
|
964
|
+
|
|
965
|
+
if ! git rev-parse --git-dir >/dev/null 2>&1; then
|
|
966
|
+
echo "❌ Not a git repository."
|
|
967
|
+
return 1
|
|
968
|
+
fi
|
|
969
|
+
|
|
970
|
+
# Safety: refresh remote refs first so merge checks are based on current origin state.
|
|
971
|
+
if ! git fetch --quiet origin --prune 2>/dev/null; then
|
|
972
|
+
echo "❌ Could not fetch origin. Aborting to avoid deleting against stale refs."
|
|
973
|
+
return 1
|
|
974
|
+
fi
|
|
965
975
|
|
|
966
976
|
# Default protected branches
|
|
967
977
|
local -a protected=("master" "main" "develop" "development")
|
|
@@ -1020,12 +1030,7 @@ gclean() { # gclean [--dry-run] | Delete local branches already merged to master
|
|
|
1020
1030
|
local deleted=0
|
|
1021
1031
|
local skipped_protected=0
|
|
1022
1032
|
local skipped_recent=0
|
|
1023
|
-
|
|
1024
|
-
# Build grep pattern for protected branches
|
|
1025
|
-
local grep_pattern="^\s*\*"
|
|
1026
|
-
for p in "${protected[@]}"; do
|
|
1027
|
-
grep_pattern="$grep_pattern|^\s*$p\$"
|
|
1028
|
-
done
|
|
1033
|
+
local skipped_not_merged=0
|
|
1029
1034
|
|
|
1030
1035
|
while IFS= read -r branch; do
|
|
1031
1036
|
branch=$(echo "$branch" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')
|
|
@@ -1058,6 +1063,13 @@ gclean() { # gclean [--dry-run] | Delete local branches already merged to master
|
|
|
1058
1063
|
[[ $dry_run -eq 1 ]] && echo " ⏭️ Skip (recent): $branch"
|
|
1059
1064
|
continue
|
|
1060
1065
|
fi
|
|
1066
|
+
|
|
1067
|
+
# Extra safety: branch tip must still be an ancestor of merge target right before delete.
|
|
1068
|
+
if ! git merge-base --is-ancestor "$branch" "$merge_target" 2>/dev/null; then
|
|
1069
|
+
((skipped_not_merged++))
|
|
1070
|
+
[[ $dry_run -eq 1 ]] && echo " ⏭️ Skip (not merged): $branch"
|
|
1071
|
+
continue
|
|
1072
|
+
fi
|
|
1061
1073
|
|
|
1062
1074
|
# Delete the branch
|
|
1063
1075
|
if [[ $dry_run -eq 1 ]]; then
|
|
@@ -1076,6 +1088,8 @@ gclean() { # gclean [--dry-run] | Delete local branches already merged to master
|
|
|
1076
1088
|
else
|
|
1077
1089
|
echo "✅ Deleted $deleted branch(es)."
|
|
1078
1090
|
fi
|
|
1091
|
+
[[ $skipped_protected -gt 0 ]] && echo " Skipped $skipped_protected protected branch(es)."
|
|
1079
1092
|
[[ $skipped_recent -gt 0 ]] && echo " Skipped $skipped_recent recent branch(es)."
|
|
1093
|
+
[[ $skipped_not_merged -gt 0 ]] && echo " Skipped $skipped_not_merged not-merged branch(es)."
|
|
1080
1094
|
}
|
|
1081
1095
|
alias gc_clean='gclean' # gclean | Alias for gclean
|