diff options
author | Junio C Hamano <gitster@pobox.com> | 2012-04-29 17:51:27 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2012-04-29 17:51:27 -0700 |
commit | 5fa8bf6bf9d20ccb37ed46ec7027a9ac64b2a2a7 (patch) | |
tree | 525bf6d5cec5b2cb0f36dcc578903fa06e380823 | |
parent | f61977ff8d1a420573e99a8a88df479c37f70162 (diff) | |
parent | 4c0a89fcde219df8db8fdb9635ef2ef40d002a6e (diff) | |
download | git-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.txt | 5 | ||||
-rw-r--r-- | config.c | 6 | ||||
-rwxr-xr-x | t/t1305-config-include.sh | 8 |
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 ~~~~~~~~~ @@ -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 && |