diff options
| -rw-r--r-- | cache.h | 3 | ||||
| -rw-r--r-- | refs.c | 24 | ||||
| -rw-r--r-- | sha1_name.c | 14 | 
3 files changed, 29 insertions, 12 deletions
@@ -415,6 +415,9 @@ extern const char *resolve_ref(const char *path, unsigned char *sha1, int, int *  extern int dwim_ref(const char *str, int len, unsigned char *sha1, char **ref);  extern int dwim_log(const char *str, int len, unsigned char *sha1, char **ref); +extern int refname_match(const char *abbrev_name, const char *full_name, const char **rules); +extern const char *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); @@ -643,6 +643,30 @@ int check_ref_format(const char *ref)  	}  } +const char *ref_rev_parse_rules[] = { +	"%.*s", +	"refs/%.*s", +	"refs/tags/%.*s", +	"refs/heads/%.*s", +	"refs/remotes/%.*s", +	"refs/remotes/%.*s/HEAD", +	NULL +}; + +int refname_match(const char *abbrev_name, const char *full_name, const char **rules) +{ +	const char **p; +	const int abbrev_name_len = strlen(abbrev_name); + +	for (p = rules; *p; p++) { +		if (!strcmp(full_name, mkpath(*p, abbrev_name_len, abbrev_name))) { +			return 1; +		} +	} + +	return 0; +} +  static struct ref_lock *verify_lock(struct ref_lock *lock,  	const unsigned char *old_sha1, int mustexist)  { diff --git a/sha1_name.c b/sha1_name.c index 2d727d54dc..d364244dc4 100644 --- a/sha1_name.c +++ b/sha1_name.c @@ -239,23 +239,13 @@ static int ambiguous_path(const char *path, int len)  	return slash;  } -static const char *ref_fmt[] = { -	"%.*s", -	"refs/%.*s", -	"refs/tags/%.*s", -	"refs/heads/%.*s", -	"refs/remotes/%.*s", -	"refs/remotes/%.*s/HEAD", -	NULL -}; -  int dwim_ref(const char *str, int len, unsigned char *sha1, char **ref)  {  	const char **p, *r;  	int refs_found = 0;  	*ref = NULL; -	for (p = ref_fmt; *p; p++) { +	for (p = ref_rev_parse_rules; *p; p++) {  		unsigned char sha1_from_ref[20];  		unsigned char *this_result; @@ -277,7 +267,7 @@ int dwim_log(const char *str, int len, unsigned char *sha1, char **log)  	int logs_found = 0;  	*log = NULL; -	for (p = ref_fmt; *p; p++) { +	for (p = ref_rev_parse_rules; *p; p++) {  		struct stat st;  		unsigned char hash[20];  		char path[PATH_MAX];  | 
