##// END OF EJS Templates
merged with stable
super-admin -
r4699:59f63a52 merge default
parent child Browse files
Show More
@@ -0,0 +1,40 b''
1 |RCE| 4.25.1 |RNS|
2 ------------------
3
4 Release Date
5 ^^^^^^^^^^^^
6
7 - 2021-04-06
8
9
10 New Features
11 ^^^^^^^^^^^^
12
13
14
15 General
16 ^^^^^^^
17
18
19
20 Security
21 ^^^^^^^^
22
23
24
25 Performance
26 ^^^^^^^^^^^
27
28
29
30 Fixes
31 ^^^^^
32
33 - Artifacts: fixed admin panel bad urls generated for the new artifacts admin view in CE edition.
34
35
36
37 Upgrade notes
38 ^^^^^^^^^^^^^
39
40 - Un-scheduled release addressing problems in 4.25.X releases.
@@ -0,0 +1,53 b''
1 |RCE| 4.25.2 |RNS|
2 ------------------
3
4 Release Date
5 ^^^^^^^^^^^^
6
7 - 2021-04-14
8
9
10 New Features
11 ^^^^^^^^^^^^
12
13
14
15 General
16 ^^^^^^^
17
18 - Comments: refresh on draft sidebar on draft submit.
19 - Vcsserver: log exceptions into the logs
20 - Archiving: make it explicit archiving a repo is irreversible.
21 - My-account: updated bookmarks UX
22 - Pull requests: added awaiting my review filter for users pull-requests.
23 Additionally the awaiting my review now properly filters pull requests that have no review votes on them.
24
25
26 Security
27 ^^^^^^^^
28
29
30
31 Performance
32 ^^^^^^^^^^^
33
34
35
36 Fixes
37 ^^^^^
38
39 - Draft comments: fixed logic in toggle all draft for submit.
40 - Draft comments: when submitting edited drafts also clear the history to prevent DB problems.
41 - Mercurial: fixed a case of lookup branches that had 40 characters in length.
42 - Gists: block id input for public gists.
43 - Pull requests: fixed problems with unicode characters in branches.
44 - Pull requests: small ui fix for grid.
45 - Summary: fixed ui on summary page for non-admins.
46 The setup instructions were broken if user had no write permissions.
47 - Users: make user data loading more resilient to errors.
48
49
50 Upgrade notes
51 ^^^^^^^^^^^^^
52
53 - Scheduled release addressing problems in 4.25.X releases.
@@ -0,0 +1,40 b''
1 # -*- coding: utf-8 -*-
2
3 # Copyright (C) 2016-2020 RhodeCode GmbH
4 #
5 # This program is free software: you can redistribute it and/or modify
6 # it under the terms of the GNU Affero General Public License, version 3
7 # (only), as published by the Free Software Foundation.
8 #
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
13 #
14 # You should have received a copy of the GNU Affero General Public License
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
16 #
17 # This program is dual-licensed. If you wish to learn more about the
18 # RhodeCode Enterprise Edition, including its added features, Support services,
19 # and proprietary license terms, please see https://rhodecode.com/licenses/
20
21 import logging
22
23 from rhodecode.apps._base import BaseAppView, DataGridAppView
24 from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator
25
26 log = logging.getLogger(__name__)
27
28
29 class AdminArtifactsView(BaseAppView, DataGridAppView):
30
31 def load_default_context(self):
32 c = self._get_local_tmpl_context()
33 return c
34
35 @LoginRequired()
36 @HasPermissionAllDecorator('hg.admin')
37 def artifacts(self):
38 c = self.load_default_context()
39 c.active = 'artifacts'
40 return self._get_template_context(c)
@@ -0,0 +1,39 b''
1 ## -*- coding: utf-8 -*-
2 <%inherit file="/base/base.mako"/>
3
4 <%def name="title()">
5 ${_('Artifacts Admin')}
6 %if c.rhodecode_name:
7 &middot; ${h.branding(c.rhodecode_name)}
8 %endif
9 </%def>
10
11 <%def name="breadcrumbs_links()"></%def>
12
13 <%def name="menu_bar_nav()">
14 ${self.menu_items(active='admin')}
15 </%def>
16
17 <%def name="menu_bar_subnav()">
18 ${self.admin_menu(active='artifacts')}
19 </%def>
20
21 <%def name="main()">
22
23 <div class="box">
24
25 <div class="panel panel-default">
26 <div class="panel-heading">
27 <h3 class="panel-title">${_('Artifacts Administration.')}</h3>
28 </div>
29 <div class="panel-body">
30 <h4>${_('This feature is available in RhodeCode EE edition only. Contact {sales_email} to obtain a trial license.').format(sales_email='<a href="mailto:sales@rhodecode.com">sales@rhodecode.com</a>')|n}</h4>
31
32 </div>
33 </div>
34
35 </div>
36
37
38 </%def>
39
@@ -1,5 +1,6 b''
1 [bumpversion]
1 [bumpversion]
2 current_version = 4.25.0
2 current_version = 4.25.2
3 message = release: Bump version {current_version} to {new_version}
3 message = release: Bump version {current_version} to {new_version}
4
4
5 [bumpversion:file:rhodecode/VERSION]
5 [bumpversion:file:rhodecode/VERSION]
6
@@ -75,3 +75,6 b' 56310d93b33b97535908ef9c7b0985b89bb7fad2'
75 7637c38528fa38c1eabc1fde6a869c20995a0da7 v4.23.2
75 7637c38528fa38c1eabc1fde6a869c20995a0da7 v4.23.2
76 6aeb4ac3ef7f0ac699c914740dad3688c9495e83 v4.24.0
76 6aeb4ac3ef7f0ac699c914740dad3688c9495e83 v4.24.0
77 6eaf953da06e468a4c4e5239d3d0e700bda6b163 v4.24.1
77 6eaf953da06e468a4c4e5239d3d0e700bda6b163 v4.24.1
78 f8161cbc2d94a935d3c395a0e758d9a094287169 v4.25.0
79 77fe47b5b39338e71b2c040de2c0359b529b6251 v4.25.1
80 27475bd8a718b9a00a37a8563c4927120865ad85 v4.25.2
@@ -21,7 +21,7 b' done = true'
21
21
22 [release]
22 [release]
23 state = prepared
23 state = prepared
24 version = 4.11.6
24 version = 4.25.2
25
25
26 [task:updated_translation]
26 [task:updated_translation]
27
27
@@ -9,6 +9,8 b' Release Notes'
9 .. toctree::
9 .. toctree::
10 :maxdepth: 1
10 :maxdepth: 1
11
11
12 release-notes-4.25.2.rst
13 release-notes-4.25.1.rst
12 release-notes-4.25.0.rst
14 release-notes-4.25.0.rst
13 release-notes-4.24.1.rst
15 release-notes-4.24.1.rst
14 release-notes-4.24.0.rst
16 release-notes-4.24.0.rst
@@ -1883,7 +1883,7 b' self: super: {'
1883 };
1883 };
1884 };
1884 };
1885 "rhodecode-enterprise-ce" = super.buildPythonPackage {
1885 "rhodecode-enterprise-ce" = super.buildPythonPackage {
1886 name = "rhodecode-enterprise-ce-4.25.0";
1886 name = "rhodecode-enterprise-ce-4.25.2";
1887 buildInputs = [
1887 buildInputs = [
1888 self."pytest"
1888 self."pytest"
1889 self."py"
1889 self."py"
@@ -1,1 +1,1 b''
1 4.25.0 No newline at end of file
1 4.25.2 No newline at end of file
@@ -232,6 +232,9 b' def create_repo_group('
232 user=apiuser)
232 user=apiuser)
233
233
234 Session().commit()
234 Session().commit()
235
236 PermissionModel().trigger_permission_flush()
237
235 return {
238 return {
236 'msg': 'Created new repo group `%s`' % validated_group_name,
239 'msg': 'Created new repo group `%s`' % validated_group_name,
237 'repo_group': repo_group.get_api_data()
240 'repo_group': repo_group.get_api_data()
@@ -27,6 +27,7 b' def admin_routes(config):'
27 Admin prefixed routes
27 Admin prefixed routes
28 """
28 """
29 from rhodecode.apps.admin.views.audit_logs import AdminAuditLogsView
29 from rhodecode.apps.admin.views.audit_logs import AdminAuditLogsView
30 from rhodecode.apps.admin.views.artifacts import AdminArtifactsView
30 from rhodecode.apps.admin.views.defaults import AdminDefaultSettingsView
31 from rhodecode.apps.admin.views.defaults import AdminDefaultSettingsView
31 from rhodecode.apps.admin.views.exception_tracker import ExceptionsTrackerView
32 from rhodecode.apps.admin.views.exception_tracker import ExceptionsTrackerView
32 from rhodecode.apps.admin.views.main_views import AdminMainView
33 from rhodecode.apps.admin.views.main_views import AdminMainView
@@ -60,6 +61,34 b' def admin_routes(config):'
60 route_name='admin_audit_log_entry', request_method='GET',
61 route_name='admin_audit_log_entry', request_method='GET',
61 renderer='rhodecode:templates/admin/admin_audit_log_entry.mako')
62 renderer='rhodecode:templates/admin/admin_audit_log_entry.mako')
62
63
64 # Artifacts EE feature
65 config.add_route(
66 'admin_artifacts',
67 pattern=ADMIN_PREFIX + '/artifacts')
68 config.add_route(
69 'admin_artifacts_show_all',
70 pattern=ADMIN_PREFIX + '/artifacts')
71 config.add_view(
72 AdminArtifactsView,
73 attr='artifacts',
74 route_name='admin_artifacts', request_method='GET',
75 renderer='rhodecode:templates/admin/artifacts/artifacts.mako')
76 config.add_view(
77 AdminArtifactsView,
78 attr='artifacts',
79 route_name='admin_artifacts_show_all', request_method='GET',
80 renderer='rhodecode:templates/admin/artifacts/artifacts.mako')
81 # EE views
82 config.add_route(
83 name='admin_artifacts_show_info',
84 pattern=ADMIN_PREFIX + '/artifacts/{uid}')
85 config.add_route(
86 name='admin_artifacts_delete',
87 pattern=ADMIN_PREFIX + '/artifacts/{uid}/delete')
88 config.add_route(
89 name='admin_artifacts_update',
90 pattern=ADMIN_PREFIX + '/artifacts/{uid}/update')
91
63 config.add_route(
92 config.add_route(
64 name='admin_settings_open_source',
93 name='admin_settings_open_source',
65 pattern='/settings/open_source')
94 pattern='/settings/open_source')
@@ -349,13 +349,7 b' class AdminRepoGroupsView(BaseAppView, D'
349 % repo_group_name, category='error')
349 % repo_group_name, category='error')
350 raise HTTPFound(h.route_path('home'))
350 raise HTTPFound(h.route_path('home'))
351
351
352 affected_user_ids = [self._rhodecode_user.user_id]
352 PermissionModel().trigger_permission_flush()
353 if copy_permissions:
354 user_group_perms = repo_group.permissions(expand_from_user_groups=True)
355 copy_perms = [perm['user_id'] for perm in user_group_perms]
356 # also include those newly created by copy
357 affected_user_ids.extend(copy_perms)
358 PermissionModel().trigger_permission_flush(affected_user_ids)
359
353
360 raise HTTPFound(
354 raise HTTPFound(
361 h.route_path('repo_group_home',
355 h.route_path('repo_group_home',
@@ -242,11 +242,7 b' class AdminReposView(BaseAppView, DataGr'
242
242
243 repo_name = form_result.get('repo_name_full')
243 repo_name = form_result.get('repo_name_full')
244
244
245 affected_user_ids = [self._rhodecode_user.user_id]
245 PermissionModel().trigger_permission_flush()
246 if copy_permissions:
247 # permission flush is done in repo creating
248 pass
249 PermissionModel().trigger_permission_flush(affected_user_ids)
250
246
251 raise HTTPFound(
247 raise HTTPFound(
252 h.route_path('repo_creating', repo_name=repo_name,
248 h.route_path('repo_creating', repo_name=repo_name,
@@ -76,7 +76,11 b' class TestMyAccountEdit(TestController):'
76 'requests requiring your participation.')
76 'requests requiring your participation.')
77
77
78 @pytest.mark.backends("git", "hg")
78 @pytest.mark.backends("git", "hg")
79 def test_my_account_my_pullrequests_data(self, pr_util, xhr_header):
79 @pytest.mark.parametrize('params, expected_title', [
80 ({'closed': 1}, 'Closed'),
81 ({'awaiting_my_review': 1}, 'Awaiting my review'),
82 ])
83 def test_my_account_my_pullrequests_data(self, pr_util, xhr_header, params, expected_title):
80 self.log_user()
84 self.log_user()
81 response = self.app.get(route_path('my_account_pullrequests_data'),
85 response = self.app.get(route_path('my_account_pullrequests_data'),
82 extra_environ=xhr_header)
86 extra_environ=xhr_header)
@@ -43,7 +43,7 b' from rhodecode.model.comment import Comm'
43 from rhodecode.model.db import (
43 from rhodecode.model.db import (
44 IntegrityError, or_, in_filter_generator,
44 IntegrityError, or_, in_filter_generator,
45 Repository, UserEmailMap, UserApiKeys, UserFollowing,
45 Repository, UserEmailMap, UserApiKeys, UserFollowing,
46 PullRequest, UserBookmark, RepoGroup)
46 PullRequest, UserBookmark, RepoGroup, ChangesetStatus)
47 from rhodecode.model.meta import Session
47 from rhodecode.model.meta import Session
48 from rhodecode.model.pull_request import PullRequestModel
48 from rhodecode.model.pull_request import PullRequestModel
49 from rhodecode.model.user import UserModel
49 from rhodecode.model.user import UserModel
@@ -654,21 +654,31 b' class MyAccountView(BaseAppView, DataGri'
654 Session().commit()
654 Session().commit()
655 return user.user_data['notification_status']
655 return user.user_data['notification_status']
656
656
657 def _get_pull_requests_list(self, statuses):
657 def _get_pull_requests_list(self, statuses, filter_type=None):
658 draw, start, limit = self._extract_chunk(self.request)
658 draw, start, limit = self._extract_chunk(self.request)
659 search_q, order_by, order_dir = self._extract_ordering(self.request)
659 search_q, order_by, order_dir = self._extract_ordering(self.request)
660
660
661 _render = self.request.get_partial_renderer(
661 _render = self.request.get_partial_renderer(
662 'rhodecode:templates/data_table/_dt_elements.mako')
662 'rhodecode:templates/data_table/_dt_elements.mako')
663
663
664 pull_requests = PullRequestModel().get_im_participating_in(
664 if filter_type == 'awaiting_my_review':
665 user_id=self._rhodecode_user.user_id,
665 pull_requests = PullRequestModel().get_im_participating_in_for_review(
666 statuses=statuses, query=search_q,
666 user_id=self._rhodecode_user.user_id,
667 offset=start, length=limit, order_by=order_by,
667 statuses=statuses, query=search_q,
668 order_dir=order_dir)
668 offset=start, length=limit, order_by=order_by,
669 order_dir=order_dir)
669
670
670 pull_requests_total_count = PullRequestModel().count_im_participating_in(
671 pull_requests_total_count = PullRequestModel().count_im_participating_in_for_review(
671 user_id=self._rhodecode_user.user_id, statuses=statuses, query=search_q)
672 user_id=self._rhodecode_user.user_id, statuses=statuses, query=search_q)
673 else:
674 pull_requests = PullRequestModel().get_im_participating_in(
675 user_id=self._rhodecode_user.user_id,
676 statuses=statuses, query=search_q,
677 offset=start, length=limit, order_by=order_by,
678 order_dir=order_dir)
679
680 pull_requests_total_count = PullRequestModel().count_im_participating_in(
681 user_id=self._rhodecode_user.user_id, statuses=statuses, query=search_q)
672
682
673 data = []
683 data = []
674 comments_model = CommentsModel()
684 comments_model = CommentsModel()
@@ -678,6 +688,12 b' class MyAccountView(BaseAppView, DataGri'
678 repo_id, pull_request=pr, include_drafts=False, count_only=True)
688 repo_id, pull_request=pr, include_drafts=False, count_only=True)
679 owned = pr.user_id == self._rhodecode_user.user_id
689 owned = pr.user_id == self._rhodecode_user.user_id
680
690
691 review_statuses = pr.reviewers_statuses(user=self._rhodecode_db_user)
692 my_review_status = ChangesetStatus.STATUS_NOT_REVIEWED
693 if review_statuses and review_statuses[4]:
694 _review_obj, _user, _reasons, _mandatory, statuses = review_statuses
695 my_review_status = statuses[0][1].status
696
681 data.append({
697 data.append({
682 'target_repo': _render('pullrequest_target_repo',
698 'target_repo': _render('pullrequest_target_repo',
683 pr.target_repo.repo_name),
699 pr.target_repo.repo_name),
@@ -688,6 +704,8 b' class MyAccountView(BaseAppView, DataGri'
688 'name_raw': pr.pull_request_id,
704 'name_raw': pr.pull_request_id,
689 'status': _render('pullrequest_status',
705 'status': _render('pullrequest_status',
690 pr.calculated_review_status()),
706 pr.calculated_review_status()),
707 'my_status': _render('pullrequest_status',
708 my_review_status),
691 'title': _render('pullrequest_title', pr.title, pr.description),
709 'title': _render('pullrequest_title', pr.title, pr.description),
692 'description': h.escape(pr.description),
710 'description': h.escape(pr.description),
693 'updated_on': _render('pullrequest_updated_on',
711 'updated_on': _render('pullrequest_updated_on',
@@ -723,7 +741,14 b' class MyAccountView(BaseAppView, DataGri'
723 c.active = 'pullrequests'
741 c.active = 'pullrequests'
724 req_get = self.request.GET
742 req_get = self.request.GET
725
743
726 c.closed = str2bool(req_get.get('pr_show_closed'))
744 c.closed = str2bool(req_get.get('closed'))
745 c.awaiting_my_review = str2bool(req_get.get('awaiting_my_review'))
746
747 c.selected_filter = 'all'
748 if c.closed:
749 c.selected_filter = 'all_closed'
750 if c.awaiting_my_review:
751 c.selected_filter = 'awaiting_my_review'
727
752
728 return self._get_template_context(c)
753 return self._get_template_context(c)
729
754
@@ -732,13 +757,19 b' class MyAccountView(BaseAppView, DataGri'
732 def my_account_pullrequests_data(self):
757 def my_account_pullrequests_data(self):
733 self.load_default_context()
758 self.load_default_context()
734 req_get = self.request.GET
759 req_get = self.request.GET
760
761 awaiting_my_review = str2bool(req_get.get('awaiting_my_review'))
735 closed = str2bool(req_get.get('closed'))
762 closed = str2bool(req_get.get('closed'))
736
763
737 statuses = [PullRequest.STATUS_NEW, PullRequest.STATUS_OPEN]
764 statuses = [PullRequest.STATUS_NEW, PullRequest.STATUS_OPEN]
738 if closed:
765 if closed:
739 statuses += [PullRequest.STATUS_CLOSED]
766 statuses += [PullRequest.STATUS_CLOSED]
740
767
741 data = self._get_pull_requests_list(statuses=statuses)
768 filter_type = \
769 'awaiting_my_review' if awaiting_my_review \
770 else None
771
772 data = self._get_pull_requests_list(statuses=statuses, filter_type=filter_type)
742 return data
773 return data
743
774
744 @LoginRequired()
775 @LoginRequired()
@@ -41,7 +41,7 b' class TestPullRequestList(object):'
41
41
42 @pytest.mark.parametrize('params, expected_title', [
42 @pytest.mark.parametrize('params, expected_title', [
43 ({'source': 0, 'closed': 1}, 'Closed'),
43 ({'source': 0, 'closed': 1}, 'Closed'),
44 ({'source': 0, 'my': 1}, 'Opened by me'),
44 ({'source': 0, 'my': 1}, 'Created by me'),
45 ({'source': 0, 'awaiting_review': 1}, 'Awaiting review'),
45 ({'source': 0, 'awaiting_review': 1}, 'Awaiting review'),
46 ({'source': 0, 'awaiting_my_review': 1}, 'Awaiting my review'),
46 ({'source': 0, 'awaiting_my_review': 1}, 'Awaiting my review'),
47 ({'source': 1}, 'From this repo'),
47 ({'source': 1}, 'From this repo'),
@@ -539,8 +539,14 b' class RepoCommitsView(RepoAppView):'
539 @CSRFRequired()
539 @CSRFRequired()
540 def repo_commit_comment_history_view(self):
540 def repo_commit_comment_history_view(self):
541 c = self.load_default_context()
541 c = self.load_default_context()
542 comment_history_id = self.request.matchdict['comment_history_id']
542
543
543 comment_history_id = self.request.matchdict['comment_history_id']
544 comment = ChangesetComment.get_or_404(comment_history_id)
545 comment_owner = (comment.author.user_id == self._rhodecode_db_user.user_id)
546 if comment.draft and not comment_owner:
547 # if we see draft comments history, we only allow this for owner
548 raise HTTPNotFound()
549
544 comment_history = ChangesetCommentHistory.get_or_404(comment_history_id)
550 comment_history = ChangesetCommentHistory.get_or_404(comment_history_id)
545 is_repo_comment = comment_history.comment.repo.repo_id == self.db_repo.repo_id
551 is_repo_comment = comment_history.comment.repo.repo_id == self.db_repo.repo_id
546
552
@@ -549,8 +555,7 b' class RepoCommitsView(RepoAppView):'
549
555
550 rendered_comment = render(
556 rendered_comment = render(
551 'rhodecode:templates/changeset/comment_history.mako',
557 'rhodecode:templates/changeset/comment_history.mako',
552 self._get_template_context(c)
558 self._get_template_context(c), self.request)
553 , self.request)
554 return rendered_comment
559 return rendered_comment
555 else:
560 else:
556 log.warning('No permissions for user %s to show comment_history_id: %s',
561 log.warning('No permissions for user %s to show comment_history_id: %s',
@@ -39,7 +39,7 b' from rhodecode.lib.ext_json import json'
39 from rhodecode.lib.auth import (
39 from rhodecode.lib.auth import (
40 LoginRequired, HasRepoPermissionAny, HasRepoPermissionAnyDecorator,
40 LoginRequired, HasRepoPermissionAny, HasRepoPermissionAnyDecorator,
41 NotAnonymous, CSRFRequired)
41 NotAnonymous, CSRFRequired)
42 from rhodecode.lib.utils2 import str2bool, safe_str, safe_unicode, safe_int, aslist
42 from rhodecode.lib.utils2 import str2bool, safe_str, safe_unicode, safe_int, aslist, retry
43 from rhodecode.lib.vcs.backends.base import (
43 from rhodecode.lib.vcs.backends.base import (
44 EmptyCommit, UpdateFailureReason, unicode_to_reference)
44 EmptyCommit, UpdateFailureReason, unicode_to_reference)
45 from rhodecode.lib.vcs.exceptions import (
45 from rhodecode.lib.vcs.exceptions import (
@@ -79,21 +79,20 b' class RepoPullRequestsView(RepoAppView, '
79
79
80 if filter_type == 'awaiting_review':
80 if filter_type == 'awaiting_review':
81 pull_requests = PullRequestModel().get_awaiting_review(
81 pull_requests = PullRequestModel().get_awaiting_review(
82 repo_name, search_q=search_q, source=source, opened_by=opened_by,
82 repo_name,
83 statuses=statuses, offset=start, length=limit,
83 search_q=search_q, statuses=statuses,
84 order_by=order_by, order_dir=order_dir)
84 offset=start, length=limit, order_by=order_by, order_dir=order_dir)
85 pull_requests_total_count = PullRequestModel().count_awaiting_review(
85 pull_requests_total_count = PullRequestModel().count_awaiting_review(
86 repo_name, search_q=search_q, source=source, statuses=statuses,
86 repo_name,
87 opened_by=opened_by)
87 search_q=search_q, statuses=statuses)
88 elif filter_type == 'awaiting_my_review':
88 elif filter_type == 'awaiting_my_review':
89 pull_requests = PullRequestModel().get_awaiting_my_review(
89 pull_requests = PullRequestModel().get_awaiting_my_review(
90 repo_name, search_q=search_q, source=source, opened_by=opened_by,
90 repo_name, self._rhodecode_user.user_id,
91 user_id=self._rhodecode_user.user_id, statuses=statuses,
91 search_q=search_q, statuses=statuses,
92 offset=start, length=limit, order_by=order_by,
92 offset=start, length=limit, order_by=order_by, order_dir=order_dir)
93 order_dir=order_dir)
94 pull_requests_total_count = PullRequestModel().count_awaiting_my_review(
93 pull_requests_total_count = PullRequestModel().count_awaiting_my_review(
95 repo_name, search_q=search_q, source=source, user_id=self._rhodecode_user.user_id,
94 repo_name, self._rhodecode_user.user_id,
96 statuses=statuses, opened_by=opened_by)
95 search_q=search_q, statuses=statuses)
97 else:
96 else:
98 pull_requests = PullRequestModel().get_all(
97 pull_requests = PullRequestModel().get_all(
99 repo_name, search_q=search_q, source=source, opened_by=opened_by,
98 repo_name, search_q=search_q, source=source, opened_by=opened_by,
@@ -110,6 +109,12 b' class RepoPullRequestsView(RepoAppView, '
110 self.db_repo.repo_id, pull_request=pr,
109 self.db_repo.repo_id, pull_request=pr,
111 include_drafts=False, count_only=True)
110 include_drafts=False, count_only=True)
112
111
112 review_statuses = pr.reviewers_statuses(user=self._rhodecode_db_user)
113 my_review_status = ChangesetStatus.STATUS_NOT_REVIEWED
114 if review_statuses and review_statuses[4]:
115 _review_obj, _user, _reasons, _mandatory, statuses = review_statuses
116 my_review_status = statuses[0][1].status
117
113 data.append({
118 data.append({
114 'name': _render('pullrequest_name',
119 'name': _render('pullrequest_name',
115 pr.pull_request_id, pr.pull_request_state,
120 pr.pull_request_id, pr.pull_request_state,
@@ -118,6 +123,8 b' class RepoPullRequestsView(RepoAppView, '
118 'name_raw': pr.pull_request_id,
123 'name_raw': pr.pull_request_id,
119 'status': _render('pullrequest_status',
124 'status': _render('pullrequest_status',
120 pr.calculated_review_status()),
125 pr.calculated_review_status()),
126 'my_status': _render('pullrequest_status',
127 my_review_status),
121 'title': _render('pullrequest_title', pr.title, pr.description),
128 'title': _render('pullrequest_title', pr.title, pr.description),
122 'description': h.escape(pr.description),
129 'description': h.escape(pr.description),
123 'updated_on': _render('pullrequest_updated_on',
130 'updated_on': _render('pullrequest_updated_on',
@@ -1346,9 +1353,13 b' class RepoPullRequestsView(RepoAppView, '
1346 def _update_commits(self, c, pull_request):
1353 def _update_commits(self, c, pull_request):
1347 _ = self.request.translate
1354 _ = self.request.translate
1348
1355
1356 @retry(exception=Exception, n_tries=3)
1357 def commits_update():
1358 return PullRequestModel().update_commits(
1359 pull_request, self._rhodecode_db_user)
1360
1349 with pull_request.set_state(PullRequest.STATE_UPDATING):
1361 with pull_request.set_state(PullRequest.STATE_UPDATING):
1350 resp = PullRequestModel().update_commits(
1362 resp = commits_update() # retry x3
1351 pull_request, self._rhodecode_db_user)
1352
1363
1353 if resp.executed:
1364 if resp.executed:
1354
1365
This diff has been collapsed as it changes many lines, (635 lines changed) Show them Hide them
@@ -6,9 +6,9 b''
6 #, fuzzy
6 #, fuzzy
7 msgid ""
7 msgid ""
8 msgstr ""
8 msgstr ""
9 "Project-Id-Version: rhodecode-enterprise-ce 4.24.0\n"
9 "Project-Id-Version: rhodecode-enterprise-ce 4.25.0\n"
10 "Report-Msgid-Bugs-To: marcin@rhodecode.com\n"
10 "Report-Msgid-Bugs-To: marcin@rhodecode.com\n"
11 "POT-Creation-Date: 2021-01-14 15:36+0000\n"
11 "POT-Creation-Date: 2021-04-05 19:29+0000\n"
12 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
12 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14 "Language-Team: LANGUAGE <LL@li.org>\n"
14 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -111,7 +111,7 b' msgstr ""'
111 #: rhodecode/apps/admin/views/settings.py:156
111 #: rhodecode/apps/admin/views/settings.py:156
112 #: rhodecode/apps/admin/views/settings.py:291
112 #: rhodecode/apps/admin/views/settings.py:291
113 #: rhodecode/apps/admin/views/settings.py:360
113 #: rhodecode/apps/admin/views/settings.py:360
114 #: rhodecode/apps/admin/views/settings.py:663
114 #: rhodecode/apps/admin/views/settings.py:664
115 #: rhodecode/apps/repository/views/repo_settings_vcs.py:116
115 #: rhodecode/apps/repository/views/repo_settings_vcs.py:116
116 msgid "Some form inputs contain invalid data."
116 msgid "Some form inputs contain invalid data."
117 msgstr ""
117 msgstr ""
@@ -135,54 +135,54 b' msgstr ""'
135 msgid "Updated application settings"
135 msgid "Updated application settings"
136 msgstr ""
136 msgstr ""
137
137
138 #: rhodecode/apps/admin/views/settings.py:399
138 #: rhodecode/apps/admin/views/settings.py:400
139 msgid "Updated visualisation settings"
139 msgid "Updated visualisation settings"
140 msgstr ""
140 msgstr ""
141
141
142 #: rhodecode/apps/admin/views/settings.py:402
142 #: rhodecode/apps/admin/views/settings.py:403
143 msgid "Error occurred during updating visualisation settings"
143 msgid "Error occurred during updating visualisation settings"
144 msgstr ""
144 msgstr ""
145
145
146 #: rhodecode/apps/admin/views/settings.py:464
146 #: rhodecode/apps/admin/views/settings.py:465
147 #: rhodecode/apps/repository/views/repo_settings_issue_trackers.py:115
147 #: rhodecode/apps/repository/views/repo_settings_issue_trackers.py:115
148 msgid "Invalid issue tracker pattern: {}"
148 msgid "Invalid issue tracker pattern: {}"
149 msgstr ""
149 msgstr ""
150
150
151 #: rhodecode/apps/admin/views/settings.py:481
151 #: rhodecode/apps/admin/views/settings.py:482
152 #: rhodecode/apps/repository/views/repo_settings_issue_trackers.py:124
152 #: rhodecode/apps/repository/views/repo_settings_issue_trackers.py:124
153 msgid "Updated issue tracker entries"
153 msgid "Updated issue tracker entries"
154 msgstr ""
154 msgstr ""
155
155
156 #: rhodecode/apps/admin/views/settings.py:498
156 #: rhodecode/apps/admin/views/settings.py:499
157 #: rhodecode/apps/repository/views/repo_settings_issue_trackers.py:82
157 #: rhodecode/apps/repository/views/repo_settings_issue_trackers.py:82
158 msgid "Removed issue tracker entry."
158 msgid "Removed issue tracker entry."
159 msgstr ""
159 msgstr ""
160
160
161 #: rhodecode/apps/admin/views/settings.py:530
161 #: rhodecode/apps/admin/views/settings.py:531
162 msgid "Please enter email address"
162 msgid "Please enter email address"
163 msgstr ""
163 msgstr ""
164
164
165 #: rhodecode/apps/admin/views/settings.py:546
165 #: rhodecode/apps/admin/views/settings.py:547
166 msgid "Send email task created"
166 msgid "Send email task created"
167 msgstr ""
167 msgstr ""
168
168
169 #: rhodecode/apps/admin/views/settings.py:587
169 #: rhodecode/apps/admin/views/settings.py:588
170 msgid "Added new hook"
170 msgid "Added new hook"
171 msgstr ""
171 msgstr ""
172
172
173 #: rhodecode/apps/admin/views/settings.py:602
173 #: rhodecode/apps/admin/views/settings.py:603
174 msgid "Updated hooks"
174 msgid "Updated hooks"
175 msgstr ""
175 msgstr ""
176
176
177 #: rhodecode/apps/admin/views/settings.py:606
177 #: rhodecode/apps/admin/views/settings.py:607
178 msgid "Error occurred during hook creation"
178 msgid "Error occurred during hook creation"
179 msgstr ""
179 msgstr ""
180
180
181 #: rhodecode/apps/admin/views/settings.py:687
181 #: rhodecode/apps/admin/views/settings.py:688
182 msgid "Error occurred during updating labs settings"
182 msgid "Error occurred during updating labs settings"
183 msgstr ""
183 msgstr ""
184
184
185 #: rhodecode/apps/admin/views/settings.py:692
185 #: rhodecode/apps/admin/views/settings.py:693
186 msgid "Updated Labs settings"
186 msgid "Updated Labs settings"
187 msgstr ""
187 msgstr ""
188
188
@@ -592,7 +592,7 b' msgstr ""'
592 msgid "1 month"
592 msgid "1 month"
593 msgstr ""
593 msgstr ""
594
594
595 #: rhodecode/apps/gist/views.py:63 rhodecode/public/js/scripts.js:48529
595 #: rhodecode/apps/gist/views.py:63 rhodecode/public/js/scripts.js:48670
596 #: rhodecode/public/js/scripts.min.js:1
596 #: rhodecode/public/js/scripts.min.js:1
597 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:48
597 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:48
598 #: rhodecode/public/js/src/rhodecode.js:634
598 #: rhodecode/public/js/src/rhodecode.js:634
@@ -653,8 +653,8 b' msgstr ""'
653 #: rhodecode/templates/admin/repos/repo_add.mako:19
653 #: rhodecode/templates/admin/repos/repo_add.mako:19
654 #: rhodecode/templates/admin/users/user_edit_advanced.mako:12
654 #: rhodecode/templates/admin/users/user_edit_advanced.mako:12
655 #: rhodecode/templates/base/base.mako:114
655 #: rhodecode/templates/base/base.mako:114
656 #: rhodecode/templates/base/base.mako:133
656 #: rhodecode/templates/base/base.mako:134
657 #: rhodecode/templates/base/base.mako:1191
657 #: rhodecode/templates/base/base.mako:1192
658 msgid "Repositories"
658 msgid "Repositories"
659 msgstr ""
659 msgstr ""
660
660
@@ -894,104 +894,104 b' msgstr ""'
894 msgid "No such commit exists for this repository. Commit: {}"
894 msgid "No such commit exists for this repository. Commit: {}"
895 msgstr ""
895 msgstr ""
896
896
897 #: rhodecode/apps/repository/views/repo_files.py:358
897 #: rhodecode/apps/repository/views/repo_files.py:359
898 msgid "Downloads disabled"
898 msgid "Downloads disabled"
899 msgstr ""
899 msgstr ""
900
900
901 #: rhodecode/apps/repository/views/repo_files.py:364
901 #: rhodecode/apps/repository/views/repo_files.py:365
902 msgid "Unknown archive type for: `{}`"
902 msgid "Unknown archive type for: `{}`"
903 msgstr ""
903 msgstr ""
904
904
905 #: rhodecode/apps/repository/views/repo_files.py:370
905 #: rhodecode/apps/repository/views/repo_files.py:371
906 msgid "Unknown commit_id {}"
906 msgid "Unknown commit_id {}"
907 msgstr ""
907 msgstr ""
908
908
909 #: rhodecode/apps/repository/views/repo_files.py:373
909 #: rhodecode/apps/repository/views/repo_files.py:374
910 msgid "Empty repository"
910 msgid "Empty repository"
911 msgstr ""
911 msgstr ""
912
912
913 #: rhodecode/apps/repository/views/repo_files.py:378
913 #: rhodecode/apps/repository/views/repo_files.py:384
914 msgid "No node at path {} for this repository"
914 msgid "No node at path {} for this repository"
915 msgstr ""
915 msgstr ""
916
916
917 #: rhodecode/apps/repository/views/repo_files.py:429
917 #: rhodecode/apps/repository/views/repo_files.py:436
918 msgid "Unknown archive type"
918 msgid "Unknown archive type"
919 msgstr ""
919 msgstr ""
920
920
921 #: rhodecode/apps/repository/views/repo_files.py:986
921 #: rhodecode/apps/repository/views/repo_files.py:993
922 msgid "Changesets"
922 msgid "Changesets"
923 msgstr ""
923 msgstr ""
924
924
925 #: rhodecode/apps/repository/views/repo_files.py:1007
925 #: rhodecode/apps/repository/views/repo_files.py:1014
926 #: rhodecode/apps/repository/views/repo_summary.py:243
926 #: rhodecode/apps/repository/views/repo_summary.py:239
927 #: rhodecode/model/pull_request.py:1910 rhodecode/model/scm.py:999
927 #: rhodecode/model/pull_request.py:1912 rhodecode/model/scm.py:999
928 #: rhodecode/templates/base/vcs_settings.mako:235
928 #: rhodecode/templates/base/vcs_settings.mako:235
929 #: rhodecode/templates/summary/components.mako:10
929 #: rhodecode/templates/summary/components.mako:10
930 msgid "Branches"
930 msgid "Branches"
931 msgstr ""
931 msgstr ""
932
932
933 #: rhodecode/apps/repository/views/repo_files.py:1011
933 #: rhodecode/apps/repository/views/repo_files.py:1018
934 #: rhodecode/model/scm.py:1016 rhodecode/templates/base/vcs_settings.mako:260
934 #: rhodecode/model/scm.py:1016 rhodecode/templates/base/vcs_settings.mako:260
935 #: rhodecode/templates/summary/components.mako:34
935 #: rhodecode/templates/summary/components.mako:34
936 msgid "Tags"
936 msgid "Tags"
937 msgstr ""
937 msgstr ""
938
938
939 #: rhodecode/apps/repository/views/repo_files.py:1155
939 #: rhodecode/apps/repository/views/repo_files.py:1162
940 #: rhodecode/apps/repository/views/repo_files.py:1181
940 #: rhodecode/apps/repository/views/repo_files.py:1188
941 msgid "Deleted file {} via RhodeCode Enterprise"
941 msgid "Deleted file {} via RhodeCode Enterprise"
942 msgstr ""
942 msgstr ""
943
943
944 #: rhodecode/apps/repository/views/repo_files.py:1202
944 #: rhodecode/apps/repository/views/repo_files.py:1209
945 msgid "Successfully deleted file `{}`"
945 msgid "Successfully deleted file `{}`"
946 msgstr ""
946 msgstr ""
947
947
948 #: rhodecode/apps/repository/views/repo_files.py:1206
948 #: rhodecode/apps/repository/views/repo_files.py:1213
949 #: rhodecode/apps/repository/views/repo_files.py:1326
950 #: rhodecode/apps/repository/views/repo_files.py:1450
951 #: rhodecode/apps/repository/views/repo_files.py:1571
952 msgid "Error occurred during commit"
953 msgstr ""
954
955 #: rhodecode/apps/repository/views/repo_files.py:1243
956 #: rhodecode/apps/repository/views/repo_files.py:1272
957 msgid "Edited file {} via RhodeCode Enterprise"
958 msgstr ""
959
960 #: rhodecode/apps/repository/views/repo_files.py:1295
961 msgid "No changes detected on {}"
962 msgstr ""
963
949 #: rhodecode/apps/repository/views/repo_files.py:1319
964 #: rhodecode/apps/repository/views/repo_files.py:1319
950 #: rhodecode/apps/repository/views/repo_files.py:1443
951 #: rhodecode/apps/repository/views/repo_files.py:1564
952 msgid "Error occurred during commit"
953 msgstr ""
954
955 #: rhodecode/apps/repository/views/repo_files.py:1236
956 #: rhodecode/apps/repository/views/repo_files.py:1265
957 msgid "Edited file {} via RhodeCode Enterprise"
958 msgstr ""
959
960 #: rhodecode/apps/repository/views/repo_files.py:1288
961 msgid "No changes detected on {}"
962 msgstr ""
963
964 #: rhodecode/apps/repository/views/repo_files.py:1312
965 msgid "Successfully committed changes to file `{}`"
965 msgid "Successfully committed changes to file `{}`"
966 msgstr ""
966 msgstr ""
967
967
968 #: rhodecode/apps/repository/views/repo_files.py:1348
968 #: rhodecode/apps/repository/views/repo_files.py:1355
969 #: rhodecode/apps/repository/views/repo_files.py:1387
969 #: rhodecode/apps/repository/views/repo_files.py:1394
970 msgid "Added file via RhodeCode Enterprise"
970 msgid "Added file via RhodeCode Enterprise"
971 msgstr ""
971 msgstr ""
972
972
973 #: rhodecode/apps/repository/views/repo_files.py:1403
973 #: rhodecode/apps/repository/views/repo_files.py:1410
974 msgid "No filename specified"
974 msgid "No filename specified"
975 msgstr ""
975 msgstr ""
976
976
977 #: rhodecode/apps/repository/views/repo_files.py:1428
977 #: rhodecode/apps/repository/views/repo_files.py:1435
978 msgid "Successfully committed new file `{}`"
978 msgid "Successfully committed new file `{}`"
979 msgstr ""
979 msgstr ""
980
980
981 #: rhodecode/apps/repository/views/repo_files.py:1436
981 #: rhodecode/apps/repository/views/repo_files.py:1443
982 #: rhodecode/apps/repository/views/repo_files.py:1546
982 #: rhodecode/apps/repository/views/repo_files.py:1553
983 msgid "The location specified must be a relative path and must not contain .. in the path"
983 msgid "The location specified must be a relative path and must not contain .. in the path"
984 msgstr ""
984 msgstr ""
985
985
986 #: rhodecode/apps/repository/views/repo_files.py:1491
986 #: rhodecode/apps/repository/views/repo_files.py:1498
987 msgid "Uploaded file via RhodeCode Enterprise"
987 msgid "Uploaded file via RhodeCode Enterprise"
988 msgstr ""
988 msgstr ""
989
989
990 #: rhodecode/apps/repository/views/repo_files.py:1535
990 #: rhodecode/apps/repository/views/repo_files.py:1542
991 msgid "Successfully committed {} new files"
991 msgid "Successfully committed {} new files"
992 msgstr ""
992 msgstr ""
993
993
994 #: rhodecode/apps/repository/views/repo_files.py:1537
994 #: rhodecode/apps/repository/views/repo_files.py:1544
995 msgid "Successfully committed 1 new file"
995 msgid "Successfully committed 1 new file"
996 msgstr ""
996 msgstr ""
997
997
@@ -1215,23 +1215,23 b' msgstr ""'
1215 msgid "Error occurred during updating repository VCS settings"
1215 msgid "Error occurred during updating repository VCS settings"
1216 msgstr ""
1216 msgstr ""
1217
1217
1218 #: rhodecode/apps/repository/views/repo_summary.py:222
1218 #: rhodecode/apps/repository/views/repo_summary.py:218
1219 #: rhodecode/templates/admin/permissions/permissions.mako:42
1219 #: rhodecode/templates/admin/permissions/permissions.mako:42
1220 #: rhodecode/templates/summary/components.mako:8
1220 #: rhodecode/templates/summary/components.mako:8
1221 msgid "Branch"
1221 msgid "Branch"
1222 msgstr ""
1222 msgstr ""
1223
1223
1224 #: rhodecode/apps/repository/views/repo_summary.py:223
1224 #: rhodecode/apps/repository/views/repo_summary.py:219
1225 #: rhodecode/templates/summary/components.mako:32
1225 #: rhodecode/templates/summary/components.mako:32
1226 msgid "Tag"
1226 msgid "Tag"
1227 msgstr ""
1227 msgstr ""
1228
1228
1229 #: rhodecode/apps/repository/views/repo_summary.py:224
1229 #: rhodecode/apps/repository/views/repo_summary.py:220
1230 #: rhodecode/templates/summary/components.mako:44
1230 #: rhodecode/templates/summary/components.mako:44
1231 msgid "Bookmark"
1231 msgid "Bookmark"
1232 msgstr ""
1232 msgstr ""
1233
1233
1234 #: rhodecode/apps/repository/views/repo_summary.py:244
1234 #: rhodecode/apps/repository/views/repo_summary.py:240
1235 msgid "Closed branches"
1235 msgid "Closed branches"
1236 msgstr ""
1236 msgstr ""
1237
1237
@@ -1291,9 +1291,9 b' msgid "Enable or disable this authentica'
1291 msgstr ""
1291 msgstr ""
1292
1292
1293 #: rhodecode/authentication/schema.py:38 rhodecode/integrations/schema.py:32
1293 #: rhodecode/authentication/schema.py:38 rhodecode/integrations/schema.py:32
1294 #: rhodecode/model/permission.py:110 rhodecode/model/permission.py:114
1294 #: rhodecode/model/permission.py:112 rhodecode/model/permission.py:116
1295 #: rhodecode/model/permission.py:118 rhodecode/model/permission.py:122
1295 #: rhodecode/model/permission.py:120 rhodecode/model/permission.py:124
1296 #: rhodecode/model/permission.py:126 rhodecode/model/permission.py:130
1296 #: rhodecode/model/permission.py:128 rhodecode/model/permission.py:132
1297 #: rhodecode/model/validation_schema/schemas/integration_schema.py:195
1297 #: rhodecode/model/validation_schema/schemas/integration_schema.py:195
1298 #: rhodecode/templates/admin/auth/auth_settings.mako:64
1298 #: rhodecode/templates/admin/auth/auth_settings.mako:64
1299 #: rhodecode/templates/admin/integrations/list.mako:71
1299 #: rhodecode/templates/admin/integrations/list.mako:71
@@ -1806,7 +1806,7 b' msgstr ""'
1806 #: rhodecode/templates/admin/settings/settings_issuetracker.mako:16
1806 #: rhodecode/templates/admin/settings/settings_issuetracker.mako:16
1807 #: rhodecode/templates/admin/settings/settings_labs.mako:49
1807 #: rhodecode/templates/admin/settings/settings_labs.mako:49
1808 #: rhodecode/templates/admin/settings/settings_vcs.mako:14
1808 #: rhodecode/templates/admin/settings/settings_vcs.mako:14
1809 #: rhodecode/templates/admin/settings/settings_visual.mako:215
1809 #: rhodecode/templates/admin/settings/settings_visual.mako:218
1810 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:217
1810 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:217
1811 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:107
1811 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:107
1812 #: rhodecode/templates/admin/users/user_edit_emails.mako:66
1812 #: rhodecode/templates/admin/users/user_edit_emails.mako:66
@@ -1841,7 +1841,7 b' msgstr ""'
1841 #: rhodecode/templates/changeset/changeset_file_comment.mako:236
1841 #: rhodecode/templates/changeset/changeset_file_comment.mako:236
1842 #: rhodecode/templates/changeset/changeset_file_comment.mako:250
1842 #: rhodecode/templates/changeset/changeset_file_comment.mako:250
1843 #: rhodecode/templates/changeset/changeset_file_comment.mako:259
1843 #: rhodecode/templates/changeset/changeset_file_comment.mako:259
1844 #: rhodecode/templates/data_table/_dt_elements.mako:439
1844 #: rhodecode/templates/data_table/_dt_elements.mako:445
1845 #: rhodecode/templates/debug_style/buttons.html:132
1845 #: rhodecode/templates/debug_style/buttons.html:132
1846 #: rhodecode/templates/files/files_source.mako:40
1846 #: rhodecode/templates/files/files_source.mako:40
1847 #: rhodecode/templates/files/files_source.mako:47
1847 #: rhodecode/templates/files/files_source.mako:47
@@ -2229,15 +2229,15 b' msgstr ""'
2229 msgid "Commit not found"
2229 msgid "Commit not found"
2230 msgstr ""
2230 msgstr ""
2231
2231
2232 #: rhodecode/lib/auth.py:1769
2232 #: rhodecode/lib/auth.py:1771
2233 msgid "IP {} not allowed"
2233 msgid "IP {} not allowed"
2234 msgstr ""
2234 msgstr ""
2235
2235
2236 #: rhodecode/lib/auth.py:1861
2236 #: rhodecode/lib/auth.py:1863
2237 msgid "You need to be a registered user to perform this action"
2237 msgid "You need to be a registered user to perform this action"
2238 msgstr ""
2238 msgstr ""
2239
2239
2240 #: rhodecode/lib/auth.py:1905
2240 #: rhodecode/lib/auth.py:1907
2241 msgid "You need to be signed in to view this page"
2241 msgid "You need to be signed in to view this page"
2242 msgstr ""
2242 msgstr ""
2243
2243
@@ -2249,7 +2249,7 b' msgstr ""'
2249 msgid "Click to select line"
2249 msgid "Click to select line"
2250 msgstr ""
2250 msgstr ""
2251
2251
2252 #: rhodecode/lib/helpers.py:1878
2252 #: rhodecode/lib/helpers.py:1883
2253 msgid ""
2253 msgid ""
2254 "Example filter terms:\n"
2254 "Example filter terms:\n"
2255 " repository:vcs\n"
2255 " repository:vcs\n"
@@ -2271,7 +2271,7 b' msgid ""'
2271 " \"username:test AND repository:test*\"\n"
2271 " \"username:test AND repository:test*\"\n"
2272 msgstr ""
2272 msgstr ""
2273
2273
2274 #: rhodecode/lib/helpers.py:1902
2274 #: rhodecode/lib/helpers.py:1907
2275 #, python-format
2275 #, python-format
2276 msgid "%s repository is not mapped to db perhaps it was created or renamed from the filesystem please run the application again in order to rescan repositories"
2276 msgid "%s repository is not mapped to db perhaps it was created or renamed from the filesystem please run the application again in order to rescan repositories"
2277 msgstr ""
2277 msgstr ""
@@ -2760,7 +2760,7 b' msgstr ""'
2760 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:3011
2760 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:3011
2761 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:3012
2761 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:3012
2762 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:3230 rhodecode/model/db.py:3997
2762 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:3230 rhodecode/model/db.py:3997
2763 #: rhodecode/public/js/scripts.js:42595 rhodecode/public/js/scripts.min.js:1
2763 #: rhodecode/public/js/scripts.js:42733 rhodecode/public/js/scripts.min.js:1
2764 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:72
2764 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:72
2765 #: rhodecode/public/js/src/rhodecode/pullrequests.js:396
2765 #: rhodecode/public/js/src/rhodecode/pullrequests.js:396
2766 msgid "Not Reviewed"
2766 msgid "Not Reviewed"
@@ -3520,7 +3520,7 b' msgstr ""'
3520 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2358
3520 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2358
3521 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2359
3521 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2359
3522 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2559 rhodecode/model/db.py:3174
3522 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2559 rhodecode/model/db.py:3174
3523 #: rhodecode/model/permission.py:105
3523 #: rhodecode/model/permission.py:107
3524 msgid "Manual activation of external account"
3524 msgid "Manual activation of external account"
3525 msgstr ""
3525 msgstr ""
3526
3526
@@ -3560,7 +3560,7 b' msgstr ""'
3560 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2359
3560 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2359
3561 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2360
3561 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2360
3562 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2560 rhodecode/model/db.py:3175
3562 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2560 rhodecode/model/db.py:3175
3563 #: rhodecode/model/permission.py:106
3563 #: rhodecode/model/permission.py:108
3564 msgid "Automatic activation of external account"
3564 msgid "Automatic activation of external account"
3565 msgstr ""
3565 msgstr ""
3566
3566
@@ -3986,51 +3986,51 b' msgstr ""'
3986 msgid "Commit index"
3986 msgid "Commit index"
3987 msgstr ""
3987 msgstr ""
3988
3988
3989 #: rhodecode/lib/vcs/backends/base.py:186
3989 #: rhodecode/lib/vcs/backends/base.py:190
3990 msgid "This pull request can be automatically merged."
3990 msgid "This pull request can be automatically merged."
3991 msgstr ""
3991 msgstr ""
3992
3992
3993 #: rhodecode/lib/vcs/backends/base.py:188
3993 #: rhodecode/lib/vcs/backends/base.py:192
3994 msgid "This pull request cannot be merged because of an unhandled exception. {exception}"
3994 msgid "This pull request cannot be merged because of an unhandled exception. {exception}"
3995 msgstr ""
3995 msgstr ""
3996
3996
3997 #: rhodecode/lib/vcs/backends/base.py:191
3997 #: rhodecode/lib/vcs/backends/base.py:195
3998 msgid "This pull request cannot be merged because of merge conflicts. {unresolved_files}"
3998 msgid "This pull request cannot be merged because of merge conflicts. {unresolved_files}"
3999 msgstr ""
3999 msgstr ""
4000
4000
4001 #: rhodecode/lib/vcs/backends/base.py:193
4001 #: rhodecode/lib/vcs/backends/base.py:197
4002 msgid "This pull request could not be merged because push to target:`{target}@{merge_commit}` failed."
4002 msgid "This pull request could not be merged because push to target:`{target}@{merge_commit}` failed."
4003 msgstr ""
4003 msgstr ""
4004
4004
4005 #: rhodecode/lib/vcs/backends/base.py:196
4005 #: rhodecode/lib/vcs/backends/base.py:200
4006 msgid "This pull request cannot be merged because the target `{target_ref.name}` is not a head."
4006 msgid "This pull request cannot be merged because the target `{target_ref.name}` is not a head."
4007 msgstr ""
4007 msgstr ""
4008
4008
4009 #: rhodecode/lib/vcs/backends/base.py:199
4009 #: rhodecode/lib/vcs/backends/base.py:203
4010 msgid "This pull request cannot be merged because the source contains more branches than the target."
4010 msgid "This pull request cannot be merged because the source contains more branches than the target."
4011 msgstr ""
4011 msgstr ""
4012
4012
4013 #: rhodecode/lib/vcs/backends/base.py:202
4013 #: rhodecode/lib/vcs/backends/base.py:206
4014 msgid "This pull request cannot be merged because the target `{target_ref.name}` has multiple heads: `{heads}`."
4014 msgid "This pull request cannot be merged because the target `{target_ref.name}` has multiple heads: `{heads}`."
4015 msgstr ""
4015 msgstr ""
4016
4016
4017 #: rhodecode/lib/vcs/backends/base.py:205
4018 msgid "This pull request cannot be merged because the target repository is locked by {locked_by}."
4019 msgstr ""
4020
4021 #: rhodecode/lib/vcs/backends/base.py:209
4017 #: rhodecode/lib/vcs/backends/base.py:209
4018 msgid "This pull request cannot be merged because the target repository is locked by {locked_by}."
4019 msgstr ""
4020
4021 #: rhodecode/lib/vcs/backends/base.py:213
4022 msgid "This pull request cannot be merged because the target reference `{target_ref.name}` is missing."
4022 msgid "This pull request cannot be merged because the target reference `{target_ref.name}` is missing."
4023 msgstr ""
4023 msgstr ""
4024
4024
4025 #: rhodecode/lib/vcs/backends/base.py:212
4025 #: rhodecode/lib/vcs/backends/base.py:216
4026 msgid "This pull request cannot be merged because the source reference `{source_ref.name}` is missing."
4026 msgid "This pull request cannot be merged because the source reference `{source_ref.name}` is missing."
4027 msgstr ""
4027 msgstr ""
4028
4028
4029 #: rhodecode/lib/vcs/backends/base.py:215
4029 #: rhodecode/lib/vcs/backends/base.py:219
4030 msgid "This pull request cannot be merged because of conflicts related to sub repositories."
4030 msgid "This pull request cannot be merged because of conflicts related to sub repositories."
4031 msgstr ""
4031 msgstr ""
4032
4032
4033 #: rhodecode/lib/vcs/backends/base.py:220
4033 #: rhodecode/lib/vcs/backends/base.py:224
4034 msgid "This pull request cannot be merged because the target or the source reference is missing."
4034 msgid "This pull request cannot be merged because the target or the source reference is missing."
4035 msgstr ""
4035 msgstr ""
4036
4036
@@ -4138,8 +4138,8 b' msgstr ""'
4138 msgid "%(user)s commented on pull request at %(date_or_age)s"
4138 msgid "%(user)s commented on pull request at %(date_or_age)s"
4139 msgstr ""
4139 msgstr ""
4140
4140
4141 #: rhodecode/model/permission.py:71 rhodecode/model/permission.py:77
4141 #: rhodecode/model/permission.py:73 rhodecode/model/permission.py:79
4142 #: rhodecode/model/permission.py:83
4142 #: rhodecode/model/permission.py:85
4143 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:11
4143 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:11
4144 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:217
4144 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:217
4145 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:11
4145 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:11
@@ -4147,27 +4147,27 b' msgstr ""'
4147 msgid "None"
4147 msgid "None"
4148 msgstr ""
4148 msgstr ""
4149
4149
4150 #: rhodecode/model/permission.py:72 rhodecode/model/permission.py:78
4150 #: rhodecode/model/permission.py:74 rhodecode/model/permission.py:80
4151 #: rhodecode/model/permission.py:84
4151 #: rhodecode/model/permission.py:86
4152 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:12
4152 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:12
4153 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:12
4153 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:12
4154 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:16
4154 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:16
4155 msgid "Read"
4155 msgid "Read"
4156 msgstr ""
4156 msgstr ""
4157
4157
4158 #: rhodecode/model/permission.py:73 rhodecode/model/permission.py:79
4158 #: rhodecode/model/permission.py:75 rhodecode/model/permission.py:81
4159 #: rhodecode/model/permission.py:85
4159 #: rhodecode/model/permission.py:87
4160 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:13
4160 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:13
4161 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:13
4161 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:13
4162 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:17
4162 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:17
4163 #: rhodecode/templates/changeset/changeset_file_comment.mako:392
4163 #: rhodecode/templates/changeset/changeset_file_comment.mako:392
4164 #: rhodecode/templates/changeset/changeset_file_comment.mako:443
4164 #: rhodecode/templates/changeset/changeset_file_comment.mako:443
4165 #: rhodecode/templates/data_table/_dt_elements.mako:453
4165 #: rhodecode/templates/data_table/_dt_elements.mako:460
4166 msgid "Write"
4166 msgid "Write"
4167 msgstr ""
4167 msgstr ""
4168
4168
4169 #: rhodecode/model/permission.py:74 rhodecode/model/permission.py:80
4169 #: rhodecode/model/permission.py:76 rhodecode/model/permission.py:82
4170 #: rhodecode/model/permission.py:86
4170 #: rhodecode/model/permission.py:88
4171 #: rhodecode/templates/admin/auth/plugin_settings.mako:12
4171 #: rhodecode/templates/admin/auth/plugin_settings.mako:12
4172 #: rhodecode/templates/admin/defaults/defaults.mako:12
4172 #: rhodecode/templates/admin/defaults/defaults.mako:12
4173 #: rhodecode/templates/admin/integrations/base.mako:21
4173 #: rhodecode/templates/admin/integrations/base.mako:21
@@ -4189,51 +4189,51 b' msgstr ""'
4189 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:18
4189 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:18
4190 #: rhodecode/templates/admin/users/user_add.mako:11
4190 #: rhodecode/templates/admin/users/user_add.mako:11
4191 #: rhodecode/templates/admin/users/user_edit.mako:12
4191 #: rhodecode/templates/admin/users/user_edit.mako:12
4192 #: rhodecode/templates/base/base.mako:838
4192 #: rhodecode/templates/base/base.mako:839
4193 msgid "Admin"
4193 msgid "Admin"
4194 msgstr ""
4194 msgstr ""
4195
4195
4196 #: rhodecode/model/permission.py:89
4197 msgid "Protected/No Access"
4198 msgstr ""
4199
4200 #: rhodecode/model/permission.py:90
4201 msgid "Web merge"
4202 msgstr ""
4203
4204 #: rhodecode/model/permission.py:91
4196 #: rhodecode/model/permission.py:91
4205 msgid "Push"
4197 msgid "Protected/No Access"
4206 msgstr ""
4198 msgstr ""
4207
4199
4208 #: rhodecode/model/permission.py:92
4200 #: rhodecode/model/permission.py:92
4201 msgid "Web merge"
4202 msgstr ""
4203
4204 #: rhodecode/model/permission.py:93
4205 msgid "Push"
4206 msgstr ""
4207
4208 #: rhodecode/model/permission.py:94
4209 msgid "Force Push"
4209 msgid "Force Push"
4210 msgstr ""
4210 msgstr ""
4211
4211
4212 #: rhodecode/model/permission.py:95 rhodecode/model/permission.py:109
4212 #: rhodecode/model/permission.py:97 rhodecode/model/permission.py:111
4213 #: rhodecode/model/permission.py:113 rhodecode/model/permission.py:117
4213 #: rhodecode/model/permission.py:115 rhodecode/model/permission.py:119
4214 #: rhodecode/model/permission.py:121 rhodecode/model/permission.py:125
4214 #: rhodecode/model/permission.py:123 rhodecode/model/permission.py:127
4215 #: rhodecode/model/permission.py:129
4215 #: rhodecode/model/permission.py:131
4216 #: rhodecode/templates/admin/my_account/my_account_notifications.mako:27
4216 #: rhodecode/templates/admin/my_account/my_account_notifications.mako:27
4217 msgid "Disabled"
4217 msgid "Disabled"
4218 msgstr ""
4218 msgstr ""
4219
4219
4220 #: rhodecode/model/permission.py:96
4220 #: rhodecode/model/permission.py:98
4221 msgid "Allowed with manual account activation"
4221 msgid "Allowed with manual account activation"
4222 msgstr ""
4222 msgstr ""
4223
4223
4224 #: rhodecode/model/permission.py:97
4224 #: rhodecode/model/permission.py:99
4225 msgid "Allowed with automatic account activation"
4225 msgid "Allowed with automatic account activation"
4226 msgstr ""
4226 msgstr ""
4227
4227
4228 #: rhodecode/model/permission.py:100
4229 msgid "Allow password recovery"
4230 msgstr ""
4231
4232 #: rhodecode/model/permission.py:101
4233 msgid "Hide password recovery link"
4234 msgstr ""
4235
4236 #: rhodecode/model/permission.py:102
4228 #: rhodecode/model/permission.py:102
4229 msgid "Allow password recovery"
4230 msgstr ""
4231
4232 #: rhodecode/model/permission.py:103
4233 msgid "Hide password recovery link"
4234 msgstr ""
4235
4236 #: rhodecode/model/permission.py:104
4237 msgid "Disable password recovery"
4237 msgid "Disable password recovery"
4238 msgstr ""
4238 msgstr ""
4239
4239
@@ -4261,79 +4261,79 b' msgstr ""'
4261 msgid "This pull request cannot be updated because the source reference is missing."
4261 msgid "This pull request cannot be updated because the source reference is missing."
4262 msgstr ""
4262 msgstr ""
4263
4263
4264 #: rhodecode/model/pull_request.py:1688
4264 #: rhodecode/model/pull_request.py:1690
4265 msgid "Server-side pull request merging is disabled."
4265 msgid "Server-side pull request merging is disabled."
4266 msgstr ""
4266 msgstr ""
4267
4267
4268 #: rhodecode/model/pull_request.py:1691
4268 #: rhodecode/model/pull_request.py:1693
4269 msgid "This pull request is closed."
4269 msgid "This pull request is closed."
4270 msgstr ""
4270 msgstr ""
4271
4271
4272 #: rhodecode/model/pull_request.py:1705
4272 #: rhodecode/model/pull_request.py:1707
4273 msgid "Pull request merging is not supported."
4273 msgid "Pull request merging is not supported."
4274 msgstr ""
4274 msgstr ""
4275
4275
4276 #: rhodecode/model/pull_request.py:1722
4276 #: rhodecode/model/pull_request.py:1724
4277 msgid "Target repository large files support is disabled."
4277 msgid "Target repository large files support is disabled."
4278 msgstr ""
4278 msgstr ""
4279
4279
4280 #: rhodecode/model/pull_request.py:1725
4280 #: rhodecode/model/pull_request.py:1727
4281 msgid "Source repository large files support is disabled."
4281 msgid "Source repository large files support is disabled."
4282 msgstr ""
4282 msgstr ""
4283
4283
4284 #: rhodecode/model/pull_request.py:1909 rhodecode/model/scm.py:1008
4284 #: rhodecode/model/pull_request.py:1911 rhodecode/model/scm.py:1008
4285 #: rhodecode/templates/admin/my_account/my_account.mako:32
4285 #: rhodecode/templates/admin/my_account/my_account.mako:32
4286 #: rhodecode/templates/base/base.mako:638
4286 #: rhodecode/templates/base/base.mako:639
4287 #: rhodecode/templates/summary/components.mako:46
4287 #: rhodecode/templates/summary/components.mako:46
4288 msgid "Bookmarks"
4288 msgid "Bookmarks"
4289 msgstr ""
4289 msgstr ""
4290
4290
4291 #: rhodecode/model/pull_request.py:1914
4291 #: rhodecode/model/pull_request.py:1916
4292 msgid "Commit IDs"
4292 msgid "Commit IDs"
4293 msgstr ""
4293 msgstr ""
4294
4294
4295 #: rhodecode/model/pull_request.py:1917
4295 #: rhodecode/model/pull_request.py:1919
4296 #: rhodecode/templates/summary/components.mako:22
4296 #: rhodecode/templates/summary/components.mako:22
4297 msgid "Closed Branches"
4297 msgid "Closed Branches"
4298 msgstr ""
4298 msgstr ""
4299
4299
4300 #: rhodecode/model/pull_request.py:2103
4300 #: rhodecode/model/pull_request.py:2105
4301 msgid "WIP marker in title prevents from accidental merge."
4301 msgid "WIP marker in title prevents from accidental merge."
4302 msgstr ""
4302 msgstr ""
4303
4303
4304 #: rhodecode/model/pull_request.py:2113
4304 #: rhodecode/model/pull_request.py:2115
4305 msgid "User `{}` not allowed to perform merge."
4305 msgid "User `{}` not allowed to perform merge."
4306 msgstr ""
4306 msgstr ""
4307
4307
4308 #: rhodecode/model/pull_request.py:2131
4308 #: rhodecode/model/pull_request.py:2133
4309 msgid "Target branch `{}` changes rejected by rule {}."
4309 msgid "Target branch `{}` changes rejected by rule {}."
4310 msgstr ""
4310 msgstr ""
4311
4311
4312 #: rhodecode/model/pull_request.py:2146
4312 #: rhodecode/model/pull_request.py:2148
4313 msgid "Pull request reviewer approval is pending."
4313 msgid "Pull request reviewer approval is pending."
4314 msgstr ""
4314 msgstr ""
4315
4315
4316 #: rhodecode/model/pull_request.py:2160
4316 #: rhodecode/model/pull_request.py:2162
4317 msgid "Cannot merge, {} TODO still not resolved."
4317 msgid "Cannot merge, {} TODO still not resolved."
4318 msgstr ""
4318 msgstr ""
4319
4319
4320 #: rhodecode/model/pull_request.py:2163
4320 #: rhodecode/model/pull_request.py:2165
4321 msgid "Cannot merge, {} TODOs still not resolved."
4321 msgid "Cannot merge, {} TODOs still not resolved."
4322 msgstr ""
4322 msgstr ""
4323
4323
4324 #: rhodecode/model/pull_request.py:2218
4324 #: rhodecode/model/pull_request.py:2220
4325 msgid "Merge strategy: rebase"
4325 msgid "Merge strategy: rebase"
4326 msgstr ""
4326 msgstr ""
4327
4327
4328 #: rhodecode/model/pull_request.py:2223
4328 #: rhodecode/model/pull_request.py:2225
4329 msgid "Merge strategy: explicit merge commit"
4329 msgid "Merge strategy: explicit merge commit"
4330 msgstr ""
4330 msgstr ""
4331
4331
4332 #: rhodecode/model/pull_request.py:2231
4333 msgid "Source branch will be closed before the merge."
4334 msgstr ""
4335
4336 #: rhodecode/model/pull_request.py:2233
4332 #: rhodecode/model/pull_request.py:2233
4333 msgid "Source branch will be closed before the merge."
4334 msgstr ""
4335
4336 #: rhodecode/model/pull_request.py:2235
4337 msgid "Source branch will be deleted after the merge."
4337 msgid "Source branch will be deleted after the merge."
4338 msgstr ""
4338 msgstr ""
4339
4339
@@ -4880,129 +4880,133 b' msgstr ""'
4880 msgid "Note Comment"
4880 msgid "Note Comment"
4881 msgstr ""
4881 msgstr ""
4882
4882
4883 #: rhodecode/public/js/scripts.js:39599 rhodecode/public/js/scripts.js:39987
4883 #: rhodecode/public/js/scripts.js:39599 rhodecode/public/js/scripts.js:39985
4884 #: rhodecode/public/js/scripts.min.js:1
4884 #: rhodecode/public/js/scripts.min.js:1
4885 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:103
4885 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:103
4886 #: rhodecode/public/js/src/rhodecode/codemirror.js:730
4886 #: rhodecode/public/js/src/rhodecode/codemirror.js:730
4887 #: rhodecode/public/js/src/rhodecode/comments.js:267
4887 #: rhodecode/public/js/src/rhodecode/comments.js:265
4888 msgid "Status Review"
4888 msgid "Status Review"
4889 msgstr ""
4889 msgstr ""
4890
4890
4891 #: rhodecode/public/js/scripts.js:39614 rhodecode/public/js/scripts.js:40004
4891 #: rhodecode/public/js/scripts.js:39614 rhodecode/public/js/scripts.js:40002
4892 #: rhodecode/public/js/scripts.min.js:1
4892 #: rhodecode/public/js/scripts.min.js:1
4893 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:24
4893 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:24
4894 #: rhodecode/public/js/src/rhodecode/codemirror.js:745
4894 #: rhodecode/public/js/src/rhodecode/codemirror.js:745
4895 #: rhodecode/public/js/src/rhodecode/comments.js:284
4895 #: rhodecode/public/js/src/rhodecode/comments.js:282
4896 msgid "Comment text will be set automatically based on currently selected status ({0}) ..."
4896 msgid "Comment text will be set automatically based on currently selected status ({0}) ..."
4897 msgstr ""
4897 msgstr ""
4898
4898
4899 #: rhodecode/public/js/scripts.js:39695 rhodecode/public/js/scripts.js:40213
4899 #: rhodecode/public/js/scripts.js:39695 rhodecode/public/js/scripts.js:40211
4900 #: rhodecode/public/js/scripts.js:41745 rhodecode/public/js/scripts.min.js:1
4900 #: rhodecode/public/js/scripts.js:41883 rhodecode/public/js/scripts.min.js:1
4901 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:49
4901 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:49
4902 #: rhodecode/public/js/src/rhodecode/codemirror.js:826
4902 #: rhodecode/public/js/src/rhodecode/codemirror.js:826
4903 #: rhodecode/public/js/src/rhodecode/comments.js:493
4903 #: rhodecode/public/js/src/rhodecode/comments.js:491
4904 #: rhodecode/public/js/src/rhodecode/files.js:499
4904 #: rhodecode/public/js/src/rhodecode/files.js:499
4905 #: rhodecode/templates/files/files_browser_tree.mako:57
4905 #: rhodecode/templates/files/files_browser_tree.mako:57
4906 msgid "Loading ..."
4906 msgid "Loading ..."
4907 msgstr ""
4907 msgstr ""
4908
4908
4909 #: rhodecode/public/js/scripts.js:39860 rhodecode/public/js/scripts.min.js:1
4909 #: rhodecode/public/js/scripts.js:39859 rhodecode/public/js/scripts.min.js:1
4910 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:123
4910 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:123
4911 #: rhodecode/public/js/src/rhodecode/comments.js:140
4911 #: rhodecode/public/js/src/rhodecode/comments.js:139
4912 msgid "Update Comment"
4912 msgid "Update Comment"
4913 msgstr ""
4913 msgstr ""
4914
4914
4915 #: rhodecode/public/js/scripts.js:39884 rhodecode/public/js/scripts.min.js:1
4915 #: rhodecode/public/js/scripts.js:39883 rhodecode/public/js/scripts.min.js:1
4916 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:150
4916 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:150
4917 #: rhodecode/public/js/src/rhodecode/comments.js:164
4917 #: rhodecode/public/js/src/rhodecode/comments.js:163
4918 msgid "resolve comment"
4918 msgid "resolve comment"
4919 msgstr ""
4919 msgstr ""
4920
4920
4921 #: rhodecode/public/js/scripts.js:40155 rhodecode/public/js/scripts.min.js:1
4922 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:83
4923 #: rhodecode/public/js/src/rhodecode/comments.js:435
4924 msgid "Saving Draft..."
4925 msgstr ""
4926
4921 #: rhodecode/public/js/scripts.js:40157 rhodecode/public/js/scripts.min.js:1
4927 #: rhodecode/public/js/scripts.js:40157 rhodecode/public/js/scripts.min.js:1
4922 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:83
4928 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:108
4923 #: rhodecode/public/js/src/rhodecode/comments.js:437
4929 #: rhodecode/public/js/src/rhodecode/comments.js:437
4924 msgid "Saving Draft..."
4925 msgstr ""
4926
4927 #: rhodecode/public/js/scripts.js:40159 rhodecode/public/js/scripts.min.js:1
4928 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:108
4929 #: rhodecode/public/js/src/rhodecode/comments.js:439
4930 msgid "Submitting..."
4930 msgid "Submitting..."
4931 msgstr ""
4931 msgstr ""
4932
4932
4933 #: rhodecode/public/js/scripts.js:40481 rhodecode/public/js/scripts.min.js:1
4933 #: rhodecode/public/js/scripts.js:40479 rhodecode/public/js/scripts.min.js:1
4934 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:131
4934 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:131
4935 #: rhodecode/public/js/src/rhodecode/comments.js:761
4935 #: rhodecode/public/js/src/rhodecode/comments.js:759
4936 msgid "Yes, delete comment #{0}!"
4936 msgid "Yes, delete comment #{0}!"
4937 msgstr ""
4937 msgstr ""
4938
4938
4939 #: rhodecode/public/js/scripts.js:40526 rhodecode/public/js/scripts.min.js:1
4939 #: rhodecode/public/js/scripts.js:40524 rhodecode/public/js/scripts.min.js:1
4940 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:106
4940 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:106
4941 #: rhodecode/public/js/src/rhodecode/comments.js:806
4941 #: rhodecode/public/js/src/rhodecode/comments.js:804
4942 msgid "Submit {0} draft comment."
4942 msgid "Submit {0} draft comment."
4943 msgstr ""
4943 msgstr ""
4944
4944
4945 #: rhodecode/public/js/scripts.js:40529 rhodecode/public/js/scripts.min.js:1
4945 #: rhodecode/public/js/scripts.js:40527 rhodecode/public/js/scripts.js:41225
4946 #: rhodecode/public/js/scripts.min.js:1
4946 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:130
4947 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:130
4947 #: rhodecode/public/js/src/rhodecode/comments.js:809
4948 #: rhodecode/public/js/src/rhodecode/comments.js:807
4949 #: rhodecode/public/js/src/rhodecode/comments.js:1505
4948 msgid "Yes"
4950 msgid "Yes"
4949 msgstr ""
4951 msgstr ""
4950
4952
4951 #: rhodecode/public/js/scripts.js:40621 rhodecode/public/js/scripts.min.js:1
4953 #: rhodecode/public/js/scripts.js:40619 rhodecode/public/js/scripts.min.js:1
4952 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:47
4954 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:47
4953 #: rhodecode/public/js/src/rhodecode/comments.js:901
4955 #: rhodecode/public/js/src/rhodecode/comments.js:899
4954 msgid "Leave a resolution comment, or click resolve button to resolve TODO comment #{0}"
4956 msgid "Leave a resolution comment, or click resolve button to resolve TODO comment #{0}"
4955 msgstr ""
4957 msgstr ""
4956
4958
4957 #: rhodecode/public/js/scripts.js:40825 rhodecode/public/js/scripts.min.js:1
4959 #: rhodecode/public/js/scripts.js:40823 rhodecode/public/js/scripts.min.js:1
4958 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:23
4960 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:23
4959 #: rhodecode/public/js/src/rhodecode/comments.js:1105
4961 #: rhodecode/public/js/src/rhodecode/comments.js:1103
4960 msgid "Comment body was not changed."
4962 msgid "Comment body was not changed."
4961 msgstr ""
4963 msgstr ""
4962
4964
4963 #: rhodecode/public/js/scripts.js:41071 rhodecode/public/js/scripts.min.js:1
4965 #: rhodecode/public/js/scripts.js:41074 rhodecode/public/js/scripts.min.js:1
4964 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:44
4966 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:44
4965 #: rhodecode/public/js/src/rhodecode/comments.js:1351
4967 #: rhodecode/public/js/src/rhodecode/comments.js:1354
4966 msgid "Leave a comment on file {0} line {1}."
4968 msgid "Leave a comment on file {0} line {1}."
4967 msgstr ""
4969 msgstr ""
4968
4970
4969 #: rhodecode/public/js/scripts.js:41212 rhodecode/public/js/scripts.min.js:1
4971 #: rhodecode/public/js/scripts.js:41214 rhodecode/public/js/scripts.js:41267
4972 #: rhodecode/public/js/scripts.min.js:1
4970 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:113
4973 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:113
4971 #: rhodecode/public/js/src/rhodecode/comments.js:1492
4974 #: rhodecode/public/js/src/rhodecode/comments.js:1494
4975 #: rhodecode/public/js/src/rhodecode/comments.js:1547
4972 msgid "TODO from comment {0} was fixed."
4976 msgid "TODO from comment {0} was fixed."
4973 msgstr ""
4977 msgstr ""
4974
4978
4975 #: rhodecode/public/js/scripts.js:41494 rhodecode/public/js/scripts.min.js:1
4979 #: rhodecode/public/js/scripts.js:41632 rhodecode/public/js/scripts.min.js:1
4976 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:154
4980 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:154
4977 #: rhodecode/public/js/src/rhodecode/files.js:248
4981 #: rhodecode/public/js/src/rhodecode/files.js:248
4978 msgid "truncated result"
4982 msgid "truncated result"
4979 msgstr ""
4983 msgstr ""
4980
4984
4981 #: rhodecode/public/js/scripts.js:41496 rhodecode/public/js/scripts.min.js:1
4985 #: rhodecode/public/js/scripts.js:41634 rhodecode/public/js/scripts.min.js:1
4982 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:155
4986 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:155
4983 #: rhodecode/public/js/src/rhodecode/files.js:250
4987 #: rhodecode/public/js/src/rhodecode/files.js:250
4984 msgid "truncated results"
4988 msgid "truncated results"
4985 msgstr ""
4989 msgstr ""
4986
4990
4987 #: rhodecode/public/js/scripts.js:41505 rhodecode/public/js/scripts.min.js:1
4991 #: rhodecode/public/js/scripts.js:41643 rhodecode/public/js/scripts.min.js:1
4988 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:60
4992 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:60
4989 #: rhodecode/public/js/src/rhodecode/files.js:259
4993 #: rhodecode/public/js/src/rhodecode/files.js:259
4990 msgid "No matching files"
4994 msgid "No matching files"
4991 msgstr ""
4995 msgstr ""
4992
4996
4993 #: rhodecode/public/js/scripts.js:41563 rhodecode/public/js/scripts.min.js:1
4997 #: rhodecode/public/js/scripts.js:41701 rhodecode/public/js/scripts.min.js:1
4994 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:86
4998 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:86
4995 #: rhodecode/public/js/src/rhodecode/files.js:317
4999 #: rhodecode/public/js/src/rhodecode/files.js:317
4996 msgid "Selection link"
5000 msgid "Selection link"
4997 msgstr ""
5001 msgstr ""
4998
5002
4999 #: rhodecode/public/js/scripts.js:41660 rhodecode/public/js/scripts.min.js:1
5003 #: rhodecode/public/js/scripts.js:41798 rhodecode/public/js/scripts.min.js:1
5000 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:10
5004 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:10
5001 #: rhodecode/public/js/src/rhodecode/files.js:414
5005 #: rhodecode/public/js/src/rhodecode/files.js:414
5002 msgid "All Authors"
5006 msgid "All Authors"
5003 msgstr ""
5007 msgstr ""
5004
5008
5005 #: rhodecode/public/js/scripts.js:41810 rhodecode/public/js/scripts.js:41813
5009 #: rhodecode/public/js/scripts.js:41948 rhodecode/public/js/scripts.js:41951
5006 #: rhodecode/public/js/scripts.min.js:1
5010 #: rhodecode/public/js/scripts.min.js:1
5007 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:38
5011 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:38
5008 #: rhodecode/public/js/src/rhodecode/files.js:564
5012 #: rhodecode/public/js/src/rhodecode/files.js:564
@@ -5010,141 +5014,141 b' msgstr ""'
5010 msgid "File `{0}` has a newer version available, or has been removed. Click {1} to see the latest version."
5014 msgid "File `{0}` has a newer version available, or has been removed. Click {1} to see the latest version."
5011 msgstr ""
5015 msgstr ""
5012
5016
5013 #: rhodecode/public/js/scripts.js:41816 rhodecode/public/js/scripts.min.js:1
5017 #: rhodecode/public/js/scripts.js:41954 rhodecode/public/js/scripts.min.js:1
5014 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:117
5018 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:117
5015 #: rhodecode/public/js/src/rhodecode/files.js:570
5019 #: rhodecode/public/js/src/rhodecode/files.js:570
5016 msgid "There is an existing path `{0}` at this commit."
5020 msgid "There is an existing path `{0}` at this commit."
5017 msgstr ""
5021 msgstr ""
5018
5022
5019 #: rhodecode/public/js/scripts.js:41819 rhodecode/public/js/scripts.min.js:1
5023 #: rhodecode/public/js/scripts.js:41957 rhodecode/public/js/scripts.min.js:1
5020 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:116
5024 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:116
5021 #: rhodecode/public/js/src/rhodecode/files.js:573
5025 #: rhodecode/public/js/src/rhodecode/files.js:573
5022 msgid "There is a later version of file tree available. Click {0} to create a file at the latest tree."
5026 msgid "There is a later version of file tree available. Click {0} to create a file at the latest tree."
5023 msgstr ""
5027 msgstr ""
5024
5028
5025 #: rhodecode/public/js/scripts.js:41873 rhodecode/public/js/scripts.min.js:1
5029 #: rhodecode/public/js/scripts.js:42011 rhodecode/public/js/scripts.min.js:1
5026 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:105
5030 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:105
5027 #: rhodecode/public/js/src/rhodecode/followers.js:26
5031 #: rhodecode/public/js/src/rhodecode/followers.js:26
5028 msgid "Stopped watching this repository"
5032 msgid "Stopped watching this repository"
5029 msgstr ""
5033 msgstr ""
5030
5034
5031 #: rhodecode/public/js/scripts.js:41874 rhodecode/public/js/scripts.min.js:1
5035 #: rhodecode/public/js/scripts.js:42012 rhodecode/public/js/scripts.min.js:1
5032 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:129
5036 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:129
5033 #: rhodecode/public/js/src/rhodecode/followers.js:27
5037 #: rhodecode/public/js/src/rhodecode/followers.js:27
5034 #: rhodecode/templates/base/base.mako:310
5038 #: rhodecode/templates/base/base.mako:311
5035 msgid "Watch"
5039 msgid "Watch"
5036 msgstr ""
5040 msgstr ""
5037
5041
5038 #: rhodecode/public/js/scripts.js:41877 rhodecode/public/js/scripts.min.js:1
5042 #: rhodecode/public/js/scripts.js:42015 rhodecode/public/js/scripts.min.js:1
5039 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:102
5043 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:102
5040 #: rhodecode/public/js/src/rhodecode/followers.js:30
5044 #: rhodecode/public/js/src/rhodecode/followers.js:30
5041 msgid "Started watching this repository"
5045 msgid "Started watching this repository"
5042 msgstr ""
5046 msgstr ""
5043
5047
5044 #: rhodecode/public/js/scripts.js:41878 rhodecode/public/js/scripts.min.js:1
5048 #: rhodecode/public/js/scripts.js:42016 rhodecode/public/js/scripts.min.js:1
5045 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:122
5049 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:122
5046 #: rhodecode/public/js/src/rhodecode/followers.js:31
5050 #: rhodecode/public/js/src/rhodecode/followers.js:31
5047 #: rhodecode/templates/base/base.mako:308
5051 #: rhodecode/templates/base/base.mako:309
5048 msgid "Unwatch"
5052 msgid "Unwatch"
5049 msgstr ""
5053 msgstr ""
5050
5054
5051 #: rhodecode/public/js/scripts.js:42384 rhodecode/public/js/scripts.min.js:1
5055 #: rhodecode/public/js/scripts.js:42522 rhodecode/public/js/scripts.min.js:1
5052 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:12
5056 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:12
5053 #: rhodecode/public/js/src/rhodecode/pullrequests.js:185
5057 #: rhodecode/public/js/src/rhodecode/pullrequests.js:185
5054 msgid "All reviewers must vote."
5058 msgid "All reviewers must vote."
5055 msgstr ""
5059 msgstr ""
5056
5060
5057 #: rhodecode/public/js/scripts.js:42408 rhodecode/public/js/scripts.min.js:1
5061 #: rhodecode/public/js/scripts.js:42546 rhodecode/public/js/scripts.min.js:1
5058 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:54
5062 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:54
5059 #: rhodecode/public/js/src/rhodecode/pullrequests.js:209
5063 #: rhodecode/public/js/src/rhodecode/pullrequests.js:209
5060 msgid "No additional review rules set."
5064 msgid "No additional review rules set."
5061 msgstr ""
5065 msgstr ""
5062
5066
5063 #: rhodecode/public/js/scripts.js:42454 rhodecode/public/js/scripts.min.js:1
5067 #: rhodecode/public/js/scripts.js:42592 rhodecode/public/js/scripts.min.js:1
5064 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:50
5068 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:50
5065 #: rhodecode/public/js/src/rhodecode/pullrequests.js:255
5069 #: rhodecode/public/js/src/rhodecode/pullrequests.js:255
5066 msgid "Loading diff ..."
5070 msgid "Loading diff ..."
5067 msgstr ""
5071 msgstr ""
5068
5072
5069 #: rhodecode/public/js/scripts.js:42507 rhodecode/public/js/scripts.min.js:1
5073 #: rhodecode/public/js/scripts.js:42645 rhodecode/public/js/scripts.min.js:1
5070 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:115
5074 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:115
5071 #: rhodecode/public/js/src/rhodecode/pullrequests.js:308
5075 #: rhodecode/public/js/src/rhodecode/pullrequests.js:308
5072 msgid "There are no commits to merge."
5076 msgid "There are no commits to merge."
5073 msgstr ""
5077 msgstr ""
5074
5078
5075 #: rhodecode/public/js/scripts.js:42579 rhodecode/public/js/scripts.min.js:1
5079 #: rhodecode/public/js/scripts.js:42717 rhodecode/public/js/scripts.min.js:1
5076 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:128
5080 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:128
5077 #: rhodecode/public/js/src/rhodecode/pullrequests.js:380
5081 #: rhodecode/public/js/src/rhodecode/pullrequests.js:380
5078 msgid "User `{0}` not allowed to be a reviewer"
5082 msgid "User `{0}` not allowed to be a reviewer"
5079 msgstr ""
5083 msgstr ""
5080
5084
5081 #: rhodecode/public/js/scripts.js:42585 rhodecode/public/js/scripts.min.js:1
5085 #: rhodecode/public/js/scripts.js:42723 rhodecode/public/js/scripts.min.js:1
5082 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:127
5086 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:127
5083 #: rhodecode/public/js/src/rhodecode/pullrequests.js:386
5087 #: rhodecode/public/js/src/rhodecode/pullrequests.js:386
5084 msgid "User `{0}` already in reviewers/observers"
5088 msgid "User `{0}` already in reviewers/observers"
5085 msgstr ""
5089 msgstr ""
5086
5090
5087 #: rhodecode/public/js/scripts.js:42699 rhodecode/public/js/scripts.min.js:1
5091 #: rhodecode/public/js/scripts.js:42838 rhodecode/public/js/scripts.min.js:1
5088 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:135
5092 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:135
5089 #: rhodecode/public/js/src/rhodecode/pullrequests.js:501
5093 #: rhodecode/public/js/src/rhodecode/pullrequests.js:501
5090 msgid "added manually by \"{0}\""
5094 msgid "added manually by \"{0}\""
5091 msgstr ""
5095 msgstr ""
5092
5096
5093 #: rhodecode/public/js/scripts.js:42704 rhodecode/public/js/scripts.min.js:1
5097 #: rhodecode/public/js/scripts.js:42843 rhodecode/public/js/scripts.min.js:1
5094 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:147
5098 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:147
5095 #: rhodecode/public/js/src/rhodecode/pullrequests.js:506
5099 #: rhodecode/public/js/src/rhodecode/pullrequests.js:506
5096 msgid "member of \"{0}\""
5100 msgid "member of \"{0}\""
5097 msgstr ""
5101 msgstr ""
5098
5102
5099 #: rhodecode/public/js/scripts.js:42937 rhodecode/public/js/scripts.min.js:1
5103 #: rhodecode/public/js/scripts.js:43076 rhodecode/public/js/scripts.min.js:1
5100 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:125
5104 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:125
5101 #: rhodecode/public/js/src/rhodecode/pullrequests.js:739
5105 #: rhodecode/public/js/src/rhodecode/pullrequests.js:739
5102 msgid "Updating..."
5106 msgid "Updating..."
5103 msgstr ""
5107 msgstr ""
5104
5108
5105 #: rhodecode/public/js/scripts.js:42947 rhodecode/public/js/scripts.min.js:1
5109 #: rhodecode/public/js/scripts.js:43086 rhodecode/public/js/scripts.min.js:1
5106 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:40
5110 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:40
5107 #: rhodecode/public/js/src/rhodecode/pullrequests.js:749
5111 #: rhodecode/public/js/src/rhodecode/pullrequests.js:749
5108 msgid "Force updating..."
5112 msgid "Force updating..."
5109 msgstr ""
5113 msgstr ""
5110
5114
5111 #: rhodecode/public/js/scripts.js:47812 rhodecode/public/js/scripts.min.js:1
5115 #: rhodecode/public/js/scripts.js:47953 rhodecode/public/js/scripts.min.js:1
5112 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:98
5116 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:98
5113 #: rhodecode/public/js/src/rhodecode/users.js:54
5117 #: rhodecode/public/js/src/rhodecode/users.js:54
5114 msgid "Show this authentication token?"
5118 msgid "Show this authentication token?"
5115 msgstr ""
5119 msgstr ""
5116
5120
5117 #: rhodecode/public/js/scripts.js:47814 rhodecode/public/js/scripts.min.js:1
5121 #: rhodecode/public/js/scripts.js:47955 rhodecode/public/js/scripts.min.js:1
5118 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:90
5122 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:90
5119 #: rhodecode/public/js/src/rhodecode/users.js:56
5123 #: rhodecode/public/js/src/rhodecode/users.js:56
5120 msgid "Show"
5124 msgid "Show"
5121 msgstr ""
5125 msgstr ""
5122
5126
5123 #: rhodecode/public/js/scripts.js:47850 rhodecode/public/js/scripts.min.js:1
5127 #: rhodecode/public/js/scripts.js:47991 rhodecode/public/js/scripts.min.js:1
5124 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:16
5128 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:16
5125 #: rhodecode/public/js/src/rhodecode/users.js:92
5129 #: rhodecode/public/js/src/rhodecode/users.js:92
5126 msgid "Authentication Token"
5130 msgid "Authentication Token"
5127 msgstr ""
5131 msgstr ""
5128
5132
5129 #: rhodecode/public/js/scripts.js:48039 rhodecode/public/js/scripts.min.js:1
5133 #: rhodecode/public/js/scripts.js:48180 rhodecode/public/js/scripts.min.js:1
5130 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:139
5134 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:139
5131 #: rhodecode/public/js/src/rhodecode.js:144
5135 #: rhodecode/public/js/src/rhodecode.js:144
5132 msgid "file"
5136 msgid "file"
5133 msgstr ""
5137 msgstr ""
5134
5138
5135 #: rhodecode/public/js/scripts.js:48183 rhodecode/public/js/scripts.min.js:1
5139 #: rhodecode/public/js/scripts.js:48324 rhodecode/public/js/scripts.min.js:1
5136 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:53
5140 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:53
5137 #: rhodecode/public/js/src/rhodecode.js:288
5141 #: rhodecode/public/js/src/rhodecode.js:288
5138 msgid "Loading..."
5142 msgid "Loading..."
5139 msgstr ""
5143 msgstr ""
5140
5144
5141 #: rhodecode/public/js/scripts.js:48565 rhodecode/public/js/scripts.min.js:1
5145 #: rhodecode/public/js/scripts.js:48706 rhodecode/public/js/scripts.min.js:1
5142 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:136
5146 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:136
5143 #: rhodecode/public/js/src/rhodecode.js:670
5147 #: rhodecode/public/js/src/rhodecode.js:670
5144 msgid "date not in future"
5148 msgid "date not in future"
5145 msgstr ""
5149 msgstr ""
5146
5150
5147 #: rhodecode/public/js/scripts.js:48573 rhodecode/public/js/scripts.min.js:1
5151 #: rhodecode/public/js/scripts.js:48714 rhodecode/public/js/scripts.min.js:1
5148 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:100
5152 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:100
5149 #: rhodecode/public/js/src/rhodecode.js:678
5153 #: rhodecode/public/js/src/rhodecode.js:678
5150 msgid "Specified expiration date"
5154 msgid "Specified expiration date"
@@ -5737,8 +5741,8 b' msgid "%s Repository group dashboard"'
5737 msgstr ""
5741 msgstr ""
5738
5742
5739 #: rhodecode/templates/index_repo_group.mako:13
5743 #: rhodecode/templates/index_repo_group.mako:13
5740 #: rhodecode/templates/base/base.mako:810
5741 #: rhodecode/templates/base/base.mako:811
5744 #: rhodecode/templates/base/base.mako:811
5745 #: rhodecode/templates/base/base.mako:812
5742 msgid "Home"
5746 msgid "Home"
5743 msgstr ""
5747 msgstr ""
5744
5748
@@ -5933,9 +5937,9 b' msgstr ""'
5933 #: rhodecode/templates/admin/admin_log_base.mako:10
5937 #: rhodecode/templates/admin/admin_log_base.mako:10
5934 #: rhodecode/templates/admin/defaults/defaults.mako:32
5938 #: rhodecode/templates/admin/defaults/defaults.mako:32
5935 #: rhodecode/templates/admin/permissions/permissions_objects.mako:16
5939 #: rhodecode/templates/admin/permissions/permissions_objects.mako:16
5936 #: rhodecode/templates/base/base.mako:658
5940 #: rhodecode/templates/base/base.mako:659
5937 #: rhodecode/templates/base/base.mako:660
5941 #: rhodecode/templates/base/base.mako:661
5938 #: rhodecode/templates/base/base.mako:662
5942 #: rhodecode/templates/base/base.mako:663
5939 #: rhodecode/templates/search/search_commit.mako:8
5943 #: rhodecode/templates/search/search_commit.mako:8
5940 #: rhodecode/templates/search/search_path.mako:7
5944 #: rhodecode/templates/search/search_path.mako:7
5941 msgid "Repository"
5945 msgid "Repository"
@@ -6261,7 +6265,7 b' msgid "Expires"'
6261 msgstr ""
6265 msgstr ""
6262
6266
6263 #: rhodecode/templates/admin/gists/gist_new.mako:5
6267 #: rhodecode/templates/admin/gists/gist_new.mako:5
6264 #: rhodecode/templates/base/base.mako:577
6268 #: rhodecode/templates/base/base.mako:578
6265 msgid "New Gist"
6269 msgid "New Gist"
6266 msgstr ""
6270 msgstr ""
6267
6271
@@ -6353,7 +6357,7 b' msgstr ""'
6353 #: rhodecode/templates/admin/integrations/new.mako:15
6357 #: rhodecode/templates/admin/integrations/new.mako:15
6354 #: rhodecode/templates/admin/repo_groups/repo_group_edit.mako:33
6358 #: rhodecode/templates/admin/repo_groups/repo_group_edit.mako:33
6355 #: rhodecode/templates/admin/repos/repo_edit.mako:74
6359 #: rhodecode/templates/admin/repos/repo_edit.mako:74
6356 #: rhodecode/templates/base/base.mako:120
6360 #: rhodecode/templates/base/base.mako:121
6357 msgid "Integrations"
6361 msgid "Integrations"
6358 msgstr ""
6362 msgstr ""
6359
6363
@@ -6368,7 +6372,7 b' msgstr ""'
6368 #: rhodecode/templates/admin/settings/settings.mako:14
6372 #: rhodecode/templates/admin/settings/settings.mako:14
6369 #: rhodecode/templates/admin/user_groups/user_group_edit.mako:34
6373 #: rhodecode/templates/admin/user_groups/user_group_edit.mako:34
6370 #: rhodecode/templates/admin/user_groups/user_group_edit_settings.mako:9
6374 #: rhodecode/templates/admin/user_groups/user_group_edit_settings.mako:9
6371 #: rhodecode/templates/base/base.mako:122
6375 #: rhodecode/templates/base/base.mako:123
6372 msgid "Settings"
6376 msgid "Settings"
6373 msgstr ""
6377 msgstr ""
6374
6378
@@ -6469,7 +6473,7 b' msgid "No description available"'
6469 msgstr ""
6473 msgstr ""
6470
6474
6471 #: rhodecode/templates/admin/my_account/my_account.mako:5
6475 #: rhodecode/templates/admin/my_account/my_account.mako:5
6472 #: rhodecode/templates/base/base.mako:622
6476 #: rhodecode/templates/base/base.mako:623
6473 msgid "My account"
6477 msgid "My account"
6474 msgstr ""
6478 msgstr ""
6475
6479
@@ -6520,15 +6524,15 b' msgstr ""'
6520
6524
6521 #: rhodecode/templates/admin/my_account/my_account.mako:45
6525 #: rhodecode/templates/admin/my_account/my_account.mako:45
6522 #: rhodecode/templates/admin/notifications/notifications_show_all.mako:42
6526 #: rhodecode/templates/admin/notifications/notifications_show_all.mako:42
6523 #: rhodecode/templates/base/base.mako:385
6527 #: rhodecode/templates/base/base.mako:386
6524 #: rhodecode/templates/base/base.mako:626
6528 #: rhodecode/templates/base/base.mako:627
6525 msgid "Pull Requests"
6529 msgid "Pull Requests"
6526 msgstr ""
6530 msgstr ""
6527
6531
6528 #: rhodecode/templates/admin/my_account/my_account.mako:46
6532 #: rhodecode/templates/admin/my_account/my_account.mako:46
6529 #: rhodecode/templates/admin/permissions/permissions.mako:14
6533 #: rhodecode/templates/admin/permissions/permissions.mako:14
6530 #: rhodecode/templates/admin/user_groups/user_group_edit.mako:35
6534 #: rhodecode/templates/admin/user_groups/user_group_edit.mako:35
6531 #: rhodecode/templates/base/base.mako:118
6535 #: rhodecode/templates/base/base.mako:119
6532 msgid "Permissions"
6536 msgid "Permissions"
6533 msgstr ""
6537 msgstr ""
6534
6538
@@ -7047,7 +7051,7 b' msgstr ""'
7047 #: rhodecode/templates/admin/repo_groups/repo_group_add.mako:14
7051 #: rhodecode/templates/admin/repo_groups/repo_group_add.mako:14
7048 #: rhodecode/templates/admin/users/user_edit_advanced.mako:13
7052 #: rhodecode/templates/admin/users/user_edit_advanced.mako:13
7049 #: rhodecode/templates/base/base.mako:115
7053 #: rhodecode/templates/base/base.mako:115
7050 #: rhodecode/templates/base/base.mako:136
7054 #: rhodecode/templates/base/base.mako:137
7051 msgid "Repository groups"
7055 msgid "Repository groups"
7052 msgstr ""
7056 msgstr ""
7053
7057
@@ -7062,7 +7066,7 b' msgstr ""'
7062 #: rhodecode/templates/admin/repo_groups/repo_group_edit_settings.mako:25
7066 #: rhodecode/templates/admin/repo_groups/repo_group_edit_settings.mako:25
7063 #: rhodecode/templates/admin/repos/repo_add_base.mako:43
7067 #: rhodecode/templates/admin/repos/repo_add_base.mako:43
7064 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:33
7068 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:33
7065 #: rhodecode/templates/base/base.mako:671
7069 #: rhodecode/templates/base/base.mako:672
7066 #: rhodecode/templates/data_table/_dt_elements.mako:217
7070 #: rhodecode/templates/data_table/_dt_elements.mako:217
7067 #: rhodecode/templates/forks/fork.mako:41
7071 #: rhodecode/templates/forks/fork.mako:41
7068 msgid "Repository group"
7072 msgid "Repository group"
@@ -7312,7 +7316,7 b' msgid "Import Existing Repository ?"'
7312 msgstr ""
7316 msgstr ""
7313
7317
7314 #: rhodecode/templates/admin/repos/repo_add_base.mako:23
7318 #: rhodecode/templates/admin/repos/repo_add_base.mako:23
7315 #: rhodecode/templates/base/base.mako:332
7319 #: rhodecode/templates/base/base.mako:333
7316 msgid "Clone from"
7320 msgid "Clone from"
7317 msgstr ""
7321 msgstr ""
7318
7322
@@ -8024,7 +8028,7 b' msgstr ""'
8024 #: rhodecode/templates/admin/settings/settings_global.mako:140
8028 #: rhodecode/templates/admin/settings/settings_global.mako:140
8025 #: rhodecode/templates/admin/settings/settings_labs.mako:48
8029 #: rhodecode/templates/admin/settings/settings_labs.mako:48
8026 #: rhodecode/templates/admin/settings/settings_vcs.mako:13
8030 #: rhodecode/templates/admin/settings/settings_vcs.mako:13
8027 #: rhodecode/templates/admin/settings/settings_visual.mako:214
8031 #: rhodecode/templates/admin/settings/settings_visual.mako:217
8028 msgid "Save settings"
8032 msgid "Save settings"
8029 msgstr ""
8033 msgstr ""
8030
8034
@@ -8550,7 +8554,7 b' msgstr ""'
8550 msgid "Clone URL templates"
8554 msgid "Clone URL templates"
8551 msgstr ""
8555 msgstr ""
8552
8556
8553 #: rhodecode/templates/admin/settings/settings_visual.mako:181
8557 #: rhodecode/templates/admin/settings/settings_visual.mako:184
8554 msgid ""
8558 msgid ""
8555 "Schema of clone url construction eg. '{scheme}://{user}@{netloc}/{repo}', available vars:\n"
8559 "Schema of clone url construction eg. '{scheme}://{user}@{netloc}/{repo}', available vars:\n"
8556 " {scheme} 'http' or 'https' sent from running RhodeCode server,\n"
8560 " {scheme} 'http' or 'https' sent from running RhodeCode server,\n"
@@ -8562,11 +8566,11 b' msgid ""'
8562 " {repoid} ID of repository, can be used to contruct clone-by-id"
8566 " {repoid} ID of repository, can be used to contruct clone-by-id"
8563 msgstr ""
8567 msgstr ""
8564
8568
8565 #: rhodecode/templates/admin/settings/settings_visual.mako:196
8569 #: rhodecode/templates/admin/settings/settings_visual.mako:199
8566 msgid "Custom Support Link"
8570 msgid "Custom Support Link"
8567 msgstr ""
8571 msgstr ""
8568
8572
8569 #: rhodecode/templates/admin/settings/settings_visual.mako:204
8573 #: rhodecode/templates/admin/settings/settings_visual.mako:207
8570 #, python-format
8574 #, python-format
8571 msgid ""
8575 msgid ""
8572 "Custom url for the support link located at the bottom.\n"
8576 "Custom url for the support link located at the bottom.\n"
@@ -8582,7 +8586,7 b' msgstr ""'
8582 #: rhodecode/templates/admin/user_groups/user_group_add.mako:13
8586 #: rhodecode/templates/admin/user_groups/user_group_add.mako:13
8583 #: rhodecode/templates/admin/users/user_edit_advanced.mako:14
8587 #: rhodecode/templates/admin/users/user_edit_advanced.mako:14
8584 #: rhodecode/templates/base/base.mako:117
8588 #: rhodecode/templates/base/base.mako:117
8585 #: rhodecode/templates/base/base.mako:139
8589 #: rhodecode/templates/base/base.mako:140
8586 msgid "User groups"
8590 msgid "User groups"
8587 msgstr ""
8591 msgstr ""
8588
8592
@@ -9090,16 +9094,21 b' msgstr ""'
9090 msgid "Delegated Admin Panel"
9094 msgid "Delegated Admin Panel"
9091 msgstr ""
9095 msgstr ""
9092
9096
9093 #: rhodecode/templates/base/base.mako:119
9097 #: rhodecode/templates/base/base.mako:118
9098 #: rhodecode/templates/base/base.mako:395
9099 msgid "Artifacts"
9100 msgstr ""
9101
9102 #: rhodecode/templates/base/base.mako:120
9094 msgid "Authentication"
9103 msgid "Authentication"
9095 msgstr ""
9104 msgstr ""
9096
9105
9097 #: rhodecode/templates/base/base.mako:121
9106 #: rhodecode/templates/base/base.mako:122
9098 msgid "Defaults"
9107 msgid "Defaults"
9099 msgstr ""
9108 msgstr ""
9100
9109
9101 #: rhodecode/templates/base/base.mako:161
9110 #: rhodecode/templates/base/base.mako:162
9102 #: rhodecode/templates/base/base.mako:201
9111 #: rhodecode/templates/base/base.mako:202
9103 #: rhodecode/templates/changeset/changeset.mako:140
9112 #: rhodecode/templates/changeset/changeset.mako:140
9104 #: rhodecode/templates/files/files_source_header.mako:57
9113 #: rhodecode/templates/files/files_source_header.mako:57
9105 #: rhodecode/templates/files/files_tree_header.mako:44
9114 #: rhodecode/templates/files/files_tree_header.mako:44
@@ -9107,40 +9116,40 b' msgstr ""'
9107 msgid "Show More"
9116 msgid "Show More"
9108 msgstr ""
9117 msgstr ""
9109
9118
9110 #: rhodecode/templates/base/base.mako:304
9119 #: rhodecode/templates/base/base.mako:305
9111 #: rhodecode/templates/base/base.mako:315
9120 #: rhodecode/templates/base/base.mako:316
9112 msgid "RSS Feed"
9121 msgid "RSS Feed"
9113 msgstr ""
9122 msgstr ""
9114
9123
9115 #: rhodecode/templates/base/base.mako:306
9124 #: rhodecode/templates/base/base.mako:307
9116 msgid "Watch this Repository and actions on it in your personalized journal"
9125 msgid "Watch this Repository and actions on it in your personalized journal"
9117 msgstr ""
9126 msgstr ""
9118
9127
9119 #: rhodecode/templates/base/base.mako:324
9128 #: rhodecode/templates/base/base.mako:325
9120 msgid "Fork of"
9129 msgid "Fork of"
9121 msgstr ""
9130 msgstr ""
9122
9131
9123 #: rhodecode/templates/base/base.mako:341
9132 #: rhodecode/templates/base/base.mako:342
9124 #, python-format
9133 #, python-format
9125 msgid "Repository locked by %(user)s"
9134 msgid "Repository locked by %(user)s"
9126 msgstr ""
9135 msgstr ""
9127
9136
9128 #: rhodecode/templates/base/base.mako:346
9137 #: rhodecode/templates/base/base.mako:347
9129 msgid "Repository not locked. Pull repository to lock it."
9138 msgid "Repository not locked. Pull repository to lock it."
9130 msgstr ""
9139 msgstr ""
9131
9140
9132 #: rhodecode/templates/base/base.mako:362
9141 #: rhodecode/templates/base/base.mako:363
9133 msgid "This repository has been archived. It is now read-only."
9142 msgid "This repository has been archived. It is now read-only."
9134 msgstr ""
9143 msgstr ""
9135
9144
9136 #: rhodecode/templates/base/base.mako:375
9145 #: rhodecode/templates/base/base.mako:376
9137 #: rhodecode/templates/data_table/_dt_elements.mako:58
9146 #: rhodecode/templates/data_table/_dt_elements.mako:58
9138 #: rhodecode/templates/data_table/_dt_elements.mako:59
9147 #: rhodecode/templates/data_table/_dt_elements.mako:59
9139 #: rhodecode/templates/data_table/_dt_elements.mako:207
9148 #: rhodecode/templates/data_table/_dt_elements.mako:207
9140 msgid "Summary"
9149 msgid "Summary"
9141 msgstr ""
9150 msgstr ""
9142
9151
9143 #: rhodecode/templates/base/base.mako:376
9152 #: rhodecode/templates/base/base.mako:377
9144 #: rhodecode/templates/data_table/_dt_elements.mako:63
9153 #: rhodecode/templates/data_table/_dt_elements.mako:63
9145 #: rhodecode/templates/data_table/_dt_elements.mako:64
9154 #: rhodecode/templates/data_table/_dt_elements.mako:64
9146 #: rhodecode/templates/files/file_authors_box.mako:30
9155 #: rhodecode/templates/files/file_authors_box.mako:30
@@ -9150,7 +9159,7 b' msgstr ""'
9150 msgid "Commits"
9159 msgid "Commits"
9151 msgstr ""
9160 msgstr ""
9152
9161
9153 #: rhodecode/templates/base/base.mako:377
9162 #: rhodecode/templates/base/base.mako:378
9154 #: rhodecode/templates/data_table/_dt_elements.mako:68
9163 #: rhodecode/templates/data_table/_dt_elements.mako:68
9155 #: rhodecode/templates/data_table/_dt_elements.mako:69
9164 #: rhodecode/templates/data_table/_dt_elements.mako:69
9156 #: rhodecode/templates/files/files.mako:15
9165 #: rhodecode/templates/files/files.mako:15
@@ -9158,87 +9167,83 b' msgstr ""'
9158 msgid "Files"
9167 msgid "Files"
9159 msgstr ""
9168 msgstr ""
9160
9169
9161 #: rhodecode/templates/base/base.mako:378
9170 #: rhodecode/templates/base/base.mako:379
9162 #: rhodecode/templates/bookmarks/bookmarks.mako:78
9171 #: rhodecode/templates/bookmarks/bookmarks.mako:78
9163 #: rhodecode/templates/branches/branches.mako:77
9172 #: rhodecode/templates/branches/branches.mako:77
9164 #: rhodecode/templates/tags/tags.mako:78
9173 #: rhodecode/templates/tags/tags.mako:78
9165 msgid "Compare"
9174 msgid "Compare"
9166 msgstr ""
9175 msgstr ""
9167
9176
9168 #: rhodecode/templates/base/base.mako:383
9177 #: rhodecode/templates/base/base.mako:384
9169 #, python-format
9178 #, python-format
9170 msgid "Show Pull Requests for %s"
9179 msgid "Show Pull Requests for %s"
9171 msgstr ""
9180 msgstr ""
9172
9181
9173 #: rhodecode/templates/base/base.mako:394
9182 #: rhodecode/templates/base/base.mako:401
9174 msgid "Artifacts"
9175 msgstr ""
9176
9177 #: rhodecode/templates/base/base.mako:400
9178 msgid "Repository Settings"
9183 msgid "Repository Settings"
9179 msgstr ""
9184 msgstr ""
9180
9185
9181 #: rhodecode/templates/base/base.mako:406
9186 #: rhodecode/templates/base/base.mako:407
9182 msgid "Options"
9187 msgid "Options"
9183 msgstr ""
9188 msgstr ""
9184
9189
9185 #: rhodecode/templates/base/base.mako:411
9190 #: rhodecode/templates/base/base.mako:412
9186 msgid "Unlock Repository"
9191 msgid "Unlock Repository"
9187 msgstr ""
9192 msgstr ""
9188
9193
9189 #: rhodecode/templates/base/base.mako:413
9194 #: rhodecode/templates/base/base.mako:414
9190 msgid "Lock Repository"
9195 msgid "Lock Repository"
9191 msgstr ""
9196 msgstr ""
9192
9197
9193 #: rhodecode/templates/base/base.mako:466
9198 #: rhodecode/templates/base/base.mako:467
9194 msgid "Group Home"
9199 msgid "Group Home"
9195 msgstr ""
9200 msgstr ""
9196
9201
9197 #: rhodecode/templates/base/base.mako:470
9202 #: rhodecode/templates/base/base.mako:471
9198 msgid "You have admin right to this group, and can edit it"
9203 msgid "You have admin right to this group, and can edit it"
9199 msgstr ""
9204 msgstr ""
9200
9205
9201 #: rhodecode/templates/base/base.mako:470
9206 #: rhodecode/templates/base/base.mako:471
9202 msgid "Group Settings"
9207 msgid "Group Settings"
9203 msgstr ""
9208 msgstr ""
9204
9209
9205 #: rhodecode/templates/base/base.mako:521
9210 #: rhodecode/templates/base/base.mako:522
9206 msgid "This Repository"
9211 msgid "This Repository"
9207 msgstr ""
9212 msgstr ""
9208
9213
9209 #: rhodecode/templates/base/base.mako:523
9214 #: rhodecode/templates/base/base.mako:524
9210 msgid "Create Pull Request"
9215 msgid "Create Pull Request"
9211 msgstr ""
9216 msgstr ""
9212
9217
9213 #: rhodecode/templates/base/base.mako:527
9218 #: rhodecode/templates/base/base.mako:528
9214 msgid "Fork this repository"
9219 msgid "Fork this repository"
9215 msgstr ""
9220 msgstr ""
9216
9221
9217 #: rhodecode/templates/base/base.mako:534
9222 #: rhodecode/templates/base/base.mako:535
9218 msgid "This Repository Group"
9223 msgid "This Repository Group"
9219 msgstr ""
9224 msgstr ""
9220
9225
9221 #: rhodecode/templates/base/base.mako:538
9226 #: rhodecode/templates/base/base.mako:539
9222 #: rhodecode/templates/base/base.mako:554
9227 #: rhodecode/templates/base/base.mako:555
9223 #: rhodecode/templates/base/base.mako:566
9228 #: rhodecode/templates/base/base.mako:567
9224 msgid "New Repository"
9229 msgid "New Repository"
9225 msgstr ""
9230 msgstr ""
9226
9231
9227 #: rhodecode/templates/base/base.mako:544
9232 #: rhodecode/templates/base/base.mako:545
9228 #: rhodecode/templates/base/base.mako:558
9233 #: rhodecode/templates/base/base.mako:559
9229 #: rhodecode/templates/base/base.mako:572
9234 #: rhodecode/templates/base/base.mako:573
9230 msgid "New Repository Group"
9235 msgid "New Repository Group"
9231 msgstr ""
9236 msgstr ""
9232
9237
9233 #: rhodecode/templates/base/base.mako:599
9238 #: rhodecode/templates/base/base.mako:600
9234 msgid "Sign in"
9239 msgid "Sign in"
9235 msgstr ""
9240 msgstr ""
9236
9241
9237 #: rhodecode/templates/base/base.mako:624
9242 #: rhodecode/templates/base/base.mako:625
9238 msgid "My personal group"
9243 msgid "My personal group"
9239 msgstr ""
9244 msgstr ""
9240
9245
9241 #: rhodecode/templates/base/base.mako:630
9246 #: rhodecode/templates/base/base.mako:631
9242 #: rhodecode/templates/debug_style/alerts.html:5
9247 #: rhodecode/templates/debug_style/alerts.html:5
9243 #: rhodecode/templates/debug_style/buttons.html:5
9248 #: rhodecode/templates/debug_style/buttons.html:5
9244 #: rhodecode/templates/debug_style/code-block.html:6
9249 #: rhodecode/templates/debug_style/code-block.html:6
@@ -9261,62 +9266,62 b' msgstr ""'
9261 msgid "Style"
9266 msgid "Style"
9262 msgstr ""
9267 msgstr ""
9263
9268
9264 #: rhodecode/templates/base/base.mako:631
9269 #: rhodecode/templates/base/base.mako:632
9265 msgid "[Style]"
9270 msgid "[Style]"
9266 msgstr ""
9271 msgstr ""
9267
9272
9268 #: rhodecode/templates/base/base.mako:648
9273 #: rhodecode/templates/base/base.mako:649
9269 msgid "No Bookmarks yet."
9274 msgid "No Bookmarks yet."
9270 msgstr ""
9275 msgstr ""
9271
9276
9272 #: rhodecode/templates/base/base.mako:686
9277 #: rhodecode/templates/base/base.mako:687
9273 msgid "Sign Out"
9278 msgid "Sign Out"
9274 msgstr ""
9279 msgstr ""
9275
9280
9276 #: rhodecode/templates/base/base.mako:731
9281 #: rhodecode/templates/base/base.mako:732
9277 #: rhodecode/templates/changeset/changeset_file_comment.mako:538
9282 #: rhodecode/templates/changeset/changeset_file_comment.mako:538
9278 msgid "dismiss"
9283 msgid "dismiss"
9279 msgstr ""
9284 msgstr ""
9280
9285
9281 #: rhodecode/templates/base/base.mako:772
9286 #: rhodecode/templates/base/base.mako:773
9282 msgid "search / go to..."
9287 msgid "search / go to..."
9283 msgstr ""
9288 msgstr ""
9284
9289
9285 #: rhodecode/templates/base/base.mako:817
9286 msgid "Show activity journal"
9287 msgstr ""
9288
9289 #: rhodecode/templates/base/base.mako:818
9290 #: rhodecode/templates/base/base.mako:818
9291 msgid "Show activity journal"
9292 msgstr ""
9293
9294 #: rhodecode/templates/base/base.mako:819
9290 #: rhodecode/templates/journal/journal.mako:4
9295 #: rhodecode/templates/journal/journal.mako:4
9291 #: rhodecode/templates/journal/journal.mako:14
9296 #: rhodecode/templates/journal/journal.mako:14
9292 msgid "Journal"
9297 msgid "Journal"
9293 msgstr ""
9298 msgstr ""
9294
9299
9295 #: rhodecode/templates/base/base.mako:823
9296 msgid "Show Public activity journal"
9297 msgstr ""
9298
9299 #: rhodecode/templates/base/base.mako:824
9300 #: rhodecode/templates/base/base.mako:824
9301 msgid "Show Public activity journal"
9302 msgstr ""
9303
9304 #: rhodecode/templates/base/base.mako:825
9300 msgid "Public journal"
9305 msgid "Public journal"
9301 msgstr ""
9306 msgstr ""
9302
9307
9303 #: rhodecode/templates/base/base.mako:830
9304 msgid "Show Gists"
9305 msgstr ""
9306
9307 #: rhodecode/templates/base/base.mako:831
9308 #: rhodecode/templates/base/base.mako:831
9309 msgid "Show Gists"
9310 msgstr ""
9311
9312 #: rhodecode/templates/base/base.mako:832
9308 msgid "Gists"
9313 msgid "Gists"
9309 msgstr ""
9314 msgstr ""
9310
9315
9311 #: rhodecode/templates/base/base.mako:837
9316 #: rhodecode/templates/base/base.mako:838
9312 msgid "Admin settings"
9317 msgid "Admin settings"
9313 msgstr ""
9318 msgstr ""
9314
9319
9315 #: rhodecode/templates/base/base.mako:1154
9320 #: rhodecode/templates/base/base.mako:1155
9316 msgid "Keyboard shortcuts"
9321 msgid "Keyboard shortcuts"
9317 msgstr ""
9322 msgstr ""
9318
9323
9319 #: rhodecode/templates/base/base.mako:1162
9324 #: rhodecode/templates/base/base.mako:1163
9320 msgid "Site-wide shortcuts"
9325 msgid "Site-wide shortcuts"
9321 msgstr ""
9326 msgstr ""
9322
9327
@@ -9357,7 +9362,7 b' msgid "Repository Forking"'
9357 msgstr ""
9362 msgstr ""
9358
9363
9359 #: rhodecode/templates/base/default_perms_box.mako:65
9364 #: rhodecode/templates/base/default_perms_box.mako:65
9360 msgid "Permission to create root level repository forks. When disabled, users can still fork repositories inside their own repository groups."
9365 msgid "Permission to create repository forks. Root level forks will only work if repository creation is enabled."
9361 msgstr ""
9366 msgstr ""
9362
9367
9363 #: rhodecode/templates/base/default_perms_box.mako:70
9368 #: rhodecode/templates/base/default_perms_box.mako:70
@@ -9418,7 +9423,7 b' msgstr ""'
9418 #: rhodecode/templates/base/issue_tracker_settings.mako:300
9423 #: rhodecode/templates/base/issue_tracker_settings.mako:300
9419 #: rhodecode/templates/changeset/changeset_file_comment.mako:395
9424 #: rhodecode/templates/changeset/changeset_file_comment.mako:395
9420 #: rhodecode/templates/changeset/changeset_file_comment.mako:446
9425 #: rhodecode/templates/changeset/changeset_file_comment.mako:446
9421 #: rhodecode/templates/data_table/_dt_elements.mako:456
9426 #: rhodecode/templates/data_table/_dt_elements.mako:463
9422 #: rhodecode/templates/files/files_add.mako:59
9427 #: rhodecode/templates/files/files_add.mako:59
9423 #: rhodecode/templates/files/files_edit.mako:61
9428 #: rhodecode/templates/files/files_edit.mako:61
9424 msgid "Preview"
9429 msgid "Preview"
@@ -10481,11 +10486,11 b' msgstr ""'
10481 msgid "Work in progress"
10486 msgid "Work in progress"
10482 msgstr ""
10487 msgstr ""
10483
10488
10484 #: rhodecode/templates/data_table/_dt_elements.mako:432
10489 #: rhodecode/templates/data_table/_dt_elements.mako:438
10485 msgid "Info"
10490 msgid "Info"
10486 msgstr ""
10491 msgstr ""
10487
10492
10488 #: rhodecode/templates/data_table/_dt_elements.mako:473
10493 #: rhodecode/templates/data_table/_dt_elements.mako:480
10489 #, python-format
10494 #, python-format
10490 msgid "Parsed using %s syntax"
10495 msgid "Parsed using %s syntax"
10491 msgstr ""
10496 msgstr ""
@@ -10645,7 +10650,7 b' msgid "{mention_prefix}{user} left a {co'
10645 msgstr ""
10650 msgstr ""
10646
10651
10647 #: rhodecode/templates/email_templates/commit_comment.mako:54
10652 #: rhodecode/templates/email_templates/commit_comment.mako:54
10648 #: rhodecode/templates/email_templates/pull_request_comment.mako:63
10653 #: rhodecode/templates/email_templates/pull_request_comment.mako:62
10649 msgid "Comment link"
10654 msgid "Comment link"
10650 msgstr ""
10655 msgstr ""
10651
10656
@@ -10662,26 +10667,26 b' msgid "Commit message"'
10662 msgstr ""
10667 msgstr ""
10663
10668
10664 #: rhodecode/templates/email_templates/commit_comment.mako:65
10669 #: rhodecode/templates/email_templates/commit_comment.mako:65
10665 #: rhodecode/templates/email_templates/pull_request_comment.mako:77
10670 #: rhodecode/templates/email_templates/pull_request_comment.mako:76
10666 msgid "File: {comment_file} on line {comment_line}"
10671 msgid "File: {comment_file} on line {comment_line}"
10667 msgstr ""
10672 msgstr ""
10668
10673
10669 #: rhodecode/templates/email_templates/commit_comment.mako:69
10674 #: rhodecode/templates/email_templates/commit_comment.mako:69
10670 #: rhodecode/templates/email_templates/commit_comment.mako:161
10675 #: rhodecode/templates/email_templates/commit_comment.mako:161
10671 #: rhodecode/templates/email_templates/pull_request_comment.mako:81
10676 #: rhodecode/templates/email_templates/pull_request_comment.mako:80
10672 #: rhodecode/templates/email_templates/pull_request_comment.mako:191
10677 #: rhodecode/templates/email_templates/pull_request_comment.mako:190
10673 msgid "`TODO` number"
10678 msgid "`TODO` number"
10674 msgstr ""
10679 msgstr ""
10675
10680
10676 #: rhodecode/templates/email_templates/commit_comment.mako:71
10681 #: rhodecode/templates/email_templates/commit_comment.mako:71
10677 #: rhodecode/templates/email_templates/commit_comment.mako:163
10682 #: rhodecode/templates/email_templates/commit_comment.mako:163
10678 #: rhodecode/templates/email_templates/pull_request_comment.mako:83
10683 #: rhodecode/templates/email_templates/pull_request_comment.mako:82
10679 #: rhodecode/templates/email_templates/pull_request_comment.mako:193
10684 #: rhodecode/templates/email_templates/pull_request_comment.mako:192
10680 msgid "`Note` number"
10685 msgid "`Note` number"
10681 msgstr ""
10686 msgstr ""
10682
10687
10683 #: rhodecode/templates/email_templates/commit_comment.mako:104
10688 #: rhodecode/templates/email_templates/commit_comment.mako:104
10684 #: rhodecode/templates/email_templates/pull_request_comment.mako:124
10689 #: rhodecode/templates/email_templates/pull_request_comment.mako:123
10685 msgid "left a"
10690 msgid "left a"
10686 msgstr ""
10691 msgstr ""
10687
10692
@@ -10702,18 +10707,18 b' msgid "Commit Status"'
10702 msgstr ""
10707 msgstr ""
10703
10708
10704 #: rhodecode/templates/email_templates/commit_comment.mako:153
10709 #: rhodecode/templates/email_templates/commit_comment.mako:153
10705 #: rhodecode/templates/email_templates/pull_request_comment.mako:183
10710 #: rhodecode/templates/email_templates/pull_request_comment.mako:182
10706 #: rhodecode/templates/search/search_path.mako:9
10711 #: rhodecode/templates/search/search_path.mako:9
10707 msgid "File"
10712 msgid "File"
10708 msgstr ""
10713 msgstr ""
10709
10714
10710 #: rhodecode/templates/email_templates/commit_comment.mako:154
10715 #: rhodecode/templates/email_templates/commit_comment.mako:154
10711 #: rhodecode/templates/email_templates/pull_request_comment.mako:184
10716 #: rhodecode/templates/email_templates/pull_request_comment.mako:183
10712 msgid "`{comment_file}` on line {comment_line}"
10717 msgid "`{comment_file}` on line {comment_line}"
10713 msgstr ""
10718 msgstr ""
10714
10719
10715 #: rhodecode/templates/email_templates/commit_comment.mako:173
10720 #: rhodecode/templates/email_templates/commit_comment.mako:173
10716 #: rhodecode/templates/email_templates/pull_request_comment.mako:203
10721 #: rhodecode/templates/email_templates/pull_request_comment.mako:202
10717 msgid "Reply"
10722 msgid "Reply"
10718 msgstr ""
10723 msgstr ""
10719
10724
@@ -10729,35 +10734,35 b' msgstr ""'
10729 msgid "{mention_prefix}{user} left a {comment_type} on pull request !{pr_id}: \"{pr_title}\""
10734 msgid "{mention_prefix}{user} left a {comment_type} on pull request !{pr_id}: \"{pr_title}\""
10730 msgstr ""
10735 msgstr ""
10731
10736
10732 #: rhodecode/templates/email_templates/pull_request_comment.mako:65
10737 #: rhodecode/templates/email_templates/pull_request_comment.mako:64
10733 #: rhodecode/templates/hovercards/hovercard_pull_request.mako:24
10738 #: rhodecode/templates/hovercards/hovercard_pull_request.mako:24
10734 msgid "Pull Request"
10739 msgid "Pull Request"
10735 msgstr ""
10740 msgstr ""
10736
10741
10737 #: rhodecode/templates/email_templates/pull_request_comment.mako:67
10742 #: rhodecode/templates/email_templates/pull_request_comment.mako:66
10738 #: rhodecode/templates/email_templates/pull_request_review.mako:45
10743 #: rhodecode/templates/email_templates/pull_request_review.mako:45
10739 #: rhodecode/templates/email_templates/pull_request_update.mako:41
10744 #: rhodecode/templates/email_templates/pull_request_update.mako:41
10740 msgid "Commit flow: {source_ref_type}:{source_ref_name} of {source_repo_url} into {target_ref_type}:{target_ref_name} of {target_repo_url}"
10745 msgid "Commit flow: {source_ref_type}:{source_ref_name} of {source_repo_url} into {target_ref_type}:{target_ref_name} of {target_repo_url}"
10741 msgstr ""
10746 msgstr ""
10742
10747
10743 #: rhodecode/templates/email_templates/pull_request_comment.mako:70
10748 #: rhodecode/templates/email_templates/pull_request_comment.mako:69
10744 msgid "{user} submitted pull request !{pr_id} status: *{status}*"
10749 msgid "{user} submitted pull request !{pr_id} status: *{status}*"
10745 msgstr ""
10750 msgstr ""
10746
10751
10747 #: rhodecode/templates/email_templates/pull_request_comment.mako:73
10752 #: rhodecode/templates/email_templates/pull_request_comment.mako:72
10748 msgid "{user} submitted pull request !{pr_id} status: *{status} and closed*"
10753 msgid "{user} submitted pull request !{pr_id} status: *{status} and closed*"
10749 msgstr ""
10754 msgstr ""
10750
10755
10751 #: rhodecode/templates/email_templates/pull_request_comment.mako:127
10756 #: rhodecode/templates/email_templates/pull_request_comment.mako:126
10752 msgid "{comment_type} on file `{comment_file}` in pull request."
10757 msgid "{comment_type} on file `{comment_file}` in pull request."
10753 msgstr ""
10758 msgstr ""
10754
10759
10755 #: rhodecode/templates/email_templates/pull_request_comment.mako:129
10760 #: rhodecode/templates/email_templates/pull_request_comment.mako:128
10756 msgid "{comment_type} on pull request."
10761 msgid "{comment_type} on pull request."
10757 msgstr ""
10762 msgstr ""
10758
10763
10759 #: rhodecode/templates/email_templates/pull_request_comment.mako:134
10764 #: rhodecode/templates/email_templates/pull_request_comment.mako:133
10760 #: rhodecode/templates/email_templates/pull_request_comment.mako:164
10765 #: rhodecode/templates/email_templates/pull_request_comment.mako:163
10761 #: rhodecode/templates/email_templates/pull_request_review.mako:100
10766 #: rhodecode/templates/email_templates/pull_request_review.mako:100
10762 #: rhodecode/templates/email_templates/pull_request_review.mako:116
10767 #: rhodecode/templates/email_templates/pull_request_review.mako:116
10763 #: rhodecode/templates/email_templates/pull_request_update.mako:104
10768 #: rhodecode/templates/email_templates/pull_request_update.mako:104
@@ -10765,26 +10770,26 b' msgstr ""'
10765 msgid "Pull request"
10770 msgid "Pull request"
10766 msgstr ""
10771 msgstr ""
10767
10772
10768 #: rhodecode/templates/email_templates/pull_request_comment.mako:153
10773 #: rhodecode/templates/email_templates/pull_request_comment.mako:152
10769 msgid "Review Status"
10774 msgid "Review Status"
10770 msgstr ""
10775 msgstr ""
10771
10776
10772 #: rhodecode/templates/email_templates/pull_request_comment.mako:156
10777 #: rhodecode/templates/email_templates/pull_request_comment.mako:155
10773 msgid "Closed pull request with status"
10778 msgid "Closed pull request with status"
10774 msgstr ""
10779 msgstr ""
10775
10780
10776 #: rhodecode/templates/email_templates/pull_request_comment.mako:158
10781 #: rhodecode/templates/email_templates/pull_request_comment.mako:157
10777 msgid "Submitted review status"
10782 msgid "Submitted review status"
10778 msgstr ""
10783 msgstr ""
10779
10784
10780 #: rhodecode/templates/email_templates/pull_request_comment.mako:173
10785 #: rhodecode/templates/email_templates/pull_request_comment.mako:172
10781 #: rhodecode/templates/email_templates/pull_request_review.mako:125
10786 #: rhodecode/templates/email_templates/pull_request_review.mako:125
10782 #: rhodecode/templates/email_templates/pull_request_update.mako:130
10787 #: rhodecode/templates/email_templates/pull_request_update.mako:130
10783 msgid "Commit Flow"
10788 msgid "Commit Flow"
10784 msgstr ""
10789 msgstr ""
10785
10790
10786 #: rhodecode/templates/email_templates/pull_request_comment.mako:175
10791 #: rhodecode/templates/email_templates/pull_request_comment.mako:174
10787 #: rhodecode/templates/email_templates/pull_request_comment.mako:177
10792 #: rhodecode/templates/email_templates/pull_request_comment.mako:176
10788 #: rhodecode/templates/email_templates/pull_request_review.mako:127
10793 #: rhodecode/templates/email_templates/pull_request_review.mako:127
10789 #: rhodecode/templates/email_templates/pull_request_review.mako:129
10794 #: rhodecode/templates/email_templates/pull_request_review.mako:129
10790 #: rhodecode/templates/email_templates/pull_request_update.mako:132
10795 #: rhodecode/templates/email_templates/pull_request_update.mako:132
@@ -11447,12 +11452,12 b' msgstr ""'
11447 msgid "In pull request description"
11452 msgid "In pull request description"
11448 msgstr ""
11453 msgstr ""
11449
11454
11450 #: rhodecode/templates/pullrequests/pullrequest_show.mako:838
11455 #: rhodecode/templates/pullrequests/pullrequest_show.mako:840
11451 #: rhodecode/templates/pullrequests/pullrequest_show.mako:857
11456 #: rhodecode/templates/pullrequests/pullrequest_show.mako:860
11452 msgid "No Ticket data found."
11457 msgid "No Ticket data found."
11453 msgstr ""
11458 msgstr ""
11454
11459
11455 #: rhodecode/templates/pullrequests/pullrequest_show.mako:843
11460 #: rhodecode/templates/pullrequests/pullrequest_show.mako:845
11456 msgid "In commit messages"
11461 msgid "In commit messages"
11457 msgstr ""
11462 msgstr ""
11458
11463
@@ -131,7 +131,7 b' class IntegrationTypeBase(object):'
131 :param event:
131 :param event:
132 :return: bool
132 :return: bool
133 """
133 """
134 allowed_events = self.settings['events']
134 allowed_events = self.settings.get('events') or []
135 if event.name not in allowed_events:
135 if event.name not in allowed_events:
136 log.debug('event ignored: %r event %s not in allowed set of events %s',
136 log.debug('event ignored: %r event %s not in allowed set of events %s',
137 event, event.name, allowed_events)
137 event, event.name, allowed_events)
@@ -38,6 +38,7 b' from rhodecode.lib import hooks_base'
38 from rhodecode.lib.utils2 import safe_int, str2bool, aslist
38 from rhodecode.lib.utils2 import safe_int, str2bool, aslist
39 from rhodecode.model.db import (
39 from rhodecode.model.db import (
40 Session, IntegrityError, true, Repository, RepoGroup, User)
40 Session, IntegrityError, true, Repository, RepoGroup, User)
41 from rhodecode.model.permission import PermissionModel
41
42
42
43
43 @async_task(ignore_result=True, base=RequestContextTask)
44 @async_task(ignore_result=True, base=RequestContextTask)
@@ -216,6 +217,9 b' def create_repo(form_data, cur_user):'
216 repo=audit_logger.RepoWrap(repo_name=repo_name, repo_id=repo_id))
217 repo=audit_logger.RepoWrap(repo_name=repo_name, repo_id=repo_id))
217
218
218 Session().commit()
219 Session().commit()
220
221 PermissionModel().trigger_permission_flush()
222
219 except Exception as e:
223 except Exception as e:
220 log.warning('Exception occurred when creating repository, '
224 log.warning('Exception occurred when creating repository, '
221 'doing cleanup...', exc_info=True)
225 'doing cleanup...', exc_info=True)
@@ -35,7 +35,7 b' import urllib'
35 import urlobject
35 import urlobject
36 import uuid
36 import uuid
37 import getpass
37 import getpass
38 from functools import update_wrapper, partial
38 from functools import update_wrapper, partial, wraps
39
39
40 import pygments.lexers
40 import pygments.lexers
41 import sqlalchemy
41 import sqlalchemy
@@ -1038,16 +1038,17 b' class CachedProperty(object):'
1038 """
1038 """
1039 Lazy Attributes. With option to invalidate the cache by running a method
1039 Lazy Attributes. With option to invalidate the cache by running a method
1040
1040
1041 class Foo():
1041 >>> class Foo(object):
1042 ...
1043 ... @CachedProperty
1044 ... def heavy_func(self):
1045 ... return 'super-calculation'
1046 ...
1047 ... foo = Foo()
1048 ... foo.heavy_func() # first computation
1049 ... foo.heavy_func() # fetch from cache
1050 ... foo._invalidate_prop_cache('heavy_func')
1042
1051
1043 @CachedProperty
1044 def heavy_func():
1045 return 'super-calculation'
1046
1047 foo = Foo()
1048 foo.heavy_func() # first computions
1049 foo.heavy_func() # fetch from cache
1050 foo._invalidate_prop_cache('heavy_func')
1051 # at this point calling foo.heavy_func() will be re-computed
1052 # at this point calling foo.heavy_func() will be re-computed
1052 """
1053 """
1053
1054
@@ -1072,3 +1073,76 b' class CachedProperty(object):'
1072
1073
1073 def _invalidate_prop_cache(self, inst, name):
1074 def _invalidate_prop_cache(self, inst, name):
1074 inst.__dict__.pop(name, None)
1075 inst.__dict__.pop(name, None)
1076
1077
1078 def retry(func=None, exception=Exception, n_tries=5, delay=5, backoff=1, logger=True):
1079 """
1080 Retry decorator with exponential backoff.
1081
1082 Parameters
1083 ----------
1084 func : typing.Callable, optional
1085 Callable on which the decorator is applied, by default None
1086 exception : Exception or tuple of Exceptions, optional
1087 Exception(s) that invoke retry, by default Exception
1088 n_tries : int, optional
1089 Number of tries before giving up, by default 5
1090 delay : int, optional
1091 Initial delay between retries in seconds, by default 5
1092 backoff : int, optional
1093 Backoff multiplier e.g. value of 2 will double the delay, by default 1
1094 logger : bool, optional
1095 Option to log or print, by default False
1096
1097 Returns
1098 -------
1099 typing.Callable
1100 Decorated callable that calls itself when exception(s) occur.
1101
1102 Examples
1103 --------
1104 >>> import random
1105 >>> @retry(exception=Exception, n_tries=3)
1106 ... def test_random(text):
1107 ... x = random.random()
1108 ... if x < 0.5:
1109 ... raise Exception("Fail")
1110 ... else:
1111 ... print("Success: ", text)
1112 >>> test_random("It works!")
1113 """
1114
1115 if func is None:
1116 return partial(
1117 retry,
1118 exception=exception,
1119 n_tries=n_tries,
1120 delay=delay,
1121 backoff=backoff,
1122 logger=logger,
1123 )
1124
1125 @wraps(func)
1126 def wrapper(*args, **kwargs):
1127 _n_tries, n_delay = n_tries, delay
1128 log = logging.getLogger('rhodecode.retry')
1129
1130 while _n_tries > 1:
1131 try:
1132 return func(*args, **kwargs)
1133 except exception as e:
1134 e_details = repr(e)
1135 msg = "Exception on calling func {func}: {e}, " \
1136 "Retrying in {n_delay} seconds..."\
1137 .format(func=func, e=e_details, n_delay=n_delay)
1138 if logger:
1139 log.warning(msg)
1140 else:
1141 print(msg)
1142 time.sleep(n_delay)
1143 _n_tries -= 1
1144 n_delay *= backoff
1145
1146 return func(*args, **kwargs)
1147
1148 return wrapper
@@ -311,6 +311,7 b' class BaseRepository(object):'
311 DEFAULT_CONTACT = u"Unknown"
311 DEFAULT_CONTACT = u"Unknown"
312 DEFAULT_DESCRIPTION = u"unknown"
312 DEFAULT_DESCRIPTION = u"unknown"
313 EMPTY_COMMIT_ID = '0' * 40
313 EMPTY_COMMIT_ID = '0' * 40
314 COMMIT_ID_PAT = re.compile(r'[0-9a-fA-F]{40}')
314
315
315 path = None
316 path = None
316
317
@@ -618,7 +618,7 b' class GitRepository(BaseRepository):'
618 else:
618 else:
619 output, __ = self.run_git_command(
619 output, __ = self.run_git_command(
620 ['merge-base', commit_id1, commit_id2])
620 ['merge-base', commit_id1, commit_id2])
621 ancestor_id = re.findall(r'[0-9a-fA-F]{40}', output)[0]
621 ancestor_id = self.COMMIT_ID_PAT.findall(output)[0]
622
622
623 log.debug('Found common ancestor with sha: %s', ancestor_id)
623 log.debug('Found common ancestor with sha: %s', ancestor_id)
624
624
@@ -642,7 +642,7 b' class GitRepository(BaseRepository):'
642 '%s..%s' % (commit_id1, commit_id2)])
642 '%s..%s' % (commit_id1, commit_id2)])
643 commits = [
643 commits = [
644 repo1.get_commit(commit_id=commit_id, pre_load=pre_load)
644 repo1.get_commit(commit_id=commit_id, pre_load=pre_load)
645 for commit_id in re.findall(r'[0-9a-fA-F]{40}', output)]
645 for commit_id in self.COMMIT_ID_PAT.findall(output)]
646
646
647 return commits
647 return commits
648
648
@@ -354,7 +354,7 b' class ChangesetStatusModel(BaseModel):'
354 Session().add(new_status)
354 Session().add(new_status)
355 return new_statuses
355 return new_statuses
356
356
357 def aggregate_votes_by_user(self, commit_statuses, reviewers_data):
357 def aggregate_votes_by_user(self, commit_statuses, reviewers_data, user=None):
358
358
359 commit_statuses_map = collections.defaultdict(list)
359 commit_statuses_map = collections.defaultdict(list)
360 for st in commit_statuses:
360 for st in commit_statuses:
@@ -368,6 +368,10 b' class ChangesetStatusModel(BaseModel):'
368 for obj in reviewers_data:
368 for obj in reviewers_data:
369 if not obj.user:
369 if not obj.user:
370 continue
370 continue
371 if user and obj.user.username != user.username:
372 # single user filter
373 continue
374
371 statuses = commit_statuses_map.get(obj.user.username, None)
375 statuses = commit_statuses_map.get(obj.user.username, None)
372 if statuses:
376 if statuses:
373 status_groups = itertools.groupby(
377 status_groups = itertools.groupby(
@@ -376,16 +380,19 b' class ChangesetStatusModel(BaseModel):'
376
380
377 reviewers.append((obj, obj.user, obj.reasons, obj.mandatory, statuses))
381 reviewers.append((obj, obj.user, obj.reasons, obj.mandatory, statuses))
378
382
379 return reviewers
383 if user:
384 return reviewers[0] if reviewers else reviewers
385 else:
386 return reviewers
380
387
381 def reviewers_statuses(self, pull_request):
388 def reviewers_statuses(self, pull_request, user=None):
382 _commit_statuses = self.get_statuses(
389 _commit_statuses = self.get_statuses(
383 pull_request.source_repo,
390 pull_request.source_repo,
384 pull_request=pull_request,
391 pull_request=pull_request,
385 with_revisions=True)
392 with_revisions=True)
386 reviewers = pull_request.get_pull_request_reviewers(
393 reviewers = pull_request.get_pull_request_reviewers(
387 role=PullRequestReviewers.ROLE_REVIEWER)
394 role=PullRequestReviewers.ROLE_REVIEWER)
388 return self.aggregate_votes_by_user(_commit_statuses, reviewers)
395 return self.aggregate_votes_by_user(_commit_statuses, reviewers, user=user)
389
396
390 def calculated_review_status(self, pull_request):
397 def calculated_review_status(self, pull_request):
391 """
398 """
@@ -41,10 +41,10 b' from sqlalchemy import ('
41 Index, Sequence, UniqueConstraint, ForeignKey, CheckConstraint, Column,
41 Index, Sequence, UniqueConstraint, ForeignKey, CheckConstraint, Column,
42 Boolean, String, Unicode, UnicodeText, DateTime, Integer, LargeBinary,
42 Boolean, String, Unicode, UnicodeText, DateTime, Integer, LargeBinary,
43 Text, Float, PickleType, BigInteger)
43 Text, Float, PickleType, BigInteger)
44 from sqlalchemy.sql.expression import true, false, case
44 from sqlalchemy.sql.expression import true, false, case, null
45 from sqlalchemy.sql.functions import coalesce, count # pragma: no cover
45 from sqlalchemy.sql.functions import coalesce, count # pragma: no cover
46 from sqlalchemy.orm import (
46 from sqlalchemy.orm import (
47 relationship, joinedload, class_mapper, validates, aliased)
47 relationship, lazyload, joinedload, class_mapper, validates, aliased)
48 from sqlalchemy.ext.declarative import declared_attr
48 from sqlalchemy.ext.declarative import declared_attr
49 from sqlalchemy.ext.hybrid import hybrid_property
49 from sqlalchemy.ext.hybrid import hybrid_property
50 from sqlalchemy.exc import IntegrityError # pragma: no cover
50 from sqlalchemy.exc import IntegrityError # pragma: no cover
@@ -911,7 +911,7 b' class User(Base, BaseModel):'
911 return {}
911 return {}
912
912
913 try:
913 try:
914 return json.loads(self._user_data)
914 return json.loads(self._user_data) or {}
915 except TypeError:
915 except TypeError:
916 return {}
916 return {}
917
917
@@ -4062,7 +4062,7 b' class _SetState(object):'
4062 return self
4062 return self
4063
4063
4064 def __exit__(self, exc_type, exc_val, exc_tb):
4064 def __exit__(self, exc_type, exc_val, exc_tb):
4065 if exc_val is not None:
4065 if exc_val is not None or exc_type is not None:
4066 log.error(traceback.format_exc(exc_tb))
4066 log.error(traceback.format_exc(exc_tb))
4067 return None
4067 return None
4068
4068
@@ -4479,9 +4479,9 b' class PullRequest(Base, _PullRequestBase'
4479 from rhodecode.model.changeset_status import ChangesetStatusModel
4479 from rhodecode.model.changeset_status import ChangesetStatusModel
4480 return ChangesetStatusModel().calculated_review_status(self)
4480 return ChangesetStatusModel().calculated_review_status(self)
4481
4481
4482 def reviewers_statuses(self):
4482 def reviewers_statuses(self, user=None):
4483 from rhodecode.model.changeset_status import ChangesetStatusModel
4483 from rhodecode.model.changeset_status import ChangesetStatusModel
4484 return ChangesetStatusModel().reviewers_statuses(self)
4484 return ChangesetStatusModel().reviewers_statuses(self, user=user)
4485
4485
4486 def get_pull_request_reviewers(self, role=None):
4486 def get_pull_request_reviewers(self, role=None):
4487 qry = PullRequestReviewers.query()\
4487 qry = PullRequestReviewers.query()\
@@ -56,7 +56,7 b' from rhodecode.model import BaseModel'
56 from rhodecode.model.changeset_status import ChangesetStatusModel
56 from rhodecode.model.changeset_status import ChangesetStatusModel
57 from rhodecode.model.comment import CommentsModel
57 from rhodecode.model.comment import CommentsModel
58 from rhodecode.model.db import (
58 from rhodecode.model.db import (
59 or_, String, cast, PullRequest, PullRequestReviewers, ChangesetStatus,
59 aliased, null, lazyload, and_, or_, func, String, cast, PullRequest, PullRequestReviewers, ChangesetStatus,
60 PullRequestVersion, ChangesetComment, Repository, RepoReviewRule, User)
60 PullRequestVersion, ChangesetComment, Repository, RepoReviewRule, User)
61 from rhodecode.model.meta import Session
61 from rhodecode.model.meta import Session
62 from rhodecode.model.notification import NotificationModel, \
62 from rhodecode.model.notification import NotificationModel, \
@@ -319,7 +319,7 b' class PullRequestModel(BaseModel):'
319
319
320 if search_q:
320 if search_q:
321 like_expression = u'%{}%'.format(safe_unicode(search_q))
321 like_expression = u'%{}%'.format(safe_unicode(search_q))
322 q = q.join(User)
322 q = q.join(User, User.user_id == PullRequest.user_id)
323 q = q.filter(or_(
323 q = q.filter(or_(
324 cast(PullRequest.pull_request_id, String).ilike(like_expression),
324 cast(PullRequest.pull_request_id, String).ilike(like_expression),
325 User.username.ilike(like_expression),
325 User.username.ilike(like_expression),
@@ -405,36 +405,30 b' class PullRequestModel(BaseModel):'
405
405
406 return pull_requests
406 return pull_requests
407
407
408 def count_awaiting_review(self, repo_name, search_q=None, source=False, statuses=None,
408 def count_awaiting_review(self, repo_name, search_q=None, statuses=None):
409 opened_by=None):
410 """
409 """
411 Count the number of pull requests for a specific repository that are
410 Count the number of pull requests for a specific repository that are
412 awaiting review.
411 awaiting review.
413
412
414 :param repo_name: target or source repo
413 :param repo_name: target or source repo
415 :param search_q: filter by text
414 :param search_q: filter by text
416 :param source: boolean flag to specify if repo_name refers to source
417 :param statuses: list of pull request statuses
415 :param statuses: list of pull request statuses
418 :param opened_by: author user of the pull request
419 :returns: int number of pull requests
416 :returns: int number of pull requests
420 """
417 """
421 pull_requests = self.get_awaiting_review(
418 pull_requests = self.get_awaiting_review(
422 repo_name, search_q=search_q, source=source, statuses=statuses, opened_by=opened_by)
419 repo_name, search_q=search_q, statuses=statuses)
423
420
424 return len(pull_requests)
421 return len(pull_requests)
425
422
426 def get_awaiting_review(self, repo_name, search_q=None, source=False, statuses=None,
423 def get_awaiting_review(self, repo_name, search_q=None, statuses=None,
427 opened_by=None, offset=0, length=None,
424 offset=0, length=None, order_by=None, order_dir='desc'):
428 order_by=None, order_dir='desc'):
429 """
425 """
430 Get all pull requests for a specific repository that are awaiting
426 Get all pull requests for a specific repository that are awaiting
431 review.
427 review.
432
428
433 :param repo_name: target or source repo
429 :param repo_name: target or source repo
434 :param search_q: filter by text
430 :param search_q: filter by text
435 :param source: boolean flag to specify if repo_name refers to source
436 :param statuses: list of pull request statuses
431 :param statuses: list of pull request statuses
437 :param opened_by: author user of the pull request
438 :param offset: pagination offset
432 :param offset: pagination offset
439 :param length: length of returned list
433 :param length: length of returned list
440 :param order_by: order of the returned list
434 :param order_by: order of the returned list
@@ -442,8 +436,8 b' class PullRequestModel(BaseModel):'
442 :returns: list of pull requests
436 :returns: list of pull requests
443 """
437 """
444 pull_requests = self.get_all(
438 pull_requests = self.get_all(
445 repo_name, search_q=search_q, source=source, statuses=statuses,
439 repo_name, search_q=search_q, statuses=statuses,
446 opened_by=opened_by, order_by=order_by, order_dir=order_dir)
440 order_by=order_by, order_dir=order_dir)
447
441
448 _filtered_pull_requests = []
442 _filtered_pull_requests = []
449 for pr in pull_requests:
443 for pr in pull_requests:
@@ -456,68 +450,117 b' class PullRequestModel(BaseModel):'
456 else:
450 else:
457 return _filtered_pull_requests
451 return _filtered_pull_requests
458
452
459 def count_awaiting_my_review(self, repo_name, search_q=None, source=False, statuses=None,
453 def _prepare_awaiting_my_review_review_query(
460 opened_by=None, user_id=None):
454 self, repo_name, user_id, search_q=None, statuses=None,
455 order_by=None, order_dir='desc'):
456
457 for_review_statuses = [
458 ChangesetStatus.STATUS_UNDER_REVIEW, ChangesetStatus.STATUS_NOT_REVIEWED
459 ]
460
461 pull_request_alias = aliased(PullRequest)
462 status_alias = aliased(ChangesetStatus)
463 reviewers_alias = aliased(PullRequestReviewers)
464 repo_alias = aliased(Repository)
465
466 last_ver_subq = Session()\
467 .query(func.min(ChangesetStatus.version)) \
468 .filter(ChangesetStatus.pull_request_id == reviewers_alias.pull_request_id)\
469 .filter(ChangesetStatus.user_id == reviewers_alias.user_id) \
470 .subquery()
471
472 q = Session().query(pull_request_alias) \
473 .options(lazyload(pull_request_alias.author)) \
474 .join(reviewers_alias,
475 reviewers_alias.pull_request_id == pull_request_alias.pull_request_id) \
476 .join(repo_alias,
477 repo_alias.repo_id == pull_request_alias.target_repo_id) \
478 .outerjoin(status_alias,
479 and_(status_alias.user_id == reviewers_alias.user_id,
480 status_alias.pull_request_id == reviewers_alias.pull_request_id)) \
481 .filter(or_(status_alias.version == null(),
482 status_alias.version == last_ver_subq)) \
483 .filter(reviewers_alias.user_id == user_id) \
484 .filter(repo_alias.repo_name == repo_name) \
485 .filter(or_(status_alias.status == null(), status_alias.status.in_(for_review_statuses))) \
486 .group_by(pull_request_alias)
487
488 # closed,opened
489 if statuses:
490 q = q.filter(pull_request_alias.status.in_(statuses))
491
492 if search_q:
493 like_expression = u'%{}%'.format(safe_unicode(search_q))
494 q = q.join(User, User.user_id == pull_request_alias.user_id)
495 q = q.filter(or_(
496 cast(pull_request_alias.pull_request_id, String).ilike(like_expression),
497 User.username.ilike(like_expression),
498 pull_request_alias.title.ilike(like_expression),
499 pull_request_alias.description.ilike(like_expression),
500 ))
501
502 if order_by:
503 order_map = {
504 'name_raw': pull_request_alias.pull_request_id,
505 'title': pull_request_alias.title,
506 'updated_on_raw': pull_request_alias.updated_on,
507 'target_repo': pull_request_alias.target_repo_id
508 }
509 if order_dir == 'asc':
510 q = q.order_by(order_map[order_by].asc())
511 else:
512 q = q.order_by(order_map[order_by].desc())
513
514 return q
515
516 def count_awaiting_my_review(self, repo_name, user_id, search_q=None, statuses=None):
461 """
517 """
462 Count the number of pull requests for a specific repository that are
518 Count the number of pull requests for a specific repository that are
463 awaiting review from a specific user.
519 awaiting review from a specific user.
464
520
465 :param repo_name: target or source repo
521 :param repo_name: target or source repo
522 :param user_id: reviewer user of the pull request
466 :param search_q: filter by text
523 :param search_q: filter by text
467 :param source: boolean flag to specify if repo_name refers to source
468 :param statuses: list of pull request statuses
524 :param statuses: list of pull request statuses
469 :param opened_by: author user of the pull request
470 :param user_id: reviewer user of the pull request
471 :returns: int number of pull requests
525 :returns: int number of pull requests
472 """
526 """
473 pull_requests = self.get_awaiting_my_review(
527 q = self._prepare_awaiting_my_review_review_query(
474 repo_name, search_q=search_q, source=source, statuses=statuses,
528 repo_name, user_id, search_q=search_q, statuses=statuses)
475 opened_by=opened_by, user_id=user_id)
529 return q.count()
476
530
477 return len(pull_requests)
531 def get_awaiting_my_review(self, repo_name, user_id, search_q=None, statuses=None,
478
532 offset=0, length=None, order_by=None, order_dir='desc'):
479 def get_awaiting_my_review(self, repo_name, search_q=None, source=False, statuses=None,
480 opened_by=None, user_id=None, offset=0,
481 length=None, order_by=None, order_dir='desc'):
482 """
533 """
483 Get all pull requests for a specific repository that are awaiting
534 Get all pull requests for a specific repository that are awaiting
484 review from a specific user.
535 review from a specific user.
485
536
486 :param repo_name: target or source repo
537 :param repo_name: target or source repo
538 :param user_id: reviewer user of the pull request
487 :param search_q: filter by text
539 :param search_q: filter by text
488 :param source: boolean flag to specify if repo_name refers to source
489 :param statuses: list of pull request statuses
540 :param statuses: list of pull request statuses
490 :param opened_by: author user of the pull request
491 :param user_id: reviewer user of the pull request
492 :param offset: pagination offset
541 :param offset: pagination offset
493 :param length: length of returned list
542 :param length: length of returned list
494 :param order_by: order of the returned list
543 :param order_by: order of the returned list
495 :param order_dir: 'asc' or 'desc' ordering direction
544 :param order_dir: 'asc' or 'desc' ordering direction
496 :returns: list of pull requests
545 :returns: list of pull requests
497 """
546 """
498 pull_requests = self.get_all(
499 repo_name, search_q=search_q, source=source, statuses=statuses,
500 opened_by=opened_by, order_by=order_by, order_dir=order_dir)
501
547
502 _my = PullRequestModel().get_not_reviewed(user_id)
548 q = self._prepare_awaiting_my_review_review_query(
503 my_participation = []
549 repo_name, user_id, search_q=search_q, statuses=statuses,
504 for pr in pull_requests:
550 order_by=order_by, order_dir=order_dir)
505 if pr in _my:
551
506 my_participation.append(pr)
507 _filtered_pull_requests = my_participation
508 if length:
552 if length:
509 return _filtered_pull_requests[offset:offset+length]
553 pull_requests = q.limit(length).offset(offset).all()
510 else:
554 else:
511 return _filtered_pull_requests
555 pull_requests = q.all()
556
557 return pull_requests
512
558
513 def get_not_reviewed(self, user_id):
559 def _prepare_im_participating_query(self, user_id=None, statuses=None, query='',
514 return [
560 order_by=None, order_dir='desc'):
515 x.pull_request for x in PullRequestReviewers.query().filter(
561 """
516 PullRequestReviewers.user_id == user_id).all()
562 return a query of pull-requests user is an creator, or he's added as a reviewer
517 ]
563 """
518
519 def _prepare_participating_query(self, user_id=None, statuses=None, query='',
520 order_by=None, order_dir='desc'):
521 q = PullRequest.query()
564 q = PullRequest.query()
522 if user_id:
565 if user_id:
523 reviewers_subquery = Session().query(
566 reviewers_subquery = Session().query(
@@ -535,7 +578,7 b' class PullRequestModel(BaseModel):'
535
578
536 if query:
579 if query:
537 like_expression = u'%{}%'.format(safe_unicode(query))
580 like_expression = u'%{}%'.format(safe_unicode(query))
538 q = q.join(User)
581 q = q.join(User, User.user_id == PullRequest.user_id)
539 q = q.filter(or_(
582 q = q.filter(or_(
540 cast(PullRequest.pull_request_id, String).ilike(like_expression),
583 cast(PullRequest.pull_request_id, String).ilike(like_expression),
541 User.username.ilike(like_expression),
584 User.username.ilike(like_expression),
@@ -557,17 +600,97 b' class PullRequestModel(BaseModel):'
557 return q
600 return q
558
601
559 def count_im_participating_in(self, user_id=None, statuses=None, query=''):
602 def count_im_participating_in(self, user_id=None, statuses=None, query=''):
560 q = self._prepare_participating_query(user_id, statuses=statuses, query=query)
603 q = self._prepare_im_participating_query(user_id, statuses=statuses, query=query)
561 return q.count()
604 return q.count()
562
605
563 def get_im_participating_in(
606 def get_im_participating_in(
564 self, user_id=None, statuses=None, query='', offset=0,
607 self, user_id=None, statuses=None, query='', offset=0,
565 length=None, order_by=None, order_dir='desc'):
608 length=None, order_by=None, order_dir='desc'):
566 """
609 """
567 Get all Pull requests that i'm participating in, or i have opened
610 Get all Pull requests that i'm participating in as a reviewer, or i have opened
568 """
611 """
569
612
570 q = self._prepare_participating_query(
613 q = self._prepare_im_participating_query(
614 user_id, statuses=statuses, query=query, order_by=order_by,
615 order_dir=order_dir)
616
617 if length:
618 pull_requests = q.limit(length).offset(offset).all()
619 else:
620 pull_requests = q.all()
621
622 return pull_requests
623
624 def _prepare_participating_in_for_review_query(
625 self, user_id, statuses=None, query='', order_by=None, order_dir='desc'):
626
627 for_review_statuses = [
628 ChangesetStatus.STATUS_UNDER_REVIEW, ChangesetStatus.STATUS_NOT_REVIEWED
629 ]
630
631 pull_request_alias = aliased(PullRequest)
632 status_alias = aliased(ChangesetStatus)
633 reviewers_alias = aliased(PullRequestReviewers)
634
635 last_ver_subq = Session()\
636 .query(func.min(ChangesetStatus.version)) \
637 .filter(ChangesetStatus.pull_request_id == reviewers_alias.pull_request_id)\
638 .filter(ChangesetStatus.user_id == reviewers_alias.user_id) \
639 .subquery()
640
641 q = Session().query(pull_request_alias) \
642 .options(lazyload(pull_request_alias.author)) \
643 .join(reviewers_alias,
644 reviewers_alias.pull_request_id == pull_request_alias.pull_request_id) \
645 .outerjoin(status_alias,
646 and_(status_alias.user_id == reviewers_alias.user_id,
647 status_alias.pull_request_id == reviewers_alias.pull_request_id)) \
648 .filter(or_(status_alias.version == null(),
649 status_alias.version == last_ver_subq)) \
650 .filter(reviewers_alias.user_id == user_id) \
651 .filter(or_(status_alias.status == null(), status_alias.status.in_(for_review_statuses))) \
652 .group_by(pull_request_alias)
653
654 # closed,opened
655 if statuses:
656 q = q.filter(pull_request_alias.status.in_(statuses))
657
658 if query:
659 like_expression = u'%{}%'.format(safe_unicode(query))
660 q = q.join(User, User.user_id == pull_request_alias.user_id)
661 q = q.filter(or_(
662 cast(pull_request_alias.pull_request_id, String).ilike(like_expression),
663 User.username.ilike(like_expression),
664 pull_request_alias.title.ilike(like_expression),
665 pull_request_alias.description.ilike(like_expression),
666 ))
667
668 if order_by:
669 order_map = {
670 'name_raw': pull_request_alias.pull_request_id,
671 'title': pull_request_alias.title,
672 'updated_on_raw': pull_request_alias.updated_on,
673 'target_repo': pull_request_alias.target_repo_id
674 }
675 if order_dir == 'asc':
676 q = q.order_by(order_map[order_by].asc())
677 else:
678 q = q.order_by(order_map[order_by].desc())
679
680 return q
681
682 def count_im_participating_in_for_review(self, user_id, statuses=None, query=''):
683 q = self._prepare_participating_in_for_review_query(user_id, statuses=statuses, query=query)
684 return q.count()
685
686 def get_im_participating_in_for_review(
687 self, user_id, statuses=None, query='', offset=0,
688 length=None, order_by=None, order_dir='desc'):
689 """
690 Get all Pull requests that needs user approval or rejection
691 """
692
693 q = self._prepare_participating_in_for_review_query(
571 user_id, statuses=statuses, query=query, order_by=order_by,
694 user_id, statuses=statuses, query=query, order_by=order_by,
572 order_dir=order_dir)
695 order_dir=order_dir)
573
696
@@ -618,13 +618,13 b' input[type="reset"] {'
618 text-align: right;
618 text-align: right;
619
619
620 li {
620 li {
621
621 list-style: none;
622
622 text-align: right;
623 display: inline-block;
623 }
624 }
624
625
625 li.active {
626 a.active {
626 background-color: @grey6;
627 border: 2px solid @rcblue;
627 .border ( @border-thickness, @grey4 );
628 }
628 }
629
629
630 }
630 }
@@ -44,7 +44,7 b''
44 padding: @panel-padding;
44 padding: @panel-padding;
45
45
46 &.panel-body-min-height {
46 &.panel-body-min-height {
47 min-height: 150px
47 min-height: 200px
48 }
48 }
49 }
49 }
50
50
@@ -791,6 +791,11 b' var CommentsController = function() {'
791 refreshDraftComments()
791 refreshDraftComments()
792 }
792 }
793
793
794 if (window.refreshAllComments !== undefined) {
795 // if we have this handler, run it, and refresh all comments boxes
796 refreshAllComments()
797 }
798
794 return false;
799 return false;
795 };
800 };
796
801
@@ -27,13 +27,13 b''
27
27
28 <ul class="button-links">
28 <ul class="button-links">
29 % if c.is_super_admin:
29 % if c.is_super_admin:
30 <li class="btn ${h.is_active('all', c.active)}"><a href="${h.route_path('gists_show', _query={'all': 1})}">${_('All gists')}</a></li>
30 <li><a class="btn ${h.is_active('all', c.active)}" href="${h.route_path('gists_show', _query={'all': 1})}">${_('All gists')}</a></li>
31 %endif
31 %endif
32 <li class="btn ${h.is_active('public', c.active)}"><a href="${h.route_path('gists_show')}">${_('All public')}</a></li>
32 <li><a class="btn ${h.is_active('public', c.active)}" href="${h.route_path('gists_show')}">${_('All public')}</a></li>
33 %if c.rhodecode_user.username != h.DEFAULT_USER:
33 %if c.rhodecode_user.username != h.DEFAULT_USER:
34 <li class="btn ${h.is_active('my_all', c.active)}"><a href="${h.route_path('gists_show', _query={'public':1, 'private': 1})}">${_('My gists')}</a></li>
34 <li><a class="btn ${h.is_active('my_all', c.active)}" href="${h.route_path('gists_show', _query={'public':1, 'private': 1})}">${_('My gists')}</a></li>
35 <li class="btn ${h.is_active('my_private', c.active)}"><a href="${h.route_path('gists_show', _query={'private': 1})}">${_('My private')}</a></li>
35 <li><a class="btn ${h.is_active('my_private', c.active)}" href="${h.route_path('gists_show', _query={'private': 1})}">${_('My private')}</a></li>
36 <li class="btn ${h.is_active('my_public', c.active)}"><a href="${h.route_path('gists_show', _query={'public': 1})}">${_('My public')}</a></li>
36 <li><a class="btn ${h.is_active('my_public', c.active)}" href="${h.route_path('gists_show', _query={'public': 1})}">${_('My public')}</a></li>
37 %endif
37 %endif
38 </ul>
38 </ul>
39
39
@@ -65,11 +65,11 b''
65 <fieldset>
65 <fieldset>
66 <div class="gist-type-fields-wrapper">
66 <div class="gist-type-fields-wrapper">
67
67
68 <input type="radio" id="private_gist" checked="" name="gist_type" value="private">
68 <input type="radio" id="private_gist" checked="" name="gist_type" value="private" onchange="setGistId('private')">
69 <label for="private_gist">${_('Private Gist')}</label>
69 <label for="private_gist">${_('Private Gist')}</label>
70 <span class="tooltip label" title="${_('Private Gists are not listed and only accessible through their secret url.')}">${_('Private Gist')}</span>
70 <span class="tooltip label" title="${_('Private Gists are not listed and only accessible through their secret url.')}">${_('Private Gist')}</span>
71
71
72 <input type="radio" id="public_gist" name="gist_type" value="public">
72 <input type="radio" id="public_gist" name="gist_type" value="public" onchange="setGistId('public')">
73 <label for="public_gist">${_('Public Gist')}</label>
73 <label for="public_gist">${_('Public Gist')}</label>
74 <span class="tooltip label" title="${_('Public Gists are accessible to anyone and listed in Gists page.')}">${_('Public Gist')}</span>
74 <span class="tooltip label" title="${_('Public Gists are accessible to anyone and listed in Gists page.')}">${_('Public Gist')}</span>
75 </div>
75 </div>
@@ -99,5 +99,14 b''
99 setCodeMirrorModeFromInput(
99 setCodeMirrorModeFromInput(
100 modes_select, filename_selector, myCodeMirror, null);
100 modes_select, filename_selector, myCodeMirror, null);
101
101
102 setGistId = function(gistType) {
103 if (gistType === 'private') {
104 $('#gistid').removeAttr('disabled');
105 }
106 else {
107 $('#gistid').val('');
108 $('#gistid').attr('disabled', 'disabled')
109 }
110 }
102 </script>
111 </script>
103 </%def>
112 </%def>
@@ -26,50 +26,41 b''
26 </div>
26 </div>
27 </div>
27 </div>
28 </div>
28 </div>
29 <p class="help-block help-block-inline" >
30 ${_('Server URL is available as ${server_url} variable. E.g. Redirect url: ${server_url}/_admin/exception_tracker')}
31 </p>
32
29
33 <div class="label">
30 <div class="label" style="margin-top:10px">
34 <label for="redirect_url">${_('Redirect URL')}:</label>
31 <label for="redirect_url">${_('Redirect URL')}:</label>
35 </div>
32 </div>
36 <div class="input">
33 <div class="input">
37 <input type="text" name="redirect_url" value="${redirect_url}" style="width: 600px"/>
34 <input type="text" name="redirect_url" value="${redirect_url}" style="width: 600px"/>
38 </div>
35 </div>
39
36 <p class="help-block help-block-inline">
37 ${_('Server URL is available as ${server_url} variable. E.g. Redirect url: ${server_url}/_admin/exception_tracker')}
38 </p>
40
39
41 <div class="select">
40 <div class="select" style="margin-top:5px">
41 <div class="label">
42 <label for="redirect_url">${_('Templates')}:</label>
43 </div>
44
42 % if repo:
45 % if repo:
43 <div class="label">
44 <label for="redirect_url">${_('Repository template')}:</label>
45 </div>
46 ${dt.repo_name(name=repo.repo_name, rtype=repo.repo_type,rstate=None,private=None,archived=False,fork_of=False)}
46 ${dt.repo_name(name=repo.repo_name, rtype=repo.repo_type,rstate=None,private=None,archived=False,fork_of=False)}
47 ${h.hidden('bookmark_repo', repo.repo_id)}
47 ${h.hidden('bookmark_repo', repo.repo_id)}
48 % elif repo_group:
48 % elif repo_group:
49 <div class="label">
50 <label for="redirect_url">${_('Repository group template')}:</label>
51 </div>
52 ${dt.repo_group_name(repo_group.group_name)}
49 ${dt.repo_group_name(repo_group.group_name)}
53 ${h.hidden('bookmark_repo_group', repo_group.group_id)}
50 ${h.hidden('bookmark_repo_group', repo_group.group_id)}
54 % else:
51 % else:
55 <div class="label">
52 <div>
56 <label for="redirect_url">${_('Template Repository or Repository group')}:</label>
53 ${h.hidden('bookmark_repo', class_='bookmark_repo')}
54 <p class="help-block help-block-inline">${_('Available as ${repo_url} e.g. Redirect url: ${repo_url}/changelog')}</p>
57 </div>
55 </div>
58 ${h.hidden('bookmark_repo', class_='bookmark_repo')}
56 <div style="margin-top:5px">
59 <span style="padding-right:15px">OR</span>
57 ${h.hidden('bookmark_repo_group', class_='bookmark_repo_group')}
60 ${h.hidden('bookmark_repo_group', class_='bookmark_repo_group')}
58 <p class="help-block help-block-inline">${_('Available as ${repo_group_url} e.g. Redirect url: ${repo_group_url}')}</p>
59 </div>
60
61 % endif
61 % endif
62 </div>
62 </div>
63
63
64 <p class="help-block help-block-inline" >
65 % if repo:
66 ${_('Available as ${repo_url} e.g. Redirect url: ${repo_url}/changelog')}
67 % elif repo_group:
68 ${_('Available as ${repo_group_url} e.g. Redirect url: ${repo_group_url}')}
69 % else:
70 ${_('Available as full url variables in redirect url. i.e: ${repo_url}, ${repo_group_url}.')}
71 % endif
72 </p>
73 </td>
64 </td>
74
65
75 </tr>
66 </tr>
@@ -1,17 +1,29 b''
1 <%namespace name="base" file="/base/base.mako"/>
1 <%namespace name="base" file="/base/base.mako"/>
2
2
3 <div class="panel panel-default">
3 <div class="panel panel-default">
4 <div class="panel-body">
4 <div class="panel-heading">
5 <div style="height: 35px">
5 <h3 class="panel-title">${_('Pull Requests You Participate In')}</h3>
6 <%
6 </div>
7 selected_filter = 'all'
8 if c.closed:
9 selected_filter = 'all_closed'
10 %>
11
7
8 <div class="panel-body panel-body-min-height">
9 <div class="title">
12 <ul class="button-links">
10 <ul class="button-links">
13 <li class="btn ${h.is_active('all', selected_filter)}"><a href="${h.route_path('my_account_pullrequests')}">${_('All')}</a></li>
11 <li><a class="btn ${h.is_active('all', c.selected_filter)}"
14 <li class="btn ${h.is_active('all_closed', selected_filter)}"><a href="${h.route_path('my_account_pullrequests', _query={'pr_show_closed':1})}">${_('All + Closed')}</a></li>
12 href="${h.route_path('my_account_pullrequests', _query={})}">
13 ${_('Open')}
14 </a>
15 </li>
16 <li><a class="btn ${h.is_active('all_closed', c.selected_filter)}"
17 href="${h.route_path('my_account_pullrequests', _query={'closed':1})}">
18 ${_('All + Closed')}
19 </a>
20 </li>
21 <li><a class="btn ${h.is_active('awaiting_my_review', c.selected_filter)}"
22 href="${h.route_path('my_account_pullrequests', _query={'awaiting_my_review':1})}">
23
24 ${_('Awaiting my review')}
25 </a>
26 </li>
15 </ul>
27 </ul>
16
28
17 <div class="grid-quick-filter">
29 <div class="grid-quick-filter">
@@ -20,19 +32,13 b''
20 <i class="icon-search"></i>
32 <i class="icon-search"></i>
21 </li>
33 </li>
22 <li class="grid-filter-box-input">
34 <li class="grid-filter-box-input">
23 <input class="q_filter_box" id="q_filter" size="15" type="text" name="filter" placeholder="${_('quick filter...')}" value=""/>
35 <input class="q_filter_box" id="q_filter" size="15" type="text" name="filter"
36 placeholder="${_('quick filter...')}" value=""/>
24 </li>
37 </li>
25 </ul>
38 </ul>
26 </div>
39 </div>
27 </div>
40 </div>
28 </div>
29 </div>
30
41
31 <div class="panel panel-default">
32 <div class="panel-heading">
33 <h3 class="panel-title">${_('Pull Requests You Participate In')}</h3>
34 </div>
35 <div class="panel-body panel-body-min-height">
36 <table id="pull_request_list_table" class="rctable table-bordered"></table>
42 <table id="pull_request_list_table" class="rctable table-bordered"></table>
37 </div>
43 </div>
38 </div>
44 </div>
@@ -52,6 +58,7 b''
52 "url": "${h.route_path('my_account_pullrequests_data')}",
58 "url": "${h.route_path('my_account_pullrequests_data')}",
53 "data": function (d) {
59 "data": function (d) {
54 d.closed = "${c.closed}";
60 d.closed = "${c.closed}";
61 d.awaiting_my_review = "${c.awaiting_my_review}";
55 },
62 },
56 "dataSrc": function (json) {
63 "dataSrc": function (json) {
57 return json.data;
64 return json.data;
@@ -60,13 +67,19 b''
60
67
61 dom: 'rtp',
68 dom: 'rtp',
62 pageLength: ${c.visual.dashboard_items},
69 pageLength: ${c.visual.dashboard_items},
63 order: [[1, "desc"]],
70 order: [[2, "desc"]],
64 columns: [
71 columns: [
65 {
72 {
66 data: {
73 data: {
67 "_": "status",
74 "_": "status",
68 "sort": "status"
75 "sort": "status"
69 }, title: "", className: "td-status", orderable: false
76 }, title: "PR", className: "td-status", orderable: false
77 },
78 {
79 data: {
80 "_": "my_status",
81 "sort": "status"
82 }, title: "You", className: "td-status", orderable: false
70 },
83 },
71 {
84 {
72 data: {
85 data: {
@@ -171,7 +171,7 b''
171 This repository is already archived. Only super-admin users can un-archive this repository.
171 This repository is already archived. Only super-admin users can un-archive this repository.
172 % else:
172 % else:
173 <button class="btn btn-small btn-warning" type="submit"
173 <button class="btn btn-small btn-warning" type="submit"
174 onclick="submitConfirm(event, this, _gettext('Confirm to archive this repository'), _gettext('Archive'), '${c.rhodecode_db_repo.repo_name}')"
174 onclick="submitConfirm(event, this, _gettext('Confirm to archive this repository. <br/>This action is irreversible !'), _gettext('Archive'), '${c.rhodecode_db_repo.repo_name}')"
175 >
175 >
176 ${_('Archive this repository')}
176 ${_('Archive this repository')}
177 </button>
177 </button>
@@ -180,6 +180,9 b''
180 </div>
180 </div>
181 <div class="field">
181 <div class="field">
182 <span class="help-block">
182 <span class="help-block">
183 <strong>
184 ${_('This action is irreversible')} !
185 </strong><br/>
183 ${_('Archiving the repository will make it entirely read-only. The repository cannot be committed to.'
186 ${_('Archiving the repository will make it entirely read-only. The repository cannot be committed to.'
184 'It is hidden from the search results and dashboard. ')}
187 'It is hidden from the search results and dashboard. ')}
185 </span>
188 </span>
@@ -63,7 +63,7 b''
63 </tr>
63 </tr>
64 %endfor
64 %endfor
65 <tr class="compare_select_hidden" style="${('' if c.collapse_all_commits else 'display: none')}">
65 <tr class="compare_select_hidden" style="${('' if c.collapse_all_commits else 'display: none')}">
66 <td colspan="5">
66 <td colspan="7">
67 ${_ungettext('{} commit hidden, click expand to show them.', '{} commits hidden, click expand to show them.', len(c.commit_ranges)).format(len(c.commit_ranges))}
67 ${_ungettext('{} commit hidden, click expand to show them.', '{} commits hidden, click expand to show them.', len(c.commit_ranges)).format(len(c.commit_ranges))}
68 </td>
68 </td>
69 </tr>
69 </tr>
@@ -171,9 +171,9 b' data = {'
171 <tr>
171 <tr>
172 <td style="padding-right:20px;line-height:20px;">${_('Commit Flow')}:</td>
172 <td style="padding-right:20px;line-height:20px;">${_('Commit Flow')}:</td>
173 <td style="line-height:20px;">
173 <td style="line-height:20px;">
174 <code>${'{}:{}'.format(data['source_ref_type'], pull_request.source_ref_parts.name)}</code> ${_('of')} ${data['source_repo_url']}
174 <code>${data['source_ref_type']}:${pull_request.source_ref_parts.name}</code> ${_('of')} ${data['source_repo_url']}
175 &rarr;
175 &rarr;
176 <code>${'{}:{}'.format(data['target_ref_type'], pull_request.target_ref_parts.name)}</code> ${_('of')} ${data['target_repo_url']}
176 <code>${data['target_ref_type']}:${pull_request.target_ref_parts.name}</code> ${_('of')} ${data['target_repo_url']}
177 </td>
177 </td>
178 </tr>
178 </tr>
179
179
@@ -124,9 +124,9 b' data = {'
124 <tr>
124 <tr>
125 <td style="padding-right:20px;line-height:20px;">${_('Commit Flow')}:</td>
125 <td style="padding-right:20px;line-height:20px;">${_('Commit Flow')}:</td>
126 <td style="line-height:20px;">
126 <td style="line-height:20px;">
127 <code>${'{}:{}'.format(data['source_ref_type'], pull_request.source_ref_parts.name)}</code> ${_('of')} ${data['source_repo_url']}
127 <code>${data['source_ref_type']}:${pull_request.source_ref_parts.name}</code> ${_('of')} ${data['source_repo_url']}
128 &rarr;
128 &rarr;
129 <code>${'{}:{}'.format(data['target_ref_type'], pull_request.target_ref_parts.name)}</code> ${_('of')} ${data['target_repo_url']}
129 <code>${data['target_ref_type']}:${pull_request.target_ref_parts.name}</code> ${_('of')} ${data['target_repo_url']}
130 </td>
130 </td>
131 </tr>
131 </tr>
132
132
@@ -129,9 +129,9 b' data = {'
129 <tr>
129 <tr>
130 <td style="padding-right:20px;line-height:20px;">${_('Commit Flow')}:</td>
130 <td style="padding-right:20px;line-height:20px;">${_('Commit Flow')}:</td>
131 <td style="line-height:20px;">
131 <td style="line-height:20px;">
132 <code>${'{}:{}'.format(data['source_ref_type'], pull_request.source_ref_parts.name)}</code> ${_('of')} ${data['source_repo_url']}
132 <code>${data['source_ref_type']}:${pull_request.source_ref_parts.name}</code> ${_('of')} ${data['source_repo_url']}
133 &rarr;
133 &rarr;
134 <code>${'{}:{}'.format(data['target_ref_type'], pull_request.target_ref_parts.name)}</code> ${_('of')} ${data['target_repo_url']}
134 <code>${data['target_ref_type']}:${pull_request.target_ref_parts.name}</code> ${_('of')} ${data['target_repo_url']}
135 </td>
135 </td>
136 </tr>
136 </tr>
137
137
@@ -143,9 +143,9 b''
143 ## pull url
143 ## pull url
144 <li>
144 <li>
145 %if h.is_hg(c.pull_request.source_repo):
145 %if h.is_hg(c.pull_request.source_repo):
146 <% clone_url = 'hg pull -r {} {}'.format(h.short_id(c.source_ref), c.pull_request.source_repo.clone_url()) %>
146 <% clone_url = u'hg pull -r {} {}'.format(h.short_id(c.source_ref), c.pull_request.source_repo.clone_url()) %>
147 %elif h.is_git(c.pull_request.source_repo):
147 %elif h.is_git(c.pull_request.source_repo):
148 <% clone_url = 'git pull {} {}'.format(c.pull_request.source_repo.clone_url(), c.pull_request.source_ref_parts.name) %>
148 <% clone_url = u'git pull {} {}'.format(c.pull_request.source_repo.clone_url(), c.pull_request.source_ref_parts.name) %>
149 %endif
149 %endif
150
150
151 <span>${_('Pull changes from source')}</span>: <input type="text" class="input-monospace pr-pullinfo" value="${clone_url}" readonly="readonly">
151 <span>${_('Pull changes from source')}</span>: <input type="text" class="input-monospace pr-pullinfo" value="${clone_url}" readonly="readonly">
@@ -560,7 +560,7 b''
560
560
561 <div class="right-sidebar-expanded-state pr-details-title">
561 <div class="right-sidebar-expanded-state pr-details-title">
562 <span style="padding-left: 2px">
562 <span style="padding-left: 2px">
563 <input name="select_all_drafts" type="checkbox" onclick="$('[name=submit_draft]').prop('checked', !$('[name=submit_draft]').prop('checked'))">
563 <input name="select_all_drafts" type="checkbox" onclick="selectDraftComments(event)">
564 </span>
564 </span>
565 <span class="sidebar-heading noselect" onclick="refreshDraftComments(); return false">
565 <span class="sidebar-heading noselect" onclick="refreshDraftComments(); return false">
566 <i class="icon-comment icon-draft"></i>
566 <i class="icon-comment icon-draft"></i>
@@ -942,6 +942,11 b' window.setObserversData = ${c.pull_reque'
942 }
942 }
943 }
943 }
944
944
945 window.selectDraftComments = function (event) {
946 var $target = $(event.currentTarget);
947 $('[name=submit_draft]').prop('checked', $target.prop('checked'))
948 }
949
945 window.closePullRequest = function (status) {
950 window.closePullRequest = function (status) {
946 if (!confirm(_gettext('Are you sure to close this pull request without merging?'))) {
951 if (!confirm(_gettext('Are you sure to close this pull request without merging?'))) {
947 return false;
952 return false;
@@ -23,13 +23,14 b''
23
23
24 <div class="box">
24 <div class="box">
25 <div class="title">
25 <div class="title">
26
26 <ul class="button-links">
27 <ul class="button-links">
27 <li class="btn ${h.is_active('open', c.active)}"><a href="${h.route_path('pullrequest_show_all',repo_name=c.repo_name, _query={'source':0})}">${_('Opened')}</a></li>
28 <li><a class="btn ${h.is_active('open', c.active)}" href="${h.route_path('pullrequest_show_all',repo_name=c.repo_name, _query={'source':0,'open':1})}">${_('Open')}</a></li>
28 <li class="btn ${h.is_active('my', c.active)}"><a href="${h.route_path('pullrequest_show_all',repo_name=c.repo_name, _query={'source':0,'my':1})}">${_('Opened by me')}</a></li>
29 <li><a class="btn ${h.is_active('my', c.active)}" href="${h.route_path('pullrequest_show_all',repo_name=c.repo_name, _query={'source':0,'my':1})}">${_('Created by me')}</a></li>
29 <li class="btn ${h.is_active('awaiting', c.active)}"><a href="${h.route_path('pullrequest_show_all',repo_name=c.repo_name, _query={'source':0,'awaiting_review':1})}">${_('Awaiting review')}</a></li>
30 <li><a class="btn ${h.is_active('awaiting', c.active)}" href="${h.route_path('pullrequest_show_all',repo_name=c.repo_name, _query={'source':0,'awaiting_review':1})}">${_('Awaiting review')}</a></li>
30 <li class="btn ${h.is_active('awaiting_my', c.active)}"><a href="${h.route_path('pullrequest_show_all',repo_name=c.repo_name, _query={'source':0,'awaiting_my_review':1})}">${_('Awaiting my review')}</a></li>
31 <li><a class="btn ${h.is_active('awaiting_my', c.active)}" href="${h.route_path('pullrequest_show_all',repo_name=c.repo_name, _query={'source':0,'awaiting_my_review':1})}">${_('Awaiting my review')}</a></li>
31 <li class="btn ${h.is_active('closed', c.active)}"><a href="${h.route_path('pullrequest_show_all',repo_name=c.repo_name, _query={'source':0,'closed':1})}">${_('Closed')}</a></li>
32 <li><a class="btn ${h.is_active('closed', c.active)}" href="${h.route_path('pullrequest_show_all',repo_name=c.repo_name, _query={'source':0,'closed':1})}">${_('Closed')}</a></li>
32 <li class="btn ${h.is_active('source', c.active)}"><a href="${h.route_path('pullrequest_show_all',repo_name=c.repo_name, _query={'source':1})}">${_('From this repo')}</a></li>
33 <li><a class="btn ${h.is_active('source', c.active)}" href="${h.route_path('pullrequest_show_all',repo_name=c.repo_name, _query={'source':1})}">${_('From this repo')}</a></li>
33 </ul>
34 </ul>
34
35
35 <ul class="links">
36 <ul class="links">
@@ -88,20 +89,50 b''
88 },
89 },
89 dom: 'rtp',
90 dom: 'rtp',
90 pageLength: ${c.visual.dashboard_items},
91 pageLength: ${c.visual.dashboard_items},
91 order: [[ 1, "desc" ]],
92 order: [[ 2, "desc" ]],
92 columns: [
93 columns: [
93 { data: {"_": "status",
94 {
94 "sort": "status"}, title: "", className: "td-status", orderable: false},
95 data: {
95 { data: {"_": "name",
96 "_": "status",
96 "sort": "name_raw"}, title: "${_('Id')}", className: "td-componentname", "type": "num" },
97 "sort": "status"
97 { data: {"_": "title",
98 }, title: "PR", className: "td-status", orderable: false
98 "sort": "title"}, title: "${_('Title')}", className: "td-description" },
99 },
99 { data: {"_": "author",
100 {
100 "sort": "author_raw"}, title: "${_('Author')}", className: "td-user", orderable: false },
101 data: {
101 { data: {"_": "comments",
102 "_": "my_status",
102 "sort": "comments_raw"}, title: "", className: "td-comments", orderable: false},
103 "sort": "status"
103 { data: {"_": "updated_on",
104 }, title: "You", className: "td-status", orderable: false
104 "sort": "updated_on_raw"}, title: "${_('Last Update')}", className: "td-time" }
105 },
106 {
107 data: {
108 "_": "name",
109 "sort": "name_raw"
110 }, title: "${_('Id')}", className: "td-componentname", "type": "num"
111 },
112 {
113 data: {
114 "_": "title",
115 "sort": "title"
116 }, title: "${_('Title')}", className: "td-description"
117 },
118 {
119 data: {
120 "_": "author",
121 "sort": "author_raw"
122 }, title: "${_('Author')}", className: "td-user", orderable: false
123 },
124 {
125 data: {
126 "_": "comments",
127 "sort": "comments_raw"
128 }, title: "", className: "td-comments", orderable: false
129 },
130 {
131 data: {
132 "_": "updated_on",
133 "sort": "updated_on_raw"
134 }, title: "${_('Last Update')}", className: "td-time"
135 }
105 ],
136 ],
106 language: {
137 language: {
107 paginate: DEFAULT_GRID_PAGINATION,
138 paginate: DEFAULT_GRID_PAGINATION,
@@ -111,9 +111,10 b''
111 </div>
111 </div>
112 %else:
112 %else:
113
113
114 %if h.HasRepoPermissionAny('repository.write','repository.admin')(c.repo_name):
114
115 <div class="quick_start">
115 <div class="quick_start">
116 <div class="fieldset">
116 <div class="fieldset">
117 %if h.HasRepoPermissionAny('repository.write','repository.admin')(c.repo_name):
117 <p><b>${_('Add or upload files directly via RhodeCode:')}</b></p>
118 <p><b>${_('Add or upload files directly via RhodeCode:')}</b></p>
118 <div class="pull-left">
119 <div class="pull-left">
119 <a href="${h.route_path('repo_files_add_file',repo_name=c.repo_name,commit_id=0, f_path='')}" class="btn btn-default">${_('Add New File')}</a>
120 <a href="${h.route_path('repo_files_add_file',repo_name=c.repo_name,commit_id=0, f_path='')}" class="btn btn-default">${_('Add New File')}</a>
@@ -124,6 +125,7 b''
124 %endif
125 %endif
125 </div>
126 </div>
126
127
128
127 <div class="fieldset">
129 <div class="fieldset">
128 <p><b>${_('Push new repo:')}</b></p>
130 <p><b>${_('Push new repo:')}</b></p>
129 <pre>
131 <pre>
General Comments 0
You need to be logged in to leave comments. Login now