def save_session_file(base_root_directory, lastSection, command, request_index): """ Only saves the session file when working on the main project submodules instead overriding it with the nested submodules contents. """ if base_root_directory == CHANNEL_ROOT_DIRECTORY: lastSection[command] = request_index - 1 write_data_file(CHANNEL_SESSION_FILE, lastSection)
def create_repository_file(repositories, dependencies): repository_file = OrderedDict() repository_file['schema_version'] = "3.0.0" repository_file['packages'] = repositories repository_file['dependencies'] = dependencies # print_data_file( g_channelSettings['CHANNEL_REPOSITORY_FILE'] ) write_data_file(g_channelSettings['CHANNEL_REPOSITORY_FILE'], repository_file)
def load_installation_details(): # Only attempt to check it, if the settings are loaded if len( g_channelSettings ) > 0: installationDetailsPath = g_channelSettings['CHANNEL_INSTALLATION_DETAILS'] if not os.path.exists( installationDetailsPath ): write_data_file( installationDetailsPath, {"automatically_show_installation_wizard": True} ) global g_installation_details g_installation_details = load_data_file( installationDetailsPath )
def is_channel_upgraded(channel_settings): package_version = "" try: packageChannelSettings = load_data_file( channel_settings['CHANNEL_PACKAGE_METADATA'], log_level=0, exceptions=True) package_version = packageChannelSettings.get('version', "") except Exception as error: log( 1, "Skipping channel upgrade as could not load `package-metadata.json` due: %s", error) write_data_file( os.path.join(os.path.dirname(sublime.packages_path()), channel_settings['CHANNEL_PACKAGE_METADATA']), { "dependencies": [], "description": "No description available.", "platforms": "*", "sublime_text": ">3114", "url": "https://github.com/evandrocoan/StudioChannel", "version": "0.0.0" }) return False userChannelSettings = load_data_file( channel_settings['CHANNEL_INSTALLATION_DETAILS']) user_version = userChannelSettings.get('current_version') try: if not user_version: raise Exception( "There is no old version available for update checking.") return LooseVersion(package_version) > LooseVersion(user_version) except Exception: log.exception( "Error: Could not check for the channel upgrade: `%s` - `%s`", package_version, user_version) userChannelSettings['current_version'] = "0.0.0" write_data_file(channel_settings['CHANNEL_INSTALLATION_DETAILS'], userChannelSettings) return False
def show_goodbye_message(): ok_button_text = "Return to the Wizard" negative_button_text = "Never ask again" lines = \ [ wrap_text( """\ Thank you for looking to install the {channel_name}, but as you do not agree with its usage license and completed the installation wizard, the {channel_name} need to be uninstalled as it does nothing else useful for you. If you want to consider installing it, click on the button `{ok_button}` to go back and try again. Otherwise click on the `Cancel` button and then uninstall the {channel_name} package. If you wish to install the {installation_type} later, you can go to the menu `Preferences -> Packages -> {channel_name}` and select the option `{installation_type}`, to run this Installer Wizard again. Or select the button `{negative_button_text}` to show this Wizard on the next time you start Sublime Text. If you wish to install the {channel_name} later, after uninstalling it, you can just install this package again. """.format( ok_button=ok_button_text, negative_button_text=negative_button_text, installation_type=g_installation_command, channel_name=CHANNEL_PACKAGE_NAME ), single_lines=True ), ] channelDetailsPath = g_channelSettings['CHANNEL_INSTALLATION_DETAILS'] channelDetails = load_data_file(channelDetailsPath) sublime_dialog = sublime.yes_no_cancel_dialog("\n".join(lines), ok_button_text, negative_button_text) if sublime_dialog == sublime.DIALOG_YES: # "Return to the Wizard" return True elif sublime_dialog == sublime.DIALOG_NO: # "Never ask again" channelDetails['automatically_show_installation_wizard'] = False elif sublime_dialog == sublime.DIALOG_CANCEL: # When pressing escape key, it returns DIALOG_CANCEL channelDetails['automatically_show_installation_wizard'] = True else: log( 1, "Error: The option `%s` is a invalid return value from `sublime.yes_no_cancel_dialog`!", sublime_dialog) channelDetails['automatically_show_installation_wizard'] = False write_data_file(channelDetailsPath, channelDetails) return False
def load_settings(): global g_settings global g_package_settings_path g_package_settings_path = os.path.join(sublime.packages_path(), "User", CURRENT_PACKAGE_NAME + ".inputs") try: # Returns an OrderedDict g_settings = load_data_file(g_package_settings_path, exceptions=True) except Exception as error: log.exception("Could not load the settings file") write_data_file(g_package_settings_path, g_settings, debug=0)
def is_sublime_text_upgraded(caller_indentifier): """ @return True when it is the fist time this function is called or there is a sublime text upgrade, False otherwise. """ current_version = int(sublime.version()) last_session = load_data_file(UPGRADE_SESSION_FILE) section = last_session.get(LAST_SUBLIME_TEXT_SECTION, {}) last_version = section.get(caller_indentifier, 0) section[caller_indentifier] = current_version last_session[LAST_SUBLIME_TEXT_SECTION] = section if last_version != current_version: write_data_file(UPGRADE_SESSION_FILE, last_session, 0) return last_version < current_version
def create_channel_file(repositories, dependencies): channel_dictionary = OrderedDict() channel_dictionary['repositories'] = [] channel_dictionary['repositories'].append( g_channelSettings['CHANNEL_REPOSITORY_URL']) channel_dictionary['schema_version'] = "3.0.0" channel_dictionary['packages_cache'] = OrderedDict() channel_dictionary['packages_cache'][ g_channelSettings['CHANNEL_REPOSITORY_URL']] = repositories channel_dictionary['dependencies_cache'] = OrderedDict() channel_dictionary['dependencies_cache'][ g_channelSettings['CHANNEL_REPOSITORY_URL']] = dependencies # print_data_file( g_channelSettings['CHANNEL_FILE_PATH'] ) write_data_file(g_channelSettings['CHANNEL_FILE_PATH'], channel_dictionary)
def create_packages_manager_tag(absolute_path, command_line_interface): """ Create the `date_tag` as the current time because we cannot call get_git_tag_date() because we did not created the tag neither the commit yet. """ package_name = os.path.basename(absolute_path) if package_name == 'PackagesManager': # 2017-04-13 16:44:14 # https://stackoverflow.com/questions/32490629/getting-todays-date-in-yyyy-mm-dd-in-python release_date = datetime.datetime.today().strftime('%Y-%m-%d %H:%M:%S') date_tag = get_git_version(release_date) package_metadata_json = "package-metadata.json" package_metadata_absolute = os.path.join(absolute_path, package_metadata_json) package_metadata = load_data_file(package_metadata_absolute) package_metadata['version'] = date_tag write_data_file(package_metadata_absolute, package_metadata) # https://stackoverflow.com/questions/7239333/how-do-i-commit-only-some-files command = 'git commit --only "%s" -m "Updated package-metadata.json version to %s"' % ( package_metadata_json, date_tag) command_line_interface.execute(shlex.split(command), absolute_path, live_output=True, short_errors=True) # https://stackoverflow.com/questions/14031970/git-push-current-branch-shortcut command = "git push origin HEAD" command_line_interface.execute(shlex.split(command), absolute_path, live_output=True, short_errors=True)
def save_index(key, index): g_settings[key] = index window = sublime.active_window() project_file_name = window.project_file_name() window_settings = window.settings() window_settings.set(last_quick_settings_input, g_settings) if project_file_name: workspaces = g_settings.setdefault( 'workspaces_' + last_quick_settings_input, OrderedDict()) # https://docs.python.org/3/library/collections.html#collections.OrderedDict.move_to_end # https://stackoverflow.com/questions/16664874/how-can-i-add-an-element-at-the-top-of-an-ordereddict-in-python workspacesetting = workspaces.setdefault(project_file_name, {key: index}) workspacesetting[key] = index workspaces.move_to_end(project_file_name, last=False) while len(workspaces) > MAXIMUM_WORSPACES_ENTRIES: pop_dict_last_item(workspaces) write_data_file(g_package_settings_path, g_settings, debug=0)
def create_version_setting_file(upstream_directory): version_settings_path = os.path.join(upstream_directory, 'settings.json') version_settings_file = load_data_file(version_settings_path) latest_git_tag = version_settings_file['tags'][-1] latest_git_tag = int(latest_git_tag) # https://stackoverflow.com/questions/10345182/log-first-10-in-git output = run_command( "git log -%s --pretty=oneline" % MAXIMUM_COMMITS_TO_SEARCH, upstream_directory) # log( 1, 'Fetched the latest git history: \n%s', output ) version_found = 0 version_regex = re.compile(r'(?:version|build)\s*(\d\d\d\d)', re.IGNORECASE) for line in output.split('\n'): version_match = version_regex.search(line) if version_match: version_match = int(version_match.group(1)) if version_match > latest_git_tag: version_found = version_match break log(1, 'version_found: %s', version_found) log(1, 'latest_git_tag: %s', latest_git_tag) if version_found: version_found = str(version_found) cloned_package_path = os.path.join(sublime.packages_path(), 'Default') local_packages_upstream = "../../%s" % (packages_upstream_name) upstream_full_path = os.path.abspath( os.path.join(cloned_package_path, local_packages_upstream)) local_packages_upstream_name = "local_packages_upstream" remotes = run_command("git remote", cloned_package_path) if local_packages_upstream_name in remotes: log(1, "Skipping `%s` remote creation as it already exists: \n%s", local_packages_upstream_name, remotes) else: output = run_command( "git remote add %s %s" % (local_packages_upstream_name, local_packages_upstream), cloned_package_path) log(1, 'Created local remote on: \n%s\n%s', upstream_full_path, output) output = run_command("git status --porcelain", upstream_directory) log(1, 'Checking whether the upstream has new changes: \n%s', output) if len(output) > 2: if version_found not in version_settings_file['tags']: output = run_command("git tag %s" % (version_found), cloned_package_path) log(1, 'Created git tag `%s`:\n%s', version_found, output) output = run_command( "git fetch %s --no-tags" % (local_packages_upstream_name), cloned_package_path) log(1, 'Fetched local remote: \n%s', output) version_settings_file['tags'].append(str(version_found)) write_data_file(version_settings_path, version_settings_file) else: log(1, 'Warning: The version `%s` was already found on: %s', version_found, version_settings_path) else: log(1, 'Warning: No new updates to commit on: %s', upstream_full_path) else: log( 1, 'Error: No new Sublime Text version was found on the last %s commits on the git history.', MAXIMUM_COMMITS_TO_SEARCH)