1#!/bin/sh
2
3test_description='git ls-remote'
4
5. ./test-lib.sh
6
7test_expect_success setup '
8
9 >file &&
10 git add file &&
11 test_tick &&
12 git commit -m initial &&
13 git tag mark &&
14 git show-ref --tags -d | sed -e "s/ / /" >expected.tag &&
15 (
16 echo "$(git rev-parse HEAD) HEAD"
17 git show-ref -d | sed -e "s/ / /"
18 ) >expected.all &&
19
20 git remote add self "$(pwd)/.git"
21
22'
23
24test_expect_success 'ls-remote --tags .git' '
25
26 git ls-remote --tags .git >actual &&
27 test_cmp expected.tag actual
28
29'
30
31test_expect_success 'ls-remote .git' '
32
33 git ls-remote .git >actual &&
34 test_cmp expected.all actual
35
36'
37
38test_expect_success 'ls-remote --tags self' '
39
40 git ls-remote --tags self >actual &&
41 test_cmp expected.tag actual
42
43'
44
45test_expect_success 'ls-remote self' '
46
47 git ls-remote self >actual &&
48 test_cmp expected.all actual
49
50'
51
52test_expect_success 'dies when no remote specified and no default remotes found' '
53
54 test_must_fail git ls-remote
55
56'
57
58test_expect_success 'use "origin" when no remote specified' '
59
60 git remote add origin "$(pwd)/.git" &&
61 git ls-remote >actual &&
62 test_cmp expected.all actual
63
64'
65
66test_expect_success 'use branch.<name>.remote if possible' '
67
68 #
69 # Test that we are indeed using branch.<name>.remote, not "origin", even
70 # though the "origin" remote has been set.
71 #
72
73 # setup a new remote to differentiate from "origin"
74 git clone . other.git &&
75 (
76 cd other.git &&
77 echo "$(git rev-parse HEAD) HEAD"
78 git show-ref | sed -e "s/ / /"
79 ) >exp &&
80
81 git remote add other other.git &&
82 git config branch.master.remote other &&
83
84 git ls-remote >actual &&
85 test_cmp exp actual
86
87'
88
89cat >exp <<EOF
90fatal: 'refs*master' does not appear to be a git repository
91fatal: The remote end hung up unexpectedly
92EOF
93test_expect_success 'confuses pattern as remote when no remote specified' '
94 #
95 # Do not expect "git ls-remote <pattern>" to work; ls-remote, correctly,
96 # confuses <pattern> for <remote>. Although ugly, this behaviour is akin
97 # to the confusion of refspecs for remotes by git-fetch and git-push,
98 # eg:
99 #
100 # $ git fetch branch
101 #
102
103 # We could just as easily have used "master"; the "*" emphasizes its
104 # role as a pattern.
105 test_must_fail git ls-remote refs*master >actual 2>&1 &&
106 test_cmp exp actual
107
108'
109
110test_done