Denton Liu | 359eceb | 2019-08-25 05:11:57 -0400 | [diff] [blame] | 1 | #!/bin/sh |
| 2 | # |
| 3 | # Copyright (c) 2019 Denton Liu |
| 4 | # |
| 5 | |
| 6 | test_description='git rebase --fork-point test' |
| 7 | |
Johannes Schindelin | d1c02d9 | 2020-11-18 23:44:25 +0000 | [diff] [blame] | 8 | GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main |
Johannes Schindelin | 334afbc | 2020-11-18 23:44:19 +0000 | [diff] [blame] | 9 | export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME |
| 10 | |
Denton Liu | 359eceb | 2019-08-25 05:11:57 -0400 | [diff] [blame] | 11 | . ./test-lib.sh |
| 12 | |
Johannes Schindelin | d1c02d9 | 2020-11-18 23:44:25 +0000 | [diff] [blame] | 13 | # A---B---D---E (main) |
Denton Liu | 359eceb | 2019-08-25 05:11:57 -0400 | [diff] [blame] | 14 | # \ |
| 15 | # C*---F---G (side) |
| 16 | # |
Johannes Schindelin | d1c02d9 | 2020-11-18 23:44:25 +0000 | [diff] [blame] | 17 | # C was formerly part of main but main was rewound to remove C |
Denton Liu | 359eceb | 2019-08-25 05:11:57 -0400 | [diff] [blame] | 18 | # |
| 19 | test_expect_success setup ' |
| 20 | test_commit A && |
| 21 | test_commit B && |
| 22 | test_commit C && |
| 23 | git branch -t side && |
| 24 | git reset --hard HEAD^ && |
| 25 | test_commit D && |
| 26 | test_commit E && |
| 27 | git checkout side && |
| 28 | test_commit F && |
| 29 | test_commit G |
| 30 | ' |
| 31 | |
Alex Henrie | 2803d80 | 2021-02-23 00:18:40 -0700 | [diff] [blame] | 32 | do_test_rebase () { |
| 33 | expected="$1" && |
| 34 | shift && |
Junio C Hamano | 682bbad | 2021-02-25 16:43:31 -0800 | [diff] [blame] | 35 | git checkout main && |
Alex Henrie | 2803d80 | 2021-02-23 00:18:40 -0700 | [diff] [blame] | 36 | git reset --hard E && |
| 37 | git checkout side && |
| 38 | git reset --hard G && |
| 39 | git rebase $* && |
| 40 | test_write_lines $expected >expect && |
| 41 | git log --pretty=%s >actual && |
| 42 | test_cmp expect actual |
| 43 | } |
| 44 | |
Denton Liu | 359eceb | 2019-08-25 05:11:57 -0400 | [diff] [blame] | 45 | test_rebase () { |
| 46 | expected="$1" && |
| 47 | shift && |
Alex Henrie | 2803d80 | 2021-02-23 00:18:40 -0700 | [diff] [blame] | 48 | test_expect_success "git rebase $*" "do_test_rebase '$expected' $*" |
Denton Liu | 359eceb | 2019-08-25 05:11:57 -0400 | [diff] [blame] | 49 | } |
| 50 | |
| 51 | test_rebase 'G F E D B A' |
| 52 | test_rebase 'G F D B A' --onto D |
Denton Liu | 414d924 | 2019-08-27 01:38:06 -0400 | [diff] [blame] | 53 | test_rebase 'G F B A' --keep-base |
Denton Liu | 359eceb | 2019-08-25 05:11:57 -0400 | [diff] [blame] | 54 | test_rebase 'G F C E D B A' --no-fork-point |
| 55 | test_rebase 'G F C D B A' --no-fork-point --onto D |
Denton Liu | 414d924 | 2019-08-27 01:38:06 -0400 | [diff] [blame] | 56 | test_rebase 'G F C B A' --no-fork-point --keep-base |
Junio C Hamano | f08132f | 2019-12-09 10:51:47 -0800 | [diff] [blame] | 57 | |
Johannes Schindelin | d1c02d9 | 2020-11-18 23:44:25 +0000 | [diff] [blame] | 58 | test_rebase 'G F E D B A' --fork-point refs/heads/main |
| 59 | test_rebase 'G F E D B A' --fork-point main |
Junio C Hamano | f08132f | 2019-12-09 10:51:47 -0800 | [diff] [blame] | 60 | |
Johannes Schindelin | d1c02d9 | 2020-11-18 23:44:25 +0000 | [diff] [blame] | 61 | test_rebase 'G F D B A' --fork-point --onto D refs/heads/main |
| 62 | test_rebase 'G F D B A' --fork-point --onto D main |
Junio C Hamano | f08132f | 2019-12-09 10:51:47 -0800 | [diff] [blame] | 63 | |
Johannes Schindelin | d1c02d9 | 2020-11-18 23:44:25 +0000 | [diff] [blame] | 64 | test_rebase 'G F B A' --fork-point --keep-base refs/heads/main |
| 65 | test_rebase 'G F B A' --fork-point --keep-base main |
Junio C Hamano | f08132f | 2019-12-09 10:51:47 -0800 | [diff] [blame] | 66 | |
Johannes Schindelin | d1c02d9 | 2020-11-18 23:44:25 +0000 | [diff] [blame] | 67 | test_rebase 'G F C E D B A' refs/heads/main |
| 68 | test_rebase 'G F C E D B A' main |
Junio C Hamano | f08132f | 2019-12-09 10:51:47 -0800 | [diff] [blame] | 69 | |
Johannes Schindelin | d1c02d9 | 2020-11-18 23:44:25 +0000 | [diff] [blame] | 70 | test_rebase 'G F C D B A' --onto D refs/heads/main |
| 71 | test_rebase 'G F C D B A' --onto D main |
Junio C Hamano | f08132f | 2019-12-09 10:51:47 -0800 | [diff] [blame] | 72 | |
Johannes Schindelin | d1c02d9 | 2020-11-18 23:44:25 +0000 | [diff] [blame] | 73 | test_rebase 'G F C B A' --keep-base refs/heads/main |
| 74 | test_rebase 'G F C B A' --keep-base main |
Junio C Hamano | f08132f | 2019-12-09 10:51:47 -0800 | [diff] [blame] | 75 | |
| 76 | test_expect_success 'git rebase --fork-point with ambigous refname' ' |
Johannes Schindelin | d1c02d9 | 2020-11-18 23:44:25 +0000 | [diff] [blame] | 77 | git checkout main && |
Junio C Hamano | f08132f | 2019-12-09 10:51:47 -0800 | [diff] [blame] | 78 | git checkout -b one && |
| 79 | git checkout side && |
| 80 | git tag one && |
| 81 | test_must_fail git rebase --fork-point --onto D one |
| 82 | ' |
Denton Liu | 359eceb | 2019-08-25 05:11:57 -0400 | [diff] [blame] | 83 | |
Alex Henrie | 2803d80 | 2021-02-23 00:18:40 -0700 | [diff] [blame] | 84 | test_expect_success '--fork-point and --root both given' ' |
| 85 | test_must_fail git rebase --fork-point --root 2>err && |
Jean-Noël Avila | 12909b6 | 2022-01-05 20:02:16 +0000 | [diff] [blame] | 86 | test_i18ngrep "cannot be used together" err |
Alex Henrie | 2803d80 | 2021-02-23 00:18:40 -0700 | [diff] [blame] | 87 | ' |
| 88 | |
| 89 | test_expect_success 'rebase.forkPoint set to false' ' |
| 90 | test_config rebase.forkPoint false && |
| 91 | do_test_rebase "G F C E D B A" |
| 92 | ' |
| 93 | |
| 94 | test_expect_success 'rebase.forkPoint set to false and then to true' ' |
| 95 | test_config_global rebase.forkPoint false && |
| 96 | test_config rebase.forkPoint true && |
| 97 | do_test_rebase "G F E D B A" |
| 98 | ' |
| 99 | |
| 100 | test_expect_success 'rebase.forkPoint set to false and command line says --fork-point' ' |
| 101 | test_config rebase.forkPoint false && |
| 102 | do_test_rebase "G F E D B A" --fork-point |
| 103 | ' |
| 104 | |
| 105 | test_expect_success 'rebase.forkPoint set to true and command line says --no-fork-point' ' |
| 106 | test_config rebase.forkPoint true && |
| 107 | do_test_rebase "G F C E D B A" --no-fork-point |
| 108 | ' |
| 109 | |
| 110 | test_expect_success 'rebase.forkPoint set to true and --root given' ' |
| 111 | test_config rebase.forkPoint true && |
| 112 | git rebase --root |
| 113 | ' |
| 114 | |
Denton Liu | 359eceb | 2019-08-25 05:11:57 -0400 | [diff] [blame] | 115 | test_done |