Merge branch 'js/rebase-i'
authorJunio C Hamano <gitster@pobox.com>
Wed, 3 Oct 2007 10:05:39 +0000 (03:05 -0700)
committerJunio C Hamano <gitster@pobox.com>
Wed, 3 Oct 2007 10:05:39 +0000 (03:05 -0700)
* js/rebase-i:
rebase -i: work on a detached HEAD

1  2 
git-rebase--interactive.sh
t/t3404-rebase-interactive.sh
index 96d8b6f8db15ae34a435c9330bbc6d00d7073817,823291d4afbe8571882fd01a614e07dd0439d1c2..050140d666b2d68ab91f6d41d64779178e99c70b
@@@ -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
                warn
                exit 0
                ;;
 -      squash)
 +      squash|s)
                comment_for_reflog squash
  
                has_action "$DONE" ||
                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"
                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)
        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
  }
  
  
                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
                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
index f5ef8c22586525a23f53aaac7b895d634a410805,f2214dd0fa5055ecbd824e41080ec39c25ce57f9..11139048fe2238a3e06972252d7410da4058dccb
@@@ -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