blob: 972946c174c18ee831d8595068c6ffa235c8a538 [file] [log] [blame]
Don Zickus7a078412008-06-27 14:39:12 -04001#!/bin/sh
2
3test_description='apply same filename'
4
5. ./test-lib.sh
6
Johannes Sixt41872fd2008-07-04 08:43:19 +02007modify () {
8 sed -e "$1" < "$2" > "$2".x &&
9 mv "$2".x "$2"
10}
11
Don Zickus7a078412008-06-27 14:39:12 -040012test_expect_success setup '
13 for i in a b c d e f g h i j k l m
14 do
15 echo $i
16 done >same_fn &&
17 cp same_fn other_fn &&
18 git add same_fn other_fn &&
19 git commit -m initial
20'
21test_expect_success 'apply same filename with independent changes' '
Johannes Sixt41872fd2008-07-04 08:43:19 +020022 modify "s/^d/z/" same_fn &&
Don Zickus7a078412008-06-27 14:39:12 -040023 git diff > patch0 &&
24 git add same_fn &&
Johannes Sixt41872fd2008-07-04 08:43:19 +020025 modify "s/^i/y/" same_fn &&
Don Zickus7a078412008-06-27 14:39:12 -040026 git diff >> patch0 &&
27 cp same_fn same_fn2 &&
28 git reset --hard &&
Nanako Shiraishi3604e7c2008-09-03 17:59:29 +090029 git apply patch0 &&
Gary V. Vaughan4fdf71b2010-05-14 09:31:37 +000030 test_cmp same_fn same_fn2
Don Zickus7a078412008-06-27 14:39:12 -040031'
32
33test_expect_success 'apply same filename with overlapping changes' '
Jonathan Niedera48fcd82010-10-30 20:46:54 -050034 git reset --hard &&
Johannes Sixt41872fd2008-07-04 08:43:19 +020035 modify "s/^d/z/" same_fn &&
Don Zickus7a078412008-06-27 14:39:12 -040036 git diff > patch0 &&
37 git add same_fn &&
Johannes Sixt41872fd2008-07-04 08:43:19 +020038 modify "s/^e/y/" same_fn &&
Don Zickus7a078412008-06-27 14:39:12 -040039 git diff >> patch0 &&
40 cp same_fn same_fn2 &&
41 git reset --hard &&
Nanako Shiraishi3604e7c2008-09-03 17:59:29 +090042 git apply patch0 &&
Gary V. Vaughan4fdf71b2010-05-14 09:31:37 +000043 test_cmp same_fn same_fn2
Don Zickus7a078412008-06-27 14:39:12 -040044'
45
46test_expect_success 'apply same new filename after rename' '
Jonathan Niedera48fcd82010-10-30 20:46:54 -050047 git reset --hard &&
48 git mv same_fn new_fn &&
Johannes Sixt41872fd2008-07-04 08:43:19 +020049 modify "s/^d/z/" new_fn &&
Don Zickus7a078412008-06-27 14:39:12 -040050 git add new_fn &&
51 git diff -M --cached > patch1 &&
Johannes Sixt41872fd2008-07-04 08:43:19 +020052 modify "s/^e/y/" new_fn &&
Don Zickus7a078412008-06-27 14:39:12 -040053 git diff >> patch1 &&
54 cp new_fn new_fn2 &&
55 git reset --hard &&
56 git apply --index patch1 &&
Gary V. Vaughan4fdf71b2010-05-14 09:31:37 +000057 test_cmp new_fn new_fn2
Don Zickus7a078412008-06-27 14:39:12 -040058'
59
60test_expect_success 'apply same old filename after rename -- should fail.' '
Jonathan Niedera48fcd82010-10-30 20:46:54 -050061 git reset --hard &&
62 git mv same_fn new_fn &&
Johannes Sixt41872fd2008-07-04 08:43:19 +020063 modify "s/^d/z/" new_fn &&
Don Zickus7a078412008-06-27 14:39:12 -040064 git add new_fn &&
65 git diff -M --cached > patch1 &&
Jonathan Niedera48fcd82010-10-30 20:46:54 -050066 git mv new_fn same_fn &&
Johannes Sixt41872fd2008-07-04 08:43:19 +020067 modify "s/^e/y/" same_fn &&
Don Zickus7a078412008-06-27 14:39:12 -040068 git diff >> patch1 &&
69 git reset --hard &&
70 test_must_fail git apply patch1
71'
72
73test_expect_success 'apply A->B (rename), C->A (rename), A->A -- should pass.' '
Jonathan Niedera48fcd82010-10-30 20:46:54 -050074 git reset --hard &&
75 git mv same_fn new_fn &&
Johannes Sixt41872fd2008-07-04 08:43:19 +020076 modify "s/^d/z/" new_fn &&
Don Zickus7a078412008-06-27 14:39:12 -040077 git add new_fn &&
78 git diff -M --cached > patch1 &&
79 git commit -m "a rename" &&
Jonathan Niedera48fcd82010-10-30 20:46:54 -050080 git mv other_fn same_fn &&
Johannes Sixt41872fd2008-07-04 08:43:19 +020081 modify "s/^e/y/" same_fn &&
Don Zickus7a078412008-06-27 14:39:12 -040082 git add same_fn &&
83 git diff -M --cached >> patch1 &&
Johannes Sixt41872fd2008-07-04 08:43:19 +020084 modify "s/^g/x/" same_fn &&
Don Zickus7a078412008-06-27 14:39:12 -040085 git diff >> patch1 &&
86 git reset --hard HEAD^ &&
87 git apply patch1
88'
89
90test_done