def do_upgrade(env, version, cursor): """Add 'create' actions to ticket-workflow (ticket #2045). """ save = False all_actions = get_workflow_config(env.config) all_states = list( set([ state for action in all_actions.itervalues() for state in action['oldstates'] ] + [action['newstate'] for action in all_actions.itervalues()])) for action, attributes in new_actions.items(): if action == 'create_and_assign' and 'assigned' not in all_states: continue if action not in env.config['ticket-workflow']: for attr, value in attributes.items(): key = action + ('.' + attr if attr else '') env.config.set('ticket-workflow', key, value) save = True else: env.log.info( "Couldn't add ticket action '%s' because it " "already exists.", action) if save: backup_config_file(env, '.db33.bak') env.config.save()
def do_upgrade(env, version, cursor): """Automatically append ReadonlyWikiPolicy if permission_policies is the default value. Otherwise, echo a message about the need to manually add ReadonlyWikiPolicy to the list of permission_policies.""" policies = [ p.strip() for p in env.config.getlist('trac', 'permission_policies') ] if policies == _old_default: backup_config_file(env, '.db30.bak') env.config.set('trac', 'permission_policies', ', '.join(_new_default)) env.config.save() env.log.info("Enabled ReadonlyWikiPolicy.") elif 'ReadonlyWikiPolicy' not in policies: # TRANSLATOR: Wrap message to 80 columns env.log.info("ReadonlyWikiPolicy must be manually enabled.") printout( _("""\ Notice: To enable the readonly wiki attribute, trac.ini must be manually edited to add ReadonlyWikiPolicy to the list of permission_policies in the [trac] section. For more details see: http://trac.edgewall.org/wiki/ReadonlyWikiPolicy """)) else: env.log.info("ReadonlyWikiPolicy already enabled.")
def do_upgrade(env, version, cursor): """Add notification-subscriber section. """ if 'notification-subscriber' in env.config: env.log.info("Couldn't add notification-subscriber section because " "it already exists.") return env.config.set('notification-subscriber', 'always_notify_cc', 'CarbonCopySubscriber') if env.config.getbool('notification', 'always_notify_owner', False): env.config.set('notification-subscriber', 'always_notify_owner', 'TicketOwnerSubscriber') if env.config.getbool('notification', 'always_notify_reporter', False): env.config.set('notification-subscriber', 'always_notify_reporter', 'TicketReporterSubscriber') if env.config.getbool('notification', 'always_notify_updater', True): env.config.set('notification-subscriber', 'always_notify_updater', 'TicketUpdaterSubscriber') env.config.set('notification-subscriber', 'always_notify_previous_updater', 'TicketPreviousUpdatersSubscriber') env.config.remove('notification', 'always_notify_owner') env.config.remove('notification', 'always_notify_reporter') env.config.remove('notification', 'always_notify_updater') backup_config_file(env, '.db40.bak') env.config.save()
def do_upgrade(env, version, cursor): """Replace list of repositories in [trac] repository_sync_per_request with boolean values [repositories] <repos>.sync_per_request. """ repos_sync_per_request = \ env.config.getlist('trac', 'repository_sync_per_request') if not repos_sync_per_request: return backup_config_file(env, '.db32.bak') rm = RepositoryManager(env) db_provider = env[DbRepositoryProvider] trac_ini_repo_names = [] for name, _ in rm.get_repositories(): trac_ini_repo_names.append(name) for repos in rm.get_all_repositories().values(): sync_per_request = (repos['name'] or '(default)') \ in repos_sync_per_request if sync_per_request: if repos['name'] in trac_ini_repo_names: env.config.set('repositories', repos['name'] + '.sync_per_request', 'true') else: changes = {'sync_per_request': sync_per_request} db_provider.modify_repository(repos['name'], changes) env.log.info( "Removed [trac] repository_sync_per_request option and " "enabled sync_per_request for the following " "repositories: %s", ', '.join(repos_sync_per_request)) env.config.remove('trac', 'repository_sync_per_request') env.config.save()
def do_upgrade(env, version, cursor): """Add notification-subscriber section. """ if 'notification-subscriber' in env.config: env.log.info("Couldn't add notification-subscriber section because " "it already exists.") return env.config.set('notification-subscriber', 'always_notify_cc', 'CarbonCopySubscriber') if env.config.getbool('notification', 'always_notify_owner'): env.config.set('notification-subscriber', 'always_notify_owner', 'TicketOwnerSubscriber') if env.config.getbool('notification', 'always_notify_reporter'): env.config.set('notification-subscriber', 'always_notify_reporter', 'TicketReporterSubscriber') if env.config.getbool('notification', 'always_notify_updater'): env.config.set('notification-subscriber', 'always_notify_updater', 'TicketUpdaterSubscriber') env.config.set('notification-subscriber', 'always_notify_previous_updater', 'TicketPreviousUpdatersSubscriber') env.config.remove('notification', 'always_notify_owner') env.config.remove('notification', 'always_notify_reporter') env.config.remove('notification', 'always_notify_updater') backup_config_file(env, '.db40.bak') env.config.save()
def do_upgrade(env, version, cursor): """Change [notification] ticket_subject_template and [notification] batch_subject_template to use syntax compatible with Jinja2. """ config = env.config section = 'notification' re_template_var = re.compile(r'\$([\w.]+)') def update_template(name): old_value = config.get(section, name) if old_value: if re_template_var.match(old_value): new_value = re_template_var.sub(r'${\1}', old_value) env.log.info("Replaced value of [%s] %s: %s -> %s", section, name, old_value, new_value) config.set(section, name, new_value) return True return False updated = update_template('ticket_subject_template') updated |= update_template('batch_subject_template') if updated: backup_config_file(env, '.db45.bak') config.save()
def do_upgrade(env, version, cursor): """Change [authz_policy] authz_file to be relative to the `conf` directory. """ authz_file = env.config.get('authz_policy', 'authz_file') if authz_file and not os.path.isabs(authz_file): parts = os.path.split(authz_file) if len(parts) == 2 and parts[0] == 'conf': env.config.set('authz_policy', 'authz_file', parts[1]) backup_config_file(env, '.db36.bak') env.config.save()
def do_upgrade(env, ver, cursor): """Move options from [trac] section to more appropriately-named sections. """ config = env.config config.set("svn", "authz_file", config.get("trac", "authz_file")) config.set("svn", "authz_module_name", config.get("trac", "authz_module_name")) config.set("versioncontrol", "default_repository_type", config.get("trac", "repository_type", "svn")) config.remove("trac", "authz_file") config.remove("trac", "authz_module_name") config.remove("trac", "repository_type") backup_config_file(env, ".db39.bak") config.save()
def do_upgrade(env, version, cursor): """Replace list of repositories in [trac] repository_sync_per_request with boolean values [repositories] <repos>.sync_per_request and a list of repositories in [gitweb-repositories] sync_per_request. Move and rename the Gitweb configuration options from the [git] section to the [gitweb-repositories] section. """ backup_config_file(env, '.db32.bak') repos_sync_per_request = \ env.config.getlist('trac', 'repository_sync_per_request', '(default)') for suffix in ('base', 'list', 'url'): option_name = 'projects_' + suffix env.config.set('gitweb-repositories', option_name, env.config.get('git', option_name)) env.config.remove('git', option_name) env.log.info("Moved [git] %s -> [gitweb-repositories] %s", option_name, option_name) rm = RepositoryManager(env) if repos_sync_per_request: for name, _ in rm.get_repositories(): sync_per_request = (name or '(default)') in repos_sync_per_request if sync_per_request: env.config.set('repositories', name + '.sync_per_request', 'true') env.log.info("Enabled sync_per_request for %s", name) gwrp = GitwebProjectsRepositoryProvider(env) gitweb_repo_names = [name for name, _ in gwrp.get_repositories()] sync_per_request = \ ', '.join(set(gitweb_repo_names) & set(repos_sync_per_request)) env.config.set('gitweb-repositories', 'sync_per_request', sync_per_request) env.log.info("Enabled sync_per_request for %s", sync_per_request) db_provider = DbRepositoryProvider(env) for name, _ in db_provider.get_repositories(): sync_per_request = (name or '(default)') in repos_sync_per_request changes = {'sync_per_request': sync_per_request} db_provider.modify_repository(name, changes) if sync_per_request: env.log.info("Enabled sync_per_request for %s", name) env.config.remove('trac', 'repository_sync_per_request') env.log.info("Removed [trac] repository_sync_per_request option") env.config.save() rm.reload_repositories()
def do_upgrade(env, ver, cursor): """Move options from [trac] section to more appropriately-named sections. """ config = env.config config.set('svn', 'authz_file', config.get('trac', 'authz_file')) config.set('svn', 'authz_module_name', config.get('trac', 'authz_module_name')) config.set('versioncontrol', 'default_repository_type', config.get('trac', 'repository_type')) config.remove('trac', 'authz_file') config.remove('trac', 'authz_module_name') config.remove('trac', 'repository_type') backup_config_file(env, '.db39.bak') config.save()
def do_upgrade(env, version, cursor): """Move [trac] mainnav and [trac] metanav to .order attributes of the [mainnav] and [metanav] sections. """ config = env.config def move_nav_order_options(section, default): default = config.getlist('trac', section) or default for i, name in enumerate(default, 1): config.set(section, name + '.order', float(i)) config.remove('trac', section) move_nav_order_options('mainnav', default_mainnav_order) move_nav_order_options('metanav', default_metanav_order) backup_config_file(env, '.db41.bak') config.save()
def do_upgrade(env, version, cursor): """Move definition of default repository from [trac] repository_dir to [repositories] section. """ repository_dir = env.config.get('trac', 'repository_dir') if repository_dir: backup_config_file(env, '.db31.bak') if not env.config.get('repositories', '.dir') and \ not env.config.get('repositories', '.alias'): env.config.set('repositories', '.dir', repository_dir) env.log.info("Moved configuration options for default repository " "to [repositories] section of trac.ini") else: env.log.info("[trac] repository_dir = %s discarded from " "configuration because [repositories] " "'.dir' or '.alias' already exists.", repository_dir) env.config.remove('trac', 'repository_dir') env.config.save()
def do_upgrade(env, version, cursor): """Move [trac] mainnav and [trac] metanav to .order attributes of the [mainnav] and [metanav] sections. """ config = env.config def move_nav_order_options(section, default): default = config.getlist("trac", section) or default for i, name in enumerate(default, 1): config.set(section, name + ".order", float(i)) config.remove("trac", section) move_nav_order_options("mainnav", default_mainnav_order) move_nav_order_options("metanav", default_metanav_order) backup_config_file(env, ".db41.bak") config.save()
def do_upgrade(env, version, cursor): """Automatically enable tracopt.versioncontrol.svn.* components, unless they were explicitly disabled or the new svn components are already enabled. """ enable = [ c for c in _svn_components if env.is_component_enabled(_old_path + c) and not env.is_component_enabled(_new_path + c) ] if not enable: return backup_config_file(env, '.tracopt-svn.bak') for c in enable: env.config.set('components', _new_path + c, 'enabled') env.config.save() env.log.info("Enabled components %r to cope with the move from %s to %s.", enable, _old_path.replace('.', '/'), _new_path.replace('.', '/'))
def do_upgrade(env, version, cursor): """Automatically append DefaultWikiPolicy and DefaultTicketPolicy if permission_policies is the default value. Otherwise, echo a message about the need to manually add DefaultWikiPolicy and DefaultTicketPolicy to the list of permission_policies. """ policies = env.config.getlist('trac', 'permission_policies') if policies == _old_default: backup_config_file(env, '.db43.bak') env.config.set('trac', 'permission_policies', ', '.join(_new_default)) env.config.save() env.log.info("Enabled DefaultWikiPolicy and DefaultTicketPolicy.") else: print_upgrade_msg = False if 'DefaultWikiPolicy' not in policies: env.log.info("DefaultWikiPolicy must be manually enabled.") # TRANSLATOR: Wrap message to 80 columns printout( _("""\ Notice: To enable the default permission policy for the *wiki* system, trac.ini must be manually edited to add DefaultWikiPolicy to the list of permission_policies in the [trac] section. """)) print_upgrade_msg = True else: env.log.info("DefaultWikiPolicy already enabled.") if 'DefaultTicketPolicy' not in policies: env.log.info("DefaultTicketPolicy must be manually enabled.") # TRANSLATOR: Wrap message to 80 columns printout( _("""\ Notice: To enable the default permission policy for the *ticket* system, trac.ini must be manually edited to add DefaultTicketPolicy to the list of permission_policies in the [trac] section. """)) print_upgrade_msg = True else: env.log.info("DefaultTicketPolicy already enabled.") if print_upgrade_msg: printout( _("""\ For more details see: https://trac.edgewall.org/wiki/TracUpgrade """))
def do_upgrade(env, version, cursor): """Move definition of default repository from [trac] repository_dir to [repositories] section. """ backup_config_file(env, '.db31.bak') repository_dir = env.config.get('trac', 'repository_dir') if repository_dir: if not env.config.get('repositories', '.dir') and \ not env.config.get('repositories', '.alias'): env.config.set('repositories', '.dir', repository_dir) env.log.info("Moved configuration options for default repository " "to [repositories] section of trac.ini") else: env.log.info( "[trac] repository_dir = %s discarded from " "configuration because [repositories] " "'.dir' or '.alias' already exists.", repository_dir) env.config.remove('trac', 'repository_dir') env.config.save()
def do_upgrade(env, version, cursor): """Add 'create' actions to ticket-workflow (ticket #2045). """ save = False all_actions = get_workflow_config(env.config) all_states = list(set( [state for action in all_actions.itervalues() for state in action['oldstates']] + [action['newstate'] for action in all_actions.itervalues()])) for action, attributes in new_actions.items(): if action == 'create_and_assign' and 'assigned' not in all_states: continue if action not in env.config['ticket-workflow']: for attr, value in attributes.items(): key = action + ('.' + attr if attr else '') env.config.set('ticket-workflow', key, value) save = True else: env.log.info("Couldn't add ticket action '%s' because it " "already exists.", action) if save: backup_config_file(env, '.db33.bak') env.config.save()
def do_upgrade(env, version, cursor): """Automatically append ReadonlyWikiPolicy if permission_policies is the default value. Otherwise, echo a message about the need to manually add ReadonlyWikiPolicy to the list of permission_policies.""" policies = [p.strip() for p in env.config.getlist('trac', 'permission_policies')] if policies == _old_default: backup_config_file(env, '.db30.bak') env.config.set('trac', 'permission_policies', ', '.join(_new_default)) env.config.save() env.log.info("Enabled ReadonlyWikiPolicy.") elif 'ReadonlyWikiPolicy' not in policies: env.log.info("ReadonlyWikiPolicy must be manually enabled.") # TRANSLATOR: Wrap message to 80 columns printout(_("""\ Notice: To enable the readonly wiki attribute, trac.ini must be manually edited to add ReadonlyWikiPolicy to the list of permission_policies in the [trac] section. For more details see: http://trac.edgewall.org/wiki/ReadonlyWikiPolicy """)) else: env.log.info("ReadonlyWikiPolicy already enabled.")