Merge branch 'cb/maint-merge-recursive-submodule-fix'
[git] / t / t5520-pull.sh
1 #!/bin/sh
2
3 test_description='pulling into void'
4
5 . ./test-lib.sh
6
7 D=`pwd`
8
9 test_expect_success setup '
10
11         echo file >file &&
12         git add file &&
13         git commit -a -m original
14
15 '
16
17 test_expect_success 'pulling into void' '
18         mkdir cloned &&
19         cd cloned &&
20         git init &&
21         git pull ..
22 '
23
24 cd "$D"
25
26 test_expect_success 'checking the results' '
27         test -f file &&
28         test -f cloned/file &&
29         diff file cloned/file
30 '
31
32 test_expect_success 'pulling into void using master:master' '
33         mkdir cloned-uho &&
34         (
35                 cd cloned-uho &&
36                 git init &&
37                 git pull .. master:master
38         ) &&
39         test -f file &&
40         test -f cloned-uho/file &&
41         test_cmp file cloned-uho/file
42 '
43
44 test_expect_success 'test . as a remote' '
45
46         git branch copy master &&
47         git config branch.copy.remote . &&
48         git config branch.copy.merge refs/heads/master &&
49         echo updated >file &&
50         git commit -a -m updated &&
51         git checkout copy &&
52         test `cat file` = file &&
53         git pull &&
54         test `cat file` = updated
55 '
56
57 test_expect_success 'the default remote . should not break explicit pull' '
58         git checkout -b second master^ &&
59         echo modified >file &&
60         git commit -a -m modified &&
61         git checkout copy &&
62         git reset --hard HEAD^ &&
63         test `cat file` = file &&
64         git pull . second &&
65         test `cat file` = modified
66 '
67
68 test_expect_success '--rebase' '
69         git branch to-rebase &&
70         echo modified again > file &&
71         git commit -m file file &&
72         git checkout to-rebase &&
73         echo new > file2 &&
74         git add file2 &&
75         git commit -m "new file" &&
76         git tag before-rebase &&
77         git pull --rebase . copy &&
78         test $(git rev-parse HEAD^) = $(git rev-parse copy) &&
79         test new = $(git show HEAD:file2)
80 '
81
82 test_expect_success 'branch.to-rebase.rebase' '
83         git reset --hard before-rebase &&
84         git config branch.to-rebase.rebase 1 &&
85         git pull . copy &&
86         git config branch.to-rebase.rebase 0 &&
87         test $(git rev-parse HEAD^) = $(git rev-parse copy) &&
88         test new = $(git show HEAD:file2)
89 '
90
91 test_expect_success '--rebase with rebased upstream' '
92
93         git remote add -f me . &&
94         git checkout copy &&
95         git reset --hard HEAD^ &&
96         echo conflicting modification > file &&
97         git commit -m conflict file &&
98         git checkout to-rebase &&
99         echo file > file2 &&
100         git commit -m to-rebase file2 &&
101         git pull --rebase me copy &&
102         test "conflicting modification" = "$(cat file)" &&
103         test file = $(cat file2)
104
105 '
106
107 test_expect_success 'pull --rebase dies early with dirty working directory' '
108
109         git update-ref refs/remotes/me/copy copy^ &&
110         COPY=$(git rev-parse --verify me/copy) &&
111         git rebase --onto $COPY copy &&
112         git config branch.to-rebase.remote me &&
113         git config branch.to-rebase.merge refs/heads/copy &&
114         git config branch.to-rebase.rebase true &&
115         echo dirty >> file &&
116         git add file &&
117         test_must_fail git pull &&
118         test $COPY = $(git rev-parse --verify me/copy) &&
119         git checkout HEAD -- file &&
120         git pull &&
121         test $COPY != $(git rev-parse --verify me/copy)
122
123 '
124
125 test_done