blob: aa5cfae2b681c0a73d9e09493c8cdcbb6a273f87 [file] [log] [blame]
Don Zickus7a078412008-06-27 14:39:12 -04001#!/bin/sh
2
3test_description='apply same filename'
4
Ævar Arnfjörð Bjarmasonf54f48f2021-10-31 00:24:18 +02005
6TEST_PASSES_SANITIZE_LEAK=true
Don Zickus7a078412008-06-27 14:39:12 -04007. ./test-lib.sh
8
Johannes Sixt41872fd2008-07-04 08:43:19 +02009modify () {
10 sed -e "$1" < "$2" > "$2".x &&
11 mv "$2".x "$2"
12}
13
Don Zickus7a078412008-06-27 14:39:12 -040014test_expect_success setup '
Eric Sunshine08495412021-12-09 00:11:05 -050015 test_write_lines a b c d e f g h i j k l m >same_fn &&
Don Zickus7a078412008-06-27 14:39:12 -040016 cp same_fn other_fn &&
17 git add same_fn other_fn &&
18 git commit -m initial
19'
20test_expect_success 'apply same filename with independent changes' '
Johannes Sixt41872fd2008-07-04 08:43:19 +020021 modify "s/^d/z/" same_fn &&
Don Zickus7a078412008-06-27 14:39:12 -040022 git diff > patch0 &&
23 git add same_fn &&
Johannes Sixt41872fd2008-07-04 08:43:19 +020024 modify "s/^i/y/" same_fn &&
Don Zickus7a078412008-06-27 14:39:12 -040025 git diff >> patch0 &&
26 cp same_fn same_fn2 &&
27 git reset --hard &&
Nanako Shiraishi3604e7c2008-09-03 17:59:29 +090028 git apply patch0 &&
Gary V. Vaughan4fdf71b2010-05-14 09:31:37 +000029 test_cmp same_fn same_fn2
Don Zickus7a078412008-06-27 14:39:12 -040030'
31
32test_expect_success 'apply same filename with overlapping changes' '
Jonathan Niedera48fcd82010-10-30 20:46:54 -050033 git reset --hard &&
Jonathan Tanb0f266d2020-10-20 15:04:52 -070034
35 # Store same_fn so that we can check apply -R in next test
36 cp same_fn same_fn1 &&
37
Johannes Sixt41872fd2008-07-04 08:43:19 +020038 modify "s/^d/z/" same_fn &&
Don Zickus7a078412008-06-27 14:39:12 -040039 git diff > patch0 &&
40 git add same_fn &&
Johannes Sixt41872fd2008-07-04 08:43:19 +020041 modify "s/^e/y/" same_fn &&
Don Zickus7a078412008-06-27 14:39:12 -040042 git diff >> patch0 &&
43 cp same_fn same_fn2 &&
44 git reset --hard &&
Nanako Shiraishi3604e7c2008-09-03 17:59:29 +090045 git apply patch0 &&
Gary V. Vaughan4fdf71b2010-05-14 09:31:37 +000046 test_cmp same_fn same_fn2
Don Zickus7a078412008-06-27 14:39:12 -040047'
48
Jonathan Tanb0f266d2020-10-20 15:04:52 -070049test_expect_success 'apply same filename with overlapping changes, in reverse' '
50 git apply -R patch0 &&
51 test_cmp same_fn same_fn1
52'
53
Don Zickus7a078412008-06-27 14:39:12 -040054test_expect_success 'apply same new filename after rename' '
Jonathan Niedera48fcd82010-10-30 20:46:54 -050055 git reset --hard &&
56 git mv same_fn new_fn &&
Johannes Sixt41872fd2008-07-04 08:43:19 +020057 modify "s/^d/z/" new_fn &&
Don Zickus7a078412008-06-27 14:39:12 -040058 git add new_fn &&
59 git diff -M --cached > patch1 &&
Johannes Sixt41872fd2008-07-04 08:43:19 +020060 modify "s/^e/y/" new_fn &&
Don Zickus7a078412008-06-27 14:39:12 -040061 git diff >> patch1 &&
62 cp new_fn new_fn2 &&
63 git reset --hard &&
64 git apply --index patch1 &&
Gary V. Vaughan4fdf71b2010-05-14 09:31:37 +000065 test_cmp new_fn new_fn2
Don Zickus7a078412008-06-27 14:39:12 -040066'
67
68test_expect_success 'apply same old filename after rename -- should fail.' '
Jonathan Niedera48fcd82010-10-30 20:46:54 -050069 git reset --hard &&
70 git mv same_fn new_fn &&
Johannes Sixt41872fd2008-07-04 08:43:19 +020071 modify "s/^d/z/" new_fn &&
Don Zickus7a078412008-06-27 14:39:12 -040072 git add new_fn &&
73 git diff -M --cached > patch1 &&
Jonathan Niedera48fcd82010-10-30 20:46:54 -050074 git mv new_fn same_fn &&
Johannes Sixt41872fd2008-07-04 08:43:19 +020075 modify "s/^e/y/" same_fn &&
Don Zickus7a078412008-06-27 14:39:12 -040076 git diff >> patch1 &&
77 git reset --hard &&
78 test_must_fail git apply patch1
79'
80
81test_expect_success 'apply A->B (rename), C->A (rename), A->A -- should pass.' '
Jonathan Niedera48fcd82010-10-30 20:46:54 -050082 git reset --hard &&
83 git mv same_fn new_fn &&
Johannes Sixt41872fd2008-07-04 08:43:19 +020084 modify "s/^d/z/" new_fn &&
Don Zickus7a078412008-06-27 14:39:12 -040085 git add new_fn &&
86 git diff -M --cached > patch1 &&
87 git commit -m "a rename" &&
Jonathan Niedera48fcd82010-10-30 20:46:54 -050088 git mv other_fn same_fn &&
Johannes Sixt41872fd2008-07-04 08:43:19 +020089 modify "s/^e/y/" same_fn &&
Don Zickus7a078412008-06-27 14:39:12 -040090 git add same_fn &&
91 git diff -M --cached >> patch1 &&
Johannes Sixt41872fd2008-07-04 08:43:19 +020092 modify "s/^g/x/" same_fn &&
Don Zickus7a078412008-06-27 14:39:12 -040093 git diff >> patch1 &&
94 git reset --hard HEAD^ &&
95 git apply patch1
96'
97
98test_done