]> git.wh0rd.org Git - 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 "$@"