From: Junio C Hamano Date: Wed, 3 Oct 2007 10:05:39 +0000 (-0700) Subject: Merge branch 'js/rebase-i' X-Git-Tag: v1.5.4-rc0~389 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/9b0185ca06001219f5ffcccb5c09b9a9bb42e7c2?ds=inline;hp=-c Merge branch 'js/rebase-i' * js/rebase-i: rebase -i: work on a detached HEAD --- 9b0185ca06001219f5ffcccb5c09b9a9bb42e7c2 diff --combined git-rebase--interactive.sh index 96d8b6f8db,823291d4af..050140d666 --- a/git-rebase--interactive.sh +++ b/git-rebase--interactive.sh @@@ -232,14 -232,14 +232,14 @@@ do_next () '#'*|'') mark_action_done ;; - pick) + pick|p) comment_for_reflog pick mark_action_done pick_one $sha1 || die_with_patch $sha1 "Could not apply $sha1... $rest" ;; - edit) + edit|e) comment_for_reflog edit mark_action_done @@@ -254,7 -254,7 +254,7 @@@ warn exit 0 ;; - squash) + squash|s) comment_for_reflog squash has_action "$DONE" || @@@ -263,7 -263,7 +263,7 @@@ mark_action_done make_squash_message $sha1 > "$MSG" case "$(peek_next_command)" in - squash) + squash|s) EDIT_COMMIT= USE_OUTPUT=output cp "$MSG" "$SQUASH_MSG" @@@ -276,9 -276,9 +276,9 @@@ esac failed=f + author_script=$(get_author_ident_from_commit HEAD) output git reset --soft HEAD^ pick_one -n $sha1 || failed=t - author_script=$(get_author_ident_from_commit $sha1) echo "$author_script" > "$DOTEST"/author-script case $failed in f) @@@ -317,17 -317,20 +317,20 @@@ else NEWHEAD=$(git rev-parse HEAD) fi && - message="$GIT_REFLOG_ACTION: $HEADNAME onto $SHORTONTO)" && - git update-ref -m "$message" $HEADNAME $NEWHEAD $OLDHEAD && - git symbolic-ref HEAD $HEADNAME && { + case $HEADNAME in + refs/*) + message="$GIT_REFLOG_ACTION: $HEADNAME onto $SHORTONTO)" && + git update-ref -m "$message" $HEADNAME $NEWHEAD $OLDHEAD && + git symbolic-ref HEAD $HEADNAME + ;; + esac && { test ! -f "$DOTEST"/verbose || git diff --stat $(cat "$DOTEST"/head)..HEAD } && rm -rf "$DOTEST" && + git gc --auto && warn "Successfully rebased and updated $HEADNAME." - git gc --auto - exit } @@@ -367,7 -370,11 +370,11 @@@ d HEADNAME=$(cat "$DOTEST"/head-name) HEAD=$(cat "$DOTEST"/head) - git symbolic-ref HEAD $HEADNAME && + case $HEADNAME in + refs/*) + git symbolic-ref HEAD $HEADNAME + ;; + esac && output git reset --hard $HEAD && rm -rf "$DOTEST" exit @@@ -445,8 -452,8 +452,8 @@@ test -z "$ONTO" && ONTO=$UPSTREAM : > "$DOTEST"/interactive || die "Could not mark as interactive" - git symbolic-ref HEAD > "$DOTEST"/head-name || - die "Could not get HEAD" + git symbolic-ref HEAD > "$DOTEST"/head-name 2> /dev/null || + echo "detached HEAD" > "$DOTEST"/head-name echo $HEAD > "$DOTEST"/head echo $UPSTREAM > "$DOTEST"/upstream diff --combined t/t3404-rebase-interactive.sh index f5ef8c2258,f2214dd0fa..11139048fe --- a/t/t3404-rebase-interactive.sh +++ b/t/t3404-rebase-interactive.sh @@@ -180,7 -180,7 +180,7 @@@ test_expect_success 'squash' ' test_expect_success 'retain authorship when squashing' ' - git show HEAD | grep "^Author: Nitfol" + git show HEAD | grep "^Author: Twerp Snog" ' test_expect_success 'preserve merges with -p' ' @@@ -309,4 -309,12 +309,12 @@@ test_expect_success '--continue tries t test $parent = $(git rev-parse HEAD^) ' + test_expect_success 'rebase a detached HEAD' ' + grandparent=$(git rev-parse HEAD~2) && + git checkout $(git rev-parse HEAD) && + test_tick && + FAKE_LINES="2 1" git rebase -i HEAD~2 && + test $grandparent = $(git rev-parse HEAD~2) + ' + test_done