131 lines
3.7 KiB
Python
131 lines
3.7 KiB
Python
import sys
|
|
|
|
import sublime
|
|
|
|
|
|
st_version = 2
|
|
# With the way ST3 works, the sublime module is not "available" at startup
|
|
# which results in an empty version number
|
|
if sublime.version() == '' or int(sublime.version()) > 3000:
|
|
st_version = 3
|
|
from imp import reload
|
|
|
|
|
|
# Python allows reloading modules on the fly, which allows us to do live upgrades.
|
|
# The only caveat to this is that you have to reload in the dependency order.
|
|
#
|
|
# Thus is module A depends on B and we don't reload B before A, when A is reloaded
|
|
# it will still have a reference to the old B. Thus we hard-code the dependency
|
|
# order of the various Package Control modules so they get reloaded properly.
|
|
#
|
|
# There are solutions for doing this all programatically, but this is much easier
|
|
# to understand.
|
|
|
|
reload_mods = []
|
|
for mod in sys.modules:
|
|
if mod[0:15].lower().replace(' ', '_') == 'package_control' and sys.modules[mod] != None:
|
|
reload_mods.append(mod)
|
|
|
|
mod_prefix = 'package_control'
|
|
if st_version == 3:
|
|
mod_prefix = 'Package Control.' + mod_prefix
|
|
|
|
mods_load_order = [
|
|
'',
|
|
|
|
'.sys_path',
|
|
'.cache',
|
|
'.http_cache',
|
|
'.ca_certs',
|
|
'.clear_directory',
|
|
'.cmd',
|
|
'.console_write',
|
|
'.preferences_filename',
|
|
'.show_error',
|
|
'.unicode',
|
|
'.thread_progress',
|
|
'.package_io',
|
|
'.semver',
|
|
'.versions',
|
|
|
|
'.http',
|
|
'.http.invalid_certificate_exception',
|
|
'.http.debuggable_http_response',
|
|
'.http.debuggable_https_response',
|
|
'.http.debuggable_http_connection',
|
|
'.http.persistent_handler',
|
|
'.http.debuggable_http_handler',
|
|
'.http.validating_https_connection',
|
|
'.http.validating_https_handler',
|
|
|
|
'.clients',
|
|
'.clients.client_exception',
|
|
'.clients.bitbucket_client',
|
|
'.clients.github_client',
|
|
'.clients.readme_client',
|
|
'.clients.json_api_client',
|
|
|
|
'.providers',
|
|
'.providers.provider_exception',
|
|
'.providers.bitbucket_repository_provider',
|
|
'.providers.channel_provider',
|
|
'.providers.github_repository_provider',
|
|
'.providers.github_user_provider',
|
|
'.providers.repository_provider',
|
|
'.providers.release_selector',
|
|
|
|
'.download_manager',
|
|
|
|
'.downloaders',
|
|
'.downloaders.downloader_exception',
|
|
'.downloaders.rate_limit_exception',
|
|
'.downloaders.binary_not_found_error',
|
|
'.downloaders.non_clean_exit_error',
|
|
'.downloaders.non_http_error',
|
|
'.downloaders.caching_downloader',
|
|
'.downloaders.decoding_downloader',
|
|
'.downloaders.limiting_downloader',
|
|
'.downloaders.cert_provider',
|
|
'.downloaders.urllib_downloader',
|
|
'.downloaders.cli_downloader',
|
|
'.downloaders.curl_downloader',
|
|
'.downloaders.wget_downloader',
|
|
'.downloaders.wininet_downloader',
|
|
'.downloaders.background_downloader',
|
|
|
|
'.upgraders',
|
|
'.upgraders.vcs_upgrader',
|
|
'.upgraders.git_upgrader',
|
|
'.upgraders.hg_upgrader',
|
|
|
|
'.package_manager',
|
|
'.package_creator',
|
|
'.package_installer',
|
|
'.package_renamer',
|
|
|
|
'.commands',
|
|
'.commands.add_channel_command',
|
|
'.commands.add_repository_command',
|
|
'.commands.create_binary_package_command',
|
|
'.commands.create_package_command',
|
|
'.commands.disable_package_command',
|
|
'.commands.discover_packages_command',
|
|
'.commands.enable_package_command',
|
|
'.commands.existing_packages_command',
|
|
'.commands.grab_certs_command',
|
|
'.commands.install_package_command',
|
|
'.commands.list_packages_command',
|
|
'.commands.package_message_command',
|
|
'.commands.remove_package_command',
|
|
'.commands.upgrade_all_packages_command',
|
|
'.commands.upgrade_package_command',
|
|
|
|
'.package_cleanup',
|
|
'.automatic_upgrader'
|
|
]
|
|
|
|
for suffix in mods_load_order:
|
|
mod = mod_prefix + suffix
|
|
if mod in reload_mods:
|
|
reload(sys.modules[mod])
|