aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2012-04-29 17:51:27 -0700
committerJunio C Hamano <gitster@pobox.com>2012-04-29 17:51:27 -0700
commit5fa8bf6bf9d20ccb37ed46ec7027a9ac64b2a2a7 (patch)
tree525bf6d5cec5b2cb0f36dcc578903fa06e380823
parentf61977ff8d1a420573e99a8a88df479c37f70162 (diff)
parent4c0a89fcde219df8db8fdb9635ef2ef40d002a6e (diff)
downloadgit-5fa8bf6bf9d20ccb37ed46ec7027a9ac64b2a2a7.tar.gz
git-5fa8bf6bf9d20ccb37ed46ec7027a9ac64b2a2a7.tar.xz
Merge branch 'mm/include-userpath'
The new "include.path" directive in the configuration files learned to understand "~/path" and "~user/path". By Jeff King * mm/include-userpath: config: expand tildes in include.path variable
-rw-r--r--Documentation/config.txt5
-rw-r--r--config.c6
-rwxr-xr-xt/t1305-config-include.sh8
3 files changed, 18 insertions, 1 deletions
diff --git a/Documentation/config.txt b/Documentation/config.txt
index fb386abc5..83ad8ebce 100644
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
@@ -95,7 +95,9 @@ included file is expanded immediately, as if its contents had been
found at the location of the include directive. If the value of the
`include.path` variable is a relative path, the path is considered to be
relative to the configuration file in which the include directive was
-found. See below for examples.
+found. The value of `include.path` is subject to tilde expansion: `{tilde}/`
+is expanded to the value of `$HOME`, and `{tilde}user/` to the specified
+user's home directory. See below for examples.
Example
~~~~~~~
@@ -122,6 +124,7 @@ Example
[include]
path = /path/to/foo.inc ; include by absolute path
path = foo ; expand "foo" relative to the current file
+ path = ~/foo ; expand "foo" in your $HOME directory
Variables
~~~~~~~~~
diff --git a/config.c b/config.c
index 68d32940f..2bbf02d1e 100644
--- a/config.c
+++ b/config.c
@@ -37,6 +37,11 @@ static int handle_path_include(const char *path, struct config_include_data *inc
{
int ret = 0;
struct strbuf buf = STRBUF_INIT;
+ char *expanded = expand_user_path(path);
+
+ if (!expanded)
+ return error("Could not expand include path '%s'", path);
+ path = expanded;
/*
* Use an absolute path as-is, but interpret relative paths
@@ -63,6 +68,7 @@ static int handle_path_include(const char *path, struct config_include_data *inc
inc->depth--;
}
strbuf_release(&buf);
+ free(expanded);
return ret;
}
diff --git a/t/t1305-config-include.sh b/t/t1305-config-include.sh
index 4b1cbaa02..a70707620 100755
--- a/t/t1305-config-include.sh
+++ b/t/t1305-config-include.sh
@@ -29,6 +29,14 @@ test_expect_success 'chained relative paths' '
test_cmp expect actual
'
+test_expect_success 'include paths get tilde-expansion' '
+ echo "[test]one = 1" >one &&
+ echo "[include]path = ~/one" >.gitconfig &&
+ echo 1 >expect &&
+ git config test.one >actual &&
+ test_cmp expect actual
+'
+
test_expect_success 'include options can still be examined' '
echo "[test]one = 1" >one &&
echo "[include]path = one" >.gitconfig &&