Git fork
1#!/bin/sh
2
3test_description='selecting remote repo in ambiguous cases'
4
5. ./test-lib.sh
6
7reset() {
8 rm -rf foo foo.git fetch clone
9}
10
11make_tree() {
12 git init "$1" &&
13 (cd "$1" && test_commit "$1")
14}
15
16make_bare() {
17 git init --bare "$1" &&
18 (cd "$1" &&
19 tree=$(git hash-object -w -t tree /dev/null) &&
20 commit=$(echo "$1" | git commit-tree $tree) &&
21 git update-ref HEAD $commit
22 )
23}
24
25get() {
26 git init --bare fetch &&
27 (cd fetch && git fetch "../$1") &&
28 git clone "$1" clone
29}
30
31check() {
32 echo "$1" >expect &&
33 (cd fetch && git log -1 --format=%s FETCH_HEAD) >actual.fetch &&
34 (cd clone && git log -1 --format=%s HEAD) >actual.clone &&
35 test_cmp expect actual.fetch &&
36 test_cmp expect actual.clone
37}
38
39test_expect_success 'find .git dir in worktree' '
40 reset &&
41 make_tree foo &&
42 get foo &&
43 check foo
44'
45
46test_expect_success 'automagically add .git suffix' '
47 reset &&
48 make_bare foo.git &&
49 get foo &&
50 check foo.git
51'
52
53test_expect_success 'automagically add .git suffix to worktree' '
54 reset &&
55 make_tree foo.git &&
56 get foo &&
57 check foo.git
58'
59
60test_expect_success 'prefer worktree foo over bare foo.git' '
61 reset &&
62 make_tree foo &&
63 make_bare foo.git &&
64 get foo &&
65 check foo
66'
67
68test_expect_success 'prefer bare foo over bare foo.git' '
69 reset &&
70 make_bare foo &&
71 make_bare foo.git &&
72 get foo &&
73 check foo
74'
75
76test_expect_success 'disambiguate with full foo.git' '
77 reset &&
78 make_bare foo &&
79 make_bare foo.git &&
80 get foo.git &&
81 check foo.git
82'
83
84test_expect_success 'we are not fooled by non-git foo directory' '
85 reset &&
86 make_bare foo.git &&
87 mkdir foo &&
88 get foo &&
89 check foo.git
90'
91
92test_expect_success 'prefer inner .git over outer bare' '
93 reset &&
94 make_tree foo &&
95 make_bare foo.git &&
96 mv foo/.git foo.git &&
97 get foo.git &&
98 check foo
99'
100
101test_done