diff --git a/compose/config/config.py b/compose/config/config.py index d9b06f3e7..b7d13f8ad 100644 --- a/compose/config/config.py +++ b/compose/config/config.py @@ -516,7 +516,7 @@ def split_label(label): def expand_path(working_dir, path): - return os.path.abspath(os.path.join(working_dir, path)) + return os.path.abspath(os.path.join(working_dir, os.path.expanduser(path))) def to_list(value): diff --git a/tests/unit/config_test.py b/tests/unit/config_test.py index 9d67a8917..870adcf81 100644 --- a/tests/unit/config_test.py +++ b/tests/unit/config_test.py @@ -1032,6 +1032,27 @@ class ExtendsTest(unittest.TestCase): self.assertEqual(dicts[0]['environment'], {'FOO': '1'}) +class ExpandPathTest(unittest.TestCase): + working_dir = '/home/user/somedir' + + def test_expand_path_normal(self): + result = config.expand_path(self.working_dir, 'myfile') + self.assertEqual(result, self.working_dir + '/' + 'myfile') + + def test_expand_path_absolute(self): + abs_path = '/home/user/otherdir/somefile' + result = config.expand_path(self.working_dir, abs_path) + self.assertEqual(result, abs_path) + + def test_expand_path_with_tilde(self): + test_path = '~/otherdir/somefile' + with mock.patch.dict(os.environ): + os.environ['HOME'] = user_path = '/home/user/' + result = config.expand_path(self.working_dir, test_path) + + self.assertEqual(result, user_path + 'otherdir/somefile') + + class BuildPathTest(unittest.TestCase): def setUp(self): self.abs_context_path = os.path.join(os.getcwd(), 'tests/fixtures/build-ctx')