##// END OF EJS Templates
goto-switcher: optimized performance and query capabilities....
goto-switcher: optimized performance and query capabilities. - Previous implementation had on significant bug. The use of LIMIT 20 was limiting results BEFORE auth checks. In case of large ammount of similarly named repositories user didn't had access too, the result goto search was empty. This was becuase first 20 items fetched didn't pass permission checks and final auth list was empty. To fix this we now use proper filtering for auth using SQL. It means we first check user allowed repositories, and add this as a filter so end result from database is already to only the accessible repositories.

File last commit:

r2014:b776c5e0 default
r2038:2bdf9d4d default
Show More
__init__.py
447 lines | 15.8 KiB | text/x-python | PythonLexer
repositories: enabled support for maintenance commands....
r1555 # -*- coding: utf-8 -*-
# Copyright (C) 2016-2017 RhodeCode GmbH
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License, version 3
# (only), as published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# This program is dual-licensed. If you wish to learn more about the
# RhodeCode Enterprise Edition, including its added features, Support services,
# and proprietary license terms, please see https://rhodecode.com/licenses/
repo-summary: re-implemented summary view as pyramid....
r1785 from rhodecode.apps._base import add_route_with_slash
repositories: enabled support for maintenance commands....
r1555
def includeme(config):
repositories: ported repo_creating checks to pyramid....
r1985 # repo creating checks, special cases that aren't repo routes
config.add_route(
name='repo_creating',
pattern='/{repo_name:.*?[^/]}/repo_creating')
config.add_route(
name='repo_creating_check',
pattern='/{repo_name:.*?[^/]}/repo_creating_check')
repo-settings: moved advanced setion into pyramid views....
r1751 # Summary
repo-summary: re-implemented summary view as pyramid....
r1785 # NOTE(marcink): one additional route is defined in very bottom, catch
# all pattern
home: moved home and repo group views into pyramid....
r1774 config.add_route(
repo-settings: moved advanced setion into pyramid views....
r1751 name='repo_summary_explicit',
pattern='/{repo_name:.*?[^/]}/summary', repo_route=True)
repo-summary: re-implemented summary view as pyramid....
r1785 config.add_route(
name='repo_summary_commits',
pattern='/{repo_name:.*?[^/]}/summary-commits', repo_route=True)
compare: migrated code from pylons to pyramid views.
r1957 # Commits
events: expose permalink urls for different set of object....
r1788 config.add_route(
name='repo_commit',
pattern='/{repo_name:.*?[^/]}/changeset/{commit_id}', repo_route=True)
repo-commits: ported changeset code into pyramid views....
r1951 config.add_route(
name='repo_commit_children',
pattern='/{repo_name:.*?[^/]}/changeset_children/{commit_id}', repo_route=True)
config.add_route(
name='repo_commit_parents',
pattern='/{repo_name:.*?[^/]}/changeset_parents/{commit_id}', repo_route=True)
config.add_route(
name='repo_commit_raw',
pattern='/{repo_name:.*?[^/]}/changeset-diff/{commit_id}', repo_route=True)
config.add_route(
name='repo_commit_patch',
pattern='/{repo_name:.*?[^/]}/changeset-patch/{commit_id}', repo_route=True)
config.add_route(
name='repo_commit_download',
pattern='/{repo_name:.*?[^/]}/changeset-download/{commit_id}', repo_route=True)
config.add_route(
name='repo_commit_data',
pattern='/{repo_name:.*?[^/]}/changeset-data/{commit_id}', repo_route=True)
config.add_route(
name='repo_commit_comment_create',
pattern='/{repo_name:.*?[^/]}/changeset/{commit_id}/comment/create', repo_route=True)
config.add_route(
name='repo_commit_comment_preview',
pattern='/{repo_name:.*?[^/]}/changeset/{commit_id}/comment/preview', repo_route=True)
config.add_route(
name='repo_commit_comment_delete',
pattern='/{repo_name:.*?[^/]}/changeset/{commit_id}/comment/{comment_id}/delete', repo_route=True)
compare: migrated code from pylons to pyramid views.
r1957 # still working url for backward compat.
config.add_route(
name='repo_commit_raw_deprecated',
pattern='/{repo_name:.*?[^/]}/raw-changeset/{commit_id}', repo_route=True)
# Files
files: ported repository files controllers to pyramid views.
r1927 config.add_route(
name='repo_archivefile',
pattern='/{repo_name:.*?[^/]}/archive/{fname}', repo_route=True)
config.add_route(
name='repo_files_diff',
pattern='/{repo_name:.*?[^/]}/diff/{f_path:.*}', repo_route=True)
config.add_route( # legacy route to make old links work
name='repo_files_diff_2way_redirect',
pattern='/{repo_name:.*?[^/]}/diff-2way/{f_path:.*}', repo_route=True)
config.add_route(
name='repo_files',
pattern='/{repo_name:.*?[^/]}/files/{commit_id}/{f_path:.*}', repo_route=True)
config.add_route(
name='repo_files:default_path',
pattern='/{repo_name:.*?[^/]}/files/{commit_id}/', repo_route=True)
config.add_route(
name='repo_files:default_commit',
pattern='/{repo_name:.*?[^/]}/files', repo_route=True)
config.add_route(
name='repo_files:rendered',
pattern='/{repo_name:.*?[^/]}/render/{commit_id}/{f_path:.*}', repo_route=True)
config.add_route(
name='repo_files:annotated',
pattern='/{repo_name:.*?[^/]}/annotate/{commit_id}/{f_path:.*}', repo_route=True)
config.add_route(
name='repo_files:annotated_previous',
pattern='/{repo_name:.*?[^/]}/annotate-previous/{commit_id}/{f_path:.*}', repo_route=True)
config.add_route(
name='repo_nodetree_full',
pattern='/{repo_name:.*?[^/]}/nodetree_full/{commit_id}/{f_path:.*}', repo_route=True)
config.add_route(
name='repo_nodetree_full:default_path',
pattern='/{repo_name:.*?[^/]}/nodetree_full/{commit_id}/', repo_route=True)
config.add_route(
name='repo_files_nodelist',
pattern='/{repo_name:.*?[^/]}/nodelist/{commit_id}/{f_path:.*}', repo_route=True)
config.add_route(
name='repo_file_raw',
pattern='/{repo_name:.*?[^/]}/raw/{commit_id}/{f_path:.*}', repo_route=True)
config.add_route(
name='repo_file_download',
pattern='/{repo_name:.*?[^/]}/download/{commit_id}/{f_path:.*}', repo_route=True)
config.add_route( # backward compat to keep old links working
name='repo_file_download:legacy',
pattern='/{repo_name:.*?[^/]}/rawfile/{commit_id}/{f_path:.*}',
repo_route=True)
config.add_route(
name='repo_file_history',
pattern='/{repo_name:.*?[^/]}/history/{commit_id}/{f_path:.*}', repo_route=True)
config.add_route(
name='repo_file_authors',
pattern='/{repo_name:.*?[^/]}/authors/{commit_id}/{f_path:.*}', repo_route=True)
config.add_route(
name='repo_files_remove_file',
pattern='/{repo_name:.*?[^/]}/remove_file/{commit_id}/{f_path:.*}',
repo_route=True)
config.add_route(
name='repo_files_delete_file',
pattern='/{repo_name:.*?[^/]}/delete_file/{commit_id}/{f_path:.*}',
repo_route=True)
config.add_route(
name='repo_files_edit_file',
pattern='/{repo_name:.*?[^/]}/edit_file/{commit_id}/{f_path:.*}',
repo_route=True)
config.add_route(
name='repo_files_update_file',
pattern='/{repo_name:.*?[^/]}/update_file/{commit_id}/{f_path:.*}',
repo_route=True)
config.add_route(
name='repo_files_add_file',
pattern='/{repo_name:.*?[^/]}/add_file/{commit_id}/{f_path:.*}',
repo_route=True)
config.add_route(
name='repo_files_create_file',
pattern='/{repo_name:.*?[^/]}/create_file/{commit_id}/{f_path:.*}',
repo_route=True)
compare: migrated code from pylons to pyramid views.
r1957 # Refs data
repo-summary: re-implemented summary view as pyramid....
r1785 config.add_route(
name='repo_refs_data',
pattern='/{repo_name:.*?[^/]}/refs-data', repo_route=True)
config.add_route(
name='repo_refs_changelog_data',
pattern='/{repo_name:.*?[^/]}/refs-data-changelog', repo_route=True)
config.add_route(
name='repo_stats',
pattern='/{repo_name:.*?[^/]}/repo_stats/{commit_id}', repo_route=True)
repo-settings: moved advanced setion into pyramid views....
r1751
changelog: ported to pyramid views.
r1931 # Changelog
config.add_route(
name='repo_changelog',
pattern='/{repo_name:.*?[^/]}/changelog', repo_route=True)
config.add_route(
name='repo_changelog_file',
pattern='/{repo_name:.*?[^/]}/changelog/{commit_id}/{f_path:.*}', repo_route=True)
config.add_route(
name='repo_changelog_elements',
pattern='/{repo_name:.*?[^/]}/changelog_elements', repo_route=True)
compare: migrated code from pylons to pyramid views.
r1957 # Compare
config.add_route(
name='repo_compare_select',
pattern='/{repo_name:.*?[^/]}/compare', repo_route=True)
config.add_route(
name='repo_compare',
pattern='/{repo_name:.*?[^/]}/compare/{source_ref_type}@{source_ref:.*?}...{target_ref_type}@{target_ref:.*?}', repo_route=True)
tags/branches/bookmarks: moved views into pyramid.
r1746 # Tags
config.add_route(
name='tags_home',
pattern='/{repo_name:.*?[^/]}/tags', repo_route=True)
# Branches
config.add_route(
name='branches_home',
pattern='/{repo_name:.*?[^/]}/branches', repo_route=True)
forks: moved pylons code into pyramid.
r1988 # Bookmarks
tags/branches/bookmarks: moved views into pyramid.
r1746 config.add_route(
name='bookmarks_home',
pattern='/{repo_name:.*?[^/]}/bookmarks', repo_route=True)
forks: moved pylons code into pyramid.
r1988 # Forks
config.add_route(
name='repo_fork_new',
pattern='/{repo_name:.*?[^/]}/fork', repo_route=True,
repo_accepted_types=['hg', 'git'])
config.add_route(
name='repo_fork_create',
pattern='/{repo_name:.*?[^/]}/fork/create', repo_route=True,
repo_accepted_types=['hg', 'git'])
config.add_route(
name='repo_forks_show_all',
pattern='/{repo_name:.*?[^/]}/forks', repo_route=True,
repo_accepted_types=['hg', 'git'])
config.add_route(
name='repo_forks_data',
pattern='/{repo_name:.*?[^/]}/forks/data', repo_route=True,
repo_accepted_types=['hg', 'git'])
audit-logs: introduced new view to replace admin journal....
r1758 # Pull Requests
config.add_route(
name='pullrequest_show',
pull-requests: migrated code from pylons to pyramid
r1974 pattern='/{repo_name:.*?[^/]}/pull-request/{pull_request_id:\d+}',
audit-logs: introduced new view to replace admin journal....
r1758 repo_route=True)
pull-requests: moved the listing of pull requests for repo into pyramid....
r1766 config.add_route(
name='pullrequest_show_all',
pattern='/{repo_name:.*?[^/]}/pull-request',
repo_route=True, repo_accepted_types=['hg', 'git'])
config.add_route(
name='pullrequest_show_all_data',
pattern='/{repo_name:.*?[^/]}/pull-request-data',
repo_route=True, repo_accepted_types=['hg', 'git'])
pull-requests: migrated code from pylons to pyramid
r1974 config.add_route(
name='pullrequest_repo_refs',
pattern='/{repo_name:.*?[^/]}/pull-request/refs/{target_repo_name:.*?[^/]}',
repo_route=True)
config.add_route(
name='pullrequest_repo_destinations',
pattern='/{repo_name:.*?[^/]}/pull-request/repo-destinations',
repo_route=True)
config.add_route(
name='pullrequest_new',
pattern='/{repo_name:.*?[^/]}/pull-request/new',
repo_route=True, repo_accepted_types=['hg', 'git'])
config.add_route(
name='pullrequest_create',
pattern='/{repo_name:.*?[^/]}/pull-request/create',
repo_route=True, repo_accepted_types=['hg', 'git'])
config.add_route(
name='pullrequest_update',
pattern='/{repo_name:.*?[^/]}/pull-request/{pull_request_id:\d+}/update',
repo_route=True)
config.add_route(
name='pullrequest_merge',
pattern='/{repo_name:.*?[^/]}/pull-request/{pull_request_id:\d+}/merge',
repo_route=True)
config.add_route(
name='pullrequest_delete',
pattern='/{repo_name:.*?[^/]}/pull-request/{pull_request_id:\d+}/delete',
repo_route=True)
config.add_route(
name='pullrequest_comment_create',
pattern='/{repo_name:.*?[^/]}/pull-request/{pull_request_id:\d+}/comment',
repo_route=True)
config.add_route(
name='pullrequest_comment_delete',
pattern='/{repo_name:.*?[^/]}/pull-request/{pull_request_id:\d+}/comment/{comment_id}/delete',
repo_route=True, repo_accepted_types=['hg', 'git'])
repo-settings: converted repo settings to pyramid...
r1716 # Settings
config.add_route(
name='edit_repo',
pattern='/{repo_name:.*?[^/]}/settings', repo_route=True)
repo-settings: moved advanced setion into pyramid views....
r1751 # Settings advanced
config.add_route(
name='edit_repo_advanced',
pattern='/{repo_name:.*?[^/]}/settings/advanced', repo_route=True)
config.add_route(
name='edit_repo_advanced_delete',
pattern='/{repo_name:.*?[^/]}/settings/advanced/delete', repo_route=True)
config.add_route(
name='edit_repo_advanced_locking',
pattern='/{repo_name:.*?[^/]}/settings/advanced/locking', repo_route=True)
config.add_route(
name='edit_repo_advanced_journal',
pattern='/{repo_name:.*?[^/]}/settings/advanced/journal', repo_route=True)
config.add_route(
name='edit_repo_advanced_fork',
pattern='/{repo_name:.*?[^/]}/settings/advanced/fork', repo_route=True)
repo-caches: moved view into pyramid.
r1722 # Caches
config.add_route(
name='edit_repo_caches',
pattern='/{repo_name:.*?[^/]}/settings/caches', repo_route=True)
repo-permissions: moved permissions into pyramid....
r1734 # Permissions
config.add_route(
name='edit_repo_perms',
pattern='/{repo_name:.*?[^/]}/settings/permissions', repo_route=True)
repositories: rewrote whole admin section to pyramid....
r2014 # Maintenance
config.add_route(
name='edit_repo_maintenance',
pattern='/{repo_name:.*?[^/]}/settings/maintenance', repo_route=True)
config.add_route(
name='edit_repo_maintenance_execute',
pattern='/{repo_name:.*?[^/]}/settings/maintenance/execute', repo_route=True)
# Fields
config.add_route(
name='edit_repo_fields',
pattern='/{repo_name:.*?[^/]}/settings/fields', repo_route=True)
config.add_route(
name='edit_repo_fields_create',
pattern='/{repo_name:.*?[^/]}/settings/fields/create', repo_route=True)
config.add_route(
name='edit_repo_fields_delete',
pattern='/{repo_name:.*?[^/]}/settings/fields/{field_id}/delete', repo_route=True)
# Locking
config.add_route(
name='repo_edit_toggle_locking',
pattern='/{repo_name:.*?[^/]}/settings/toggle_locking', repo_route=True)
# Remote
config.add_route(
name='edit_repo_remote',
pattern='/{repo_name:.*?[^/]}/settings/remote', repo_route=True)
config.add_route(
name='edit_repo_remote_pull',
pattern='/{repo_name:.*?[^/]}/settings/remote/pull', repo_route=True)
# Statistics
config.add_route(
name='edit_repo_statistics',
pattern='/{repo_name:.*?[^/]}/settings/statistics', repo_route=True)
config.add_route(
name='edit_repo_statistics_reset',
pattern='/{repo_name:.*?[^/]}/settings/statistics/update', repo_route=True)
# Issue trackers
config.add_route(
name='edit_repo_issuetracker',
pattern='/{repo_name:.*?[^/]}/settings/issue_trackers', repo_route=True)
config.add_route(
name='edit_repo_issuetracker_test',
pattern='/{repo_name:.*?[^/]}/settings/issue_trackers/test', repo_route=True)
config.add_route(
name='edit_repo_issuetracker_delete',
pattern='/{repo_name:.*?[^/]}/settings/issue_trackers/delete', repo_route=True)
config.add_route(
name='edit_repo_issuetracker_update',
pattern='/{repo_name:.*?[^/]}/settings/issue_trackers/update', repo_route=True)
# VCS Settings
config.add_route(
name='edit_repo_vcs',
pattern='/{repo_name:.*?[^/]}/settings/vcs', repo_route=True)
config.add_route(
name='edit_repo_vcs_update',
pattern='/{repo_name:.*?[^/]}/settings/vcs/update', repo_route=True)
# svn pattern
config.add_route(
name='edit_repo_vcs_svn_pattern_delete',
pattern='/{repo_name:.*?[^/]}/settings/vcs/svn_pattern/delete', repo_route=True)
# Repo Review Rules (EE feature)
repo-reviewers: expose a default placeholder on CE edition....
r1725 config.add_route(
name='repo_reviewers',
pattern='/{repo_name:.*?[^/]}/settings/review/rules', repo_route=True)
reviewers: moved the new v1 api of default reviewers into pyramid view....
r1767 config.add_route(
name='repo_default_reviewers_data',
pattern='/{repo_name:.*?[^/]}/settings/review/default-reviewers', repo_route=True)
Bartłomiej Wołyńczyk
strip: added functionality to stip choosen commits on repo settings
r1587 # Strip
config.add_route(
repositories: rewrote whole admin section to pyramid....
r2014 name='edit_repo_strip',
repo-settings: unify the URL schemas and always use settings/ for repo based...
r1745 pattern='/{repo_name:.*?[^/]}/settings/strip', repo_route=True)
Bartłomiej Wołyńczyk
strip: added functionality to stip choosen commits on repo settings
r1587
config.add_route(
name='strip_check',
repo-settings: unify the URL schemas and always use settings/ for repo based...
r1745 pattern='/{repo_name:.*?[^/]}/settings/strip_check', repo_route=True)
Bartłomiej Wołyńczyk
strip: added functionality to stip choosen commits on repo settings
r1587
config.add_route(
name='strip_execute',
repo-settings: unify the URL schemas and always use settings/ for repo based...
r1745 pattern='/{repo_name:.*?[^/]}/settings/strip_execute', repo_route=True)
repo-settings: moved advanced setion into pyramid views....
r1751
dan
repo-feed: moved from pylons controller to pyramid views.
r1899 # ATOM/RSS Feed
config.add_route(
name='rss_feed_home',
pattern='/{repo_name:.*?[^/]}/feed/rss', repo_route=True)
config.add_route(
name='atom_feed_home',
pattern='/{repo_name:.*?[^/]}/feed/atom', repo_route=True)
repo-settings: moved advanced setion into pyramid views....
r1751 # NOTE(marcink): needs to be at the end for catch-all
repo-summary: re-implemented summary view as pyramid....
r1785 add_route_with_slash(
config,
name='repo_summary',
pattern='/{repo_name:.*?[^/]}', repo_route=True)
repo-settings: moved advanced setion into pyramid views....
r1751
repositories: enabled support for maintenance commands....
r1555 # Scan module for configuration decorators.
pyramid: use a faster scan method for faster app start.
r1991 config.scan('.views', ignore='.tests')