2 # TopGit rebase command
3 # (C) 2015 Kyle J. McKay <mackyle@gmail.com>
6 USAGE
="Usage: ${tgname:-tg} [...] rebase (-m | --merge) [<git-rebase-arg>...]"
8 case "$1" in -h|
--help)
21 --skip|
--continue|
--abort|
--edit-todo)
26 if [ -n "$optcontinue" ]; then
27 if [ -n "$git_dir" ] && [ -d "$git_dir" ] && ! [ -d "$git_dir/rebase-merge" ]; then
32 if [ -z "$optmerge" -a -z "$optcontinue" ]; then
34 ${tgname:-tg} rebase is intended as a drop-in replacement for git rebase -m.
35 Either add the -m (or --merge) option to the command line or use git rebase
36 directly. When using rebase to flatten history the merge mode is superior.
41 if [ -z "$optcontinue" ]; then
42 rerereon
="$(git config --get --bool rerere.enabled 2>/dev/null)" ||
:
43 [ "$rerereon" = "true" ] ||
44 warn
"rerere.enabled is false, automatic --continue not possible"
47 [ "$*" = "--abort" ] || ensure_ident_available
48 continuemsg
='"git rebase --continue"'
50 newhead
="$(git rev-parse --verify --quiet HEAD --)" ||
:
56 msg
="$(git -c rerere.autoupdate=true rebase "$@
" 3>&2 2>&1 1>&3 3>&-)" || err
=$?
57 case "$msg" in *"$continuemsg"*) hascontinuemsg
=1; esac
58 newhead
="$(git rev-parse --verify --quiet HEAD --)" ||
:
59 [ "$newhead" != "$lasthead" ] || hascontinuemsg
=
60 msg
="$(printf '%s\n' "$msg" | sed -e 's~git rebase ~'"$tgdisplay"' rebase ~g')"
63 if [ -n "$hascontinuemsg" ] && [ $
(git ls-files
--unmerged |
wc -l) -eq 0 ]; then
64 while IFS
= read -r line
; do case "$line" in
65 "Staged "*|
"Resolved "*|
"Recorded "*)
66 printf '%s\n' "$line";;
78 [ -z "$msg" ] ||
printf '%s\n' "$msg" >&2