diff options
author | Bert Wesarg <bert.wesarg@googlemail.com> | 2020-01-27 07:04:31 (GMT) |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2020-02-10 18:52:10 (GMT) |
commit | f2a2327a4a6a9bccade6df2bed1fdc3a8ab37f4c (patch) | |
tree | 4fe82fc9fa6fd1366d7ffa392be73e633a252a45 | |
parent | 923d4a5ca4f86c19247ef436e6d03d261ebce904 (diff) | |
download | git-f2a2327a4a6a9bccade6df2bed1fdc3a8ab37f4c.zip git-f2a2327a4a6a9bccade6df2bed1fdc3a8ab37f4c.tar.gz git-f2a2327a4a6a9bccade6df2bed1fdc3a8ab37f4c.tar.bz2 |
config: provide access to the current line number
Users are nowadays trained to see message from CLI tools in the form
<file>:<lno>: …
To be able to give such messages when notifying the user about
configurations in any config file, it is currently only possible to get
the file name (if the value originates from a file to begin with) via
`current_config_name()`. Now it is also possible to query the current line
number for the configuration.
Signed-off-by: Bert Wesarg <bert.wesarg@googlemail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r-- | config.c | 8 | ||||
-rw-r--r-- | config.h | 1 | ||||
-rw-r--r-- | t/helper/test-config.c | 1 | ||||
-rwxr-xr-x | t/t1308-config-set.sh | 14 |
4 files changed, 22 insertions, 2 deletions
@@ -3338,6 +3338,14 @@ enum config_scope current_config_scope(void) return current_parsing_scope; } +int current_config_line(void) +{ + if (current_config_kvi) + return current_config_kvi->linenr; + else + return cf->linenr; +} + int lookup_config(const char **mapping, int nr_mapping, const char *var) { int i; @@ -309,6 +309,7 @@ int git_config_parse_parameter(const char *, config_fn_t fn, void *data); enum config_scope current_config_scope(void); const char *current_config_origin_type(void); const char *current_config_name(void); +int current_config_line(void); /** * Include Directives diff --git a/t/helper/test-config.c b/t/helper/test-config.c index 1e3bc7c..234c722 100644 --- a/t/helper/test-config.c +++ b/t/helper/test-config.c @@ -48,6 +48,7 @@ static int iterate_cb(const char *var, const char *value, void *data) printf("value=%s\n", value ? value : "(null)"); printf("origin=%s\n", current_config_origin_type()); printf("name=%s\n", current_config_name()); + printf("lno=%d\n", current_config_line()); printf("scope=%s\n", config_scope_name(current_config_scope())); return 0; diff --git a/t/t1308-config-set.sh b/t/t1308-config-set.sh index fba0abe..3a527e3 100755 --- a/t/t1308-config-set.sh +++ b/t/t1308-config-set.sh @@ -238,8 +238,8 @@ test_expect_success 'error on modifying repo config without repo' ' cmdline_config="'foo.bar=from-cmdline'" test_expect_success 'iteration shows correct origins' ' - echo "[foo]bar = from-repo" >.git/config && - echo "[foo]bar = from-home" >.gitconfig && + printf "[ignore]\n\tthis = please\n[foo]bar = from-repo\n" >.git/config && + printf "[foo]\n\tbar = from-home\n" >.gitconfig && if test_have_prereq MINGW then # Use Windows path (i.e. *not* $HOME) @@ -253,18 +253,28 @@ test_expect_success 'iteration shows correct origins' ' value=from-home origin=file name=$HOME_GITCONFIG + lno=2 scope=global + key=ignore.this + value=please + origin=file + name=.git/config + lno=2 + scope=local + key=foo.bar value=from-repo origin=file name=.git/config + lno=3 scope=local key=foo.bar value=from-cmdline origin=command line name= + lno=-1 scope=command EOF GIT_CONFIG_PARAMETERS=$cmdline_config test-tool config iterate >actual && |