Commit 2b8e9aef by Sébastien Eustace

Fix update not properly adding new packages to the lock file

parent f32cf660
......@@ -15,6 +15,7 @@
### Fixed
- Fixed handling of markers with the `in` operator.
- Fixed `update` not properly adding new packages to the lock file.
## [0.6.5] - 2018-03-22
......
......@@ -202,10 +202,11 @@ class Installer:
self._io.new_line()
# Execute operations
if not ops and (self._execute_operations or self._dry_run):
actual_ops = [op for op in ops if not op.skipped]
if not actual_ops and (self._execute_operations or self._dry_run):
self._io.writeln('Nothing to install or update')
if ops and (self._execute_operations or self._dry_run):
if actual_ops and (self._execute_operations or self._dry_run):
installs = []
updates = []
uninstalls = []
......@@ -247,7 +248,6 @@ class Installer:
) if skipped and self.is_verbose() else ''
)
)
self._io.new_line()
# Writing lock before installing
if self._update and self._write_lock:
......@@ -257,9 +257,10 @@ class Installer:
)
if updated_lock:
self._io.writeln('<info>Writing lock file</>')
self._io.writeln('')
self._io.writeln('<info>Writing lock file</>')
self._io.writeln('')
for op in ops:
self._execute(op)
......@@ -366,6 +367,12 @@ class Installer:
local_repo.add_package(op.target_package)
elif op.job_type == 'uninstall':
local_repo.remove_package(op.package)
else:
# Even though the package already exists
# in the lock file we will prefer the new one
# to force updates
local_repo.remove_package(pkg)
local_repo.add_package(package)
acted_on = True
......
......@@ -206,6 +206,8 @@ class Locker:
}
if package.requirements:
print(package)
print(package.requirements)
data['requirements'] = package.requirements
return data
......
......@@ -28,6 +28,8 @@ class Operation:
def format_version(self, package) -> str:
return package.full_pretty_version
def skip(self, reason: str) -> None:
def skip(self, reason: str) -> 'Operation':
self._skipped = True
self._skip_reason = reason
return self
......@@ -86,6 +86,10 @@ class Solver:
# Checking version
if package.version != pkg.version:
operations.append(Update(pkg, package))
else:
operations.append(
Install(package).skip('Already installed')
)
break
......
......@@ -50,13 +50,18 @@ def solver(package, pool, installed, locked, io):
def check_solver_result(ops, expected):
for e in expected:
if 'skipped' not in e:
e['skipped'] = False
result = []
for op in ops:
if 'update' == op.job_type:
result.append({
'job': 'update',
'from': op.initial_package,
'to': op.target_package
'to': op.target_package,
'skipped': op.skipped
})
else:
job = 'install'
......@@ -65,7 +70,8 @@ def check_solver_result(ops, expected):
result.append({
'job': job,
'package': op.package
'package': op.package,
'skipped': op.skipped
})
assert result == expected
......@@ -172,8 +178,9 @@ def test_install_with_deps_in_order(solver, repo):
def test_install_installed(solver, repo, installed):
installed.add_package(get_package('A', '1.0'))
repo.add_package(get_package('A', '1.0'))
package_a = get_package('A', '1.0')
installed.add_package(package_a)
repo.add_package(package_a)
request = [
get_dependency('A'),
......@@ -181,7 +188,9 @@ def test_install_installed(solver, repo, installed):
ops = solver.solve(request)
check_solver_result(ops, [])
check_solver_result(ops, [
{'job': 'install', 'package': package_a, 'skipped': True},
])
def test_update_installed(solver, repo, installed):
......@@ -217,7 +226,9 @@ def test_update_with_fixed(solver, repo, installed):
ops = solver.solve(request, fixed=[get_dependency('A', '1.0')])
check_solver_result(ops, [])
check_solver_result(ops, [
{'job': 'install', 'package': package_a, 'skipped': True},
])
def test_solver_sets_categories(solver, repo):
......
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