git-garbage 1.1.5 → 1.1.7

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.
Files changed (2) hide show
  1. package/garbage.sh +23 -10
  2. package/package.json +1 -1
package/garbage.sh CHANGED
@@ -1,4 +1,4 @@
1
- #!/bin/bash
1
+ #!/usr/bin/env bash
2
2
 
3
3
  if test -n "$(git status --porcelain)"; then
4
4
  echo 'Unclean working tree. Commit or stash changes first.' >&2;
@@ -10,23 +10,36 @@ if ! git fetch --quiet 2> /dev/null; then
10
10
  exit 1;
11
11
  fi
12
12
 
13
- CURRENT_BRANCH="$(git rev-parse --abbrev-ref HEAD)"
13
+ current="$(git rev-parse --abbrev-ref HEAD)"
14
14
 
15
- garbage() {
16
- git for-each-ref --format "${1:-}%(refname:short)" refs/heads/ --merged | egrep -v "$CURRENT_BRANCH"
17
- }
15
+ declare -a branches
18
16
 
19
- BRANCHES=$(garbage " ")
17
+ # merged
18
+ for branch in $(git for-each-ref --format "%(refname:short)" refs/heads/ --merged | grep -E -v "$current"); do
19
+ branches+=("$branch")
20
+ done
20
21
 
21
- if [[ -z $BRANCHES ]]; then
22
+ # squashed
23
+ for branch in $(git for-each-ref --format "%(refname:short)" refs/heads/); do
24
+ mergeBase=$(git merge-base "$current" "$branch")
25
+ if [[ $(git cherry "$current" "$(git commit-tree "$(git rev-parse "$branch^{tree}")" -p "$mergeBase" -m _)") == "-"* ]]; then
26
+ branches+=("$branch")
27
+ fi
28
+ done
29
+
30
+ if [[ ${#branches[@]} -eq 0 ]]; then
22
31
  printf "\n Nothing to garbage."
23
32
  exit
24
33
  fi
25
34
 
26
- echo && echo "$BRANCHES" && echo
35
+ echo
36
+ printf ' %s\n' "${branches[@]}"
37
+ echo
38
+
27
39
  read -rp " Will be removed. Continue? (y/N) " -n 1
28
40
 
29
41
  if [[ $REPLY =~ ^[Yy]$ ]]; then
30
- MESSAGE=$(garbage | xargs git branch -d)
31
- echo && echo && echo "$MESSAGE" | sed 's/Deleted/ Deleted/g'
42
+ echo && echo
43
+ message=$(git branch -D "${branches[@]}")
44
+ echo "${message//Deleted/ Deleted}"
32
45
  fi
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "git-garbage",
3
3
  "description": "Delete local git branches after deleting them on the remote repository.",
4
4
  "homepage": "https://github.com/Kikobeats/git-garbage",
5
- "version": "1.1.5",
5
+ "version": "1.1.7",
6
6
  "bin": {
7
7
  "git-garbage": "garbage.sh"
8
8
  },