11aad46432
The `--preserve-merges` mode of the `rebase` command is slated to be deprecated soon, as the more powerful `--rebase-merges` mode is available now, and the latter was designed with the express intent to address the shortcomings of `--preserve-merges`' design (e.g. the inability to reorder commits in an interactive rebase). As such, we will eventually even remove the `--preserve-merges` support, and along with it, its tests. In preparation for this, and also to allow the Windows phase of our automated tests to save some well-needed time when running the test suite, this commit introduces a new prerequisite REBASE_P, which can be forced to being unmet by setting the environment variable `GIT_TEST_SKIP_REBASE_P` to any non-empty string. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
91 lines
2.1 KiB
Bash
Executable File
91 lines
2.1 KiB
Bash
Executable File
#!/bin/sh
|
|
#
|
|
# Copyright (c) 2008 Stephen Haberman
|
|
#
|
|
|
|
test_description='git rebase preserve merges
|
|
|
|
This test runs git rebase with preserve merges and ensures commits
|
|
dropped by the --cherry-pick flag have their childrens parents
|
|
rewritten.
|
|
'
|
|
. ./test-lib.sh
|
|
|
|
if ! test_have_prereq REBASE_P; then
|
|
skip_all='skipping git rebase -p tests, as asked for'
|
|
test_done
|
|
fi
|
|
|
|
# set up two branches like this:
|
|
#
|
|
# A - B - C - D - E
|
|
# \
|
|
# F - G - H
|
|
# \
|
|
# I
|
|
#
|
|
# where B, D and G touch the same file.
|
|
|
|
test_expect_success 'setup' '
|
|
test_commit A file1 &&
|
|
test_commit B file1 1 &&
|
|
test_commit C file2 &&
|
|
test_commit D file1 2 &&
|
|
test_commit E file3 &&
|
|
git checkout A &&
|
|
test_commit F file4 &&
|
|
test_commit G file1 3 &&
|
|
test_commit H file5 &&
|
|
git checkout F &&
|
|
test_commit I file6
|
|
'
|
|
|
|
# A - B - C - D - E
|
|
# \ \ \
|
|
# F - G - H -- L \ --> L
|
|
# \ | \
|
|
# I -- G2 -- J -- K I -- K
|
|
# G2 = same changes as G
|
|
test_expect_success 'skip same-resolution merges with -p' '
|
|
git checkout H &&
|
|
test_must_fail git merge E &&
|
|
test_commit L file1 23 &&
|
|
git checkout I &&
|
|
test_commit G2 file1 3 &&
|
|
test_must_fail git merge E &&
|
|
test_commit J file1 23 &&
|
|
test_commit K file7 file7 &&
|
|
git rebase -i -p L &&
|
|
test $(git rev-parse HEAD^^) = $(git rev-parse L) &&
|
|
test "23" = "$(cat file1)" &&
|
|
test "I" = "$(cat file6)" &&
|
|
test "file7" = "$(cat file7)"
|
|
'
|
|
|
|
# A - B - C - D - E
|
|
# \ \ \
|
|
# F - G - H -- L2 \ --> L2
|
|
# \ | \
|
|
# I -- G3 --- J2 -- K2 I -- G3 -- K2
|
|
# G2 = different changes as G
|
|
test_expect_success 'keep different-resolution merges with -p' '
|
|
git checkout H &&
|
|
test_must_fail git merge E &&
|
|
test_commit L2 file1 23 &&
|
|
git checkout I &&
|
|
test_commit G3 file1 4 &&
|
|
test_must_fail git merge E &&
|
|
test_commit J2 file1 24 &&
|
|
test_commit K2 file7 file7 &&
|
|
test_must_fail git rebase -i -p L2 &&
|
|
echo 234 > file1 &&
|
|
git add file1 &&
|
|
git rebase --continue &&
|
|
test $(git rev-parse HEAD^^^) = $(git rev-parse L2) &&
|
|
test "234" = "$(cat file1)" &&
|
|
test "I" = "$(cat file6)" &&
|
|
test "file7" = "$(cat file7)"
|
|
'
|
|
|
|
test_done
|