]> git.wh0rd.org - home.git/blame - .bin/git-rb-all
git-rb-all: handle missing working dirs
[home.git] / .bin / git-rb-all
CommitLineData
ba2e5f1f
MF
1#!/bin/bash
2# Helper to rewrite all local branches.
3
4rb_one() {
5 local b=$1
6
fc774894
MF
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
5730a476 12 git checkout -q "${b}" || return
fc774894
MF
13 if ! git rebase ; then
14 git rebase --abort
15 fi
ba2e5f1f
MF
16 fi
17}
18
19usage() {
20 cat <<EOF
21Usage: rb-all
22EOF
23 exit 1
24}
25
26main() {
27 if [[ $# -ne 0 ]] ; then
28 usage
29 fi
30
fa1a0920
MF
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
ba2e5f1f
MF
34 local orig b branches
35 orig=$(git rev-parse --abbrev-ref HEAD) || return
36
86bc09eb 37 branches=( $(git ls-remote --heads . | sed 's:.*refs/heads/::') )
ba2e5f1f
MF
38 for b in "${branches[@]}" ; do
39 rb_one "${b}"
40 done
41
42 git checkout -q "${orig}"
43}
44main "$@"