]> git.wh0rd.org - home.git/blob - .bin/git-rb-all
git-rb-all: handle missing working dirs
[home.git] / .bin / git-rb-all
1 #!/bin/bash
2 # Helper to rewrite all local branches.
3
4 rb_one() {
5 local b=$1
6
7 printf "### ${b}"
8 if ! git config --local "branch.${b}.merge" >/dev/null; then
9 echo " -> skipping due to missing merge branch"
10 else
11 echo
12 git checkout -q "${b}" || return
13 if ! git rebase ; then
14 git rebase --abort
15 fi
16 fi
17 }
18
19 usage() {
20 cat <<EOF
21 Usage: rb-all
22 EOF
23 exit 1
24 }
25
26 main() {
27 if [[ $# -ne 0 ]] ; then
28 usage
29 fi
30
31 # Switch to the top dir in case the working dir doesn't exist in every branch.
32 cd "$(git rev-parse --show-toplevel)" || return
33
34 local orig b branches
35 orig=$(git rev-parse --abbrev-ref HEAD) || return
36
37 branches=( $(git ls-remote --heads . | sed 's:.*refs/heads/::') )
38 for b in "${branches[@]}" ; do
39 rb_one "${b}"
40 done
41
42 git checkout -q "${orig}"
43 }
44 main "$@"