mirror of
https://github.com/git/git
synced 2024-08-25 02:35:46 +00:00
![Jeff King](/assets/img/avatar_default.png)
The $TEST_DIRECTORY variable allows tests to find the top-level test directory regardless of the current working directory. In the past, this has been used to accomodate tests which change directories, but it is also the first step to being able to move trash directories outside of the $TEST_DIRECTORY hierarchy. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
81 lines
1.9 KiB
Bash
Executable file
81 lines
1.9 KiB
Bash
Executable file
#!/bin/sh
|
|
#
|
|
# Copyright (c) 2009 Greg Price
|
|
#
|
|
|
|
test_description='git rebase -p should respect --onto
|
|
|
|
In a rebase with --onto, we should rewrite all the commits that
|
|
aren'"'"'t on top of $ONTO, even if they are on top of $UPSTREAM.
|
|
'
|
|
. ./test-lib.sh
|
|
|
|
. "$TEST_DIRECTORY"/lib-rebase.sh
|
|
|
|
# Set up branches like this:
|
|
# A1---B1---E1---F1---G1
|
|
# \ \ /
|
|
# \ \--C1---D1--/
|
|
# H1
|
|
|
|
test_expect_success 'setup' '
|
|
test_commit A1 &&
|
|
test_commit B1 &&
|
|
test_commit C1 &&
|
|
test_commit D1 &&
|
|
git reset --hard B1 &&
|
|
test_commit E1 &&
|
|
test_commit F1 &&
|
|
test_merge G1 D1 &&
|
|
git reset --hard A1 &&
|
|
test_commit H1
|
|
'
|
|
|
|
# Now rebase merge G1 from both branches' base B1, both should move:
|
|
# A1---B1---E1---F1---G1
|
|
# \ \ /
|
|
# \ \--C1---D1--/
|
|
# \
|
|
# H1---E2---F2---G2
|
|
# \ /
|
|
# \--C2---D2--/
|
|
|
|
test_expect_success 'rebase from B1 onto H1' '
|
|
git checkout G1 &&
|
|
git rebase -p --onto H1 B1 &&
|
|
test "$(git rev-parse HEAD^1^1^1)" = "$(git rev-parse H1)" &&
|
|
test "$(git rev-parse HEAD^2^1^1)" = "$(git rev-parse H1)"
|
|
'
|
|
|
|
# On the other hand if rebase from E1 which is within one branch,
|
|
# then the other branch stays:
|
|
# A1---B1---E1---F1---G1
|
|
# \ \ /
|
|
# \ \--C1---D1--/
|
|
# \ \
|
|
# H1-----F3-----G3
|
|
|
|
test_expect_success 'rebase from E1 onto H1' '
|
|
git checkout G1 &&
|
|
git rebase -p --onto H1 E1 &&
|
|
test "$(git rev-parse HEAD^1^1)" = "$(git rev-parse H1)" &&
|
|
test "$(git rev-parse HEAD^2)" = "$(git rev-parse D1)"
|
|
'
|
|
|
|
# And the same if we rebase from a commit in the second-parent branch.
|
|
# A1---B1---E1---F1----G1
|
|
# \ \ \ /
|
|
# \ \--C1---D1-\-/
|
|
# \ \
|
|
# H1------D3------G4
|
|
|
|
test_expect_success 'rebase from C1 onto H1' '
|
|
git checkout G1 &&
|
|
git rev-list --first-parent --pretty=oneline C1..G1 &&
|
|
git rebase -p --onto H1 C1 &&
|
|
test "$(git rev-parse HEAD^2^1)" = "$(git rev-parse H1)" &&
|
|
test "$(git rev-parse HEAD^1)" = "$(git rev-parse F1)"
|
|
'
|
|
|
|
test_done
|