Loading CHANGELOG.md +1 −0 Changes for CHANGELOG.md: 1 added line, 0 removed lines. Original line number Diff line number Diff line Loading @@ -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 Loading poetry/installation/installer.py +12 −0 Changes for poetry/installation/installer.py: 12 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -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( Loading poetry/puzzle/solver.py +10 −4 Changes for poetry/puzzle/solver.py: 10 added lines, 4 removed lines. Original line number Diff line number Diff line Loading @@ -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( Loading tests/puzzle/test_solver.py +17 −1 Changes for tests/puzzle/test_solver.py: 17 added lines, 1 removed line. Original line number Diff line number Diff line Loading @@ -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([]) Loading @@ -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) Loading Loading
CHANGELOG.md +1 −0 Changes for CHANGELOG.md: 1 added line, 0 removed lines. Original line number Diff line number Diff line Loading @@ -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 Loading
poetry/installation/installer.py +12 −0 Changes for poetry/installation/installer.py: 12 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -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( Loading
poetry/puzzle/solver.py +10 −4 Changes for poetry/puzzle/solver.py: 10 added lines, 4 removed lines. Original line number Diff line number Diff line Loading @@ -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( Loading
tests/puzzle/test_solver.py +17 −1 Changes for tests/puzzle/test_solver.py: 17 added lines, 1 removed line. Original line number Diff line number Diff line Loading @@ -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([]) Loading @@ -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) Loading