@@ -49,4 +49,62 @@ test_expect_success 'ls-remote self' '
4949
5050'
5151
52+ test_expect_success ' dies when no remote specified and no default remotes found' '
53+
54+ test_must_fail git ls-remote
55+
56+ '
57+
58+ test_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+
66+ test_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+
89+ cat > exp << EOF
90+ fatal: 'refs*master' does not appear to be a git repository
91+ fatal: The remote end hung up unexpectedly
92+ EOF
93+ test_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+
52110test_done
0 commit comments