##// END OF EJS Templates
Allow RhodeCode maintainers to specify a custom bug tracker....
Allow RhodeCode maintainers to specify a custom bug tracker. This allows people who maintain large RhodeCode installations to setup their own bug tracker and respond to requests against their specific installation. The maintainer is then free to forward problems with RhodeCode to the canonical issue tracker on bitbucket. If the config option "bugtracker" is present, its value will be used with the "Report a bug" button. If left blank, this disables the button. If no value is present, then the default is used. This is so that the new config option doesn't break installations of RhodeCode upgrading to a newer version and to allow easier installation for the common use case.

File last commit:

r4006:cdf10b3d default
r4006:cdf10b3d default
Show More
routing.py
705 lines | 34.1 KiB | text/x-python | PythonLexer
"""
Routes configuration
The more specific and detailed routes should be defined first so they
may take precedent over the more generic routes. For more information
refer to the routes manual at http://routes.groovie.org/docs/
"""
from __future__ import with_statement
from routes import Mapper
# prefix for non repository related links needs to be prefixed with `/`
ADMIN_PREFIX = '/_admin'
def make_map(config):
"""Create, configure and return the routes Mapper"""
rmap = Mapper(directory=config['pylons.paths']['controllers'],
always_scan=config['debug'])
rmap.minimization = False
rmap.explicit = False
from rhodecode.lib.utils import is_valid_repo
from rhodecode.lib.utils import is_valid_repos_group
def check_repo(environ, match_dict):
"""
check for valid repository for proper 404 handling
:param environ:
:param match_dict:
"""
from rhodecode.model.db import Repository
repo_name = match_dict.get('repo_name')
if match_dict.get('f_path'):
#fix for multiple initial slashes that causes errors
match_dict['f_path'] = match_dict['f_path'].lstrip('/')
try:
by_id = repo_name.split('_')
if len(by_id) == 2 and by_id[1].isdigit() and by_id[0] == '':
repo_name = Repository.get(by_id[1]).repo_name
match_dict['repo_name'] = repo_name
except Exception:
pass
return is_valid_repo(repo_name, config['base_path'])
def check_group(environ, match_dict):
"""
check for valid repository group for proper 404 handling
:param environ:
:param match_dict:
"""
repos_group_name = match_dict.get('group_name')
return is_valid_repos_group(repos_group_name, config['base_path'])
def check_group_skip_path(environ, match_dict):
"""
check for valid repository group for proper 404 handling, but skips
verification of existing path
:param environ:
:param match_dict:
"""
repos_group_name = match_dict.get('group_name')
return is_valid_repos_group(repos_group_name, config['base_path'],
skip_path_check=True)
def check_user_group(environ, match_dict):
"""
check for valid user group for proper 404 handling
:param environ:
:param match_dict:
"""
return True
def check_int(environ, match_dict):
return match_dict.get('id').isdigit()
# The ErrorController route (handles 404/500 error pages); it should
# likely stay at the top, ensuring it can always be resolved
rmap.connect('/error/{action}', controller='error')
rmap.connect('/error/{action}/{id}', controller='error')
#==========================================================================
# CUSTOM ROUTES HERE
#==========================================================================
#MAIN PAGE
rmap.connect('home', '/', controller='home', action='index')
rmap.connect('repo_switcher', '/repos', controller='home',
action='repo_switcher')
rmap.connect('branch_tag_switcher', '/branches-tags/{repo_name:.*?}',
controller='home', action='branch_tag_switcher')
rmap.connect('rst_help',
"http://docutils.sourceforge.net/docs/user/rst/quickref.html",
_static=True)
rmap.connect('rhodecode_official', "http://rhodecode.org", _static=True)
#ADMIN REPOSITORY REST ROUTES
with rmap.submapper(path_prefix=ADMIN_PREFIX,
controller='admin/repos') as m:
m.connect("repos", "/repos",
action="create", conditions=dict(method=["POST"]))
m.connect("repos", "/repos",
action="index", conditions=dict(method=["GET"]))
m.connect("formatted_repos", "/repos.{format}",
action="index",
conditions=dict(method=["GET"]))
m.connect("new_repo", "/create_repository",
action="create_repository", conditions=dict(method=["GET"]))
m.connect("/repos/{repo_name:.*?}",
action="update", conditions=dict(method=["PUT"],
function=check_repo))
m.connect("/repos/{repo_name:.*?}",
action="delete", conditions=dict(method=["DELETE"],
function=check_repo))
m.connect("formatted_edit_repo", "/repos/{repo_name:.*?}.{format}/edit",
action="edit", conditions=dict(method=["GET"],
function=check_repo))
m.connect("repo", "/repos/{repo_name:.*?}",
action="show", conditions=dict(method=["GET"],
function=check_repo))
m.connect("formatted_repo", "/repos/{repo_name:.*?}.{format}",
action="show", conditions=dict(method=["GET"],
function=check_repo))
#add repo perm member
m.connect('set_repo_perm_member',
"/repos/{repo_name:.*?}/grant_perm",
action="set_repo_perm_member",
conditions=dict(method=["POST"], function=check_repo))
#ajax delete repo perm user
m.connect('delete_repo_perm_member',
"/repos/{repo_name:.*?}/revoke_perm",
action="delete_repo_perm_member",
conditions=dict(method=["DELETE"], function=check_repo))
#settings actions
m.connect('repo_stats', "/repos_stats/{repo_name:.*?}",
action="repo_stats", conditions=dict(method=["DELETE"],
function=check_repo))
m.connect('repo_cache', "/repos_cache/{repo_name:.*?}",
action="repo_cache", conditions=dict(method=["DELETE"],
function=check_repo))
m.connect('repo_public_journal', "/repos_public_journal/{repo_name:.*?}",
action="repo_public_journal", conditions=dict(method=["PUT"],
function=check_repo))
m.connect('repo_pull', "/repo_pull/{repo_name:.*?}",
action="repo_pull", conditions=dict(method=["PUT"],
function=check_repo))
m.connect('repo_as_fork', "/repo_as_fork/{repo_name:.*?}",
action="repo_as_fork", conditions=dict(method=["PUT"],
function=check_repo))
m.connect('repo_locking', "/repo_locking/{repo_name:.*?}",
action="repo_locking", conditions=dict(method=["PUT"],
function=check_repo))
m.connect('toggle_locking', "/locking_toggle/{repo_name:.*?}",
action="toggle_locking", conditions=dict(method=["GET"],
function=check_repo))
#repo fields
m.connect('create_repo_fields', "/repo_fields/{repo_name:.*?}/new",
action="create_repo_field", conditions=dict(method=["PUT"],
function=check_repo))
m.connect('delete_repo_fields', "/repo_fields/{repo_name:.*?}/{field_id}",
action="delete_repo_field", conditions=dict(method=["DELETE"],
function=check_repo))
with rmap.submapper(path_prefix=ADMIN_PREFIX,
controller='admin/repos_groups') as m:
m.connect("repos_groups", "/repos_groups",
action="create", conditions=dict(method=["POST"]))
m.connect("repos_groups", "/repos_groups",
action="index", conditions=dict(method=["GET"]))
m.connect("formatted_repos_groups", "/repos_groups.{format}",
action="index", conditions=dict(method=["GET"]))
m.connect("new_repos_group", "/repos_groups/new",
action="new", conditions=dict(method=["GET"]))
m.connect("formatted_new_repos_group", "/repos_groups/new.{format}",
action="new", conditions=dict(method=["GET"]))
m.connect("update_repos_group", "/repos_groups/{group_name:.*?}",
action="update", conditions=dict(method=["PUT"],
function=check_group))
#add repo group perm member
m.connect('set_repo_group_perm_member',
"/repos_groups/{group_name:.*?}/grant_perm",
action="set_repo_group_perm_member",
conditions=dict(method=["POST"], function=check_group))
#ajax delete repo group perm
m.connect('delete_repo_group_perm_member',
"/repos_groups/{group_name:.*?}/revoke_perm",
action="delete_repo_group_perm_member",
conditions=dict(method=["DELETE"], function=check_group))
m.connect("delete_repos_group", "/repos_groups/{group_name:.*?}",
action="delete", conditions=dict(method=["DELETE"],
function=check_group_skip_path))
m.connect("edit_repos_group", "/repos_groups/{group_name:.*?}/edit",
action="edit", conditions=dict(method=["GET"],
function=check_group))
m.connect("formatted_edit_repos_group",
"/repos_groups/{group_name:.*?}.{format}/edit",
action="edit", conditions=dict(method=["GET"],
function=check_group))
m.connect("repos_group", "/repos_groups/{group_name:.*?}",
action="show", conditions=dict(method=["GET"],
function=check_group))
m.connect("formatted_repos_group", "/repos_groups/{group_name:.*?}.{format}",
action="show", conditions=dict(method=["GET"],
function=check_group))
#ADMIN USER REST ROUTES
with rmap.submapper(path_prefix=ADMIN_PREFIX,
controller='admin/users') as m:
m.connect("users", "/users",
action="create", conditions=dict(method=["POST"]))
m.connect("users", "/users",
action="index", conditions=dict(method=["GET"]))
m.connect("formatted_users", "/users.{format}",
action="index", conditions=dict(method=["GET"]))
m.connect("new_user", "/users/new",
action="new", conditions=dict(method=["GET"]))
m.connect("formatted_new_user", "/users/new.{format}",
action="new", conditions=dict(method=["GET"]))
m.connect("update_user", "/users/{id}",
action="update", conditions=dict(method=["PUT"]))
m.connect("delete_user", "/users/{id}",
action="delete", conditions=dict(method=["DELETE"]))
m.connect("edit_user", "/users/{id}/edit",
action="edit", conditions=dict(method=["GET"]))
m.connect("formatted_edit_user",
"/users/{id}.{format}/edit",
action="edit", conditions=dict(method=["GET"]))
m.connect("user", "/users/{id}",
action="show", conditions=dict(method=["GET"]))
m.connect("formatted_user", "/users/{id}.{format}",
action="show", conditions=dict(method=["GET"]))
#EXTRAS USER ROUTES
m.connect("user_perm", "/users_perm/{id}",
action="update_perm", conditions=dict(method=["PUT"]))
m.connect("user_emails", "/users_emails/{id}",
action="add_email", conditions=dict(method=["PUT"]))
m.connect("user_emails_delete", "/users_emails/{id}",
action="delete_email", conditions=dict(method=["DELETE"]))
m.connect("user_ips", "/users_ips/{id}",
action="add_ip", conditions=dict(method=["PUT"]))
m.connect("user_ips_delete", "/users_ips/{id}",
action="delete_ip", conditions=dict(method=["DELETE"]))
#ADMIN USER GROUPS REST ROUTES
with rmap.submapper(path_prefix=ADMIN_PREFIX,
controller='admin/users_groups') as m:
m.connect("users_groups", "/users_groups",
action="create", conditions=dict(method=["POST"]))
m.connect("users_groups", "/users_groups",
action="index", conditions=dict(method=["GET"]))
m.connect("formatted_users_groups", "/users_groups.{format}",
action="index", conditions=dict(method=["GET"]))
m.connect("new_users_group", "/users_groups/new",
action="new", conditions=dict(method=["GET"]))
m.connect("formatted_new_users_group", "/users_groups/new.{format}",
action="new", conditions=dict(method=["GET"]))
m.connect("update_users_group", "/users_groups/{id}",
action="update", conditions=dict(method=["PUT"]))
m.connect("delete_users_group", "/users_groups/{id}",
action="delete", conditions=dict(method=["DELETE"]))
m.connect("edit_users_group", "/users_groups/{id}/edit",
action="edit", conditions=dict(method=["GET"]),
function=check_user_group)
m.connect("formatted_edit_users_group",
"/users_groups/{id}.{format}/edit",
action="edit", conditions=dict(method=["GET"]))
m.connect("users_group", "/users_groups/{id}",
action="show", conditions=dict(method=["GET"]))
m.connect("formatted_users_group", "/users_groups/{id}.{format}",
action="show", conditions=dict(method=["GET"]))
#EXTRAS USER ROUTES
# update
m.connect("users_group_perm", "/users_groups/{id}/update_global_perm",
action="update_perm", conditions=dict(method=["PUT"]))
#add user group perm member
m.connect('set_user_group_perm_member', "/users_groups/{id}/grant_perm",
action="set_user_group_perm_member",
conditions=dict(method=["POST"]))
#ajax delete user group perm
m.connect('delete_user_group_perm_member', "/users_groups/{id}/revoke_perm",
action="delete_user_group_perm_member",
conditions=dict(method=["DELETE"]))
#ADMIN GROUP REST ROUTES
rmap.resource('group', 'groups',
controller='admin/groups', path_prefix=ADMIN_PREFIX)
#ADMIN PERMISSIONS REST ROUTES
rmap.resource('permission', 'permissions',
controller='admin/permissions', path_prefix=ADMIN_PREFIX)
#ADMIN DEFAULTS REST ROUTES
rmap.resource('default', 'defaults',
controller='admin/defaults', path_prefix=ADMIN_PREFIX)
##ADMIN LDAP SETTINGS
rmap.connect('ldap_settings', '%s/ldap' % ADMIN_PREFIX,
controller='admin/ldap_settings', action='ldap_settings',
conditions=dict(method=["POST"]))
rmap.connect('ldap_home', '%s/ldap' % ADMIN_PREFIX,
controller='admin/ldap_settings')
#ADMIN SETTINGS REST ROUTES
with rmap.submapper(path_prefix=ADMIN_PREFIX,
controller='admin/settings') as m:
m.connect("admin_settings", "/settings",
action="create", conditions=dict(method=["POST"]))
m.connect("admin_settings", "/settings",
action="index", conditions=dict(method=["GET"]))
m.connect("formatted_admin_settings", "/settings.{format}",
action="index", conditions=dict(method=["GET"]))
m.connect("admin_new_setting", "/settings/new",
action="new", conditions=dict(method=["GET"]))
m.connect("formatted_admin_new_setting", "/settings/new.{format}",
action="new", conditions=dict(method=["GET"]))
m.connect("/settings/{setting_id}",
action="update", conditions=dict(method=["PUT"]))
m.connect("/settings/{setting_id}",
action="delete", conditions=dict(method=["DELETE"]))
m.connect("admin_edit_setting", "/settings/{setting_id}/edit",
action="edit", conditions=dict(method=["GET"]))
m.connect("formatted_admin_edit_setting",
"/settings/{setting_id}.{format}/edit",
action="edit", conditions=dict(method=["GET"]))
m.connect("admin_setting", "/settings/{setting_id}",
action="show", conditions=dict(method=["GET"]))
m.connect("formatted_admin_setting", "/settings/{setting_id}.{format}",
action="show", conditions=dict(method=["GET"]))
m.connect("admin_settings_my_account", "/my_account",
action="my_account", conditions=dict(method=["GET"]))
m.connect("admin_settings_my_account_update", "/my_account_update",
action="my_account_update", conditions=dict(method=["PUT"]))
m.connect("admin_settings_my_repos", "/my_account/repos",
action="my_account_my_repos", conditions=dict(method=["GET"]))
m.connect("admin_settings_my_pullrequests", "/my_account/pull_requests",
action="my_account_my_pullrequests", conditions=dict(method=["GET"]))
#NOTIFICATION REST ROUTES
with rmap.submapper(path_prefix=ADMIN_PREFIX,
controller='admin/notifications') as m:
m.connect("notifications", "/notifications",
action="create", conditions=dict(method=["POST"]))
m.connect("notifications", "/notifications",
action="index", conditions=dict(method=["GET"]))
m.connect("notifications_mark_all_read", "/notifications/mark_all_read",
action="mark_all_read", conditions=dict(method=["GET"]))
m.connect("formatted_notifications", "/notifications.{format}",
action="index", conditions=dict(method=["GET"]))
m.connect("new_notification", "/notifications/new",
action="new", conditions=dict(method=["GET"]))
m.connect("formatted_new_notification", "/notifications/new.{format}",
action="new", conditions=dict(method=["GET"]))
m.connect("/notifications/{notification_id}",
action="update", conditions=dict(method=["PUT"]))
m.connect("/notifications/{notification_id}",
action="delete", conditions=dict(method=["DELETE"]))
m.connect("edit_notification", "/notifications/{notification_id}/edit",
action="edit", conditions=dict(method=["GET"]))
m.connect("formatted_edit_notification",
"/notifications/{notification_id}.{format}/edit",
action="edit", conditions=dict(method=["GET"]))
m.connect("notification", "/notifications/{notification_id}",
action="show", conditions=dict(method=["GET"]))
m.connect("formatted_notification", "/notifications/{notification_id}.{format}",
action="show", conditions=dict(method=["GET"]))
#ADMIN GIST
with rmap.submapper(path_prefix=ADMIN_PREFIX,
controller='admin/gists') as m:
m.connect("gists", "/gists",
action="create", conditions=dict(method=["POST"]))
m.connect("gists", "/gists",
action="index", conditions=dict(method=["GET"]))
m.connect("new_gist", "/gists/new",
action="new", conditions=dict(method=["GET"]))
m.connect("formatted_new_gist", "/gists/new.{format}",
action="new", conditions=dict(method=["GET"]))
m.connect("formatted_gists", "/gists.{format}",
action="index", conditions=dict(method=["GET"]))
m.connect("/gists/{gist_id}",
action="update", conditions=dict(method=["PUT"]))
m.connect("/gists/{gist_id}",
action="delete", conditions=dict(method=["DELETE"]))
m.connect("edit_gist", "/gists/{gist_id}/edit",
action="edit", conditions=dict(method=["GET"]))
m.connect("formatted_edit_gist",
"/gists/{gist_id}/{format}/edit",
action="edit", conditions=dict(method=["GET"]))
m.connect("gist", "/gists/{gist_id}",
action="show", conditions=dict(method=["GET"]))
m.connect("formatted_gist", "/gists/{gist_id}/{format}",
action="show", conditions=dict(method=["GET"]))
m.connect("formatted_gist_file", "/gists/{gist_id}/{format}/{revision}/{f_path:.*}",
action="show", conditions=dict(method=["GET"]))
#ADMIN MAIN PAGES
with rmap.submapper(path_prefix=ADMIN_PREFIX,
controller='admin/admin') as m:
m.connect('admin_home', '', action='index')
m.connect('admin_add_repo', '/add_repo/{new_repo:[a-z0-9\. _-]*}',
action='add_repo')
#==========================================================================
# API V2
#==========================================================================
with rmap.submapper(path_prefix=ADMIN_PREFIX,
controller='api/api') as m:
m.connect('api', '/api')
#USER JOURNAL
rmap.connect('journal', '%s/journal' % ADMIN_PREFIX,
controller='journal', action='index')
rmap.connect('journal_rss', '%s/journal/rss' % ADMIN_PREFIX,
controller='journal', action='journal_rss')
rmap.connect('journal_atom', '%s/journal/atom' % ADMIN_PREFIX,
controller='journal', action='journal_atom')
rmap.connect('public_journal', '%s/public_journal' % ADMIN_PREFIX,
controller='journal', action="public_journal")
rmap.connect('public_journal_rss', '%s/public_journal/rss' % ADMIN_PREFIX,
controller='journal', action="public_journal_rss")
rmap.connect('public_journal_rss_old', '%s/public_journal_rss' % ADMIN_PREFIX,
controller='journal', action="public_journal_rss")
rmap.connect('public_journal_atom',
'%s/public_journal/atom' % ADMIN_PREFIX, controller='journal',
action="public_journal_atom")
rmap.connect('public_journal_atom_old',
'%s/public_journal_atom' % ADMIN_PREFIX, controller='journal',
action="public_journal_atom")
rmap.connect('toggle_following', '%s/toggle_following' % ADMIN_PREFIX,
controller='journal', action='toggle_following',
conditions=dict(method=["POST"]))
#SEARCH
rmap.connect('search', '%s/search' % ADMIN_PREFIX, controller='search',)
rmap.connect('search_repo_admin', '%s/search/{repo_name:.*}' % ADMIN_PREFIX,
controller='search',
conditions=dict(function=check_repo))
rmap.connect('search_repo', '/{repo_name:.*?}/search',
controller='search',
conditions=dict(function=check_repo),
)
#LOGIN/LOGOUT/REGISTER/SIGN IN
rmap.connect('login_home', '%s/login' % ADMIN_PREFIX, controller='login')
rmap.connect('logout_home', '%s/logout' % ADMIN_PREFIX, controller='login',
action='logout')
rmap.connect('register', '%s/register' % ADMIN_PREFIX, controller='login',
action='register')
rmap.connect('reset_password', '%s/password_reset' % ADMIN_PREFIX,
controller='login', action='password_reset')
rmap.connect('reset_password_confirmation',
'%s/password_reset_confirmation' % ADMIN_PREFIX,
controller='login', action='password_reset_confirmation')
#FEEDS
rmap.connect('rss_feed_home', '/{repo_name:.*?}/feed/rss',
controller='feed', action='rss',
conditions=dict(function=check_repo))
rmap.connect('atom_feed_home', '/{repo_name:.*?}/feed/atom',
controller='feed', action='atom',
conditions=dict(function=check_repo))
#==========================================================================
# REPOSITORY ROUTES
#==========================================================================
rmap.connect('summary_home', '/{repo_name:.*?}',
controller='summary',
conditions=dict(function=check_repo))
rmap.connect('repo_size', '/{repo_name:.*?}/repo_size',
controller='summary', action='repo_size',
conditions=dict(function=check_repo))
rmap.connect('repos_group_home', '/{group_name:.*}',
controller='admin/repos_groups', action="show_by_name",
conditions=dict(function=check_group))
rmap.connect('changeset_home', '/{repo_name:.*?}/changeset/{revision}',
controller='changeset', revision='tip',
conditions=dict(function=check_repo))
# no longer user, but kept for routes to work
rmap.connect("_edit_repo", "/{repo_name:.*?}/edit",
controller='admin/repos', action="edit",
conditions=dict(method=["GET"], function=check_repo)
)
rmap.connect("edit_repo", "/{repo_name:.*?}/settings",
controller='admin/repos', action="edit",
conditions=dict(method=["GET"], function=check_repo)
)
#still working url for backward compat.
rmap.connect('raw_changeset_home_depraced',
'/{repo_name:.*?}/raw-changeset/{revision}',
controller='changeset', action='changeset_raw',
revision='tip', conditions=dict(function=check_repo))
## new URLs
rmap.connect('changeset_raw_home',
'/{repo_name:.*?}/changeset-diff/{revision}',
controller='changeset', action='changeset_raw',
revision='tip', conditions=dict(function=check_repo))
rmap.connect('changeset_patch_home',
'/{repo_name:.*?}/changeset-patch/{revision}',
controller='changeset', action='changeset_patch',
revision='tip', conditions=dict(function=check_repo))
rmap.connect('changeset_download_home',
'/{repo_name:.*?}/changeset-download/{revision}',
controller='changeset', action='changeset_download',
revision='tip', conditions=dict(function=check_repo))
rmap.connect('changeset_comment',
'/{repo_name:.*?}/changeset/{revision}/comment',
controller='changeset', revision='tip', action='comment',
conditions=dict(function=check_repo))
rmap.connect('changeset_comment_preview',
'/{repo_name:.*?}/changeset/comment/preview',
controller='changeset', action='preview_comment',
conditions=dict(function=check_repo, method=["POST"]))
rmap.connect('changeset_comment_delete',
'/{repo_name:.*?}/changeset/comment/{comment_id}/delete',
controller='changeset', action='delete_comment',
conditions=dict(function=check_repo, method=["DELETE"]))
rmap.connect('changeset_info', '/changeset_info/{repo_name:.*?}/{revision}',
controller='changeset', action='changeset_info')
rmap.connect('compare_url',
'/{repo_name:.*?}/compare/{org_ref_type}@{org_ref:.*?}...{other_ref_type}@{other_ref:.*?}',
controller='compare', action='index',
conditions=dict(function=check_repo),
requirements=dict(
org_ref_type='(branch|book|tag|rev|__other_ref_type__)',
other_ref_type='(branch|book|tag|rev|__org_ref_type__)')
)
rmap.connect('pullrequest_home',
'/{repo_name:.*?}/pull-request/new', controller='pullrequests',
action='index', conditions=dict(function=check_repo,
method=["GET"]))
rmap.connect('pullrequest',
'/{repo_name:.*?}/pull-request/new', controller='pullrequests',
action='create', conditions=dict(function=check_repo,
method=["POST"]))
rmap.connect('pullrequest_show',
'/{repo_name:.*?}/pull-request/{pull_request_id}',
controller='pullrequests',
action='show', conditions=dict(function=check_repo,
method=["GET"]))
rmap.connect('pullrequest_update',
'/{repo_name:.*?}/pull-request/{pull_request_id}',
controller='pullrequests',
action='update', conditions=dict(function=check_repo,
method=["PUT"]))
rmap.connect('pullrequest_delete',
'/{repo_name:.*?}/pull-request/{pull_request_id}',
controller='pullrequests',
action='delete', conditions=dict(function=check_repo,
method=["DELETE"]))
rmap.connect('pullrequest_show_all',
'/{repo_name:.*?}/pull-request',
controller='pullrequests',
action='show_all', conditions=dict(function=check_repo,
method=["GET"]))
rmap.connect('pullrequest_comment',
'/{repo_name:.*?}/pull-request-comment/{pull_request_id}',
controller='pullrequests',
action='comment', conditions=dict(function=check_repo,
method=["POST"]))
rmap.connect('pullrequest_comment_delete',
'/{repo_name:.*?}/pull-request-comment/{comment_id}/delete',
controller='pullrequests', action='delete_comment',
conditions=dict(function=check_repo, method=["DELETE"]))
rmap.connect('summary_home_summary', '/{repo_name:.*?}/summary',
controller='summary', conditions=dict(function=check_repo))
rmap.connect('branches_home', '/{repo_name:.*?}/branches',
controller='branches', conditions=dict(function=check_repo))
rmap.connect('tags_home', '/{repo_name:.*?}/tags',
controller='tags', conditions=dict(function=check_repo))
rmap.connect('bookmarks_home', '/{repo_name:.*?}/bookmarks',
controller='bookmarks', conditions=dict(function=check_repo))
rmap.connect('changelog_home', '/{repo_name:.*?}/changelog',
controller='changelog', conditions=dict(function=check_repo))
rmap.connect('changelog_summary_home', '/{repo_name:.*?}/changelog_summary',
controller='changelog', action='changelog_summary',
conditions=dict(function=check_repo))
rmap.connect('changelog_file_home', '/{repo_name:.*?}/changelog/{revision}/{f_path:.*}',
controller='changelog', f_path=None,
conditions=dict(function=check_repo))
rmap.connect('changelog_details', '/{repo_name:.*?}/changelog_details/{cs}',
controller='changelog', action='changelog_details',
conditions=dict(function=check_repo))
rmap.connect('files_home', '/{repo_name:.*?}/files/{revision}/{f_path:.*}',
controller='files', revision='tip', f_path='',
conditions=dict(function=check_repo))
rmap.connect('files_home_nopath', '/{repo_name:.*?}/files/{revision}',
controller='files', revision='tip', f_path='',
conditions=dict(function=check_repo))
rmap.connect('files_history_home',
'/{repo_name:.*?}/history/{revision}/{f_path:.*}',
controller='files', action='history', revision='tip', f_path='',
conditions=dict(function=check_repo))
rmap.connect('files_diff_home', '/{repo_name:.*?}/diff/{f_path:.*}',
controller='files', action='diff', revision='tip', f_path='',
conditions=dict(function=check_repo))
rmap.connect('files_rawfile_home',
'/{repo_name:.*?}/rawfile/{revision}/{f_path:.*}',
controller='files', action='rawfile', revision='tip',
f_path='', conditions=dict(function=check_repo))
rmap.connect('files_raw_home',
'/{repo_name:.*?}/raw/{revision}/{f_path:.*}',
controller='files', action='raw', revision='tip', f_path='',
conditions=dict(function=check_repo))
rmap.connect('files_annotate_home',
'/{repo_name:.*?}/annotate/{revision}/{f_path:.*}',
controller='files', action='index', revision='tip',
f_path='', annotate=True, conditions=dict(function=check_repo))
rmap.connect('files_edit_home',
'/{repo_name:.*?}/edit/{revision}/{f_path:.*}',
controller='files', action='edit', revision='tip',
f_path='', conditions=dict(function=check_repo))
rmap.connect('files_add_home',
'/{repo_name:.*?}/add/{revision}/{f_path:.*}',
controller='files', action='add', revision='tip',
f_path='', conditions=dict(function=check_repo))
rmap.connect('files_archive_home', '/{repo_name:.*?}/archive/{fname}',
controller='files', action='archivefile',
conditions=dict(function=check_repo))
rmap.connect('files_nodelist_home',
'/{repo_name:.*?}/nodelist/{revision}/{f_path:.*}',
controller='files', action='nodelist',
conditions=dict(function=check_repo))
rmap.connect('repo_fork_create_home', '/{repo_name:.*?}/fork',
controller='forks', action='fork_create',
conditions=dict(function=check_repo, method=["POST"]))
rmap.connect('repo_fork_home', '/{repo_name:.*?}/fork',
controller='forks', action='fork',
conditions=dict(function=check_repo))
rmap.connect('repo_forks_home', '/{repo_name:.*?}/forks',
controller='forks', action='forks',
conditions=dict(function=check_repo))
rmap.connect('repo_followers_home', '/{repo_name:.*?}/followers',
controller='followers', action='followers',
conditions=dict(function=check_repo))
return rmap