From: Heiko Voigt <hvoigt@hvoigt.net>
To: Junio C Hamano <gitster@pobox.com>
Cc: git@vger.kernel.org, Jeff King <peff@peff.net>,
Jens Lehmann <jens.lehmann@web.de>,
Ramsay Jones <ramsay@ramsay1.demon.co.uk>
Subject: [PATCH v5 1/5] config: factor out config file stack management
Date: Fri, 12 Jul 2013 00:40:32 +0200 [thread overview]
Message-ID: <20130711224032.GB26477@book-mint> (raw)
In-Reply-To: <20130711223614.GA26477@book-mint>
Because a config callback may start parsing a new file, the
global context regarding the current config file is stored
as a stack. Currently we only need to manage that stack from
git_config_from_file. Let's factor it out to allow new
sources of config data.
Signed-off-by: Heiko Voigt <hvoigt@hvoigt.net>
---
config.c | 42 ++++++++++++++++++++++++++++--------------
1 file changed, 28 insertions(+), 14 deletions(-)
diff --git a/config.c b/config.c
index d04e815..c165c85 100644
--- a/config.c
+++ b/config.c
@@ -906,6 +906,32 @@ int git_default_config(const char *var, const char *value, void *dummy)
return 0;
}
+/*
+ * The fields f and name of top need to be initialized before calling
+ * this function.
+ */
+static int do_config_from(struct config_file *top, config_fn_t fn, void *data)
+{
+ int ret;
+
+ /* push config-file parsing state stack */
+ top->prev = cf;
+ top->linenr = 1;
+ top->eof = 0;
+ strbuf_init(&top->value, 1024);
+ strbuf_init(&top->var, 1024);
+ cf = top;
+
+ ret = git_parse_file(fn, data);
+
+ /* pop config-file parsing state stack */
+ strbuf_release(&top->value);
+ strbuf_release(&top->var);
+ cf = top->prev;
+
+ return ret;
+}
+
int git_config_from_file(config_fn_t fn, const char *filename, void *data)
{
int ret;
@@ -915,22 +941,10 @@ int git_config_from_file(config_fn_t fn, const char *filename, void *data)
if (f) {
config_file top;
- /* push config-file parsing state stack */
- top.prev = cf;
top.f = f;
top.name = filename;
- top.linenr = 1;
- top.eof = 0;
- strbuf_init(&top.value, 1024);
- strbuf_init(&top.var, 1024);
- cf = ⊤
-
- ret = git_parse_file(fn, data);
-
- /* pop config-file parsing state stack */
- strbuf_release(&top.value);
- strbuf_release(&top.var);
- cf = top.prev;
+
+ ret = do_config_from(&top, fn, data);
fclose(f);
}
--
1.8.3.2.773.gcfaae5b
next prev parent reply other threads:[~2013-07-11 22:40 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-07-11 22:36 [PATCH v5 0/5] allow more sources for config values Heiko Voigt
2013-07-11 22:40 ` Heiko Voigt [this message]
2013-07-11 22:43 ` [PATCH v5 2/5] config: drop cf validity check in get_next_char() Heiko Voigt
2013-07-11 22:44 ` [PATCH v5 3/5] config: make parsing stack struct independent from actual data source Heiko Voigt
2013-07-11 22:46 ` [PATCH v5 4/5] teach config --blob option to parse config from database Heiko Voigt
2013-07-11 22:48 ` [PATCH v5 5/5] do not die when error in config parsing of buf occurs Heiko Voigt
2013-07-11 23:26 ` [PATCH v5 0/5] allow more sources for config values Junio C Hamano
2013-07-12 10:10 ` Jeff King
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20130711224032.GB26477@book-mint \
--to=hvoigt@hvoigt.net \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=jens.lehmann@web.de \
--cc=peff@peff.net \
--cc=ramsay@ramsay1.demon.co.uk \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.