summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBert Wesarg <bert.wesarg@googlemail.com>2020-01-27 07:04:31 (GMT)
committerJunio C Hamano <gitster@pobox.com>2020-02-10 18:52:10 (GMT)
commitf2a2327a4a6a9bccade6df2bed1fdc3a8ab37f4c (patch)
tree4fe82fc9fa6fd1366d7ffa392be73e633a252a45
parent923d4a5ca4f86c19247ef436e6d03d261ebce904 (diff)
downloadgit-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.c8
-rw-r--r--config.h1
-rw-r--r--t/helper/test-config.c1
-rwxr-xr-xt/t1308-config-set.sh14
4 files changed, 22 insertions, 2 deletions
diff --git a/config.c b/config.c
index 18a6bdd..222e49a 100644
--- a/config.c
+++ b/config.c
@@ -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;
diff --git a/config.h b/config.h
index fe0addb..9b3773f 100644
--- a/config.h
+++ b/config.h
@@ -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 &&