diff --git a/rhodecode/apps/repository/__init__.py b/rhodecode/apps/repository/__init__.py
index eda0176b..104b56d7 100644
--- a/rhodecode/apps/repository/__init__.py
+++ b/rhodecode/apps/repository/__init__.py
@@ -31,6 +31,11 @@ def includeme(config):
name='edit_repo_caches',
pattern='/{repo_name:.*?[^/]}/settings/caches', repo_route=True)
+ # Repo Review Rules
+ config.add_route(
+ name='repo_reviewers',
+ pattern='/{repo_name:.*?[^/]}/settings/review/rules', repo_route=True)
+
# Maintenance
config.add_route(
name='repo_maintenance',
diff --git a/rhodecode/apps/repository/views/repo_review_rules.py b/rhodecode/apps/repository/views/repo_review_rules.py
new file mode 100644
index 00000000..e85e7078
--- /dev/null
+++ b/rhodecode/apps/repository/views/repo_review_rules.py
@@ -0,0 +1,51 @@
+# -*- 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 .
+#
+# 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/
+
+import logging
+
+from pyramid.view import view_config
+
+from rhodecode.apps._base import RepoAppView
+from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator
+
+log = logging.getLogger(__name__)
+
+
+class RepoReviewRulesView(RepoAppView):
+ def load_default_context(self):
+ c = self._get_local_tmpl_context()
+
+ # TODO(marcink): remove repo_info and use c.rhodecode_db_repo instead
+ c.repo_info = self.db_repo
+
+ self._register_global_c(c)
+ return c
+
+ @LoginRequired()
+ @HasRepoPermissionAnyDecorator('repository.admin')
+ @view_config(
+ route_name='repo_reviewers', request_method='GET',
+ renderer='rhodecode:templates/admin/repos/repo_edit.mako')
+ def repo_review_rules(self):
+ c = self.load_default_context()
+ c.active = 'reviewers'
+
+ return self._get_template_context(c)
+
diff --git a/rhodecode/public/images/ee_features/default_reviewers.png b/rhodecode/public/images/ee_features/default_reviewers.png
new file mode 100644
index 00000000..f80db8ac
Binary files /dev/null and b/rhodecode/public/images/ee_features/default_reviewers.png differ
diff --git a/rhodecode/public/js/rhodecode/routes.js b/rhodecode/public/js/rhodecode/routes.js
index f9b37348..21dcd24d 100644
--- a/rhodecode/public/js/rhodecode/routes.js
+++ b/rhodecode/public/js/rhodecode/routes.js
@@ -99,6 +99,7 @@ function registerRCRoutes() {
pyroutes.register('goto_switcher_data', '/_goto_data', []);
pyroutes.register('edit_repo', '/%(repo_name)s/settings', ['repo_name']);
pyroutes.register('edit_repo_caches', '/%(repo_name)s/settings/caches', ['repo_name']);
+ pyroutes.register('repo_reviewers', '/%(repo_name)s/settings/review/rules', ['repo_name']);
pyroutes.register('repo_maintenance', '/%(repo_name)s/maintenance', ['repo_name']);
pyroutes.register('repo_maintenance_execute', '/%(repo_name)s/maintenance/execute', ['repo_name']);
pyroutes.register('strip', '/%(repo_name)s/strip', ['repo_name']);
diff --git a/rhodecode/templates/admin/repos/repo_edit.mako b/rhodecode/templates/admin/repos/repo_edit.mako
index 5b41ed65..9b35235c 100644
--- a/rhodecode/templates/admin/repos/repo_edit.mako
+++ b/rhodecode/templates/admin/repos/repo_edit.mako
@@ -36,7 +36,6 @@