Skip to content

Commit

Permalink
resolve version ranges for editables too (#14510)
Browse files Browse the repository at this point in the history
* resolve version ranges for editables too

* fix editable matches
  • Loading branch information
memsharded authored Aug 18, 2023
1 parent 0ac7452 commit d0f3e9b
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 0 deletions.
3 changes: 3 additions & 0 deletions conans/client/graph/range_resolver.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,9 @@ def _resolve_local(self, search_ref, version_range):
# TODO: This is still necessary to filter user/channel, until search_recipes is fixed
local_found = [ref for ref in local_found if ref.user == search_ref.user
and ref.channel == search_ref.channel]
local_found.extend(r for r in self._cache.editable_packages.edited_refs
if r.name == search_ref.name and r.user == search_ref.user
and r.channel == search_ref.channel)
self._cached_cache[pattern] = local_found
if local_found:
return self._resolve_version(version_range, local_found, self._resolve_prereleases)
Expand Down
30 changes: 30 additions & 0 deletions conans/test/integration/editable/test_editable_ranges.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
from conans.test.assets.genconanfile import GenConanfile
from conans.test.utils.tools import TestClient


def test_editable_ranges():
c = TestClient()
c.save({"dep/conanfile.py": GenConanfile("dep"),
"dep2/conanfile.py": GenConanfile("dep", "0.2"),
"other/conanfile.py": GenConanfile("other", "23.0"), # shouldn't be resolved!
"app/conanfile.py": GenConanfile("app", "0.1").with_requires("dep/[>=0.1]")})
c.run("editable add other") # This shouldn't be used
c.run("editable add dep --version=0.1") # this should be used
c.run("editable add dep --version=2.0 --user=myuser --channel=mychannel") # This shouldn't be used
c.run("install app")
c.assert_listed_require({"dep/0.1": "Editable"})
assert "dep/[>=0.1]: dep/0.1" in c.out

# new version, uses new one
c.run("editable add dep2")
c.run("install app")
c.assert_listed_require({"dep/0.2": "Editable"})
assert "dep/[>=0.1]: dep/0.2" in c.out
assert "dep/0.1" not in c.out

# If a newer one is in cache, it resolves to cache
c.run("create dep --version=0.3")
c.run("install app")
c.assert_listed_require({"dep/0.3": "Cache"})
assert "dep/[>=0.1]: dep/0.3" in c.out
assert "dep/0.1" not in c.out

0 comments on commit d0f3e9b

Please sign in to comment.