t3401: add directory rename testcases for rebase and am

Add a simple directory rename testcase, in conjunction with each of the types of rebases: git-rebase--interactive git-rebase--am git-rebase--merge and also use the same testcase for git am --3way This demonstrates a difference in behavior between the different rebase backends in regards to directory rename detection. Signed-off-by: Elijah Newren <newren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Elijah Newren committed Jun 27, 2018 at 00:23 UTC 16346883ab0f548aa57ed5617caacc66c0a25bea
1 file changed +105
t/t3401-rebase-and-am-rename.sh new
+105
@@ -0,0 +1,105 @@
1 +#!/bin/sh
2 +
3 +test_description='git rebase + directory rename tests'
4 +
5 +. ./test-lib.sh
6 +. "$TEST_DIRECTORY"/lib-rebase.sh
7 +
8 +test_expect_success 'setup testcase' '
9 + test_create_repo dir-rename &&
10 + (
11 + cd dir-rename &&
12 +
13 + mkdir x &&
14 + test_seq 1 10 >x/a &&
15 + test_seq 11 20 >x/b &&
16 + test_seq 21 30 >x/c &&
17 + test_write_lines a b c d e f g h i >l &&
18 + git add x l &&
19 + git commit -m "Initial" &&
20 +
21 + git branch O &&
22 + git branch A &&
23 + git branch B &&
24 +
25 + git checkout A &&
26 + git mv x y &&
27 + git mv l letters &&
28 + git commit -m "Rename x to y, l to letters" &&
29 +
30 + git checkout B &&
31 + echo j >>l &&
32 + test_seq 31 40 >x/d &&
33 + git add l x/d &&
34 + git commit -m "Modify l, add x/d"
35 + )
36 +'
37 +
38 +test_expect_success 'rebase --interactive: directory rename detected' '
39 + (
40 + cd dir-rename &&
41 +
42 + git checkout B^0 &&
43 +
44 + set_fake_editor &&
45 + FAKE_LINES="1" git rebase --interactive A &&
46 +
47 + git ls-files -s >out &&
48 + test_line_count = 5 out &&
49 +
50 + test_path_is_file y/d &&
51 + test_path_is_missing x/d
52 + )
53 +'
54 +
55 +test_expect_failure 'rebase (am): directory rename detected' '
56 + (
57 + cd dir-rename &&
58 +
59 + git checkout B^0 &&
60 +
61 + git rebase A &&
62 +
63 + git ls-files -s >out &&
64 + test_line_count = 5 out &&
65 +
66 + test_path_is_file y/d &&
67 + test_path_is_missing x/d
68 + )
69 +'
70 +
71 +test_expect_success 'rebase --merge: directory rename detected' '
72 + (
73 + cd dir-rename &&
74 +
75 + git checkout B^0 &&
76 +
77 + git rebase --merge A &&
78 +
79 + git ls-files -s >out &&
80 + test_line_count = 5 out &&
81 +
82 + test_path_is_file y/d &&
83 + test_path_is_missing x/d
84 + )
85 +'
86 +
87 +test_expect_failure 'am: directory rename detected' '
88 + (
89 + cd dir-rename &&
90 +
91 + git checkout A^0 &&
92 +
93 + git format-patch -1 B &&
94 +
95 + git am --3way 0001*.patch &&
96 +
97 + git ls-files -s >out &&
98 + test_line_count = 5 out &&
99 +
100 + test_path_is_file y/d &&
101 + test_path_is_missing x/d
102 + )
103 +'
104 +
105 +test_done