]>
Commit | Line | Data |
---|---|---|
1 | #!/bin/sh | |
2 | ||
3 | test_description='.git file | |
4 | ||
5 | Verify that plumbing commands work when .git is a file | |
6 | ' | |
7 | . ./test-lib.sh | |
8 | ||
9 | objpath() { | |
10 | echo "$1" | sed -e 's|\(..\)|\1/|' | |
11 | } | |
12 | ||
13 | test_expect_success 'initial setup' ' | |
14 | REAL="$(pwd)/.real" && | |
15 | mv .git "$REAL" | |
16 | ' | |
17 | ||
18 | test_expect_success 'bad setup: invalid .git file format' ' | |
19 | echo "gitdir $REAL" >.git && | |
20 | test_must_fail git rev-parse 2>.err && | |
21 | test_i18ngrep "invalid gitfile format" .err | |
22 | ' | |
23 | ||
24 | test_expect_success 'bad setup: invalid .git file path' ' | |
25 | echo "gitdir: $REAL.not" >.git && | |
26 | test_must_fail git rev-parse 2>.err && | |
27 | test_i18ngrep "not a git repository" .err | |
28 | ' | |
29 | ||
30 | test_expect_success 'final setup + check rev-parse --git-dir' ' | |
31 | echo "gitdir: $REAL" >.git && | |
32 | test "$REAL" = "$(git rev-parse --git-dir)" | |
33 | ' | |
34 | ||
35 | test_expect_success 'check hash-object' ' | |
36 | echo "foo" >bar && | |
37 | SHA=$(cat bar | git hash-object -w --stdin) && | |
38 | test_path_is_file "$REAL/objects/$(objpath $SHA)" | |
39 | ' | |
40 | ||
41 | test_expect_success 'check cat-file' ' | |
42 | git cat-file blob $SHA >actual && | |
43 | test_cmp bar actual | |
44 | ' | |
45 | ||
46 | test_expect_success 'check update-index' ' | |
47 | test_path_is_missing "$REAL/index" && | |
48 | rm -f "$REAL/objects/$(objpath $SHA)" && | |
49 | git update-index --add bar && | |
50 | test_path_is_file "$REAL/index" && | |
51 | test_path_is_file "$REAL/objects/$(objpath $SHA)" | |
52 | ' | |
53 | ||
54 | test_expect_success 'check write-tree' ' | |
55 | SHA=$(git write-tree) && | |
56 | test_path_is_file "$REAL/objects/$(objpath $SHA)" | |
57 | ' | |
58 | ||
59 | test_expect_success 'check commit-tree' ' | |
60 | SHA=$(echo "commit bar" | git commit-tree $SHA) && | |
61 | test_path_is_file "$REAL/objects/$(objpath $SHA)" | |
62 | ' | |
63 | ||
64 | test_expect_success 'check rev-list' ' | |
65 | echo $SHA >"$REAL/HEAD" && | |
66 | test "$SHA" = "$(git rev-list HEAD)" | |
67 | ' | |
68 | ||
69 | test_expect_success 'setup_git_dir twice in subdir' ' | |
70 | git init sgd && | |
71 | ( | |
72 | cd sgd && | |
73 | git config alias.lsfi ls-files && | |
74 | mv .git .realgit && | |
75 | echo "gitdir: .realgit" >.git && | |
76 | mkdir subdir && | |
77 | cd subdir && | |
78 | >foo && | |
79 | git add foo && | |
80 | git lsfi >actual && | |
81 | echo foo >expected && | |
82 | test_cmp expected actual | |
83 | ) | |
84 | ' | |
85 | ||
86 | test_expect_success 'enter_repo non-strict mode' ' | |
87 | test_create_repo enter_repo && | |
88 | ( | |
89 | cd enter_repo && | |
90 | test_tick && | |
91 | test_commit foo && | |
92 | mv .git .realgit && | |
93 | echo "gitdir: .realgit" >.git | |
94 | ) && | |
95 | head=$(git -C enter_repo rev-parse HEAD) && | |
96 | git ls-remote enter_repo >actual && | |
97 | cat >expected <<-EOF && | |
98 | $head HEAD | |
99 | $head refs/heads/master | |
100 | $head refs/tags/foo | |
101 | EOF | |
102 | test_cmp expected actual | |
103 | ' | |
104 | ||
105 | test_expect_success 'enter_repo linked checkout' ' | |
106 | ( | |
107 | cd enter_repo && | |
108 | git worktree add ../foo refs/tags/foo | |
109 | ) && | |
110 | head=$(git -C enter_repo rev-parse HEAD) && | |
111 | git ls-remote foo >actual && | |
112 | cat >expected <<-EOF && | |
113 | $head HEAD | |
114 | $head refs/heads/master | |
115 | $head refs/tags/foo | |
116 | EOF | |
117 | test_cmp expected actual | |
118 | ' | |
119 | ||
120 | test_expect_success 'enter_repo strict mode' ' | |
121 | head=$(git -C enter_repo rev-parse HEAD) && | |
122 | git ls-remote --upload-pack="git upload-pack --strict" foo/.git >actual && | |
123 | cat >expected <<-EOF && | |
124 | $head HEAD | |
125 | $head refs/heads/master | |
126 | $head refs/tags/foo | |
127 | EOF | |
128 | test_cmp expected actual | |
129 | ' | |
130 | ||
131 | test_done |