Skip to content

Commit

Permalink
refs DWIMmery: use the same rule for both "git fetch" and others
Browse files Browse the repository at this point in the history
"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 <gitster@pobox.com>
  • Loading branch information
Junio C Hamano committed Nov 7, 2011
1 parent 47d84b6 commit dd621df
Show file tree
Hide file tree
Showing 3 changed files with 3 additions and 12 deletions.
2 changes: 1 addition & 1 deletion cache.h
Original file line number Diff line number Diff line change
Expand Up @@ -873,7 +873,7 @@ extern int get_sha1_mb(const char *str, unsigned char *sha1);

extern int refname_match(const char *abbrev_name, const char *full_name, const char **rules);
extern const char *ref_rev_parse_rules[];
extern const char *ref_fetch_rules[];
#define ref_fetch_rules ref_rev_parse_rules

extern int create_symref(const char *ref, const char *refs_heads_master, const char *logmsg);
extern int validate_headref(const char *ref);
Expand Down
8 changes: 0 additions & 8 deletions refs.c
Original file line number Diff line number Diff line change
Expand Up @@ -995,14 +995,6 @@ const char *ref_rev_parse_rules[] = {
NULL
};

const char *ref_fetch_rules[] = {
"%.*s",
"refs/%.*s",
"refs/tags/%.*s",
"refs/heads/%.*s",
NULL
};

int refname_match(const char *abbrev_name, const char *full_name, const char **rules)
{
const char **p;
Expand Down
5 changes: 2 additions & 3 deletions t/t5510-fetch.sh
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ test_expect_success 'fetch must not resolve short tag name' '
'

test_expect_success 'fetch must not resolve short remote name' '
test_expect_success 'fetch can now resolve short remote name' '
cd "$D" &&
git update-ref refs/remotes/six/HEAD HEAD &&
Expand All @@ -125,8 +125,7 @@ test_expect_success 'fetch must not resolve short remote name' '
cd six &&
git init &&
test_must_fail git fetch .. six:six
git fetch .. six:six
'

test_expect_success 'create bundle 1' '
Expand Down

0 comments on commit dd621df

Please sign in to comment.