t3432: test rebase fast-forward behavior
When rebase is run on a branch that can be fast-forwarded, this should automatically be done. Create test to ensure this behavior happens. There are some cases that currently don't pass. The first case is where a feature and master have diverged, running "git rebase master... master" causes a full rebase to happen even though a fast-forward should happen. The second case is when we are doing "git rebase --fork-point" and a fork-point commit is found. Once again, a full rebase happens even though a fast-forward should happen. Mark these cases as failure so we can fix it later. Signed-off-by: Denton Liu <liu.denton@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Denton Liu committed
Aug 25, 2019 at 05:12 UTC
793ac7e309437e2225825370a9c7a0f1ccb39480
1 file changed
+72
t/t3432-rebase-fast-forward.sh
new
+72
@@ -0,0 +1,72 @@
1
+#!/bin/sh
2
+#
3
+# Copyright (c) 2019 Denton Liu
4
+#
5
+
6
+test_description='ensure rebase fast-forwards commits when possible'
7
+
8
+. ./test-lib.sh
9
+
10
+test_expect_success setup '
11
+ test_commit A &&
12
+ test_commit B &&
13
+ test_commit C &&
14
+ test_commit D &&
15
+ git checkout -t -b side
16
+'
17
+
18
+test_rebase_same_head () {
19
+ status="$1" &&
20
+ shift &&
21
+ test_expect_$status "git rebase $* with $changes is no-op" "
22
+ oldhead=\$(git rev-parse HEAD) &&
23
+ test_when_finished 'git reset --hard \$oldhead' &&
24
+ git rebase $* &&
25
+ newhead=\$(git rev-parse HEAD) &&
26
+ test_cmp_rev \$oldhead \$newhead
27
+ "
28
+}
29
+
30
+changes='no changes'
31
+test_rebase_same_head success
32
+test_rebase_same_head success master
33
+test_rebase_same_head success --onto B B
34
+test_rebase_same_head success --onto B... B
35
+test_rebase_same_head success --onto master... master
36
+test_rebase_same_head success --no-fork-point
37
+test_rebase_same_head success --fork-point master
38
+test_rebase_same_head failure --fork-point --onto B B
39
+test_rebase_same_head failure --fork-point --onto B... B
40
+test_rebase_same_head success --fork-point --onto master... master
41
+
42
+test_expect_success 'add work to side' '
43
+ test_commit E
44
+'
45
+
46
+changes='our changes'
47
+test_rebase_same_head success
48
+test_rebase_same_head success master
49
+test_rebase_same_head success --onto B B
50
+test_rebase_same_head success --onto B... B
51
+test_rebase_same_head success --onto master... master
52
+test_rebase_same_head success --no-fork-point
53
+test_rebase_same_head success --fork-point master
54
+test_rebase_same_head failure --fork-point --onto B B
55
+test_rebase_same_head failure --fork-point --onto B... B
56
+test_rebase_same_head success --fork-point --onto master... master
57
+
58
+test_expect_success 'add work to upstream' '
59
+ git checkout master &&
60
+ test_commit F &&
61
+ git checkout side
62
+'
63
+
64
+changes='our and their changes'
65
+test_rebase_same_head success --onto B B
66
+test_rebase_same_head success --onto B... B
67
+test_rebase_same_head failure --onto master... master
68
+test_rebase_same_head failure --fork-point --onto B B
69
+test_rebase_same_head failure --fork-point --onto B... B
70
+test_rebase_same_head failure --fork-point --onto master... master
71
+
72
+test_done