##// END OF EJS Templates
release: merge back stable branch into default
marcink -
r3843:957c2342 merge default
parent child Browse files
Show More

The requested changes are too big and content was truncated. Show full diff

@@ -0,0 +1,41 b''
1 |RCE| 4.17.1 |RNS|
2 ------------------
3
4 Release Date
5 ^^^^^^^^^^^^
6
7 - 2019-07-04
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 - Database: fixed mysql migration issues.
34 - Artifacts: fixed problem with non-ascii file uploads.
35 - Artifacts: increase timeout, and allow setting custom time via ?timeout=N GET flag
36
37
38 Upgrade notes
39 ^^^^^^^^^^^^^
40
41 - Un-scheduled release addressing problems in 4.17.X releases.
@@ -0,0 +1,40 b''
1 |RCE| 4.17.2 |RNS|
2 ------------------
3
4 Release Date
5 ^^^^^^^^^^^^
6
7 - 2019-07-05
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 - UI: fixed missing icons on some cases.
34 - Commits: hide links icon of message that don't expand.
35
36
37 Upgrade notes
38 ^^^^^^^^^^^^^
39
40 - Un-scheduled release addressing problems in 4.17.X releases.
@@ -0,0 +1,2 b''
1 big/CPython
2 big/CPython/commits
@@ -41,6 +41,7 b' syntax: regexp'
41 41 ^result$
42 42 ^rhodecode/public/css/style.css$
43 43 ^rhodecode/public/css/style-polymer.css$
44 ^rhodecode/public/css/style-ipython.css$
44 45 ^rhodecode/public/js/rhodecode-components.html$
45 46 ^rhodecode/public/js/rhodecode-components.js$
46 47 ^rhodecode/public/js/scripts.js$
@@ -52,3 +52,6 b' 4aaa40b605b01af78a9f6882eca561c54b525ef0'
52 52 797744642eca86640ed20bef2cd77445780abaec v4.16.0
53 53 6c3452c7c25ed35ff269690929e11960ed6ad7d3 v4.16.1
54 54 5d8057df561c4b6b81b6401aed7d2f911e6e77f7 v4.16.2
55 13acfc008896ef4c62546bab5074e8f6f89b4fa7 v4.17.0
56 45b9b610976f483877142fe75321808ce9ebac59 v4.17.1
57 ad5bd0c4bd322fdbd04bb825a3d027e08f7a3901 v4.17.2
@@ -9,6 +9,8 b' Release Notes'
9 9 .. toctree::
10 10 :maxdepth: 1
11 11
12 release-notes-4.17.2.rst
13 release-notes-4.17.1.rst
12 14 release-notes-4.17.0.rst
13 15 release-notes-4.16.2.rst
14 16 release-notes-4.16.1.rst
@@ -1718,7 +1718,7 b' self: super: {'
1718 1718 };
1719 1719 };
1720 1720 "rhodecode-enterprise-ce" = super.buildPythonPackage {
1721 name = "rhodecode-enterprise-ce-4.17.0";
1721 name = "rhodecode-enterprise-ce-4.17.2";
1722 1722 buildInputs = [
1723 1723 self."pytest"
1724 1724 self."py"
@@ -369,6 +369,10 b' def includeme(config):'
369 369 name='edit_repo_perms',
370 370 pattern='/{repo_name:.*?[^/]}/settings/permissions', repo_route=True)
371 371
372 config.add_route(
373 name='edit_repo_perms_set_private',
374 pattern='/{repo_name:.*?[^/]}/settings/permissions/set_private', repo_route=True)
375
372 376 # Permissions Branch (EE feature)
373 377 config.add_route(
374 378 name='edit_repo_perms_branch',
@@ -481,13 +485,21 b' def includeme(config):'
481 485 name='edit_repo_audit_logs',
482 486 pattern='/{repo_name:.*?[^/]}/settings/audit_logs', repo_route=True)
483 487
484 # ATOM/RSS Feed
488 # ATOM/RSS Feed, shouldn't contain slashes for outlook compatibility
485 489 config.add_route(
486 490 name='rss_feed_home',
491 pattern='/{repo_name:.*?[^/]}/feed-rss', repo_route=True)
492
493 config.add_route(
494 name='atom_feed_home',
495 pattern='/{repo_name:.*?[^/]}/feed-atom', repo_route=True)
496
497 config.add_route(
498 name='rss_feed_home_old',
487 499 pattern='/{repo_name:.*?[^/]}/feed/rss', repo_route=True)
488 500
489 501 config.add_route(
490 name='atom_feed_home',
502 name='atom_feed_home_old',
491 503 pattern='/{repo_name:.*?[^/]}/feed/atom', repo_route=True)
492 504
493 505 # NOTE(marcink): needs to be at the end for catch-all
@@ -27,8 +27,10 b' def route_path(name, params=None, **kwar'
27 27 import urllib
28 28
29 29 base_url = {
30 'rss_feed_home': '/{repo_name}/feed/rss',
31 'atom_feed_home': '/{repo_name}/feed/atom',
30 'rss_feed_home': '/{repo_name}/feed-rss',
31 'atom_feed_home': '/{repo_name}/feed-atom',
32 'rss_feed_home_old': '/{repo_name}/feed/rss',
33 'atom_feed_home_old': '/{repo_name}/feed/atom',
32 34 }[name].format(**kwargs)
33 35
34 36 if params:
@@ -73,6 +75,42 b' class TestFeedView(TestController):'
73 75
74 76 assert response.content_type == content_type
75 77
78 @pytest.mark.parametrize("feed_type, content_type", [
79 ('rss', "application/rss+xml"),
80 ('atom', "application/atom+xml")
81 ])
82 def test_feed_with_auth_token_by_uid(
83 self, backend, user_admin, feed_type, content_type):
84 auth_token = user_admin.feed_token
85 assert auth_token != ''
86
87 response = self.app.get(
88 route_path(
89 '{}_feed_home'.format(feed_type),
90 repo_name='_{}'.format(backend.repo.repo_id),
91 params=dict(auth_token=auth_token)),
92 status=200)
93
94 assert response.content_type == content_type
95
96 @pytest.mark.parametrize("feed_type, content_type", [
97 ('rss', "application/rss+xml"),
98 ('atom', "application/atom+xml")
99 ])
100 def test_feed_old_urls_with_auth_token(
101 self, backend, user_admin, feed_type, content_type):
102 auth_token = user_admin.feed_token
103 assert auth_token != ''
104
105 response = self.app.get(
106 route_path(
107 '{}_feed_home_old'.format(feed_type),
108 repo_name=backend.repo_name,
109 params=dict(auth_token=auth_token)),
110 status=200)
111
112 assert response.content_type == content_type
113
76 114 @pytest.mark.parametrize("feed_type", ['rss', 'atom'])
77 115 def test_feed_with_auth_token_of_wrong_type(
78 116 self, backend, user_util, feed_type):
@@ -40,8 +40,6 b' log = logging.getLogger(__name__)'
40 40 class RepoFeedView(RepoAppView):
41 41 def load_default_context(self):
42 42 c = self._get_local_tmpl_context()
43
44
45 43 self._load_defaults()
46 44 return c
47 45
@@ -117,6 +115,9 b' class RepoFeedView(RepoAppView):'
117 115 @view_config(
118 116 route_name='atom_feed_home', request_method='GET',
119 117 renderer=None)
118 @view_config(
119 route_name='atom_feed_home_old', request_method='GET',
120 renderer=None)
120 121 def atom(self):
121 122 """
122 123 Produce an atom-1.0 feed via feedgenerator module
@@ -181,6 +182,9 b' class RepoFeedView(RepoAppView):'
181 182 @view_config(
182 183 route_name='rss_feed_home', request_method='GET',
183 184 renderer=None)
185 @view_config(
186 route_name='rss_feed_home_old', request_method='GET',
187 renderer=None)
184 188 def rss(self):
185 189 """
186 190 Produce an rss2 feed via feedgenerator module
@@ -105,3 +105,30 b' class RepoSettingsPermissionsView(RepoAp'
105 105
106 106 raise HTTPFound(
107 107 h.route_path('edit_repo_perms', repo_name=self.db_repo_name))
108
109 @LoginRequired()
110 @HasRepoPermissionAnyDecorator('repository.admin')
111 @CSRFRequired()
112 @view_config(
113 route_name='edit_repo_perms_set_private', request_method='POST',
114 renderer='json_ext')
115 def edit_permissions_set_private_repo(self):
116 _ = self.request.translate
117 self.load_default_context()
118
119 try:
120 RepoModel().update(
121 self.db_repo, **{'repo_private': True, 'repo_name': self.db_repo_name})
122 Session().commit()
123
124 h.flash(_('Repository `{}` private mode set successfully').format(self.db_repo_name),
125 category='success')
126 except Exception:
127 log.exception("Exception during update of repository")
128 h.flash(_('Error occurred during update of repository {}').format(
129 self.db_repo_name), category='error')
130
131 return {
132 'redirect_url': h.route_path('edit_repo_perms', repo_name=self.db_repo_name),
133 'private': True
134 }
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
@@ -4,6 +4,7 b' import logging'
4 4
5 5 from alembic.migration import MigrationContext
6 6 from alembic.operations import Operations
7 from sqlalchemy import String
7 8
8 9 from rhodecode.lib.dbmigrate.versions import _reset_base
9 10 from rhodecode.model import init_model_encryption
@@ -28,7 +29,7 b' def upgrade(migrate_engine):'
28 29 repo_group = db_4_16_0_2.RepoGroup.__table__
29 30
30 31 with op.batch_alter_table(repo_group.name) as batch_op:
31 batch_op.alter_column("repo_group_name_hash", nullable=False)
32 batch_op.alter_column("repo_group_name_hash", type_=String(1024), nullable=False)
32 33
33 34
34 35 def downgrade(migrate_engine):
@@ -147,7 +147,7 b' class RemoteRepo(object):'
147 147
148 148 def _call_with_logging(self, name, *args, **kwargs):
149 149 context_uid = self._wire.get('context')
150 log.debug('Calling %s@%s with args:%r. wire_context: %s',
150 log.debug('Calling %s@%s with args:%.10240r. wire_context: %s',
151 151 self.url, name, args, context_uid)
152 152 return RemoteRepo._call(self, name, *args, **kwargs)
153 153
@@ -1841,6 +1841,10 b' class Repository(Base, BaseModel):'
1841 1841 return q.all()
1842 1842
1843 1843 @property
1844 def repo_uid(self):
1845 return '_{}'.format(self.repo_id)
1846
1847 @property
1844 1848 def forks(self):
1845 1849 """
1846 1850 Return forks of this repo
@@ -4111,7 +4115,7 b' class PullRequest(Base, _PullRequestBase'
4111 4115 def pull_request_version_id(self):
4112 4116 return getattr(pull_request_obj, 'pull_request_version_id', None)
4113 4117
4114 attrs = StrictAttributeDict(pull_request_obj.get_api_data())
4118 attrs = StrictAttributeDict(pull_request_obj.get_api_data(with_merge_state=False))
4115 4119
4116 4120 attrs.author = StrictAttributeDict(
4117 4121 pull_request_obj.author.get_api_data())
@@ -33,7 +33,7 b' from rhodecode import events'
33 33 from rhodecode.integrations.types.base import EEIntegration
34 34 from rhodecode.lib.caching_query import FromCache
35 35 from rhodecode.model import BaseModel
36 from rhodecode.model.db import Integration, Repository, RepoGroup, true, false
36 from rhodecode.model.db import Integration, Repository, RepoGroup, true, false, case
37 37 from rhodecode.integrations import integration_type_registry
38 38
39 39 log = logging.getLogger(__name__)
@@ -155,6 +155,7 b' class IntegrationModel(BaseModel):'
155 155 """
156 156 Get integrations that match an event
157 157 """
158 # base query
158 159 query = self.sa.query(
159 160 Integration
160 161 ).filter(
@@ -164,7 +165,7 b' class IntegrationModel(BaseModel):'
164 165 global_integrations_filter = and_(
165 166 Integration.repo_id == None,
166 167 Integration.repo_group_id == None,
167 Integration.child_repos_only == False,
168 Integration.child_repos_only == false(),
168 169 )
169 170
170 171 if isinstance(event, events.RepoEvent):
@@ -177,42 +178,61 b' class IntegrationModel(BaseModel):'
177 178 clauses = [
178 179 global_integrations_filter,
179 180 ]
181 cases = [
182 (global_integrations_filter, 1),
183 (root_repos_integrations_filter, 2),
184 ]
180 185
181 # repo integrations
182 if event.repo.repo_id: # pre create events dont have a repo_id yet
183 clauses.append(
184 Integration.repo_id == event.repo.repo_id
186 # repo group integrations
187 if event.repo.group:
188 # repo group with only root level repos
189 group_child_repos_filter = and_(
190 Integration.repo_group_id == event.repo.group.group_id,
191 Integration.child_repos_only == true()
185 192 )
186 193
187 if event.repo.group:
188 clauses.append(
189 and_(
190 Integration.repo_group_id == event.repo.group.group_id,
191 Integration.child_repos_only == true()
192 )
194 clauses.append(group_child_repos_filter)
195 cases.append(
196 (group_child_repos_filter, 3),
193 197 )
198
194 199 # repo group cascade to kids
195 clauses.append(
196 and_(
197 Integration.repo_group_id.in_(
198 [group.group_id for group in
199 event.repo.groups_with_parents]
200 ),
201 Integration.child_repos_only == false()
202 )
200 group_recursive_repos_filter = and_(
201 Integration.repo_group_id.in_(
202 [group.group_id for group in event.repo.groups_with_parents]
203 ),
204 Integration.child_repos_only == false()
205 )
206 clauses.append(group_recursive_repos_filter)
207 cases.append(
208 (group_recursive_repos_filter, 4),
203 209 )
204 210
205 211 if not event.repo.group: # root repo
206 212 clauses.append(root_repos_integrations_filter)
207 213
214 # repo integrations
215 if event.repo.repo_id: # pre create events dont have a repo_id yet
216 specific_repo_filter = Integration.repo_id == event.repo.repo_id
217 clauses.append(specific_repo_filter)
218 cases.append(
219 (specific_repo_filter, 5),
220 )
221
222 order_by_criterion = case(cases)
223
208 224 query = query.filter(or_(*clauses))
225 query = query.order_by(order_by_criterion)
209 226
210 227 if cache:
211 228 cache_key = "get_enabled_repo_integrations_%i" % event.repo.repo_id
212 229 query = query.options(
213 230 FromCache("sql_cache_short", cache_key))
214 231 else: # only global integrations
232 order_by_criterion = Integration.integration_id
233
215 234 query = query.filter(global_integrations_filter)
235 query = query.order_by(order_by_criterion)
216 236 if cache:
217 237 query = query.options(
218 238 FromCache("sql_cache_short", "get_enabled_global_integrations"))
@@ -374,8 +374,7 b' class RepoModel(BaseModel):'
374 374 )
375 375
376 376 # handle extra fields
377 for field in filter(lambda k: k.startswith(RepositoryField.PREFIX),
378 kwargs):
377 for field in filter(lambda k: k.startswith(RepositoryField.PREFIX), kwargs):
379 378 k = RepositoryField.un_prefix_key(field)
380 379 ex_field = RepositoryField.get_by_key_name(
381 380 key=k, repo=cur_repo)
@@ -53,7 +53,7 b' input[type="button"] {'
53 53 .border ( @border-thickness, @grey4 );
54 54 }
55 55
56 .icon-remove-sign {
56 .icon-remove {
57 57 display: none;
58 58 }
59 59
@@ -536,7 +536,7 b' th {'
536 536 .glyphicon-minus-sign:before {
537 537 content: "\e082";
538 538 }
539 .glyphicon-remove-sign:before {
539 .glyphicon-remove:before {
540 540 content: "\e083";
541 541 }
542 542 .glyphicon-ok-sign:before {
@@ -1622,8 +1622,14 b' table.integrations {'
1622 1622 margin-left: 8px;
1623 1623 }
1624 1624
1625 #pull_request_overview {
1626 div.ancestor {
1627 margin: -33px 0;
1628 }
1629 }
1630
1625 1631 div.ancestor {
1626 margin: -30px 0px;
1632 line-height: 33px;
1627 1633 }
1628 1634
1629 1635 .cs_icon_td input[type="checkbox"] {
@@ -8,6 +8,7 b' var _TM = {'
8 8 '(from usergroup {0})': '(from usergroup {0})',
9 9 'Add another comment': 'Add another comment',
10 10 'Adding new reviewers is forbidden.': 'Adding new reviewers is forbidden.',
11 'All Authors': 'All Authors',
11 12 'All individual reviewers must vote.': 'All individual reviewers must vote.',
12 13 'All reviewers must vote.': 'All reviewers must vote.',
13 14 'At least {0} reviewer must vote.': 'At least {0} reviewer must vote.',
@@ -63,6 +64,7 b' var _TM = {'
63 64 'Set status to Approved': 'Set status to Approved',
64 65 'Set status to Rejected': 'Set status to Rejected',
65 66 'Show at Commit ': 'Show at Commit ',
67 'Show commit range {0} ... {1}': 'Show commit range {0} ... {1}',
66 68 'Show full context diff': 'Show full context diff',
67 69 'Show more': 'Show more',
68 70 'Show selected commit __S': 'Show selected commit __S',
@@ -70,8 +72,10 b' var _TM = {'
70 72 'Show whitespace changes': 'Show whitespace changes',
71 73 'Specified expiration date': 'Specified expiration date',
72 74 'Start following this repository': 'Start following this repository',
75 'Started watching this repository': 'Started watching this repository',
73 76 'Status Review': 'Status Review',
74 77 'Stop following this repository': 'Stop following this repository',
78 'Stopped watching this repository': 'Stopped watching this repository',
75 79 'Submitting...': 'Submitting...',
76 80 'Switch to chat': 'Switch to chat',
77 81 'Switch to comment': 'Switch to comment',
@@ -80,9 +84,11 b' var _TM = {'
80 84 'There are currently no open pull requests requiring your participation.': 'There are currently no open pull requests requiring your participation.',
81 85 'Toggle Wide Mode diff': 'Toggle Wide Mode diff',
82 86 'Unfollow': 'Unfollow',
87 'Unwatch': 'Unwatch',
83 88 'Updating...': 'Updating...',
84 89 'User `{0}` already in reviewers': 'User `{0}` already in reviewers',
85 90 'User `{0}` not allowed to be a reviewer': 'User `{0}` not allowed to be a reviewer',
91 'Watch': 'Watch',
86 92 'You can only select {0} item': 'You can only select {0} item',
87 93 'You can only select {0} items': 'You can only select {0} items',
88 94 'activated': 'activated',
@@ -92,6 +98,7 b' var _TM = {'
92 98 'enabled': 'enabled',
93 99 'file': 'file',
94 100 'files': 'files',
101 'go to numeric commit': 'go to numeric commit',
95 102 'in {0}': 'in {0}',
96 103 'in {0} and {1}': 'in {0} and {1}',
97 104 'in {0}, {1}': 'in {0}, {1}',
@@ -118,8 +125,10 b' var _TM = {'
118 125 '{0} min': '{0} min',
119 126 '{0} month': '{0} month',
120 127 '{0} months': '{0} months',
128 '{0} of {1} repository groups': '{0} of {1} repository groups',
121 129 '{0} out of {1} ssh keys': '{0} out of {1} ssh keys',
122 130 '{0} out of {1} users': '{0} out of {1} users',
131 '{0} repository groups': '{0} repository groups',
123 132 '{0} results are available, use up and down arrow keys to navigate.': '{0} results are available, use up and down arrow keys to navigate.',
124 133 '{0} sec': '{0} sec',
125 134 '{0} user groups ({1} inactive)': '{0} user groups ({1} inactive)',
@@ -8,6 +8,7 b' var _TM = {'
8 8 '(from usergroup {0})': '(from usergroup {0})',
9 9 'Add another comment': 'Add another comment',
10 10 'Adding new reviewers is forbidden.': 'Adding new reviewers is forbidden.',
11 'All Authors': 'All Authors',
11 12 'All individual reviewers must vote.': 'All individual reviewers must vote.',
12 13 'All reviewers must vote.': 'All reviewers must vote.',
13 14 'At least {0} reviewer must vote.': 'At least {0} reviewer must vote.',
@@ -63,6 +64,7 b' var _TM = {'
63 64 'Set status to Approved': 'Set status to Approved',
64 65 'Set status to Rejected': 'Set status to Rejected',
65 66 'Show at Commit ': 'Show at Commit ',
67 'Show commit range {0} ... {1}': 'Show commit range {0} ... {1}',
66 68 'Show full context diff': 'Show full context diff',
67 69 'Show more': 'Show more',
68 70 'Show selected commit __S': 'Show selected commit __S',
@@ -70,8 +72,10 b' var _TM = {'
70 72 'Show whitespace changes': 'Show whitespace changes',
71 73 'Specified expiration date': 'Specified expiration date',
72 74 'Start following this repository': 'Start following this repository',
75 'Started watching this repository': 'Started watching this repository',
73 76 'Status Review': 'Status Review',
74 77 'Stop following this repository': 'Stop following this repository',
78 'Stopped watching this repository': 'Stopped watching this repository',
75 79 'Submitting...': 'Submitting...',
76 80 'Switch to chat': 'Switch to chat',
77 81 'Switch to comment': 'Switch to comment',
@@ -80,9 +84,11 b' var _TM = {'
80 84 'There are currently no open pull requests requiring your participation.': 'There are currently no open pull requests requiring your participation.',
81 85 'Toggle Wide Mode diff': 'Toggle Wide Mode diff',
82 86 'Unfollow': 'Unfollow',
87 'Unwatch': 'Unwatch',
83 88 'Updating...': 'Updating...',
84 89 'User `{0}` already in reviewers': 'User `{0}` already in reviewers',
85 90 'User `{0}` not allowed to be a reviewer': 'User `{0}` not allowed to be a reviewer',
91 'Watch': 'Watch',
86 92 'You can only select {0} item': 'You can only select {0} item',
87 93 'You can only select {0} items': 'You can only select {0} items',
88 94 'activated': 'activated',
@@ -92,6 +98,7 b' var _TM = {'
92 98 'enabled': 'enabled',
93 99 'file': 'file',
94 100 'files': 'files',
101 'go to numeric commit': 'go to numeric commit',
95 102 'in {0}': 'in {0}',
96 103 'in {0} and {1}': 'in {0} and {1}',
97 104 'in {0}, {1}': 'in {0}, {1}',
@@ -118,8 +125,10 b' var _TM = {'
118 125 '{0} min': '{0} min',
119 126 '{0} month': '{0} month',
120 127 '{0} months': '{0} months',
128 '{0} of {1} repository groups': '{0} of {1} repository groups',
121 129 '{0} out of {1} ssh keys': '{0} out of {1} ssh keys',
122 130 '{0} out of {1} users': '{0} out of {1} users',
131 '{0} repository groups': '{0} repository groups',
123 132 '{0} results are available, use up and down arrow keys to navigate.': '{0} results are available, use up and down arrow keys to navigate.',
124 133 '{0} sec': '{0} sec',
125 134 '{0} user groups ({1} inactive)': '{0} user groups ({1} inactive)',
@@ -8,6 +8,7 b' var _TM = {'
8 8 '(from usergroup {0})': '(from usergroup {0})',
9 9 'Add another comment': 'Add another comment',
10 10 'Adding new reviewers is forbidden.': 'Adding new reviewers is forbidden.',
11 'All Authors': 'All Authors',
11 12 'All individual reviewers must vote.': 'All individual reviewers must vote.',
12 13 'All reviewers must vote.': 'All reviewers must vote.',
13 14 'At least {0} reviewer must vote.': 'At least {0} reviewer must vote.',
@@ -63,6 +64,7 b' var _TM = {'
63 64 'Set status to Approved': 'Set status to Approved',
64 65 'Set status to Rejected': 'Set status to Rejected',
65 66 'Show at Commit ': 'Show at Commit ',
67 'Show commit range {0} ... {1}': 'Show commit range {0} ... {1}',
66 68 'Show full context diff': 'Show full context diff',
67 69 'Show more': 'Show more',
68 70 'Show selected commit __S': 'Show selected commit __S',
@@ -70,8 +72,10 b' var _TM = {'
70 72 'Show whitespace changes': 'Show whitespace changes',
71 73 'Specified expiration date': 'Specified expiration date',
72 74 'Start following this repository': 'Start following this repository',
75 'Started watching this repository': 'Started watching this repository',
73 76 'Status Review': 'Status Review',
74 77 'Stop following this repository': 'Stop following this repository',
78 'Stopped watching this repository': 'Stopped watching this repository',
75 79 'Submitting...': 'Submitting...',
76 80 'Switch to chat': 'Switch to chat',
77 81 'Switch to comment': 'Switch to comment',
@@ -80,9 +84,11 b' var _TM = {'
80 84 'There are currently no open pull requests requiring your participation.': 'There are currently no open pull requests requiring your participation.',
81 85 'Toggle Wide Mode diff': 'Toggle Wide Mode diff',
82 86 'Unfollow': 'Unfollow',
87 'Unwatch': 'Unwatch',
83 88 'Updating...': 'Updating...',
84 89 'User `{0}` already in reviewers': 'User `{0}` already in reviewers',
85 90 'User `{0}` not allowed to be a reviewer': 'User `{0}` not allowed to be a reviewer',
91 'Watch': 'Watch',
86 92 'You can only select {0} item': 'You can only select {0} item',
87 93 'You can only select {0} items': 'You can only select {0} items',
88 94 'activated': 'activated',
@@ -92,6 +98,7 b' var _TM = {'
92 98 'enabled': 'enabled',
93 99 'file': 'file',
94 100 'files': 'files',
101 'go to numeric commit': 'go to numeric commit',
95 102 'in {0}': 'in {0}',
96 103 'in {0} and {1}': 'in {0} and {1}',
97 104 'in {0}, {1}': 'in {0}, {1}',
@@ -118,8 +125,10 b' var _TM = {'
118 125 '{0} min': '{0} min',
119 126 '{0} month': '{0} month',
120 127 '{0} months': '{0} months',
128 '{0} of {1} repository groups': '{0} of {1} repository groups',
121 129 '{0} out of {1} ssh keys': '{0} out of {1} ssh keys',
122 130 '{0} out of {1} users': '{0} out of {1} users',
131 '{0} repository groups': '{0} repository groups',
123 132 '{0} results are available, use up and down arrow keys to navigate.': '{0} results are available, use up and down arrow keys to navigate.',
124 133 '{0} sec': '{0} sec',
125 134 '{0} user groups ({1} inactive)': '{0} user groups ({1} inactive)',
@@ -8,6 +8,7 b' var _TM = {'
8 8 '(from usergroup {0})': '(from usergroup {0})',
9 9 'Add another comment': 'Add another comment',
10 10 'Adding new reviewers is forbidden.': 'Adding new reviewers is forbidden.',
11 'All Authors': 'All Authors',
11 12 'All individual reviewers must vote.': 'All individual reviewers must vote.',
12 13 'All reviewers must vote.': 'All reviewers must vote.',
13 14 'At least {0} reviewer must vote.': 'At least {0} reviewer must vote.',
@@ -63,6 +64,7 b' var _TM = {'
63 64 'Set status to Approved': 'Set status to Approved',
64 65 'Set status to Rejected': 'Set status to Rejected',
65 66 'Show at Commit ': 'Show at Commit ',
67 'Show commit range {0} ... {1}': 'Show commit range {0} ... {1}',
66 68 'Show full context diff': 'Show full context diff',
67 69 'Show more': 'Show more',
68 70 'Show selected commit __S': 'Show selected commit __S',
@@ -70,8 +72,10 b' var _TM = {'
70 72 'Show whitespace changes': 'Show whitespace changes',
71 73 'Specified expiration date': 'Specified expiration date',
72 74 'Start following this repository': 'Start following this repository',
75 'Started watching this repository': 'Started watching this repository',
73 76 'Status Review': 'Status Review',
74 77 'Stop following this repository': 'Stop following this repository',
78 'Stopped watching this repository': 'Stopped watching this repository',
75 79 'Submitting...': 'Submitting...',
76 80 'Switch to chat': 'Switch to chat',
77 81 'Switch to comment': 'Switch to comment',
@@ -80,9 +84,11 b' var _TM = {'
80 84 'There are currently no open pull requests requiring your participation.': 'There are currently no open pull requests requiring your participation.',
81 85 'Toggle Wide Mode diff': 'Toggle Wide Mode diff',
82 86 'Unfollow': 'Unfollow',
87 'Unwatch': 'Unwatch',
83 88 'Updating...': 'Updating...',
84 89 'User `{0}` already in reviewers': 'User `{0}` already in reviewers',
85 90 'User `{0}` not allowed to be a reviewer': 'User `{0}` not allowed to be a reviewer',
91 'Watch': 'Watch',
86 92 'You can only select {0} item': 'You can only select {0} item',
87 93 'You can only select {0} items': 'You can only select {0} items',
88 94 'activated': 'activated',
@@ -92,6 +98,7 b' var _TM = {'
92 98 'enabled': 'enabled',
93 99 'file': 'file',
94 100 'files': 'files',
101 'go to numeric commit': 'go to numeric commit',
95 102 'in {0}': 'in {0}',
96 103 'in {0} and {1}': 'in {0} and {1}',
97 104 'in {0}, {1}': 'in {0}, {1}',
@@ -118,8 +125,10 b' var _TM = {'
118 125 '{0} min': '{0} min',
119 126 '{0} month': '{0} month',
120 127 '{0} months': '{0} months',
128 '{0} of {1} repository groups': '{0} of {1} repository groups',
121 129 '{0} out of {1} ssh keys': '{0} out of {1} ssh keys',
122 130 '{0} out of {1} users': '{0} out of {1} users',
131 '{0} repository groups': '{0} repository groups',
123 132 '{0} results are available, use up and down arrow keys to navigate.': '{0} results are available, use up and down arrow keys to navigate.',
124 133 '{0} sec': '{0} sec',
125 134 '{0} user groups ({1} inactive)': '{0} user groups ({1} inactive)',
@@ -8,6 +8,7 b' var _TM = {'
8 8 '(from usergroup {0})': '(from usergroup {0})',
9 9 'Add another comment': 'Add another comment',
10 10 'Adding new reviewers is forbidden.': 'Adding new reviewers is forbidden.',
11 'All Authors': 'All Authors',
11 12 'All individual reviewers must vote.': 'All individual reviewers must vote.',
12 13 'All reviewers must vote.': 'All reviewers must vote.',
13 14 'At least {0} reviewer must vote.': 'At least {0} reviewer must vote.',
@@ -63,6 +64,7 b' var _TM = {'
63 64 'Set status to Approved': 'Set status to Approved',
64 65 'Set status to Rejected': 'Set status to Rejected',
65 66 'Show at Commit ': 'Show at Commit ',
67 'Show commit range {0} ... {1}': 'Show commit range {0} ... {1}',
66 68 'Show full context diff': 'Show full context diff',
67 69 'Show more': 'Show more',
68 70 'Show selected commit __S': 'Show selected commit __S',
@@ -70,8 +72,10 b' var _TM = {'
70 72 'Show whitespace changes': 'Show whitespace changes',
71 73 'Specified expiration date': 'Specified expiration date',
72 74 'Start following this repository': 'Suivre ce dépôt',
75 'Started watching this repository': 'Started watching this repository',
73 76 'Status Review': 'Status Review',
74 77 'Stop following this repository': 'Arrêter de suivre ce dépôt',
78 'Stopped watching this repository': 'Stopped watching this repository',
75 79 'Submitting...': 'Envoi…',
76 80 'Switch to chat': 'Switch to chat',
77 81 'Switch to comment': 'Switch to comment',
@@ -80,9 +84,11 b' var _TM = {'
80 84 'There are currently no open pull requests requiring your participation.': 'There are currently no open pull requests requiring your participation.',
81 85 'Toggle Wide Mode diff': 'Toggle Wide Mode diff',
82 86 'Unfollow': 'Unfollow',
87 'Unwatch': 'Unwatch',
83 88 'Updating...': 'Updating...',
84 89 'User `{0}` already in reviewers': 'User `{0}` already in reviewers',
85 90 'User `{0}` not allowed to be a reviewer': 'User `{0}` not allowed to be a reviewer',
91 'Watch': 'Watch',
86 92 'You can only select {0} item': 'You can only select {0} item',
87 93 'You can only select {0} items': 'You can only select {0} items',
88 94 'activated': 'activated',
@@ -92,6 +98,7 b' var _TM = {'
92 98 'enabled': 'Activé',
93 99 'file': 'file',
94 100 'files': 'Fichiers',
101 'go to numeric commit': 'go to numeric commit',
95 102 'in {0}': 'in {0}',
96 103 'in {0} and {1}': 'in {0} and {1}',
97 104 'in {0}, {1}': 'in {0}, {1}',
@@ -118,8 +125,10 b' var _TM = {'
118 125 '{0} min': '{0} min',
119 126 '{0} month': '{0} month',
120 127 '{0} months': '{0} mois',
128 '{0} of {1} repository groups': '{0} of {1} repository groups',
121 129 '{0} out of {1} ssh keys': '{0} out of {1} ssh keys',
122 130 '{0} out of {1} users': '{0} out of {1} users',
131 '{0} repository groups': '{0} repository groups',
123 132 '{0} results are available, use up and down arrow keys to navigate.': '{0} results are available, use up and down arrow keys to navigate.',
124 133 '{0} sec': '{0} sec',
125 134 '{0} user groups ({1} inactive)': '{0} user groups ({1} inactive)',
@@ -8,6 +8,7 b' var _TM = {'
8 8 '(from usergroup {0})': '(from usergroup {0})',
9 9 'Add another comment': 'Aggiungi un altro commento',
10 10 'Adding new reviewers is forbidden.': 'Adding new reviewers is forbidden.',
11 'All Authors': 'All Authors',
11 12 'All individual reviewers must vote.': 'All individual reviewers must vote.',
12 13 'All reviewers must vote.': 'All reviewers must vote.',
13 14 'At least {0} reviewer must vote.': 'At least {0} reviewer must vote.',
@@ -63,6 +64,7 b' var _TM = {'
63 64 'Set status to Approved': 'Set status to Approved',
64 65 'Set status to Rejected': 'Set status to Rejected',
65 66 'Show at Commit ': 'Show at Commit ',
67 'Show commit range {0} ... {1}': 'Show commit range {0} ... {1}',
66 68 'Show full context diff': 'Show full context diff',
67 69 'Show more': 'Mostra ancora',
68 70 'Show selected commit __S': 'Show selected commit __S',
@@ -70,8 +72,10 b' var _TM = {'
70 72 'Show whitespace changes': 'Show whitespace changes',
71 73 'Specified expiration date': 'Specified expiration date',
72 74 'Start following this repository': 'Inizia a seguire il repository',
75 'Started watching this repository': 'Started watching this repository',
73 76 'Status Review': 'Status Review',
74 77 'Stop following this repository': 'Smetti di seguire il repository',
78 'Stopped watching this repository': 'Stopped watching this repository',
75 79 'Submitting...': 'Inoltro...',
76 80 'Switch to chat': 'Switch to chat',
77 81 'Switch to comment': 'Switch to comment',
@@ -80,9 +84,11 b' var _TM = {'
80 84 'There are currently no open pull requests requiring your participation.': 'Al momento non ci sono richieste di PULL che richiedono il tuo intervento',
81 85 'Toggle Wide Mode diff': 'Toggle Wide Mode diff',
82 86 'Unfollow': 'Smetti di seguire',
87 'Unwatch': 'Unwatch',
83 88 'Updating...': 'Updating...',
84 89 'User `{0}` already in reviewers': 'User `{0}` already in reviewers',
85 90 'User `{0}` not allowed to be a reviewer': 'User `{0}` not allowed to be a reviewer',
91 'Watch': 'Watch',
86 92 'You can only select {0} item': 'You can only select {0} item',
87 93 'You can only select {0} items': 'You can only select {0} items',
88 94 'activated': 'activated',
@@ -92,6 +98,7 b' var _TM = {'
92 98 'enabled': 'abilitato',
93 99 'file': 'file',
94 100 'files': 'i file',
101 'go to numeric commit': 'go to numeric commit',
95 102 'in {0}': 'in {0}',
96 103 'in {0} and {1}': 'in {0} and {1}',
97 104 'in {0}, {1}': 'in {0}, {1}',
@@ -118,8 +125,10 b' var _TM = {'
118 125 '{0} min': '{0} min',
119 126 '{0} month': '{0} month',
120 127 '{0} months': '{0} months',
128 '{0} of {1} repository groups': '{0} of {1} repository groups',
121 129 '{0} out of {1} ssh keys': '{0} out of {1} ssh keys',
122 130 '{0} out of {1} users': '{0} out of {1} users',
131 '{0} repository groups': '{0} repository groups',
123 132 '{0} results are available, use up and down arrow keys to navigate.': '{0} results are available, use up and down arrow keys to navigate.',
124 133 '{0} sec': '{0} sec',
125 134 '{0} user groups ({1} inactive)': '{0} user groups ({1} inactive)',
@@ -8,6 +8,7 b' var _TM = {'
8 8 '(from usergroup {0})': '(from usergroup {0})',
9 9 'Add another comment': '別のコメントを追加',
10 10 'Adding new reviewers is forbidden.': 'Adding new reviewers is forbidden.',
11 'All Authors': 'All Authors',
11 12 'All individual reviewers must vote.': 'All individual reviewers must vote.',
12 13 'All reviewers must vote.': 'All reviewers must vote.',
13 14 'At least {0} reviewer must vote.': 'At least {0} reviewer must vote.',
@@ -63,6 +64,7 b' var _TM = {'
63 64 'Set status to Approved': 'ステータスを承認にする',
64 65 'Set status to Rejected': 'ステータスを拒否にする',
65 66 'Show at Commit ': 'Show at Commit ',
67 'Show commit range {0} ... {1}': 'Show commit range {0} ... {1}',
66 68 'Show full context diff': 'Show full context diff',
67 69 'Show more': 'もっと表示',
68 70 'Show selected commit __S': 'Show selected commit __S',
@@ -70,8 +72,10 b' var _TM = {'
70 72 'Show whitespace changes': 'Show whitespace changes',
71 73 'Specified expiration date': 'Specified expiration date',
72 74 'Start following this repository': 'このリポジトリのフォローする',
75 'Started watching this repository': 'Started watching this repository',
73 76 'Status Review': 'ステータスレビュー',
74 77 'Stop following this repository': 'このリポジトリのフォローをやめる',
78 'Stopped watching this repository': 'Stopped watching this repository',
75 79 'Submitting...': '送信中...',
76 80 'Switch to chat': 'Switch to chat',
77 81 'Switch to comment': 'Switch to comment',
@@ -80,9 +84,11 b' var _TM = {'
80 84 'There are currently no open pull requests requiring your participation.': 'There are currently no open pull requests requiring your participation.',
81 85 'Toggle Wide Mode diff': 'Toggle Wide Mode diff',
82 86 'Unfollow': 'アンフォロー',
87 'Unwatch': 'Unwatch',
83 88 'Updating...': 'Updating...',
84 89 'User `{0}` already in reviewers': 'User `{0}` already in reviewers',
85 90 'User `{0}` not allowed to be a reviewer': 'User `{0}` not allowed to be a reviewer',
91 'Watch': 'Watch',
86 92 'You can only select {0} item': '{0} 件のみ選択できます',
87 93 'You can only select {0} items': '{0} 件のみ選択できます',
88 94 'activated': 'activated',
@@ -92,6 +98,7 b' var _TM = {'
92 98 'enabled': '有効',
93 99 'file': 'ファイル',
94 100 'files': 'ファイル',
101 'go to numeric commit': 'go to numeric commit',
95 102 'in {0}': 'in {0}',
96 103 'in {0} and {1}': 'in {0} and {1}',
97 104 'in {0}, {1}': 'in {0}, {1}',
@@ -118,8 +125,10 b' var _TM = {'
118 125 '{0} min': '{0} 分',
119 126 '{0} month': '{0} ヶ月',
120 127 '{0} months': '{0} months',
128 '{0} of {1} repository groups': '{0} of {1} repository groups',
121 129 '{0} out of {1} ssh keys': '{0} out of {1} ssh keys',
122 130 '{0} out of {1} users': '{0} out of {1} users',
131 '{0} repository groups': '{0} repository groups',
123 132 '{0} results are available, use up and down arrow keys to navigate.': '{0} 件の結果があります。矢印キーの上下で選択できます。',
124 133 '{0} sec': '{0} 秒',
125 134 '{0} user groups ({1} inactive)': '{0} user groups ({1} inactive)',
@@ -2,6 +2,7 b''
2 2 _gettext('(from usergroup {0})');
3 3 _gettext('Add another comment');
4 4 _gettext('Adding new reviewers is forbidden.');
5 _gettext('All Authors');
5 6 _gettext('All individual reviewers must vote.');
6 7 _gettext('All reviewers must vote.');
7 8 _gettext('At least {0} reviewer must vote.');
@@ -57,6 +58,7 b''
57 58 _gettext('Set status to Approved');
58 59 _gettext('Set status to Rejected');
59 60 _gettext('Show at Commit ');
61 _gettext('Show commit range {0} ... {1}');
60 62 _gettext('Show full context diff');
61 63 _gettext('Show more');
62 64 _gettext('Show selected commit __S');
@@ -64,8 +66,10 b''
64 66 _gettext('Show whitespace changes');
65 67 _gettext('Specified expiration date');
66 68 _gettext('Start following this repository');
69 _gettext('Started watching this repository');
67 70 _gettext('Status Review');
68 71 _gettext('Stop following this repository');
72 _gettext('Stopped watching this repository');
69 73 _gettext('Submitting...');
70 74 _gettext('Switch to chat');
71 75 _gettext('Switch to comment');
@@ -74,9 +78,11 b''
74 78 _gettext('There are currently no open pull requests requiring your participation.');
75 79 _gettext('Toggle Wide Mode diff');
76 80 _gettext('Unfollow');
81 _gettext('Unwatch');
77 82 _gettext('Updating...');
78 83 _gettext('User `{0}` already in reviewers');
79 84 _gettext('User `{0}` not allowed to be a reviewer');
85 _gettext('Watch');
80 86 _gettext('You can only select {0} item');
81 87 _gettext('You can only select {0} items');
82 88 _gettext('activated');
@@ -86,6 +92,7 b''
86 92 _gettext('enabled');
87 93 _gettext('file');
88 94 _gettext('files');
95 _gettext('go to numeric commit');
89 96 _gettext('in {0}');
90 97 _gettext('in {0} and {1}');
91 98 _gettext('in {0}, {1}');
@@ -112,8 +119,10 b''
112 119 _gettext('{0} min');
113 120 _gettext('{0} month');
114 121 _gettext('{0} months');
122 _gettext('{0} of {1} repository groups');
115 123 _gettext('{0} out of {1} ssh keys');
116 124 _gettext('{0} out of {1} users');
125 _gettext('{0} repository groups');
117 126 _gettext('{0} results are available, use up and down arrow keys to navigate.');
118 127 _gettext('{0} sec');
119 128 _gettext('{0} user groups ({1} inactive)');
@@ -8,6 +8,7 b' var _TM = {'
8 8 '(from usergroup {0})': '(from usergroup {0})',
9 9 'Add another comment': 'Dodaj kolejny komentarz',
10 10 'Adding new reviewers is forbidden.': 'Adding new reviewers is forbidden.',
11 'All Authors': 'All Authors',
11 12 'All individual reviewers must vote.': 'All individual reviewers must vote.',
12 13 'All reviewers must vote.': 'All reviewers must vote.',
13 14 'At least {0} reviewer must vote.': 'At least {0} reviewer must vote.',
@@ -63,6 +64,7 b' var _TM = {'
63 64 'Set status to Approved': 'Set status to Approved',
64 65 'Set status to Rejected': 'Set status to Rejected',
65 66 'Show at Commit ': 'Show at Commit ',
67 'Show commit range {0} ... {1}': 'Show commit range {0} ... {1}',
66 68 'Show full context diff': 'Show full context diff',
67 69 'Show more': 'Pokaż więcej',
68 70 'Show selected commit __S': 'Show selected commit __S',
@@ -70,8 +72,10 b' var _TM = {'
70 72 'Show whitespace changes': 'Show whitespace changes',
71 73 'Specified expiration date': 'Specified expiration date',
72 74 'Start following this repository': 'Zacznij obserwację tego repozytorium',
75 'Started watching this repository': 'Started watching this repository',
73 76 'Status Review': 'Status Review',
74 77 'Stop following this repository': 'Zakończyć obserwację tego repozytorium',
78 'Stopped watching this repository': 'Stopped watching this repository',
75 79 'Submitting...': 'Przesyłanie...',
76 80 'Switch to chat': 'Switch to chat',
77 81 'Switch to comment': 'Switch to comment',
@@ -80,9 +84,11 b' var _TM = {'
80 84 'There are currently no open pull requests requiring your participation.': 'There are currently no open pull requests requiring your participation.',
81 85 'Toggle Wide Mode diff': 'Toggle Wide Mode diff',
82 86 'Unfollow': 'Nie obserwuj',
87 'Unwatch': 'Unwatch',
83 88 'Updating...': 'Updating...',
84 89 'User `{0}` already in reviewers': 'User `{0}` already in reviewers',
85 90 'User `{0}` not allowed to be a reviewer': 'User `{0}` not allowed to be a reviewer',
91 'Watch': 'Watch',
86 92 'You can only select {0} item': 'You can only select {0} item',
87 93 'You can only select {0} items': 'You can only select {0} items',
88 94 'activated': 'activated',
@@ -92,6 +98,7 b' var _TM = {'
92 98 'enabled': 'enabled',
93 99 'file': 'file',
94 100 'files': 'pliki',
101 'go to numeric commit': 'go to numeric commit',
95 102 'in {0}': 'in {0}',
96 103 'in {0} and {1}': 'in {0} and {1}',
97 104 'in {0}, {1}': 'in {0}, {1}',
@@ -118,8 +125,10 b' var _TM = {'
118 125 '{0} min': '{0} min',
119 126 '{0} month': '{0} month',
120 127 '{0} months': '{0} months',
128 '{0} of {1} repository groups': '{0} of {1} repository groups',
121 129 '{0} out of {1} ssh keys': '{0} out of {1} ssh keys',
122 130 '{0} out of {1} users': '{0} out of {1} users',
131 '{0} repository groups': '{0} repository groups',
123 132 '{0} results are available, use up and down arrow keys to navigate.': '{0} results are available, use up and down arrow keys to navigate.',
124 133 '{0} sec': '{0} sec',
125 134 '{0} user groups ({1} inactive)': '{0} user groups ({1} inactive)',
@@ -8,6 +8,7 b' var _TM = {'
8 8 '(from usergroup {0})': '(from usergroup {0})',
9 9 'Add another comment': 'Adicionar outro comentário',
10 10 'Adding new reviewers is forbidden.': 'Adding new reviewers is forbidden.',
11 'All Authors': 'All Authors',
11 12 'All individual reviewers must vote.': 'All individual reviewers must vote.',
12 13 'All reviewers must vote.': 'All reviewers must vote.',
13 14 'At least {0} reviewer must vote.': 'At least {0} reviewer must vote.',
@@ -63,6 +64,7 b' var _TM = {'
63 64 'Set status to Approved': 'Set status to Approved',
64 65 'Set status to Rejected': 'Set status to Rejected',
65 66 'Show at Commit ': 'Show at Commit ',
67 'Show commit range {0} ... {1}': 'Show commit range {0} ... {1}',
66 68 'Show full context diff': 'Show full context diff',
67 69 'Show more': 'Mostrar mais',
68 70 'Show selected commit __S': 'Show selected commit __S',
@@ -70,8 +72,10 b' var _TM = {'
70 72 'Show whitespace changes': 'Show whitespace changes',
71 73 'Specified expiration date': 'Specified expiration date',
72 74 'Start following this repository': 'Passar a seguir este repositório',
75 'Started watching this repository': 'Started watching this repository',
73 76 'Status Review': 'Status Review',
74 77 'Stop following this repository': 'Parar de seguir este repositório',
78 'Stopped watching this repository': 'Stopped watching this repository',
75 79 'Submitting...': 'Enviando...',
76 80 'Switch to chat': 'Switch to chat',
77 81 'Switch to comment': 'Switch to comment',
@@ -80,9 +84,11 b' var _TM = {'
80 84 'There are currently no open pull requests requiring your participation.': 'There are currently no open pull requests requiring your participation.',
81 85 'Toggle Wide Mode diff': 'Toggle Wide Mode diff',
82 86 'Unfollow': 'Parar de seguir',
87 'Unwatch': 'Unwatch',
83 88 'Updating...': 'Updating...',
84 89 'User `{0}` already in reviewers': 'User `{0}` already in reviewers',
85 90 'User `{0}` not allowed to be a reviewer': 'User `{0}` not allowed to be a reviewer',
91 'Watch': 'Watch',
86 92 'You can only select {0} item': 'You can only select {0} item',
87 93 'You can only select {0} items': 'You can only select {0} items',
88 94 'activated': 'activated',
@@ -92,6 +98,7 b' var _TM = {'
92 98 'enabled': 'enabled',
93 99 'file': 'file',
94 100 'files': 'arquivos',
101 'go to numeric commit': 'go to numeric commit',
95 102 'in {0}': 'in {0}',
96 103 'in {0} and {1}': 'in {0} and {1}',
97 104 'in {0}, {1}': 'in {0}, {1}',
@@ -118,8 +125,10 b' var _TM = {'
118 125 '{0} min': '{0} min',
119 126 '{0} month': '{0} month',
120 127 '{0} months': '{0} months',
128 '{0} of {1} repository groups': '{0} of {1} repository groups',
121 129 '{0} out of {1} ssh keys': '{0} out of {1} ssh keys',
122 130 '{0} out of {1} users': '{0} out of {1} users',
131 '{0} repository groups': '{0} repository groups',
123 132 '{0} results are available, use up and down arrow keys to navigate.': '{0} results are available, use up and down arrow keys to navigate.',
124 133 '{0} sec': '{0} sec',
125 134 '{0} user groups ({1} inactive)': '{0} user groups ({1} inactive)',
@@ -8,6 +8,7 b' var _TM = {'
8 8 '(from usergroup {0})': '(from usergroup {0})',
9 9 'Add another comment': 'Добавить другой комментарий',
10 10 'Adding new reviewers is forbidden.': 'Adding new reviewers is forbidden.',
11 'All Authors': 'All Authors',
11 12 'All individual reviewers must vote.': 'All individual reviewers must vote.',
12 13 'All reviewers must vote.': 'All reviewers must vote.',
13 14 'At least {0} reviewer must vote.': 'At least {0} reviewer must vote.',
@@ -63,6 +64,7 b' var _TM = {'
63 64 'Set status to Approved': 'Set status to Approved',
64 65 'Set status to Rejected': 'Set status to Rejected',
65 66 'Show at Commit ': 'Show at Commit ',
67 'Show commit range {0} ... {1}': 'Show commit range {0} ... {1}',
66 68 'Show full context diff': 'Show full context diff',
67 69 'Show more': 'Показать еще',
68 70 'Show selected commit __S': 'Show selected commit __S',
@@ -70,8 +72,10 b' var _TM = {'
70 72 'Show whitespace changes': 'Show whitespace changes',
71 73 'Specified expiration date': 'Specified expiration date',
72 74 'Start following this repository': 'Наблюдать за репозиторием',
75 'Started watching this repository': 'Started watching this repository',
73 76 'Status Review': 'Status Review',
74 77 'Stop following this repository': 'Отменить наблюдение за репозиторием',
78 'Stopped watching this repository': 'Stopped watching this repository',
75 79 'Submitting...': 'Применение...',
76 80 'Switch to chat': 'Switch to chat',
77 81 'Switch to comment': 'Switch to comment',
@@ -80,9 +84,11 b' var _TM = {'
80 84 'There are currently no open pull requests requiring your participation.': 'There are currently no open pull requests requiring your participation.',
81 85 'Toggle Wide Mode diff': 'Toggle Wide Mode diff',
82 86 'Unfollow': 'Не наблюдать',
87 'Unwatch': 'Unwatch',
83 88 'Updating...': 'Updating...',
84 89 'User `{0}` already in reviewers': 'User `{0}` already in reviewers',
85 90 'User `{0}` not allowed to be a reviewer': 'User `{0}` not allowed to be a reviewer',
91 'Watch': 'Watch',
86 92 'You can only select {0} item': 'You can only select {0} item',
87 93 'You can only select {0} items': 'You can only select {0} items',
88 94 'activated': 'activated',
@@ -92,6 +98,7 b' var _TM = {'
92 98 'enabled': 'enabled',
93 99 'file': 'file',
94 100 'files': 'файлы',
101 'go to numeric commit': 'go to numeric commit',
95 102 'in {0}': 'in {0}',
96 103 'in {0} and {1}': 'in {0} and {1}',
97 104 'in {0}, {1}': 'in {0}, {1}',
@@ -118,8 +125,10 b' var _TM = {'
118 125 '{0} min': '{0} min',
119 126 '{0} month': '{0} month',
120 127 '{0} months': '{0} months',
128 '{0} of {1} repository groups': '{0} of {1} repository groups',
121 129 '{0} out of {1} ssh keys': '{0} out of {1} ssh keys',
122 130 '{0} out of {1} users': '{0} out of {1} users',
131 '{0} repository groups': '{0} repository groups',
123 132 '{0} results are available, use up and down arrow keys to navigate.': '{0} results are available, use up and down arrow keys to navigate.',
124 133 '{0} sec': '{0} sec',
125 134 '{0} user groups ({1} inactive)': '{0} user groups ({1} inactive)',
@@ -8,6 +8,7 b' var _TM = {'
8 8 '(from usergroup {0})': '(from usergroup {0})',
9 9 'Add another comment': 'Add another comment',
10 10 'Adding new reviewers is forbidden.': 'Adding new reviewers is forbidden.',
11 'All Authors': 'All Authors',
11 12 'All individual reviewers must vote.': 'All individual reviewers must vote.',
12 13 'All reviewers must vote.': 'All reviewers must vote.',
13 14 'At least {0} reviewer must vote.': 'At least {0} reviewer must vote.',
@@ -63,6 +64,7 b' var _TM = {'
63 64 'Set status to Approved': 'Set status to Approved',
64 65 'Set status to Rejected': 'Set status to Rejected',
65 66 'Show at Commit ': 'Show at Commit ',
67 'Show commit range {0} ... {1}': 'Show commit range {0} ... {1}',
66 68 'Show full context diff': 'Show full context diff',
67 69 'Show more': 'Show more',
68 70 'Show selected commit __S': 'Show selected commit __S',
@@ -70,8 +72,10 b' var _TM = {'
70 72 'Show whitespace changes': 'Show whitespace changes',
71 73 'Specified expiration date': 'Specified expiration date',
72 74 'Start following this repository': '开始关注该版本库',
75 'Started watching this repository': 'Started watching this repository',
73 76 'Status Review': 'Status Review',
74 77 'Stop following this repository': '停止关注该版本库',
78 'Stopped watching this repository': 'Stopped watching this repository',
75 79 'Submitting...': '提交中……',
76 80 'Switch to chat': 'Switch to chat',
77 81 'Switch to comment': 'Switch to comment',
@@ -80,9 +84,11 b' var _TM = {'
80 84 'There are currently no open pull requests requiring your participation.': 'There are currently no open pull requests requiring your participation.',
81 85 'Toggle Wide Mode diff': 'Toggle Wide Mode diff',
82 86 'Unfollow': 'Unfollow',
87 'Unwatch': 'Unwatch',
83 88 'Updating...': 'Updating...',
84 89 'User `{0}` already in reviewers': 'User `{0}` already in reviewers',
85 90 'User `{0}` not allowed to be a reviewer': 'User `{0}` not allowed to be a reviewer',
91 'Watch': 'Watch',
86 92 'You can only select {0} item': 'You can only select {0} item',
87 93 'You can only select {0} items': 'You can only select {0} items',
88 94 'activated': 'activated',
@@ -92,6 +98,7 b' var _TM = {'
92 98 'enabled': 'enabled',
93 99 'file': 'file',
94 100 'files': '文件',
101 'go to numeric commit': 'go to numeric commit',
95 102 'in {0}': 'in {0}',
96 103 'in {0} and {1}': 'in {0} and {1}',
97 104 'in {0}, {1}': 'in {0}, {1}',
@@ -118,8 +125,10 b' var _TM = {'
118 125 '{0} min': '{0} min',
119 126 '{0} month': '{0} month',
120 127 '{0} months': '{0} months',
128 '{0} of {1} repository groups': '{0} of {1} repository groups',
121 129 '{0} out of {1} ssh keys': '{0} out of {1} ssh keys',
122 130 '{0} out of {1} users': '{0} out of {1} users',
131 '{0} repository groups': '{0} repository groups',
123 132 '{0} results are available, use up and down arrow keys to navigate.': '{0} results are available, use up and down arrow keys to navigate.',
124 133 '{0} sec': '{0} sec',
125 134 '{0} user groups ({1} inactive)': '{0} user groups ({1} inactive)',
@@ -239,6 +239,7 b' function registerRCRoutes() {'
239 239 pyroutes.register('edit_repo_advanced_hooks', '/%(repo_name)s/settings/advanced/hooks', ['repo_name']);
240 240 pyroutes.register('edit_repo_caches', '/%(repo_name)s/settings/caches', ['repo_name']);
241 241 pyroutes.register('edit_repo_perms', '/%(repo_name)s/settings/permissions', ['repo_name']);
242 pyroutes.register('edit_repo_perms_set_private', '/%(repo_name)s/settings/permissions/set_private', ['repo_name']);
242 243 pyroutes.register('edit_repo_maintenance', '/%(repo_name)s/settings/maintenance', ['repo_name']);
243 244 pyroutes.register('edit_repo_maintenance_execute', '/%(repo_name)s/settings/maintenance/execute', ['repo_name']);
244 245 pyroutes.register('edit_repo_fields', '/%(repo_name)s/settings/fields', ['repo_name']);
@@ -262,8 +263,10 b' function registerRCRoutes() {'
262 263 pyroutes.register('strip_check', '/%(repo_name)s/settings/strip_check', ['repo_name']);
263 264 pyroutes.register('strip_execute', '/%(repo_name)s/settings/strip_execute', ['repo_name']);
264 265 pyroutes.register('edit_repo_audit_logs', '/%(repo_name)s/settings/audit_logs', ['repo_name']);
265 pyroutes.register('rss_feed_home', '/%(repo_name)s/feed/rss', ['repo_name']);
266 pyroutes.register('atom_feed_home', '/%(repo_name)s/feed/atom', ['repo_name']);
266 pyroutes.register('rss_feed_home', '/%(repo_name)s/feed-rss', ['repo_name']);
267 pyroutes.register('atom_feed_home', '/%(repo_name)s/feed-atom', ['repo_name']);
268 pyroutes.register('rss_feed_home_old', '/%(repo_name)s/feed/rss', ['repo_name']);
269 pyroutes.register('atom_feed_home_old', '/%(repo_name)s/feed/atom', ['repo_name']);
267 270 pyroutes.register('repo_summary', '/%(repo_name)s', ['repo_name']);
268 271 pyroutes.register('repo_summary_slash', '/%(repo_name)s/', ['repo_name']);
269 272 pyroutes.register('edit_repo_group', '/%(repo_group_name)s/_edit', ['repo_group_name']);
@@ -107,7 +107,10 b' var CommitsController = function () {'
107 107
108 108 $.each($('.message.truncate'), function(idx, value) {
109 109 if(!(value.offsetWidth < value.scrollWidth)){
110 $(this).closest('td').siblings('.expand_commit').find('i').hide();
110 var expandTd = $(this).closest('td').siblings('.expand_commit');
111 expandTd.find('i').hide();
112 expandTd.removeAttr('title');
113 expandTd.removeClass('expand_commit');
111 114 }
112 115 });
113 116
@@ -11,7 +11,7 b''
11 11 <div class="input">
12 12 ${h.text('repo_name', class_="medium")}
13 13 <div class="info-block">
14 <a id="remote_clone_toggle" href="#"><i class="icon-download-alt"></i> ${_('Import Existing Repository ?')}</a>
14 <a id="remote_clone_toggle" href="#">${_('Import Existing Repository ?')}</a>
15 15 </div>
16 16 %if not c.rhodecode_user.is_admin:
17 17 ${h.hidden('user_created',True)}
@@ -161,7 +161,7 b''
161 161 <div class="field">
162 162 <button class="btn btn-small btn-danger" type="submit"
163 163 onclick="return confirm('${_('Confirm to archive this repository: %s') % c.repo_name}');">
164 <i class="icon-remove-sign"></i>
164 <i class="icon-remove"></i>
165 165 ${_('Archive this repository')}
166 166 </button>
167 167 </div>
@@ -217,7 +217,7 b''
217 217 <div class="field">
218 218 <button class="btn btn-small btn-danger" type="submit"
219 219 onclick="return confirm('${_('Confirm to delete this repository: %s') % c.repo_name}');">
220 <i class="icon-remove-sign"></i>
220 <i class="icon-remove"></i>
221 221 ${_('Delete this repository')}
222 222 </button>
223 223 </div>
@@ -105,6 +105,10 b''
105 105 member="${_user.user_id}" member_type="user">
106 106 ${_('Remove')}
107 107 </span>
108 %elif _user.username == h.DEFAULT_USER:
109 <span class="tooltip btn btn-link btn-default" onclick="enablePrivateRepo(); return false" title="${_('Private repositories are only visible to people explicitly added as collaborators.')}">
110 ${_('set private mode')}
111 </span>
108 112 %endif
109 113 </td>
110 114 <td class="quick_repo_menu">
@@ -199,4 +203,20 b''
199 203 markRevokePermInput($(this), 'repository');
200 204 });
201 205 quick_repo_menu();
206
207 var enablePrivateRepo = function () {
208 var postData = {
209 'csrf_token': CSRF_TOKEN
210 };
211
212 var success = function(o) {
213 var defaultUrl = pyroutes.url('edit_repo_perms', {"repo_name": templateContext.repo_name});
214 window.location = o.redirect_url || defaultUrl;
215 };
216
217 ajaxPOST(
218 pyroutes.url('edit_repo_perms_set_private', {"repo_name": templateContext.repo_name}),
219 postData,
220 success);
221 }
202 222 </script>
@@ -57,7 +57,7 b''
57 57 % if not c.form['repo_clone_uri'].error:
58 58 <div id="clone_uri_hidden" class='text-as-placeholder'>
59 59 <span id="clone_uri_hidden_value">${c.rhodecode_db_repo.clone_uri_hidden}</span>
60 <span class="link" id="edit_clone_uri"><i class="icon-edit"></i>${_('edit')}</span>
60 <span class="link" id="edit_clone_uri">${_('edit')}</span>
61 61 </div>
62 62 % endif
63 63
@@ -99,7 +99,7 b''
99 99 % if not c.form['repo_push_uri'].error:
100 100 <div id="push_uri_hidden" class='text-as-placeholder'>
101 101 <span id="push_uri_hidden_value">${c.rhodecode_db_repo.push_uri_hidden}</span>
102 <span class="link" id="edit_push_uri"><i class="icon-edit"></i>${_('edit')}</span>
102 <span class="link" id="edit_push_uri">${_('edit')}</span>
103 103 </div>
104 104 % endif
105 105
@@ -27,7 +27,7 b''
27 27 <div class="field">
28 28 <button class="btn btn-small btn-danger" type="submit"
29 29 onclick="return confirm('${_('Confirm to delete this exception')}');">
30 <i class="icon-remove-sign"></i>
30 <i class="icon-remove"></i>
31 31 ${_('Delete This Exception')}
32 32 </button>
33 33 </div>
@@ -17,7 +17,7 b''
17 17 <div class="field">
18 18 <button class="btn btn-small btn-danger" type="submit"
19 19 onclick="return confirm('${_('Confirm to delete all exceptions')}');">
20 <i class="icon-remove-sign"></i>
20 <i class="icon-remove"></i>
21 21 % if c.type_filter:
22 22 ${_('Delete All `{}`').format(c.type_filter)}
23 23 % else:
@@ -108,8 +108,8 b''
108 108 <div style="padding: 10px 0px"></div>
109 109 <div class="textarea text-area">
110 110 ${h.textarea('rhodecode_pre_code',cols=23,rows=5,class_="medium")}
111 <span class="help-block">${_('Custom js/css code added at the end of the <header/> tag.')}
112 ${_('Use <script/> or <css/> tags to define custom styling or scripting')}</span>
111 <span class="help-block">${_('Custom js/css code added at the end of the <head/> tag.')}
112 ${_('Use <script/> or <style/> tags to define custom scripting or styling.')}</span>
113 113 </div>
114 114 </div>
115 115 </div>
@@ -131,7 +131,7 b''
131 131 <div class="textarea text-area">
132 132 ${h.textarea('rhodecode_post_code',cols=23,rows=5, class_="medium")}
133 133 <span class="help-block">${_('Custom js/css code added at the end of the <body> tag.')}
134 ${_('Use <script> or <css> tags to define custom styling or scripting')}</span>
134 ${_('Use <script> or <style> tags to define custom scripting or styling.')}</span>
135 135 </div>
136 136 </div>
137 137 </div>
@@ -77,7 +77,7 b''
77 77 ${h.hidden('force', 1)}
78 78 <button class="btn btn-small btn-danger" type="submit"
79 79 onclick="return confirm('${_('Confirm to delete user group `%(ugroup)s` with all permission assignments') % {'ugroup': c.user_group.users_group_name}}');">
80 <i class="icon-remove-sign"></i>
80 <i class="icon-remove"></i>
81 81 ${_('Delete This User Group')}
82 82 </button>
83 83 ${h.end_form()}
@@ -86,7 +86,7 b''
86 86 </td>
87 87 <td class="">
88 88 <div class="usergroup_member_remove action_button" onclick="removeUserGroupMember(${user.user_id}, true)" style="visibility: visible;">
89 <i class="icon-remove-sign"></i>
89 <i class="icon-remove"></i>
90 90 </div>
91 91 </td>
92 92 </tr>
@@ -155,7 +155,7 b''
155 155 '</td>'+
156 156 '<td class="td-author-new-entry">'+
157 157 '<div class="usergroup_member_remove action_button" onclick="removeUserGroupMember({5}, true)" style="visibility: visible;">'+
158 '<i class="icon-remove-sign"></i>'+
158 '<i class="icon-remove"></i>'+
159 159 '</div>'+
160 160 '</td>'+
161 161 '</tr>').format(gravatar, userLink, username,
@@ -217,7 +217,7 b''
217 217 ## Context Actions
218 218 <div class="pull-right">
219 219 %if c.rhodecode_user.username != h.DEFAULT_USER:
220 <a href="${h.route_path('atom_feed_home', repo_name=c.rhodecode_db_repo.repo_name, _query=dict(auth_token=c.rhodecode_user.feed_token))}" title="${_('RSS Feed')}" class="btn btn-sm"><i class="icon-rss-sign"></i>RSS</a>
220 <a href="${h.route_path('atom_feed_home', repo_name=c.rhodecode_db_repo.repo_uid, _query=dict(auth_token=c.rhodecode_user.feed_token))}" title="${_('RSS Feed')}" class="btn btn-sm"><i class="icon-rss-sign"></i>RSS</a>
221 221
222 222 <a href="#WatchRepo" onclick="toggleFollowingRepo(this, templateContext.repo_id); return false" title="${_('Watch this Repository and actions on it in your personalized journal')}" class="btn btn-sm ${('watching' if c.repository_is_user_following else '')}">
223 223 % if c.repository_is_user_following:
@@ -228,7 +228,7 b''
228 228
229 229 </a>
230 230 %else:
231 <a href="${h.route_path('atom_feed_home', repo_name=c.rhodecode_db_repo.repo_name)}" title="${_('RSS Feed')}" class="btn btn-sm"><i class="icon-rss-sign"></i>RSS</a>
231 <a href="${h.route_path('atom_feed_home', repo_name=c.rhodecode_db_repo.repo_uid)}" title="${_('RSS Feed')}" class="btn btn-sm"><i class="icon-rss-sign"></i>RSS</a>
232 232 %endif
233 233 </div>
234 234
@@ -556,7 +556,7 b' def get_comments_for(diff_type, comments'
556 556 %if line_old_comments:
557 557 <% has_outdated = any([x.outdated for x in line_old_comments]) %>
558 558 % if has_outdated:
559 <i title="${_('comments including outdated')}:${len(line_old_comments)}" class="icon-comment_toggle" onclick="return Rhodecode.comments.toggleLineComments(this)"></i>
559 <i title="${_('comments including outdated')}:${len(line_old_comments)}" class="icon-comment-toggle" onclick="return Rhodecode.comments.toggleLineComments(this)"></i>
560 560 % else:
561 561 <i title="${_('comments')}: ${len(line_old_comments)}" class="icon-comment" onclick="return Rhodecode.comments.toggleLineComments(this)"></i>
562 562 % endif
@@ -599,7 +599,7 b' def get_comments_for(diff_type, comments'
599 599 %if line_new_comments:
600 600 <% has_outdated = any([x.outdated for x in line_new_comments]) %>
601 601 % if has_outdated:
602 <i title="${_('comments including outdated')}:${len(line_new_comments)}" class="icon-comment_toggle" onclick="return Rhodecode.comments.toggleLineComments(this)"></i>
602 <i title="${_('comments including outdated')}:${len(line_new_comments)}" class="icon-comment-toggle" onclick="return Rhodecode.comments.toggleLineComments(this)"></i>
603 603 % else:
604 604 <i title="${_('comments')}: ${len(line_new_comments)}" class="icon-comment" onclick="return Rhodecode.comments.toggleLineComments(this)"></i>
605 605 % endif
@@ -655,7 +655,7 b' def get_comments_for(diff_type, comments'
655 655 % if comments:
656 656 <% has_outdated = any([x.outdated for x in comments]) %>
657 657 % if has_outdated:
658 <i title="${_('comments including outdated')}:${len(comments)}" class="icon-comment_toggle" onclick="return Rhodecode.comments.toggleLineComments(this)"></i>
658 <i title="${_('comments including outdated')}:${len(comments)}" class="icon-comment-toggle" onclick="return Rhodecode.comments.toggleLineComments(this)"></i>
659 659 % else:
660 660 <i title="${_('comments')}: ${len(comments)}" class="icon-comment" onclick="return Rhodecode.comments.toggleLineComments(this)"></i>
661 661 % endif
@@ -165,7 +165,8 b''
165 165 <div>
166 166 <div class="grid_edit">
167 167 <a href="${h.route_path('edit_repo',repo_name=repo_name)}" title="${_('Edit')}">
168 <i class="icon-pencil"></i>Edit</a>
168 Edit
169 </a>
169 170 </div>
170 171 <div class="grid_delete">
171 172 ${h.secure_form(h.route_path('edit_repo_advanced_delete', repo_name=repo_name), request=request)}
@@ -252,7 +253,8 b''
252 253 <%def name="user_actions(user_id, username)">
253 254 <div class="grid_edit">
254 255 <a href="${h.route_path('user_edit',user_id=user_id)}" title="${_('Edit')}">
255 <i class="icon-pencil"></i>${_('Edit')}</a>
256 ${_('Edit')}
257 </a>
256 258 </div>
257 259 <div class="grid_delete">
258 260 ${h.secure_form(h.route_path('user_delete', user_id=user_id), request=request)}
@@ -470,7 +470,7 b''
470 470 <a class="btn btn-mini" href="/example/annotate/fc252256eb0fcb4f2613e66f0126ea27967ae28c/rhodecode/websetup.py">annotation</a>
471 471 <a class="btn btn-mini" href="/example/raw/fc252256eb0fcb4f2613e66f0126ea27967ae28c/rhodecode/websetup.py">raw</a>
472 472 <a class="btn btn-mini" href="/example/rawfile/fc252256eb0fcb4f2613e66f0126ea27967ae28c/rhodecode/websetup.py">
473 <i class="icon-archive"></i> download
473 download
474 474 </a>
475 475
476 476 <a class="btn btn-mini disabled tooltip" href="#" title="Editing files allowed only when on branch head commit">edit</a>
@@ -648,7 +648,7 b' File Edit'
648 648 <a class="btn btn-mini" href="/example/files/80ead1899f50a894889e19ffeb49c9cebf5bf045/rhodecode/websetup.py">source</a>
649 649 <a class="btn btn-mini" href="/example/raw/80ead1899f50a894889e19ffeb49c9cebf5bf045/rhodecode/websetup.py">raw</a>
650 650 <a class="btn btn-mini" href="/example/rawfile/80ead1899f50a894889e19ffeb49c9cebf5bf045/rhodecode/websetup.py">
651 <i class="icon-archive"></i> download
651 download
652 652 </a>
653 653 </div>
654 654 </div>
@@ -150,7 +150,7 b''
150 150 </div>
151 151 <input id="reviewer_70_input" type="hidden" value="70" name="review_members">
152 152 <div class="reviewer_member_remove action_button" onclick="removeReviewMember(70, true)" style="visibility: hidden;">
153 <i class="icon-remove-sign"></i>
153 <i class="icon-remove"></i>
154 154 </div>
155 155 </li>
156 156 <li id="reviewer_33" class="collapsable-content" data-toggle="reviewers">
@@ -250,7 +250,7 b''
250 250 <div class='input'>
251 251 <input id="05_example_input" type="text" readonly="readonly" placeholder="Example input">
252 252 <span class="btn action_button btn-x">
253 <i class="icon-remove-sign"></i>
253 <i class="icon-remove"></i>
254 254 delete
255 255 </span>
256 256 <span class="help-block">
@@ -42,7 +42,7 b''
42 42 <div class='input'>
43 43 <div class='text-as-placeholder'>
44 44 http://something.example.com
45 <span class="link" id="edit_clone_uri"><i class="icon-edit"></i>${_('edit')}</span>
45 <span class="link" id="edit_clone_uri">${_('edit')}</span>
46 46 </div>
47 47 <p class='help-block'>Help text in a paragraph.</p>
48 48 </div>
@@ -339,7 +339,7 b''
339 339 <div class='input'>
340 340 <input id="05_example_input" type="text" readonly="readonly" placeholder="Example input">
341 341 <span class="btn btn-x">
342 <i class="icon-remove-sign"></i>
342 <i class="icon-remove"></i>
343 343 delete
344 344 </span>
345 345 <button class='btn btn-primary'>Action</button>
@@ -47,7 +47,6 b''
47 47 <td>
48 48 <div class="grid_edit">
49 49 <a class="edit_issuetracker_entry" uid="4980baa2985b361e6e91b932f4a897d5" title="edit" href="#">
50 <i class="icon-pencil"></i>
51 50 <input type="submit" value="edit" class="btn btn-link">
52 51 </a>
53 52 </div>
@@ -59,7 +58,7 b''
59 58
60 59 <div style="display: none;"><input type="hidden" value="05adf5bfb9be3766186f25db19b545134c6b0077" name="csrf_token" id="csrf_token"></div>
61 60 <input type="hidden" value="4980baa2985b361e6e91b932f4a897d5" name="del_uid" id="del_uid">
62 <i class="icon-remove-sign"></i>
61 <i class="icon-remove"></i>
63 62 <input type="submit" value="delete" onclick="return confirm('Confirm to remove this pattern: kjlakjlkjlkj;lkjl;kjl;kjl;kjl;kj;lkj');" id="remove_user_3" class="btn btn-link btn-danger">
64 63 </form>
65 64 </div>
@@ -74,7 +73,6 b''
74 73 <td>
75 74 <div class="grid_edit">
76 75 <a class="edit_issuetracker_entry" uid="98ac51a4ab43bb36a4feceed15ac5b21" title="edit" href="#">
77 <i class="icon-pencil"></i>
78 76 <input type="submit" value="edit" class="btn btn-link">
79 77 </a>
80 78 </div>
@@ -86,7 +84,7 b''
86 84
87 85 <div style="display: none;"><input type="hidden" value="05adf5bfb9be3766186f25db19b545134c6b0077" name="csrf_token" id="csrf_token"></div>
88 86 <input type="hidden" value="98ac51a4ab43bb36a4feceed15ac5b21" name="del_uid" id="del_uid">
89 <i class="icon-remove-sign"></i>
87 <i class="icon-remove"></i>
90 88 <input type="submit" value="delete" onclick="return confirm('Confirm to remove this pattern: kajls;kdjfal;skdjflaskdjflksjdlfksjdlfksjdlfkjsldkfjslkdjflskdjflkdsjf');" id="remove_user_3" class="btn btn-link btn-danger">
91 89 </form>
92 90 </div>
@@ -101,7 +99,6 b''
101 99 <td>
102 100 <div class="grid_edit">
103 101 <a class="edit_issuetracker_entry" uid="098f6bcd4621d373cade4e832627b4f6" title="edit" href="#">
104 <i class="icon-pencil"></i>
105 102 <input type="submit" value="edit" class="btn btn-link">
106 103 </a>
107 104 </div>
@@ -113,7 +110,7 b''
113 110
114 111 <div style="display: none;"><input type="hidden" value="05adf5bfb9be3766186f25db19b545134c6b0077" name="csrf_token" id="csrf_token"></div>
115 112 <input type="hidden" value="098f6bcd4621d373cade4e832627b4f6" name="del_uid" id="del_uid">
116 <i class="icon-remove-sign"></i>
113 <i class="icon-remove"></i>
117 114 <input type="submit" value="delete" onclick="return confirm('Confirm to remove this pattern: test');" id="remove_user_3" class="btn btn-link btn-danger">
118 115 </form>
119 116 </div>
@@ -236,11 +236,12 b''
236 236 <td class="td-action">
237 237 <div class="grid_edit">
238 238 <a href="/_admin/users/2/edit" title="edit">
239 <i class="icon-pencil"></i>Edit</a>
239 Edit
240 </a>
240 241 </div>
241 242 <div class="grid_delete">
242 243 <form action="/_admin/users/2" method="post">
243 <i class="icon-remove-sign"></i>
244 <i class="icon-remove"></i>
244 245 <input class="btn btn-danger btn-link" id="remove_user_2" name="remove_" type="submit" value="delete">
245 246 </form>
246 247 </div>
@@ -104,12 +104,12 b' var CG = new ColorGenerator();'
104 104
105 105 <% if (mandatory) { %>
106 106 <div class="reviewer_member_mandatory_remove" style="visibility: <%= edit_visibility %>;">
107 <i class="icon-remove-sign"></i>
107 <i class="icon-remove"></i>
108 108 </div>
109 109 <% } else { %>
110 110 <% if (allowed_to_update) { %>
111 111 <div class="reviewer_member_remove action_button" onclick="reviewersController.removeReviewMember(<%= member.user_id %>, true)" style="visibility: <%= edit_visibility %>;">
112 <i class="icon-remove-sign" ></i>
112 <i class="icon-remove" ></i>
113 113 </div>
114 114 <% } %>
115 115 <% } %>
@@ -186,7 +186,7 b''
186 186 % else:
187 187 <span class="enabled">
188 188 <a id="archive_link" class="btn btn-small" href="${h.route_path('repo_archivefile',repo_name=c.rhodecode_db_repo.repo_name,fname='tip.zip')}">
189 <i class="icon-archive"></i> tip.zip
189 tip.zip
190 190 ## replaced by some JS on select
191 191 </a>
192 192 </span>
@@ -90,7 +90,7 b''
90 90 var fname = e.added.raw_id + ext;
91 91 var href = pyroutes.url('repo_archivefile', {'repo_name': templateContext.repo_name, 'fname':fname});
92 92 // set new label
93 $('#archive_link').html('<i class="icon-archive"></i> {0}{1}'.format(escapeHtml(e.added.text), ext));
93 $('#archive_link').html('{0}{1}'.format(escapeHtml(e.added.text), ext));
94 94
95 95 // set new url to button,
96 96 $('#archive_link').attr('href', href)
@@ -2,7 +2,7 b''
2 2
3 3 <%def name="title()">
4 4 ## represents page title
5 ${_('%s Summary') % c.repo_name}
5 ${_('{} Summary').format(c.repo_name)}
6 6 %if c.rhodecode_name:
7 7 &middot; ${h.branding(c.rhodecode_name)}
8 8 %endif
@@ -10,8 +10,8 b''
10 10
11 11
12 12 <%def name="head_extra()">
13 <link href="${h.route_path('atom_feed_home', repo_name=c.rhodecode_db_repo.repo_name, _query=dict(auth_token=c.rhodecode_user.feed_token))}" rel="alternate" title="${h.tooltip(_('%s ATOM feed') % c.repo_name)}" type="application/atom+xml" />
14 <link href="${h.route_path('rss_feed_home', repo_name=c.rhodecode_db_repo.repo_name, _query=dict(auth_token=c.rhodecode_user.feed_token))}" rel="alternate" title="${h.tooltip(_('%s RSS feed') % c.repo_name)}" type="application/rss+xml" />
13 <link href="${h.route_path('atom_feed_home', repo_name=c.rhodecode_db_repo.repo_uid, _query=dict(auth_token=c.rhodecode_user.feed_token))}" rel="alternate" title="${h.tooltip(_('%s ATOM feed') % c.repo_name)}" type="application/atom+xml" />
14 <link href="${h.route_path('rss_feed_home', repo_name=c.rhodecode_db_repo.repo_uid, _query=dict(auth_token=c.rhodecode_user.feed_token))}" rel="alternate" title="${h.tooltip(_('%s RSS feed') % c.repo_name)}" type="application/rss+xml" />
15 15 </%def>
16 16
17 17
@@ -128,7 +128,7 b' def integration_repos(request, StubInteg'
128 128 'root_repo': root_repo,
129 129 'other_repo': other_repo,
130 130 'parent_repo': parent_repo,
131 'child_repo': child_repo,
131 'child_repo': child_repo,
132 132 }
133 133 }
134 134
@@ -151,9 +151,9 b' def test_enabled_integration_repo_scopes'
151 151
152 152 assert triggered_integrations == [
153 153 integrations['global'],
154 integrations['other_repo'],
155 154 integrations['other_group'],
156 155 integrations['other_group_recursive'],
156 integrations['other_repo'],
157 157 ]
158 158
159 159 triggered_integrations = IntegrationModel().get_for_event(
@@ -161,9 +161,9 b' def test_enabled_integration_repo_scopes'
161 161
162 162 assert triggered_integrations == [
163 163 integrations['global'],
164 integrations['parent_repo'],
165 164 integrations['parent_group'],
166 165 integrations['parent_group_recursive'],
166 integrations['parent_repo'],
167 167 ]
168 168
169 169 triggered_integrations = IntegrationModel().get_for_event(
@@ -171,10 +171,10 b' def test_enabled_integration_repo_scopes'
171 171
172 172 assert triggered_integrations == [
173 173 integrations['global'],
174 integrations['child_repo'],
174 integrations['child_group'],
175 175 integrations['parent_group_recursive'],
176 integrations['child_group'],
177 176 integrations['child_group_recursive'],
177 integrations['child_repo'],
178 178 ]
179 179
180 180
@@ -19,51 +19,55 b''
19 19 # and proprietary license terms, please see https://rhodecode.com/licenses/
20 20
21 21 import timeit
22 import logging
23 import click
22 24
23 server = "localhost:5000"
25 log = logging.getLogger(__name__)
26
24 27
25 pages = [
26 "cpython",
27 "cpython/annotate/74236c8bf064188516b32bf95016971227ec72a9/Makefile.pre.in",
28 "cpython/changelog",
29 "cpython/changeset/e0f681f4ade3af52915d5f32daac97ada580d71a",
30 "cpython/compare/tag@v3.4.1rc1...tag@v3.4.1?target_repo=cpython",
31 "cpython/files/tip/",
32 "cpython/files/74236c8bf064188516b32bf95016971227ec72a9/Grammar",
33 "",
34 "git",
35 "git/annotate/6c4ab27f2378ce67940b4496365043119d7ffff2/gitk-git/.gitignore",
36 "git/changelog",
37 "git/changeset/d299e9e550c1bf8640907fdba1f03cc585ee71df",
38 "git/compare/rev@1200...rev@1300?target_repo=git",
39 "git/files/tip/",
40 "git/files/6c4ab27f2378ce67940b4496365043119d7ffff2/.gitignore"
41 ]
28 @click.command()
29 @click.option('--server', help='Server url to connect to. e.g http://rc.local.com', required=True)
30 @click.option('--pages', help='load pages to visit from a file', required=True, type=click.File())
31 @click.option('--repeat', help='number of times to repeat', default=10, type=int)
32 def main(server, repeat, pages):
33
34 print("Repeating each URL %d times\n" % repeat)
35 pages = pages.readlines()
36
37 for page_url in pages:
38
39 url = "%s/%s" % (server, page_url.strip())
40 print(url)
41
42 stmt = "requests.get('%s', timeout=120)" % url
43 t = timeit.Timer(stmt=stmt, setup="import requests")
42 44
43 svn_pages = [
44 "svn-apache",
45 "svn-apache/annotate/672129/cocoon/trunk/README.txt",
46 "svn-apache/changelog",
47 "svn-apache/changeset/1164362",
48 "svn-apache/compare/rev@1164350...rev@1164360?target_repo=svn-apache",
49 "svn-apache/compare/rev@1164300...rev@1164360?target_repo=svn-apache",
50 "svn-apache/files/tip/",
51 "svn-apache/files/1164363/cocoon/trunk/README.txt",
52 ]
45 result = t.repeat(repeat=repeat, number=1)
46 print(" %.3f (min) - %.3f (max) - %.3f (avg)\n" %
47 (min(result), max(result), sum(result) / len(result)))
48
53 49
54 # Uncomment to check also svn performance
55 # pages = pages + svn_pages
50 if __name__ == '__main__':
51 main()
52
53
54
55
56
57
58
56 59
57 repeat = 10
60
61
58 62
59 print("Repeating each URL x%d\n" % repeat)
60 for page in pages:
61 url = "http://%s/%s" % (server, page)
62 print(url)
63
64
65
63 66
64 stmt = "urllib2.urlopen('%s', timeout=120)" % url
65 t = timeit.Timer(stmt=stmt, setup="import urllib2")
67
68
69
66 70
67 result = t.repeat(repeat=repeat, number=1)
68 print("\t%.3f (min) - %.3f (max) - %.3f (avg)\n" %
69 (min(result), max(result), sum(result)/len(result)))
71
72
73
@@ -108,12 +108,12 b' class Repository(object):'
108 108 self.name = name
109 109 self.path = os.path.join(base_path, name)
110 110 self.api = api
111 self.url = None
111 112
112 113 def create(self):
113 114 self._create_filesystem_repo(self.path)
114 115 try:
115 self.url = self.api.create_repo(
116 self.name, self.TYPE, 'Performance tests')
116 self.url = self.api.create_repo(self.name, self.TYPE, 'Performance tests')
117 117 except ApiError as e:
118 118 log.error('api: {}'.format(e))
119 119
@@ -127,7 +127,7 b' class Repository(object):'
127 127 def create_commits(self, number, file_size):
128 128 for i in xrange(number):
129 129 file_name = self.FILE_NAME_TEMPLATE.format(i)
130 log.debug("Create commit {}".format(file_name))
130 log.debug("Create commit[{}] {}".format(self.name, file_name))
131 131 self._create_file(file_name, file_size)
132 132 self._create_commit(file_name)
133 133
@@ -258,8 +258,8 b' class Benchmark(object):'
258 258 for operation in operations:
259 259 for type_ in repos:
260 260 times = self._measure(repos[type_], *operation)
261 print("Mean {} {} time: {:.3f} sec.".format(
262 type_, operation[0], mean(times)))
261 print("Mean[of {}] {:5s} {:5s} time: {:.3f} sec.".format(
262 len(times), type_, operation[0], mean(times)))
263 263
264 264 def cleanup(self):
265 265 log.info("Cleaning up...")
@@ -296,6 +296,7 b' class Benchmark(object):'
296 296 log.addHandler(handler)
297 297 log.setLevel(log_level)
298 298
299
299 300 if __name__ == '__main__':
300 301 config = Config()
301 302 benchmark = Benchmark(config)
@@ -392,7 +392,7 b' def is_url_reachable(url):'
392 392 try:
393 393 urllib2.urlopen(url)
394 394 except urllib2.URLError:
395 log.exception('URL Reach error')
395 log.exception('URL `{}` reach error'.format(url))
396 396 return False
397 397 return True
398 398
General Comments 0
You need to be logged in to leave comments. Login now