Commit 2b8e9aef by Sébastien Eustace

Fix update not properly adding new packages to the lock file

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