Exemple #1
0
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()
Exemple #2
0
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.")
Exemple #3
0
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()
Exemple #4
0
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()
Exemple #5
0
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()
Exemple #6
0
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()
Exemple #7
0
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()
Exemple #8
0
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()
Exemple #9
0
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()
Exemple #10
0
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()
Exemple #11
0
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()
Exemple #12
0
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()
Exemple #13
0
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()
Exemple #14
0
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('.', '/'))
Exemple #15
0
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
"""))
Exemple #16
0
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()
Exemple #17
0
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()
Exemple #18
0
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.")