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>
This commit is contained in:
Bert Wesarg 2020-01-27 08:04:31 +01:00 committed by Junio C Hamano
parent 923d4a5ca4
commit f2a2327a4a
4 changed files with 22 additions and 2 deletions

View File

@ -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;

View File

@ -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

View File

@ -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;

View File

@ -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 &&