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
This commit is contained in:
Junio C Hamano 2012-04-29 17:51:27 -07:00
commit 5fa8bf6bf9
3 changed files with 18 additions and 1 deletions

View File

@ -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 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 `include.path` variable is a relative path, the path is considered to be
relative to the configuration file in which the include directive was 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 Example
~~~~~~~ ~~~~~~~
@ -122,6 +124,7 @@ Example
[include] [include]
path = /path/to/foo.inc ; include by absolute path path = /path/to/foo.inc ; include by absolute path
path = foo ; expand "foo" relative to the current file path = foo ; expand "foo" relative to the current file
path = ~/foo ; expand "foo" in your $HOME directory
Variables Variables
~~~~~~~~~ ~~~~~~~~~

View File

@ -37,6 +37,11 @@ static int handle_path_include(const char *path, struct config_include_data *inc
{ {
int ret = 0; int ret = 0;
struct strbuf buf = STRBUF_INIT; 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 * 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--; inc->depth--;
} }
strbuf_release(&buf); strbuf_release(&buf);
free(expanded);
return ret; return ret;
} }

View File

@ -29,6 +29,14 @@ test_expect_success 'chained relative paths' '
test_cmp expect actual 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' ' test_expect_success 'include options can still be examined' '
echo "[test]one = 1" >one && echo "[test]one = 1" >one &&
echo "[include]path = one" >.gitconfig && echo "[include]path = one" >.gitconfig &&