Skip to content

Commit

Permalink
config: provide access to the current line number
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
bertwesarg authored and gitster committed Feb 10, 2020
1 parent 923d4a5 commit f2a2327
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 2 deletions.
8 changes: 8 additions & 0 deletions config.c
Expand Up @@ -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;
Expand Down
1 change: 1 addition & 0 deletions config.h
Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions t/helper/test-config.c
Expand Up @@ -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;
Expand Down
14 changes: 12 additions & 2 deletions t/t1308-config-set.sh
Expand Up @@ -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)
Expand All @@ -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 &&
Expand Down

0 comments on commit f2a2327

Please sign in to comment.