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:
commit
5fa8bf6bf9
@ -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
|
||||||
~~~~~~~~~
|
~~~~~~~~~
|
||||||
|
6
config.c
6
config.c
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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 &&
|
||||||
|
Loading…
Reference in New Issue
Block a user