From 55d42450d28bf3b5bd73d512f038bc83e3e81b41 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20Eckerstr=C3=B6m?= Date: Wed, 29 Apr 2015 10:22:24 +0200 Subject: [PATCH] Added support for url buid paths MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Jonas Eckerström --- compose/config.py | 21 ++++++++++++++++++--- tests/unit/config_test.py | 16 ++++++++++++++++ 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/compose/config.py b/compose/config.py index d54215dd273..9748e894fce 100644 --- a/compose/config.py +++ b/compose/config.py @@ -57,6 +57,14 @@ 'workdir': 'working_dir', } +DOCKER_VALID_URL_PREFIXES = ( + 'http://', + 'https://', + 'git://', + 'github.com/', + 'git@', +) + def load(filename): working_dir = os.path.dirname(filename) @@ -356,14 +364,21 @@ def resolve_host_path(volume, working_dir): def resolve_build_path(build_path, working_dir=None): if working_dir is None: raise Exception("No working_dir passed to resolve_build_path") - return expand_path(working_dir, build_path) + if is_url(build_path): + return build_path + else: + return expand_path(working_dir, build_path) def validate_paths(service_dict): if 'build' in service_dict: build_path = service_dict['build'] - if not os.path.exists(build_path) or not os.access(build_path, os.R_OK): - raise ConfigurationError("build path %s either does not exist or is not accessible." % build_path) + if (not os.path.exists(build_path) or not os.access(build_path, os.R_OK)) and not is_url(build_path): + raise ConfigurationError("build path %s either does not exist, is not accessible or is not a valid url." % build_path) + + +def is_url(build_path): + return build_path.startswith(DOCKER_VALID_URL_PREFIXES) def merge_volumes(base, override): diff --git a/tests/unit/config_test.py b/tests/unit/config_test.py index fcd417b0651..f7916914e4d 100644 --- a/tests/unit/config_test.py +++ b/tests/unit/config_test.py @@ -489,3 +489,19 @@ def test_absolute_path(self): def test_from_file(self): service_dict = config.load('tests/fixtures/build-path/docker-compose.yml') self.assertEquals(service_dict, [{'name': 'foo', 'build': self.abs_context_path}]) + + def test_valid_url_path(self): + valid_urls = [ + 'git://github.com/docker/docker', + 'git@github.com:docker/docker.git', + 'git@bitbucket.org:atlassianlabs/atlassian-docker.git', + 'https://github.com/docker/docker.git', + 'http://github.com/docker/docker.git', + ] + for valid_url in valid_urls: + service_dict = config.make_service_dict( + 'validurl', + {'build': valid_url}, + working_dir='tests/fixtures/build-path' + ) + self.assertEquals(service_dict['build'], valid_url)