From 410855fc4b55d9f6d75e2be44393f039f1708935 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Mart=C3=ADn=20Nieto?= Date: Sat, 17 Dec 2016 18:18:30 +0000 Subject: sysdir: add failing test for variable substitution When given $PATH as part of a search path, we guess again instead of substituting what the user already set. --- tests/core/env.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/tests/core/env.c b/tests/core/env.c index ee08258a6..1af0e6e5d 100644 --- a/tests/core/env.c +++ b/tests/core/env.c @@ -298,3 +298,24 @@ void test_core_env__2(void) git_buf_free(&path); git_buf_free(&found); } + +void test_core_env__substitution(void) +{ + git_buf buf = GIT_BUF_INIT, expected = GIT_BUF_INIT; + + /* Set it to something non-default so we have controllable values */ + cl_git_pass(git_libgit2_opts(GIT_OPT_SET_SEARCH_PATH, GIT_CONFIG_LEVEL_GLOBAL, "/tmp/a")); + cl_git_pass(git_libgit2_opts(GIT_OPT_GET_SEARCH_PATH, GIT_CONFIG_LEVEL_GLOBAL, &buf)); + cl_assert_equal_s("/tmp/a", buf.ptr); + + git_buf_clear(&buf); + cl_git_pass(git_buf_join(&buf, GIT_PATH_LIST_SEPARATOR, "$PATH", "/tmp/b")); + cl_git_pass(git_libgit2_opts(GIT_OPT_SET_SEARCH_PATH, GIT_CONFIG_LEVEL_GLOBAL, buf.ptr)); + cl_git_pass(git_libgit2_opts(GIT_OPT_GET_SEARCH_PATH, GIT_CONFIG_LEVEL_GLOBAL, &buf)); + + cl_git_pass(git_buf_join(&expected, GIT_PATH_LIST_SEPARATOR, "/tmp/a", "/tmp/b")); + cl_assert_equal_s(expected.ptr, buf.ptr); + + git_buf_free(&expected); + git_buf_free(&buf); +} -- cgit v1.2.1 From 9f09f290bbe49865f57cadb68883af0cd3b2cb71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Mart=C3=ADn=20Nieto?= Date: Sat, 17 Dec 2016 18:20:29 +0000 Subject: sysdir: don't guess the paths again when $PATH is specified We should replace it with whatever the user set, not start again. --- src/sysdir.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sysdir.c b/src/sysdir.c index 29e53e239..e89db7697 100644 --- a/src/sysdir.c +++ b/src/sysdir.c @@ -171,7 +171,7 @@ int git_sysdir_set(git_sysdir_t which, const char *search_path) expand_path = strstr(search_path, PATH_MAGIC); /* reset the default if this path has been cleared */ - if (!search_path || expand_path) + if (!search_path) git_sysdir__dirs[which].guess(&git_sysdir__dirs[which].buf); /* if $PATH is not referenced, then just set the path */ -- cgit v1.2.1