1 # zaw source for git branch
3 function zaw-src-git-branches
() {
4 git rev-parse
--git-dir >/dev
/null
2>&1
6 local branches_list
="$(git show-ref | awk ' $2 != "refs
/stash
" { print $2 }' )"
7 : ${(A)candidates::=${${(f)${branches_list}}#refs/}}
8 : ${(A)cand_descriptions::=${${(f)${branches_list}}#refs/(remotes|heads|tags)/}}
11 zaw-src-git-branches-checkout \
12 zaw-src-git-branches-simple-checkout \
13 zaw-callback-append-to-buffer \
14 zaw-src-git-branches-merge \
15 zaw-src-git-branches-merge-rebase \
16 zaw-src-git-branches-merge-no-ff \
17 zaw-src-git-branches-merge-to \
18 zaw-src-git-branches-reset \
19 zaw-src-git-branches-rebase \
20 zaw-src-git-branches-rebase-interactive \
21 zaw-src-git-branches-create \
22 zaw-src-git-branches-diff \
23 zaw-src-git-branches-diff-stat \
24 zaw-src-git-branches-reset-hard \
25 zaw-src-git-branches-delete \
26 zaw-src-git-branches-delete-force
)
30 "append to edit buffer" \
37 "rebase interactive from..." \
38 "create new branch from..." \
47 function zaw-src-git-branches-checkout
() {
49 local b_name
=${1#(heads|remotes|tags)/}
52 BUFFER
="git checkout $b_name"
56 BUFFER
="git checkout -t $b_name"
62 function zaw-src-git-branches-simple-checkout
() {
63 local b_name
=${1#(heads|remotes|tags)/}
64 BUFFER
="git checkout $b_name"
68 function zaw-src-git-branches-create
() {
69 local b_name
=${1#(heads|remotes|tags)/}
70 LBUFFER
="git checkout -b "
74 function zaw-src-git-branches-merge
() {
76 local b_name
=${1#(heads|remotes|tags)/}
77 BUFFER
="git merge $b_name"
81 function zaw-src-git-branches-merge-rebase
() {
83 local b_name
=${1#(heads|remotes|tags)/}
84 BUFFER
="git merge --rebase $b_name"
88 function zaw-src-git-branches-merge-no-ff
() {
90 local b_name
=${1#(heads|remotes|tags)/}
91 BUFFER
="git merge --no-ff $b_name"
95 function zaw-src-git-branches-merge-to
() {
97 local b_name
=${1#(heads|remotes|tags)/}
98 local b_now
=${$(git symbolic-ref HEAD)#refs/heads/}
99 if [[ "$b_type" == "heads" ]]; then
100 BUFFER
="git checkout $b_name && git merge --no-ff $b_now"
105 function zaw-src-git-branches-reset
() {
106 local b_type
=${1%%/*}
107 local b_name
=${1#(heads|remotes|tags)/}
108 BUFFER
="git reset $b_name"
112 function zaw-src-git-branches-diff
() {
113 local b_name
=${1#(heads|remotes|tags)/}
114 BUFFER
="git diff $b_name"
118 function zaw-src-git-branches-diff-stat
() {
119 local b_name
=${1#(heads|remotes|tags)/}
120 BUFFER
="git diff --stat $b_name"
123 function zaw-src-git-branches-reset-hard
() {
124 local b_type
=${1%%/*}
125 local b_name
=${1#(heads|remotes|tags)/}
126 BUFFER
="git reset --hard $b_name"
130 function zaw-src-git-branches-rebase
() {
131 local b_type
=${1%%/*}
132 local b_name
=${1#(heads|remotes|tags)/}
133 BUFFER
="git rebase $b_name"
137 function zaw-src-git-branches-rebase-interactive
() {
138 local b_type
=${1%%/*}
139 local b_name
=${1#(heads|remotes|tags)/}
140 BUFFER
="git rebase -i $b_name"
144 function zaw-src-git-branches-delete
() {
145 local b_type
=${1%%/*}
146 local b_name
=${1#(heads|remotes|tags)/}
147 if [[ "$b_type" == "heads" ]] ; then
148 BUFFER
="git branch -d $b_name"
150 elif [[ "$b_type" == "remotes" ]] ; then
151 local b_loc
=${b_name%%/*}
152 local b_base
=${b_name#$b_loc/}
153 BUFFER
="git push $b_loc :$b_base"
158 function zaw-src-git-branches-delete-force
() {
159 local b_type
=${1%%/*}
160 local b_name
=${1#(heads|remotes|tags)/}
161 if [[ "$b_type" == "heads" ]] ; then
162 BUFFER
="git branch -D $b_name"
164 elif [[ "$b_type" == "remotes" ]] ; then
165 local b_loc
=${b_name%%/*}
166 local b_base
=${b_name#$b_loc/}
167 BUFFER
="git push $b_loc :$b_base"
172 zaw-register-src
-n git-branches zaw-src-git-branches