From 255fb3251975dcd9368dc41d716e263d02861e76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Abril=20Rinc=C3=B3n=20Blanco?= Date: Tue, 3 Dec 2024 12:25:26 +0100 Subject: [PATCH 1/3] Warn on empty version ranges --- conans/model/version_range.py | 3 +++ test/integration/graph/core/test_version_ranges.py | 10 ++++++++++ test/unittests/model/version/test_version_range.py | 4 ++++ 3 files changed, 17 insertions(+) diff --git a/conans/model/version_range.py b/conans/model/version_range.py index 841abb3d15f..03e3090e46a 100644 --- a/conans/model/version_range.py +++ b/conans/model/version_range.py @@ -148,6 +148,9 @@ def valid(self, version, conf_resolve_prepreleases): class VersionRange: def __init__(self, expression): self._expression = expression + if not expression: + from conan.api.output import ConanOutput + ConanOutput().warning("Empty version range usage is discouraged", warn_tag="deprecated") tokens = expression.split(",") prereleases = False for t in tokens[1:]: diff --git a/test/integration/graph/core/test_version_ranges.py b/test/integration/graph/core/test_version_ranges.py index 17c0fef895e..98a10595c59 100644 --- a/test/integration/graph/core/test_version_ranges.py +++ b/test/integration/graph/core/test_version_ranges.py @@ -437,3 +437,13 @@ def test_bad_options_syntax(version_range, should_warn): assert "its presence unconditionally enables prereleases" in tc.out else: assert "its presence unconditionally enables prereleases" not in tc.out + + +def test_empty_version_ranger(): + tc = TestClient(light=True) + tc.save({"lib/conanfile.py": GenConanfile("lib", "1.0"), + "app/conanfile.py": GenConanfile("app", "1.0").with_requires("lib/[]")}) + tc.run("export lib") + tc.run("graph info app") + assert "lib/[]: lib/1.0" in tc.out + assert "Empty version range usage is discouraged" in tc.out diff --git a/test/unittests/model/version/test_version_range.py b/test/unittests/model/version/test_version_range.py index 5ac8d0850ba..b380de47bc1 100644 --- a/test/unittests/model/version/test_version_range.py +++ b/test/unittests/model/version/test_version_range.py @@ -112,6 +112,10 @@ def test_range(version_range, conditions, versions_in, versions_out): ['>1 <=2.0', False, ["1.1", "1.9", "2.0"], ["0.9", "1.0-pre.1", "1.0", "1.1-pre.1", "2.0-pre"]], # This should be old and new behaviors remain the same ['>1 <=2.0', True, ["1.1-pre.1", "1.1", "1.9", "2.0", "2.0-pre"], ["0.9", "1.0", "1.0-pre.1"]], + + # Codified quirks + ['', False, ["1.0", "2.0"], ["1.0-pre.1", "2.0-pre.1"]], + ['', True, ["1.0", "2.0", "1.0-pre.1", "2.0-pre.1"], []], ]) def test_range_prereleases_conf(version_range, resolve_prereleases, versions_in, versions_out): r = VersionRange(version_range) From 5e17e050d3dda4bb182411706cf6f27dc681d959 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Abril=20Rinc=C3=B3n=20Blanco?= Date: Tue, 3 Dec 2024 12:27:46 +0100 Subject: [PATCH 2/3] Better message --- conans/model/version_range.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conans/model/version_range.py b/conans/model/version_range.py index 03e3090e46a..d7626d0eac0 100644 --- a/conans/model/version_range.py +++ b/conans/model/version_range.py @@ -150,7 +150,7 @@ def __init__(self, expression): self._expression = expression if not expression: from conan.api.output import ConanOutput - ConanOutput().warning("Empty version range usage is discouraged", warn_tag="deprecated") + ConanOutput().warning("Empty version range usage is discouraged. Use [*] instead", warn_tag="deprecated") tokens = expression.split(",") prereleases = False for t in tokens[1:]: From 6d6e9a65866bcefd45551626d07b09ef2bc7c8a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Abril=20Rinc=C3=B3n=20Blanco?= Date: Wed, 4 Dec 2024 11:27:16 +0100 Subject: [PATCH 3/3] Move message to a better place --- conan/cli/printers/graph.py | 4 ++++ conans/model/version_range.py | 3 --- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/conan/cli/printers/graph.py b/conan/cli/printers/graph.py index 931848037df..2c4f3493c22 100644 --- a/conan/cli/printers/graph.py +++ b/conan/cli/printers/graph.py @@ -68,6 +68,10 @@ def _format_resolved(title, reqs_to_print): "it might be removed in 3.0.") output.warning("Consider using version-ranges instead.") _format_resolved("Resolved version ranges", graph.resolved_ranges) + for req in graph.resolved_ranges: + if str(req.version) == "[]": + output.warning("Empty version range usage is discouraged. Use [*] instead", warn_tag="deprecated") + break overrides = graph.overrides() if overrides: diff --git a/conans/model/version_range.py b/conans/model/version_range.py index d7626d0eac0..841abb3d15f 100644 --- a/conans/model/version_range.py +++ b/conans/model/version_range.py @@ -148,9 +148,6 @@ def valid(self, version, conf_resolve_prepreleases): class VersionRange: def __init__(self, expression): self._expression = expression - if not expression: - from conan.api.output import ConanOutput - ConanOutput().warning("Empty version range usage is discouraged. Use [*] instead", warn_tag="deprecated") tokens = expression.split(",") prereleases = False for t in tokens[1:]: