Skip to content

Commit 701bd0d

Browse files
committed
Separate package and library installation
This commit satisfies required libraries after all packages have been installed, instead of resolving and installing each required library before a package is. Advantages: 1. not yet installed package source doesn't need to be scanned for required libraries or the plugin host it will run on. Reduces code duplication. 2. package and library installation/upgrade can be parallelized in a future version, without risk to install a library twice due to race conditions. 3. separation of concerns; low-level `install_package()` function just installs a package and `install_library()` just a library.
1 parent 84efba3 commit 701bd0d

File tree

2 files changed

+11
-25
lines changed

2 files changed

+11
-25
lines changed

package_control/package_manager.py

Lines changed: 0 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1593,31 +1593,6 @@ def install_package(self, package_name, unattended=False):
15931593
except (FileNotFoundError):
15941594
pass
15951595

1596-
library_names = release.get('libraries')
1597-
if not library_names:
1598-
# If libraries were not in the channel, try the package
1599-
try:
1600-
lib_info_json = package_zip.read(common_folder + 'dependencies.json')
1601-
lib_info = json.loads(lib_info_json.decode('utf-8'))
1602-
except (KeyError):
1603-
lib_info = {}
1604-
except (ValueError):
1605-
console_write(
1606-
'''
1607-
Failed to parse the dependencies.json for "%s"
1608-
''',
1609-
package_name
1610-
)
1611-
return False
1612-
1613-
library_names = self.select_libraries(lib_info)
1614-
1615-
if library_names:
1616-
self.install_libraries(
1617-
library.names_to_libraries(library_names, python_version),
1618-
fail_early=False
1619-
)
1620-
16211596
if package_name != old_package_name:
16221597
self.rename_package(old_package_name, package_name)
16231598

package_control/package_tasks.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,9 @@ def remove_packages(self, packages, progress=None, package_kind=''):
295295
elif result is None:
296296
deferred.add(package)
297297

298+
required_libraries = self.manager.find_required_libraries()
299+
self.manager.cleanup_libraries(required_libraries=required_libraries)
300+
298301
if num_packages == 1:
299302
message = 'Package {} successfully removed'.format(list(packages)[0])
300303
elif num_packages == num_success:
@@ -395,6 +398,10 @@ def run_install_tasks(self, tasks, progress=None, unattended=False, package_kind
395398
elif result is None:
396399
package_names.remove(task.package_name)
397400

401+
required_libraries = self.manager.find_required_libraries()
402+
self.manager.install_libraries(libraries=required_libraries, fail_early=False)
403+
self.manager.cleanup_libraries(required_libraries=required_libraries)
404+
398405
if num_packages == num_success:
399406
if package_kind or num_packages > 1:
400407
message = 'All {}packages successfully installed'.format(package_kind)
@@ -488,6 +495,10 @@ def run_upgrade_tasks(self, tasks, progress=None, unattended=False):
488495
if package != task.available_name:
489496
disable_packages[self.INSTALL].remove(task.available_name)
490497

498+
required_libraries = self.manager.find_required_libraries()
499+
self.manager.install_libraries(libraries=required_libraries, fail_early=False)
500+
self.manager.cleanup_libraries(required_libraries=required_libraries)
501+
491502
if num_packages == num_success:
492503
if num_packages > 1:
493504
message = 'All packages successfully upgraded'

0 commit comments

Comments
 (0)