]>
Commit | Line | Data |
---|---|---|
08fc0608 MC |
1 | #!/bin/sh |
2 | ||
3 | test_description='pulling from symlinked subdir' | |
4 | ||
5 | . ./test-lib.sh | |
6 | ||
7 | # The scenario we are building: | |
8 | # | |
9 | # trash\ directory/ | |
10 | # clone-repo/ | |
11 | # subdir/ | |
12 | # bar | |
13 | # subdir-link -> clone-repo/subdir/ | |
14 | # | |
15 | # The working directory is subdir-link. | |
16 | ||
41be8ea2 | 17 | test_expect_success SYMLINKS setup ' |
acd2a45b JH |
18 | mkdir subdir && |
19 | echo file >subdir/file && | |
20 | git add subdir/file && | |
21 | git commit -q -m file && | |
22 | git clone -q . clone-repo && | |
23 | ln -s clone-repo/subdir/ subdir-link && | |
24 | ( | |
25 | cd clone-repo && | |
26 | git config receive.denyCurrentBranch warn | |
27 | ) && | |
28 | git config receive.denyCurrentBranch warn | |
29 | ' | |
08fc0608 MC |
30 | |
31 | # Demonstrate that things work if we just avoid the symlink | |
32 | # | |
41be8ea2 | 33 | test_expect_success SYMLINKS 'pulling from real subdir' ' |
08fc0608 MC |
34 | ( |
35 | echo real >subdir/file && | |
36 | git commit -m real subdir/file && | |
37 | cd clone-repo/subdir/ && | |
38 | git pull && | |
39 | test real = $(cat file) | |
40 | ) | |
41 | ' | |
42 | ||
43 | # From subdir-link, pulling should work as it does from | |
44 | # clone-repo/subdir/. | |
45 | # | |
46 | # Instead, the error pull gave was: | |
47 | # | |
48 | # fatal: 'origin': unable to chdir or not a git archive | |
49 | # fatal: The remote end hung up unexpectedly | |
50 | # | |
51 | # because git would find the .git/config for the "trash directory" | |
52 | # repo, not for the clone-repo repo. The "trash directory" repo | |
53 | # had no entry for origin. Git found the wrong .git because | |
54 | # git rev-parse --show-cdup printed a path relative to | |
55 | # clone-repo/subdir/, not subdir-link/. Git rev-parse --show-cdup | |
56 | # used the correct .git, but when the git pull shell script did | |
91852b50 | 57 | # "cd $(git rev-parse --show-cdup)", it ended up in the wrong |
08fc0608 MC |
58 | # directory. A POSIX shell's "cd" works a little differently |
59 | # than chdir() in C; "cd -P" is much closer to chdir(). | |
60 | # | |
41be8ea2 | 61 | test_expect_success SYMLINKS 'pulling from symlinked subdir' ' |
08fc0608 MC |
62 | ( |
63 | echo link >subdir/file && | |
64 | git commit -m link subdir/file && | |
65 | cd subdir-link/ && | |
66 | git pull && | |
67 | test link = $(cat file) | |
68 | ) | |
69 | ' | |
70 | ||
71 | # Prove that the remote end really is a repo, and other commands | |
72 | # work fine in this context. It's just that "git pull" breaks. | |
73 | # | |
41be8ea2 | 74 | test_expect_success SYMLINKS 'pushing from symlinked subdir' ' |
08fc0608 MC |
75 | ( |
76 | cd subdir-link/ && | |
77 | echo push >file && | |
78 | git commit -m push ./file && | |
79 | git push | |
80 | ) && | |
81 | test push = $(git show HEAD:subdir/file) | |
82 | ' | |
83 | ||
84 | test_done |