Skip to content

Commit dd621df

Browse files
committed
refs DWIMmery: use the same rule for both "git fetch" and others
"git log frotz" can DWIM to "refs/remotes/frotz/HEAD", but in the remote access context, "git fetch frotz" to fetch what the other side happened to have fetched from what it calls 'frotz' (which may not have any relation to what we consider is 'frotz') the last time would not make much sense, so the fetch rules table did not include "refs/remotes/%.*s/HEAD". When the user really wants to, "git fetch $there remotes/frotz/HEAD" would let her do so anyway, so this is not about safety or security; it merely is about confusion avoidance and discouraging meaningless usage. Specifically, it is _not_ about ambiguity avoidance. A name that would become ambiguous if we use the same rules table for both fetch and local rev-parse would be ambiguous locally at the remote side. So for the same reason as we added rule to allow "git fetch $there v1.0" instead of "git fetch $there tags/v1.0" in the previous commit, here is a bit longer rope for the users, which incidentally simplifies our code. Signed-off-by: Junio C Hamano <[email protected]>
1 parent 47d84b6 commit dd621df

File tree

3 files changed

+3
-12
lines changed

3 files changed

+3
-12
lines changed

cache.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -873,7 +873,7 @@ extern int get_sha1_mb(const char *str, unsigned char *sha1);
873873

874874
extern int refname_match(const char *abbrev_name, const char *full_name, const char **rules);
875875
extern const char *ref_rev_parse_rules[];
876-
extern const char *ref_fetch_rules[];
876+
#define ref_fetch_rules ref_rev_parse_rules
877877

878878
extern int create_symref(const char *ref, const char *refs_heads_master, const char *logmsg);
879879
extern int validate_headref(const char *ref);

refs.c

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -995,14 +995,6 @@ const char *ref_rev_parse_rules[] = {
995995
NULL
996996
};
997997

998-
const char *ref_fetch_rules[] = {
999-
"%.*s",
1000-
"refs/%.*s",
1001-
"refs/tags/%.*s",
1002-
"refs/heads/%.*s",
1003-
NULL
1004-
};
1005-
1006998
int refname_match(const char *abbrev_name, const char *full_name, const char **rules)
1007999
{
10081000
const char **p;

t/t5510-fetch.sh

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ test_expect_success 'fetch must not resolve short tag name' '
116116
117117
'
118118

119-
test_expect_success 'fetch must not resolve short remote name' '
119+
test_expect_success 'fetch can now resolve short remote name' '
120120
121121
cd "$D" &&
122122
git update-ref refs/remotes/six/HEAD HEAD &&
@@ -125,8 +125,7 @@ test_expect_success 'fetch must not resolve short remote name' '
125125
cd six &&
126126
git init &&
127127
128-
test_must_fail git fetch .. six:six
129-
128+
git fetch .. six:six
130129
'
131130

132131
test_expect_success 'create bundle 1' '

0 commit comments

Comments
 (0)