From 6904583efc8092dcc49c02ae9ce16bc2df2837be Mon Sep 17 00:00:00 2001 From: Uilian Ries Date: Tue, 9 Nov 2021 14:56:45 -0300 Subject: [PATCH 1/4] Parse conan reference Signed-off-by: Uilian Ries --- cpt/packager.py | 29 +++++++++++++++-------------- cpt/test/integration/docker_test.py | 19 +++++++++++++++++++ 2 files changed, 34 insertions(+), 14 deletions(-) diff --git a/cpt/packager.py b/cpt/packager.py index 1b87724b..86c3ec80 100644 --- a/cpt/packager.py +++ b/cpt/packager.py @@ -452,17 +452,8 @@ def login(self, remote_name): def add_common_builds(self, shared_option_name=None, pure_c=None, dll_with_static_runtime=False, reference=None, header_only=True, build_all_options_values=None): - if reference: - if "@" in reference: - reference = ConanFileReference.loads(reference) - else: - name, version = reference.split("/") - reference = ConanFileReference(name, version, self.username, self.channel) - else: - reference = self.reference - if not reference: - raise Exception("Specify a CONAN_REFERENCE or name and version fields in the recipe") + reference = self._parse_reference(reference) if shared_option_name is None: env_shared_option_name = os.getenv("CONAN_SHARED_OPTION_NAME", None) @@ -535,10 +526,7 @@ def add(self, settings=None, options=None, env_vars=None, build_requires=None, r options = options or {} env_vars = env_vars or {} build_requires = build_requires or {} - if reference: - reference = ConanFileReference.loads("%s@%s/%s" % (reference, - self.username, self.channel)) - reference = reference or self.reference + reference = self._parse_reference(reference) self._builds.append(BuildConf(settings, options, env_vars, build_requires, reference)) def remove_build_if(self, predicate): @@ -595,6 +583,19 @@ def run(self, base_profile_name=None, summary_file=None, base_profile_build_name if summary_file: self.save_packages_summary(summary_file) + def _parse_reference(self, reference): + if reference: + if "@" in reference: + reference = ConanFileReference.loads(reference) + else: + name, version = reference.split("/") + reference = ConanFileReference(name, version, self.username, self.channel) + else: + reference = self.reference + if not reference: + raise Exception("Specify a CONAN_REFERENCE or name and version fields in the recipe") + return reference + def _upload_enabled(self): if not self.remotes_manager.upload_remote_name: return False diff --git a/cpt/test/integration/docker_test.py b/cpt/test/integration/docker_test.py index 9847a034..32aa08df 100644 --- a/cpt/test/integration/docker_test.py +++ b/cpt/test/integration/docker_test.py @@ -367,3 +367,22 @@ def build(self): self.packager.run() self.assertIn('-e CONAN_USERNAME="_"', self.output) self.assertIn('-e CONAN_CHANNEL="_"', self.output) + + @unittest.skipUnless(is_linux_and_have_docker(), "Requires Linux and Docker") + def test_docker_no_reference(self): + conanfile = textwrap.dedent(""" + from conans import ConanFile + + class Pkg(ConanFile): + def build(self): + pass + """) + + self.save_conanfile(conanfile) + with tools.environment_append({"CONAN_DOCKER_IMAGE": "conanio/gcc8", + "CONAN_DOCKER_USE_SUDO": "FALSE", + "CONAN_DOCKER_SHELL": "/bin/bash -c", + }): + self.packager = ConanMultiPackager(out=self.output.write) + with self.assertRaisesRegexp(Exception, "Specify a CONAN_REFERENCE or name and version fields in the recipe"): + self.packager.add(settings={"build_type": "Release"}) From 82f3b83ab908b80ae35a904b8afd32cb420d89b7 Mon Sep 17 00:00:00 2001 From: Uilian Ries Date: Tue, 9 Nov 2021 17:09:42 -0300 Subject: [PATCH 2/4] Move no reference test Signed-off-by: Uilian Ries --- cpt/test/integration/basic_test.py | 13 +++++++++++++ cpt/test/integration/docker_test.py | 19 ------------------- 2 files changed, 13 insertions(+), 19 deletions(-) diff --git a/cpt/test/integration/basic_test.py b/cpt/test/integration/basic_test.py index 09709164..6ae2bea8 100644 --- a/cpt/test/integration/basic_test.py +++ b/cpt/test/integration/basic_test.py @@ -2,6 +2,7 @@ import unittest import sys import json +import textwrap from conans import tools from conans.model.ref import ConanFileReference @@ -451,3 +452,15 @@ def configure(self): self.packager = ConanMultiPackager(out=self.output.write) self.packager.add_common_builds(pure_c=False, build_all_options_values=["qux:foo", "qux:bar", "qux:blah"]) self.packager.run() + + def test_no_reference(self): + conanfile = textwrap.dedent(""" + from conans import ConanFile + class Pkg(ConanFile): + def build(self): + pass + """) + self.save_conanfile(conanfile) + self.packager = ConanMultiPackager(out=self.output.write) + with self.assertRaisesRegexp(Exception, "Specify a CONAN_REFERENCE or name and version fields in the recipe"): + self.packager.add(settings={"build_type": "Release"}) diff --git a/cpt/test/integration/docker_test.py b/cpt/test/integration/docker_test.py index 32aa08df..9847a034 100644 --- a/cpt/test/integration/docker_test.py +++ b/cpt/test/integration/docker_test.py @@ -367,22 +367,3 @@ def build(self): self.packager.run() self.assertIn('-e CONAN_USERNAME="_"', self.output) self.assertIn('-e CONAN_CHANNEL="_"', self.output) - - @unittest.skipUnless(is_linux_and_have_docker(), "Requires Linux and Docker") - def test_docker_no_reference(self): - conanfile = textwrap.dedent(""" - from conans import ConanFile - - class Pkg(ConanFile): - def build(self): - pass - """) - - self.save_conanfile(conanfile) - with tools.environment_append({"CONAN_DOCKER_IMAGE": "conanio/gcc8", - "CONAN_DOCKER_USE_SUDO": "FALSE", - "CONAN_DOCKER_SHELL": "/bin/bash -c", - }): - self.packager = ConanMultiPackager(out=self.output.write) - with self.assertRaisesRegexp(Exception, "Specify a CONAN_REFERENCE or name and version fields in the recipe"): - self.packager.add(settings={"build_type": "Release"}) From 9045b337b37e80bbcdfbe8e2174b48487256c277 Mon Sep 17 00:00:00 2001 From: Uilian Ries Date: Tue, 9 Nov 2021 18:55:11 -0300 Subject: [PATCH 3/4] Skip new test Signed-off-by: Uilian Ries --- cpt/test/integration/basic_test.py | 1 + 1 file changed, 1 insertion(+) diff --git a/cpt/test/integration/basic_test.py b/cpt/test/integration/basic_test.py index 6ae2bea8..b0562646 100644 --- a/cpt/test/integration/basic_test.py +++ b/cpt/test/integration/basic_test.py @@ -453,6 +453,7 @@ def configure(self): self.packager.add_common_builds(pure_c=False, build_all_options_values=["qux:foo", "qux:bar", "qux:blah"]) self.packager.run() + @unittest.skipIf(True, "Skip") def test_no_reference(self): conanfile = textwrap.dedent(""" from conans import ConanFile From 72469aa3c089f678b8d20289167215a4e2008ebb Mon Sep 17 00:00:00 2001 From: Uilian Ries Date: Tue, 9 Nov 2021 19:39:54 -0300 Subject: [PATCH 4/4] Evoke old error Signed-off-by: Uilian Ries --- cpt/packager.py | 29 ++++++++++++++--------------- cpt/test/integration/basic_test.py | 7 ++++--- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/cpt/packager.py b/cpt/packager.py index 86c3ec80..1b87724b 100644 --- a/cpt/packager.py +++ b/cpt/packager.py @@ -452,8 +452,17 @@ def login(self, remote_name): def add_common_builds(self, shared_option_name=None, pure_c=None, dll_with_static_runtime=False, reference=None, header_only=True, build_all_options_values=None): + if reference: + if "@" in reference: + reference = ConanFileReference.loads(reference) + else: + name, version = reference.split("/") + reference = ConanFileReference(name, version, self.username, self.channel) + else: + reference = self.reference - reference = self._parse_reference(reference) + if not reference: + raise Exception("Specify a CONAN_REFERENCE or name and version fields in the recipe") if shared_option_name is None: env_shared_option_name = os.getenv("CONAN_SHARED_OPTION_NAME", None) @@ -526,7 +535,10 @@ def add(self, settings=None, options=None, env_vars=None, build_requires=None, r options = options or {} env_vars = env_vars or {} build_requires = build_requires or {} - reference = self._parse_reference(reference) + if reference: + reference = ConanFileReference.loads("%s@%s/%s" % (reference, + self.username, self.channel)) + reference = reference or self.reference self._builds.append(BuildConf(settings, options, env_vars, build_requires, reference)) def remove_build_if(self, predicate): @@ -583,19 +595,6 @@ def run(self, base_profile_name=None, summary_file=None, base_profile_build_name if summary_file: self.save_packages_summary(summary_file) - def _parse_reference(self, reference): - if reference: - if "@" in reference: - reference = ConanFileReference.loads(reference) - else: - name, version = reference.split("/") - reference = ConanFileReference(name, version, self.username, self.channel) - else: - reference = self.reference - if not reference: - raise Exception("Specify a CONAN_REFERENCE or name and version fields in the recipe") - return reference - def _upload_enabled(self): if not self.remotes_manager.upload_remote_name: return False diff --git a/cpt/test/integration/basic_test.py b/cpt/test/integration/basic_test.py index b0562646..7b49a014 100644 --- a/cpt/test/integration/basic_test.py +++ b/cpt/test/integration/basic_test.py @@ -453,7 +453,6 @@ def configure(self): self.packager.add_common_builds(pure_c=False, build_all_options_values=["qux:foo", "qux:bar", "qux:blah"]) self.packager.run() - @unittest.skipIf(True, "Skip") def test_no_reference(self): conanfile = textwrap.dedent(""" from conans import ConanFile @@ -463,5 +462,7 @@ def build(self): """) self.save_conanfile(conanfile) self.packager = ConanMultiPackager(out=self.output.write) - with self.assertRaisesRegexp(Exception, "Specify a CONAN_REFERENCE or name and version fields in the recipe"): - self.packager.add(settings={"build_type": "Release"}) + #with self.assertRaisesRegexp(Exception, "Specify a CONAN_REFERENCE or name and version fields in the recipe"): + self.packager.add(settings={"build_type": "Release"}) + with self.assertRaises(TypeError): + self.packager.run()