Thread (1 message) 1 message, 1 author, 2016-06-15

Re: [PATCH 4/7] refs.c: Refactor rules for expanding shorthand names into full refnames

From: Junio C Hamano <hidden>
Date: 2016-06-15 22:57:09

Johan Herland [off-list ref] writes:
quoted hunk
diff --git a/refs.c b/refs.c
index 7231f54..8b02140 100644
--- a/refs.c
+++ b/refs.c
@@ -1724,7 +1724,24 @@ const char *prettify_refname(const char *name)
 		0);
 }
 
-const char *ref_rev_parse_rules[] = {
+static void ref_expand_txtly(const struct ref_expand_rule *rule,
+			     char *dst, size_t dst_len,
+			     const char *shortname, size_t shortname_len)
+{
+	mksnpath(dst, dst_len, rule->pattern, shortname_len, shortname);
+}
+
+const struct ref_expand_rule ref_expand_rules[] = {
+	{ ref_expand_txtly, "%.*s" },
+	{ ref_expand_txtly, "refs/%.*s" },
+	{ ref_expand_txtly, "refs/tags/%.*s" },
+	{ ref_expand_txtly, "refs/heads/%.*s" },
+	{ ref_expand_txtly, "refs/remotes/%.*s" },
+	{ ref_expand_txtly, "refs/remotes/%.*s/HEAD" },
+	{ NULL, NULL }
+};
+
+static const char *ref_rev_parse_rules[] = {
 	"%.*s",
 	"refs/%.*s",
 	"refs/tags/%.*s",
@@ -1734,15 +1751,17 @@ const char *ref_rev_parse_rules[] = {
 	NULL
 };
 
-int refname_match(const char *abbrev_name, const char *full_name, const char **rules)
+int refname_match(const char *abbrev_name, const char *full_name,
+		  const struct ref_expand_rule *rules)
 {
-	const char **p;
+	const struct ref_expand_rule *p;
 	const int abbrev_name_len = strlen(abbrev_name);
+	char n[PATH_MAX];
Hmmm, is it too much to ask to do this without a fixed length
buffer?  I think we have long learned the value of using strbuf to
avoid having to worry about buffer overruns.

I am OK with the idea to make ref_expand_rules[] customizable, and
the overall strategy taken by this step to refactor the current code
looks reasonably sensible.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help