Commit da6ff861 by Sébastien Eustace

Fix solver adding uninstall operations for non-existing packages

parent 550481c9
......@@ -16,6 +16,7 @@
- Fixed handling of markers with the `in` operator.
- Fixed `update` not properly adding new packages to the lock file.
- Fixed solver adding uninstall operations for non-installed packages.
## [0.6.5] - 2018-03-22
......
......@@ -330,6 +330,18 @@ class Installer:
self._installer.update(source, target)
def _execute_uninstall(self, operation: Uninstall) -> None:
if operation.skipped:
if self.is_verbose() and (self._execute_operations or self.is_dry_run()):
self._io.writeln(
' - Not removing <info>{}</> (<comment>{}</>) {}'.format(
operation.package.pretty_name,
operation.package.full_pretty_version,
operation.skip_reason
)
)
return
if self._execute_operations or self.is_dry_run():
self._io.writeln(
' - Removing <info>{}</> (<comment>{}</>)'.format(
......
......@@ -105,12 +105,18 @@ class Solver:
break
if remove:
for locked in self._locked.packages:
if locked.name == pkg.name:
operations.append(Uninstall(pkg))
skip = True
for installed in self._installed.packages:
if installed.name == pkg.name:
skip = False
break
op = Uninstall(pkg)
if skip:
op.skip('Not currently installed')
operations.append(op)
requested_names = [r.name for r in requested]
return sorted(
......
......@@ -88,8 +88,9 @@ def test_solver_install_single(solver, repo):
])
def test_solver_remove_if_no_longer_locked(solver, locked):
def test_solver_remove_if_no_longer_locked(solver, locked, installed):
package_a = get_package('A', '1.0')
installed.add_package(package_a)
locked.add_package(package_a)
ops = solver.solve([])
......@@ -99,6 +100,21 @@ def test_solver_remove_if_no_longer_locked(solver, locked):
])
def test_remove_non_installed(solver, repo, locked):
package_a = get_package('A', '1.0')
locked.add_package(package_a)
repo.add_package(package_a)
request = []
ops = solver.solve(request)
check_solver_result(ops, [
{'job': 'remove', 'package': package_a, 'skipped': True},
])
def test_install_non_existing_package_fail(solver, repo):
package_a = get_package('A', '1.0')
repo.add_package(package_a)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment