On Jul 29, 2013, at 15:49, Junio C Hamano wrote:
"git config --get-urlmatch $section[.$variable] $url" is a way to
learn what the configured value for $section.$variable is for the
given URL, using the logic introduced by the http.<url>.config
topic. In addition to $section.$variable, entries in the
configuration file(s) that match $section.<urlpattern>.$variable are
looked up and the one with <urlpattern> that matches the given $url
the best is used to answer the query.
This can still be further refactored to remove code from
http_options()
in http.c, I think.
Signed-off-by: Junio C Hamano <gitster@xxxxxxxxx>
---
builtin/config.c | 141 ++++++++++++++++++++++++++++++++++++++++++++++
+++++++++
1 file changed, 141 insertions(+)
diff --git a/builtin/config.c b/builtin/config.c
index 12c5073..c1d32ae 100644
--- a/builtin/config.c
+++ b/builtin/config.c
[...]
+static int get_urlmatch(const char *var, const char *url)
+{
+ const char *section_tail;
+ struct string_list_item *item;
+ struct urlmatch_collect collect = { STRING_LIST_INIT_DUP };
+
+ if (!url_normalize(url, &collect.url))
+ die(collect.url.err);
The value now stored in collect.url.url is never freed.
+
+ section_tail = strchr(var, '.');
+ if (section_tail) {
+ collect.section = xmemdupz(var, section_tail - var);
+ collect.key = strrchr(var, '.') + 1;
+ show_keys = 0;
+ } else {
+ collect.section = var;
+ collect.key = NULL;
+ show_keys = 1;
+ }
+
+ git_config_with_options(urlmatch_collect, &collect,
+ given_config_file, respect_includes);
+
+ for_each_string_list_item(item, &collect.vars) {
+ struct urlmatch_item *matched = item->util;
+ struct strbuf key = STRBUF_INIT;
+ struct strbuf buf = STRBUF_INIT;
+
+ strbuf_addstr(&key, collect.section);
+ strbuf_addch(&key, '.');
+ strbuf_addstr(&key, item->string);
+ format_config(&buf, key.buf,
+ matched->value_is_null ? NULL : matched->value.buf);
+ fwrite(buf.buf, 1, buf.len, stdout);
+ strbuf_release(&key);
+ strbuf_release(&buf);
+
+ strbuf_release(&matched->value);
+ }
+ string_list_clear(&collect.vars, 1);
Needs something like this here:
+ free(collect.url.url);
+
+ /*
+ * section name may have been copied to replace the dot, in which
+ * case it needs to be freed. key name is either NULL (e.g. 'http'
+ * alone) or points into var (e.g. 'http.savecookies'), and we do
+ * not own the storage.
+ */
+ if (collect.section != var)
+ free((void *)collect.section);
+ return 0;
+}
Still needed after 4/3 except it's now config.url.url instead.
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html