From 28d737c2707aa4d5fe561abcd425236e597a5c1f Mon Sep 17 00:00:00 2001 From: James Date: Thu, 25 May 2023 18:15:10 +0200 Subject: [PATCH] test_requires shouldn't affect package_id (#13966) * test_requires shouldn't affect package_id * test with transitive * remove prints --- conans/model/requires.py | 4 +- .../test_package_id_test_requires.py | 39 +++++++++++++++++++ 2 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 conans/test/integration/package_id/test_package_id_test_requires.py diff --git a/conans/model/requires.py b/conans/model/requires.py index 89eb80a36ef..e2632dd0676 100644 --- a/conans/model/requires.py +++ b/conans/model/requires.py @@ -355,13 +355,15 @@ def deduce_package_id_mode(self, pkg_type, dep_node, non_embed_mode, embed_mode, if self.package_id_mode: return + if self.test: + return # test_requires never affect the binary_id dep_conanfile = dep_node.conanfile dep_pkg_type = dep_conanfile.package_type if self.build: build_mode = getattr(dep_conanfile, "build_mode", build_mode) if build_mode and self.direct: self.package_id_mode = build_mode - return # At the moment no defaults + return if pkg_type is PackageType.HEADER: self.package_id_mode = "unrelated_mode" diff --git a/conans/test/integration/package_id/test_package_id_test_requires.py b/conans/test/integration/package_id/test_package_id_test_requires.py new file mode 100644 index 00000000000..ff5703e621b --- /dev/null +++ b/conans/test/integration/package_id/test_package_id_test_requires.py @@ -0,0 +1,39 @@ +import pytest + +from conans.test.utils.tools import GenConanfile, TestClient +from conans.util.files import save + + +@pytest.mark.parametrize("build_mode", [None, "patch_mode"]) +def test_package_id_not_affected_test_requires(build_mode): + """ + By default, test_requires do not affect the package_id + """ + c = TestClient() + if build_mode is not None: + save(c.cache.new_config_path, "core.package_id:default_build_mode={build_mode}") + c.save({"gtest/conanfile.py": GenConanfile("gtest", "1.0"), + "engine/conanfile.py": GenConanfile("engine", "1.0").with_test_requires("gtest/1.0")}) + c.run("create gtest") + c.run("create engine") + c.run("list engine:*") + assert "engine/1.0" in c.out + assert "gtest" not in c.out + + +def test_package_id_not_affected_test_requires_transitive(): + """ + By default, transitive deps of test_requires do not affect the package_id + """ + c = TestClient() + + c.save({"zlib/conanfile.py": GenConanfile("zlib", "1.0"), + "gtest/conanfile.py": GenConanfile("gtest", "1.0").with_requires("zlib/1.0"), + "engine/conanfile.py": GenConanfile("engine", "1.0").with_test_requires("gtest/1.0")}) + c.run("create zlib") + c.run("create gtest") + c.run("create engine") + c.run("list engine:*") + assert "engine/1.0" in c.out + assert "gtest" not in c.out + assert "zlib" not in c.out