]> git.ipfire.org Git - thirdparty/git.git/blobdiff - t/t3400-rebase.sh
The sixth batch
[thirdparty/git.git] / t / t3400-rebase.sh
index 80b23fd3269c7828660469207728f67087c82467..40d297599584af8fc13b5ddfbb7a991db190c163 100755 (executable)
@@ -64,7 +64,7 @@ test_expect_success 'rebase sets ORIG_HEAD to pre-rebase state' '
        pre="$(git rev-parse --verify HEAD)" &&
        git rebase master &&
        test_cmp_rev "$pre" ORIG_HEAD &&
-       ! test_cmp_rev "$pre" HEAD
+       test_cmp_rev ! "$pre" HEAD
 '
 
 test_expect_success 'rebase, with <onto> and <upstream> specified as :/quuxery' '
@@ -143,11 +143,11 @@ test_expect_success 'setup: recover' '
 
 test_expect_success 'Show verbose error when HEAD could not be detached' '
        >B &&
+       test_when_finished "rm -f B" &&
        test_must_fail git rebase topic 2>output.err >output.out &&
        test_i18ngrep "The following untracked working tree files would be overwritten by checkout:" output.err &&
        test_i18ngrep B output.err
 '
-rm -f B
 
 test_expect_success 'fail when upstream arg is missing and not on branch' '
        git checkout topic &&
@@ -159,19 +159,43 @@ test_expect_success 'fail when upstream arg is missing and not configured' '
        test_must_fail git rebase
 '
 
-test_expect_success 'default to common base in @{upstream}s reflog if no upstream arg' '
+test_expect_success 'rebase works with format.useAutoBase' '
+       test_config format.useAutoBase true &&
+       git checkout topic &&
+       git rebase master
+'
+
+test_expect_success 'default to common base in @{upstream}s reflog if no upstream arg (--merge)' '
        git checkout -b default-base master &&
        git checkout -b default topic &&
        git config branch.default.remote . &&
        git config branch.default.merge refs/heads/default-base &&
-       git rebase &&
+       git rebase --merge &&
        git rev-parse --verify default-base >expect &&
        git rev-parse default~1 >actual &&
        test_cmp expect actual &&
        git checkout default-base &&
        git reset --hard HEAD^ &&
        git checkout default &&
-       git rebase &&
+       git rebase --merge &&
+       git rev-parse --verify default-base >expect &&
+       git rev-parse default~1 >actual &&
+       test_cmp expect actual
+'
+
+test_expect_success 'default to common base in @{upstream}s reflog if no upstream arg (--apply)' '
+       git checkout -B default-base master &&
+       git checkout -B default topic &&
+       git config branch.default.remote . &&
+       git config branch.default.merge refs/heads/default-base &&
+       git rebase --apply &&
+       git rev-parse --verify default-base >expect &&
+       git rev-parse default~1 >actual &&
+       test_cmp expect actual &&
+       git checkout default-base &&
+       git reset --hard HEAD^ &&
+       git checkout default &&
+       git rebase --apply &&
        git rev-parse --verify default-base >expect &&
        git rev-parse default~1 >actual &&
        test_cmp expect actual
@@ -200,9 +224,15 @@ test_expect_success 'cherry-picked commits and fork-point work together' '
        test_cmp expect D
 '
 
-test_expect_success 'rebase -q is quiet' '
+test_expect_success 'rebase --apply -q is quiet' '
        git checkout -b quiet topic &&
-       git rebase -q master >output.out 2>&1 &&
+       git rebase --apply -q master >output.out 2>&1 &&
+       test_must_be_empty output.out
+'
+
+test_expect_success 'rebase --merge -q is quiet' '
+       git checkout -B quiet topic &&
+       git rebase --merge -q master >output.out 2>&1 &&
        test_must_be_empty output.out
 '
 
@@ -285,7 +315,7 @@ EOF
        test_cmp From_.msg out
 '
 
-test_expect_success 'rebase --am and --show-current-patch' '
+test_expect_success 'rebase --apply and --show-current-patch' '
        test_create_repo conflict-apply &&
        (
                cd conflict-apply &&
@@ -295,12 +325,48 @@ test_expect_success 'rebase --am and --show-current-patch' '
                echo two >>init.t &&
                git commit -a -m two &&
                git tag two &&
-               test_must_fail git rebase --onto init HEAD^ &&
+               test_must_fail git rebase --apply -f --onto init HEAD^ &&
                GIT_TRACE=1 git rebase --show-current-patch >/dev/null 2>stderr &&
                grep "show.*$(git rev-parse two)" stderr
        )
 '
 
+test_expect_success 'rebase --apply and .gitattributes' '
+       test_create_repo attributes &&
+       (
+               cd attributes &&
+               test_commit init &&
+               git config filter.test.clean "sed -e '\''s/smudged/clean/g'\''" &&
+               git config filter.test.smudge "sed -e '\''s/clean/smudged/g'\''" &&
+
+               test_commit second &&
+               git checkout -b test HEAD^ &&
+
+               echo "*.txt filter=test" >.gitattributes &&
+               git add .gitattributes &&
+               test_commit third &&
+
+               echo "This text is smudged." >a.txt &&
+               git add a.txt &&
+               test_commit fourth &&
+
+               git checkout -b removal HEAD^ &&
+               git rm .gitattributes &&
+               git add -u &&
+               test_commit fifth &&
+               git cherry-pick test &&
+
+               git checkout test &&
+               git rebase master &&
+               grep "smudged" a.txt &&
+
+               git checkout removal &&
+               git reset --hard &&
+               git rebase master &&
+               grep "clean" a.txt
+       )
+'
+
 test_expect_success 'rebase--merge.sh and --show-current-patch' '
        test_create_repo conflict-merge &&
        (
@@ -335,4 +401,22 @@ test_expect_success 'rebase -c rebase.useBuiltin=false warning' '
        test_must_be_empty err
 '
 
+test_expect_success 'switch to branch checked out here' '
+       git checkout master &&
+       git rebase master master
+'
+
+test_expect_success 'switch to branch not checked out' '
+       git checkout master &&
+       git branch other &&
+       git rebase master other
+'
+
+test_expect_success 'refuse to switch to branch checked out elsewhere' '
+       git checkout master &&
+       git worktree add wt &&
+       test_must_fail git -C wt rebase master master 2>err &&
+       test_i18ngrep "already checked out" err
+'
+
 test_done