Skip to content

Commit b9eb246

Browse files
sdispaterabn
authored andcommitted
Fix locked VCS dependencies always being updated
1 parent fa9cd5f commit b9eb246

File tree

4 files changed

+80
-9
lines changed

4 files changed

+80
-9
lines changed

poetry/installation/executor.py

+6-1
Original file line numberDiff line numberDiff line change
@@ -567,7 +567,12 @@ def _install_git(self, operation):
567567

568568
git = Git()
569569
git.clone(package.source_url, src_dir)
570-
git.checkout(package.source_reference, src_dir)
570+
571+
reference = package.source_resolved_reference
572+
if not reference:
573+
reference = package.source_reference
574+
575+
git.checkout(reference, src_dir)
571576

572577
# Now we just need to install from the source directory
573578
package._source_url = str(src_dir)

poetry/installation/installer.py

+4-7
Original file line numberDiff line numberDiff line change
@@ -289,12 +289,6 @@ def _do_install(self, local_repo):
289289

290290
pool.add_repository(repo)
291291

292-
# We whitelist all packages to be sure
293-
# that the latest ones are picked up
294-
whitelist = []
295-
for pkg in locked_repository.packages:
296-
whitelist.append(pkg.name)
297-
298292
solver = Solver(
299293
root,
300294
pool,
@@ -303,9 +297,12 @@ def _do_install(self, local_repo):
303297
NullIO(),
304298
remove_untracked=self._remove_untracked,
305299
)
300+
# Everything is resolved at this point, so we no longer need
301+
# to load deferred dependencies (i.e. VCS, URL and path dependencies)
302+
solver.provider.load_deferred(False)
306303

307304
with solver.use_environment(self._env):
308-
ops = solver.solve(use_latest=whitelist)
305+
ops = solver.solve(use_latest=self._whitelist)
309306

310307
# We need to filter operations so that packages
311308
# not compatible with the current system,

poetry/installation/pip_installer.py

+6-1
Original file line numberDiff line numberDiff line change
@@ -250,7 +250,12 @@ def install_git(self, package):
250250

251251
git = Git()
252252
git.clone(package.source_url, src_dir)
253-
git.checkout(package.source_reference, src_dir)
253+
254+
reference = package.source_resolved_reference
255+
if not reference:
256+
reference = package.source_reference
257+
258+
git.checkout(reference, src_dir)
254259

255260
# Now we just need to install from the source directory
256261
pkg = Package(package.name, package.version)

tests/installation/test_installer.py

+64
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
from clikit.io import NullIO
99

1010
from poetry.core.packages import ProjectPackage
11+
from poetry.core.packages.package import Package
1112
from poetry.core.toml.file import TOMLFile
1213
from poetry.factory import Factory
1314
from poetry.installation import Installer as BaseInstaller
@@ -1860,3 +1861,66 @@ def test_installer_can_handle_old_lock_files(
18601861

18611862
# colorama will be added
18621863
assert 8 == installer.executor.installations_count
1864+
1865+
1866+
def test_installer_should_use_the_locked_version_of_git_dependencies(
1867+
installer, locker, package, repo
1868+
):
1869+
locker.locked(True)
1870+
locker.mock_lock_data(
1871+
{
1872+
"package": [
1873+
{
1874+
"name": "demo",
1875+
"version": "0.1.1",
1876+
"category": "main",
1877+
"optional": False,
1878+
"platform": "*",
1879+
"python-versions": "*",
1880+
"checksum": [],
1881+
"dependencies": {"pendulum": ">=1.4.4"},
1882+
"source": {
1883+
"type": "git",
1884+
"url": "https://github.com/demo/demo.git",
1885+
"reference": "master",
1886+
"resolved_reference": "123456",
1887+
},
1888+
},
1889+
{
1890+
"name": "pendulum",
1891+
"version": "1.4.4",
1892+
"category": "main",
1893+
"optional": False,
1894+
"platform": "*",
1895+
"python-versions": "*",
1896+
"checksum": [],
1897+
"dependencies": {},
1898+
},
1899+
],
1900+
"metadata": {
1901+
"python-versions": "*",
1902+
"platform": "*",
1903+
"content-hash": "123456789",
1904+
"hashes": {"demo": [], "pendulum": []},
1905+
},
1906+
}
1907+
)
1908+
1909+
package.add_dependency(
1910+
Factory.create_dependency(
1911+
"demo", {"git": "https://github.com/demo/demo.git", "branch": "master"}
1912+
)
1913+
)
1914+
1915+
repo.add_package(get_package("pendulum", "1.4.4"))
1916+
1917+
installer.run()
1918+
1919+
assert installer.executor.installations[-1] == Package(
1920+
"demo",
1921+
"0.1.1",
1922+
source_type="git",
1923+
source_url="https://github.com/demo/demo.git",
1924+
source_reference="master",
1925+
source_resolved_reference="123456",
1926+
)

0 commit comments

Comments
 (0)