rebase: factor out sub command handling
Factor out the common parts of the handling of the sub commands '--continue', '--skip' and '--abort'. The '--abort' handling can handled completely in git-rebase.sh. After this refactoring, the calls to git-rebase--am.sh, git-rebase--merge.sh and git-rebase--interactive.sh will be better aligned. There will only be one call to interactive rebase that will shortcut the very last part of git-rebase.sh. Signed-off-by: Martin von Zweigbergk <martin.von.zweigbergk@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
4974c2caa2
commit
2959c28366
@ -509,9 +509,7 @@ do_next () {
|
|||||||
test -s "$todo" && return
|
test -s "$todo" && return
|
||||||
|
|
||||||
comment_for_reflog finish &&
|
comment_for_reflog finish &&
|
||||||
head_name=$(cat "$state_dir"/head-name) &&
|
shortonto=$(git rev-parse --short $onto) &&
|
||||||
orig_head=$(cat "$state_dir"/head) &&
|
|
||||||
shortonto=$(git rev-parse --short $(cat "$state_dir"/onto)) &&
|
|
||||||
newhead=$(git rev-parse HEAD) &&
|
newhead=$(git rev-parse HEAD) &&
|
||||||
case $head_name in
|
case $head_name in
|
||||||
refs/*)
|
refs/*)
|
||||||
@ -521,7 +519,7 @@ do_next () {
|
|||||||
;;
|
;;
|
||||||
esac && {
|
esac && {
|
||||||
test ! -f "$state_dir"/verbose ||
|
test ! -f "$state_dir"/verbose ||
|
||||||
git diff-tree --stat $(cat "$state_dir"/head)..HEAD
|
git diff-tree --stat $orig_head..HEAD
|
||||||
} &&
|
} &&
|
||||||
{
|
{
|
||||||
test -s "$rewritten_list" &&
|
test -s "$rewritten_list" &&
|
||||||
@ -655,14 +653,6 @@ rearrange_squash () {
|
|||||||
case "$action" in
|
case "$action" in
|
||||||
continue)
|
continue)
|
||||||
get_saved_options
|
get_saved_options
|
||||||
comment_for_reflog continue
|
|
||||||
|
|
||||||
# Sanity check
|
|
||||||
git rev-parse --verify HEAD >/dev/null ||
|
|
||||||
die "Cannot read HEAD"
|
|
||||||
git update-index --ignore-submodules --refresh &&
|
|
||||||
git diff-files --quiet --ignore-submodules ||
|
|
||||||
die "Working tree is dirty"
|
|
||||||
|
|
||||||
# do we have anything to commit?
|
# do we have anything to commit?
|
||||||
if git diff-index --cached --quiet --ignore-submodules HEAD --
|
if git diff-index --cached --quiet --ignore-submodules HEAD --
|
||||||
@ -693,30 +683,12 @@ first and then run 'git rebase --continue' again."
|
|||||||
require_clean_work_tree "rebase"
|
require_clean_work_tree "rebase"
|
||||||
do_rest
|
do_rest
|
||||||
;;
|
;;
|
||||||
abort)
|
|
||||||
get_saved_options
|
|
||||||
comment_for_reflog abort
|
|
||||||
|
|
||||||
git rerere clear
|
|
||||||
|
|
||||||
head_name=$(cat "$state_dir"/head-name)
|
|
||||||
orig_head=$(cat "$state_dir"/head)
|
|
||||||
case $head_name in
|
|
||||||
refs/*)
|
|
||||||
git symbolic-ref HEAD $head_name
|
|
||||||
;;
|
|
||||||
esac &&
|
|
||||||
output git reset --hard $orig_head &&
|
|
||||||
rm -rf "$state_dir"
|
|
||||||
exit
|
|
||||||
;;
|
|
||||||
skip)
|
skip)
|
||||||
get_saved_options
|
get_saved_options
|
||||||
comment_for_reflog skip
|
|
||||||
|
|
||||||
git rerere clear
|
git rerere clear
|
||||||
|
|
||||||
output git reset --hard && do_rest
|
do_rest
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
@ -70,7 +70,12 @@ test "$(git config --bool rebase.autosquash)" = "true" && autosquash=t
|
|||||||
read_basic_state () {
|
read_basic_state () {
|
||||||
head_name=$(cat "$state_dir"/head-name) &&
|
head_name=$(cat "$state_dir"/head-name) &&
|
||||||
onto=$(cat "$state_dir"/onto) &&
|
onto=$(cat "$state_dir"/onto) &&
|
||||||
orig_head=$(cat "$state_dir"/orig-head) &&
|
if test "$type" = interactive
|
||||||
|
then
|
||||||
|
orig_head=$(cat "$state_dir"/head)
|
||||||
|
else
|
||||||
|
orig_head=$(cat "$state_dir"/orig-head)
|
||||||
|
fi &&
|
||||||
GIT_QUIET=$(cat "$state_dir"/quiet)
|
GIT_QUIET=$(cat "$state_dir"/quiet)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -262,11 +267,19 @@ test $# -gt 2 && usage
|
|||||||
if test -n "$action"
|
if test -n "$action"
|
||||||
then
|
then
|
||||||
test -z "$in_progress" && die "No rebase in progress?"
|
test -z "$in_progress" && die "No rebase in progress?"
|
||||||
test "$type" = interactive && run_specific_rebase
|
# Only interactive rebase uses detailed reflog messages
|
||||||
|
if test "$type" = interactive && test "$GIT_REFLOG_ACTION" = rebase
|
||||||
|
then
|
||||||
|
GIT_REFLOG_ACTION="rebase -i ($action)"
|
||||||
|
export GIT_REFLOG_ACTION
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
case "$action" in
|
case "$action" in
|
||||||
continue)
|
continue)
|
||||||
|
# Sanity check
|
||||||
|
git rev-parse --verify HEAD >/dev/null ||
|
||||||
|
die "Cannot read HEAD"
|
||||||
git update-index --ignore-submodules --refresh &&
|
git update-index --ignore-submodules --refresh &&
|
||||||
git diff-files --quiet --ignore-submodules || {
|
git diff-files --quiet --ignore-submodules || {
|
||||||
echo "You must edit all merge conflicts and then"
|
echo "You must edit all merge conflicts and then"
|
||||||
|
Loading…
Reference in New Issue
Block a user