##// END OF EJS Templates
release: merge back stable branch into default
marcink -
r4469:9d632087 merge default
parent child Browse files
Show More
@@ -0,0 +1,42 b''
1 |RCE| 4.20.1 |RNS|
2 ------------------
3
4 Release Date
5 ^^^^^^^^^^^^
6
7 - 2020-07-27
8
9
10 New Features
11 ^^^^^^^^^^^^
12
13
14
15 General
16 ^^^^^^^
17
18 - Permissions: rename write+ to write or higher for more explicit meaning.
19
20
21 Security
22 ^^^^^^^^
23
24
25
26 Performance
27 ^^^^^^^^^^^
28
29
30
31 Fixes
32 ^^^^^
33
34 - Files: fixed creation of new files for empty repos.
35 - Notifications: properly inject the custom email headers into templates.
36 - Store file integration: fixed support for nested subdirs.
37
38
39 Upgrade notes
40 ^^^^^^^^^^^^^
41
42 - Un-scheduled release addressing problems in 4.20.X releases.
@@ -1,68 +1,70 b''
1 1 1bd3e92b7e2e2d2024152b34bb88dff1db544a71 v4.0.0
2 2 170c5398320ea6cddd50955e88d408794c21d43a v4.0.1
3 3 c3fe200198f5aa34cf2e4066df2881a9cefe3704 v4.1.0
4 4 7fd5c850745e2ea821fb4406af5f4bff9b0a7526 v4.1.1
5 5 41c87da28a179953df86061d817bc35533c66dd2 v4.1.2
6 6 baaf9f5bcea3bae0ef12ae20c8b270482e62abb6 v4.2.0
7 7 32a70c7e56844a825f61df496ee5eaf8c3c4e189 v4.2.1
8 8 fa695cdb411d294679ac081d595ac654e5613b03 v4.3.0
9 9 0e4dc11b58cad833c513fe17bac39e6850edf959 v4.3.1
10 10 8a876f48f5cb1d018b837db28ff928500cb32cfb v4.4.0
11 11 8dd86b410b1aac086ffdfc524ef300f896af5047 v4.4.1
12 12 d2514226abc8d3b4f6fb57765f47d1b6fb360a05 v4.4.2
13 13 27d783325930af6dad2741476c0d0b1b7c8415c2 v4.5.0
14 14 7f2016f352abcbdba4a19d4039c386e9629449da v4.5.1
15 15 416fec799314c70a5c780fb28b3357b08869333a v4.5.2
16 16 27c3b85fafc83143e6678fbc3da69e1615bcac55 v4.6.0
17 17 5ad13deb9118c2a5243d4032d4d9cc174e5872db v4.6.1
18 18 2be921e01fa24bb102696ada596f87464c3666f6 v4.7.0
19 19 7198bdec29c2872c974431d55200d0398354cdb1 v4.7.1
20 20 bd1c8d230fe741c2dfd7100a0ef39fd0774fd581 v4.7.2
21 21 9731914f89765d9628dc4dddc84bc9402aa124c8 v4.8.0
22 22 c5a2b7d0e4bbdebc4a62d7b624befe375207b659 v4.9.0
23 23 d9aa3b27ac9f7e78359775c75fedf7bfece232f1 v4.9.1
24 24 4ba4d74981cec5d6b28b158f875a2540952c2f74 v4.10.0
25 25 0a6821cbd6b0b3c21503002f88800679fa35ab63 v4.10.1
26 26 434ad90ec8d621f4416074b84f6e9ce03964defb v4.10.2
27 27 68baee10e698da2724c6e0f698c03a6abb993bf2 v4.10.3
28 28 00821d3afd1dce3f4767cc353f84a17f7d5218a1 v4.10.4
29 29 22f6744ad8cc274311825f63f953e4dee2ea5cb9 v4.10.5
30 30 96eb24bea2f5f9258775245e3f09f6fa0a4dda01 v4.10.6
31 31 3121217a812c956d7dd5a5875821bd73e8002a32 v4.11.0
32 32 fa98b454715ac5b912f39e84af54345909a2a805 v4.11.1
33 33 3982abcfdcc229a723cebe52d3a9bcff10bba08e v4.11.2
34 34 33195f145db9172f0a8f1487e09207178a6ab065 v4.11.3
35 35 194c74f33e32bbae6fc4d71ec5a999cff3c13605 v4.11.4
36 36 8fbd8b0c3ddc2fa4ac9e4ca16942a03eb593df2d v4.11.5
37 37 f0609aa5d5d05a1ca2f97c3995542236131c9d8a v4.11.6
38 38 b5b30547d90d2e088472a70c84878f429ffbf40d v4.12.0
39 39 9072253aa8894d20c00b4a43dc61c2168c1eff94 v4.12.1
40 40 6a517543ea9ef9987d74371bd2a315eb0b232dc9 v4.12.2
41 41 7fc0731b024c3114be87865eda7ab621cc957e32 v4.12.3
42 42 6d531c0b068c6eda62dddceedc9f845ecb6feb6f v4.12.4
43 43 3d6bf2d81b1564830eb5e83396110d2a9a93eb1e v4.13.0
44 44 5468fc89e708bd90e413cd0d54350017abbdbc0e v4.13.1
45 45 610d621550521c314ee97b3d43473ac0bcf06fb8 v4.13.2
46 46 7dc62c090881fb5d03268141e71e0940d7c3295d v4.13.3
47 47 9151328c1c46b72ba6f00d7640d9141e75aa1ca2 v4.14.0
48 48 a47eeac5dfa41fa6779d90452affba4091c3ade8 v4.14.1
49 49 4b34ce0d2c3c10510626b3b65044939bb7a2cddf v4.15.0
50 50 14502561d22e6b70613674cd675ae9a604b7989f v4.15.1
51 51 4aaa40b605b01af78a9f6882eca561c54b525ef0 v4.15.2
52 52 797744642eca86640ed20bef2cd77445780abaec v4.16.0
53 53 6c3452c7c25ed35ff269690929e11960ed6ad7d3 v4.16.1
54 54 5d8057df561c4b6b81b6401aed7d2f911e6e77f7 v4.16.2
55 55 13acfc008896ef4c62546bab5074e8f6f89b4fa7 v4.17.0
56 56 45b9b610976f483877142fe75321808ce9ebac59 v4.17.1
57 57 ad5bd0c4bd322fdbd04bb825a3d027e08f7a3901 v4.17.2
58 58 037f5794b55a6236d68f6485a485372dde6566e0 v4.17.3
59 59 83bc3100cfd6094c1d04f475ddb299b7dc3d0b33 v4.17.4
60 60 e3de8c95baf8cc9109ca56aee8193a2cb6a54c8a v4.17.4
61 61 f37a3126570477543507f0bc9d245ce75546181a v4.18.0
62 62 71d8791463e87b64c1a18475de330ee600d37561 v4.18.1
63 63 4bd6b75dac1d25c64885d4d49385e5533f21c525 v4.18.2
64 64 12ed92fe57f2e9fc7b71dc0b65e26c2da5c7085f v4.18.3
65 65 ddef396a6567117de531d67d44c739cbbfc3eebb v4.19.0
66 66 c0c65acd73914bf4368222d510afe1161ab8c07c v4.19.1
67 67 7ac623a4a2405917e2af660d645ded662011e40d v4.19.2
68 68 ef7ffda65eeb90c3ba88590a6cb816ef9b0bc232 v4.19.3
69 3e635489bb7961df93b01e42454ad1a8730ae968 v4.20.0
70 7e2eb896a02ca7cd2cd9f0f853ef3dac3f0039e3 v4.20.1
@@ -1,145 +1,146 b''
1 1 .. _rhodecode-release-notes-ref:
2 2
3 3 Release Notes
4 4 =============
5 5
6 6 |RCE| 4.x Versions
7 7 ------------------
8 8
9 9 .. toctree::
10 10 :maxdepth: 1
11 11
12 release-notes-4.20.1.rst
12 13 release-notes-4.20.0.rst
13 14 release-notes-4.19.3.rst
14 15 release-notes-4.19.2.rst
15 16 release-notes-4.19.1.rst
16 17 release-notes-4.19.0.rst
17 18 release-notes-4.18.3.rst
18 19 release-notes-4.18.2.rst
19 20 release-notes-4.18.1.rst
20 21 release-notes-4.18.0.rst
21 22 release-notes-4.17.4.rst
22 23 release-notes-4.17.3.rst
23 24 release-notes-4.17.2.rst
24 25 release-notes-4.17.1.rst
25 26 release-notes-4.17.0.rst
26 27 release-notes-4.16.2.rst
27 28 release-notes-4.16.1.rst
28 29 release-notes-4.16.0.rst
29 30 release-notes-4.15.2.rst
30 31 release-notes-4.15.1.rst
31 32 release-notes-4.15.0.rst
32 33 release-notes-4.14.1.rst
33 34 release-notes-4.14.0.rst
34 35 release-notes-4.13.3.rst
35 36 release-notes-4.13.2.rst
36 37 release-notes-4.13.1.rst
37 38 release-notes-4.13.0.rst
38 39 release-notes-4.12.4.rst
39 40 release-notes-4.12.3.rst
40 41 release-notes-4.12.2.rst
41 42 release-notes-4.12.1.rst
42 43 release-notes-4.12.0.rst
43 44 release-notes-4.11.6.rst
44 45 release-notes-4.11.5.rst
45 46 release-notes-4.11.4.rst
46 47 release-notes-4.11.3.rst
47 48 release-notes-4.11.2.rst
48 49 release-notes-4.11.1.rst
49 50 release-notes-4.11.0.rst
50 51 release-notes-4.10.6.rst
51 52 release-notes-4.10.5.rst
52 53 release-notes-4.10.4.rst
53 54 release-notes-4.10.3.rst
54 55 release-notes-4.10.2.rst
55 56 release-notes-4.10.1.rst
56 57 release-notes-4.10.0.rst
57 58 release-notes-4.9.1.rst
58 59 release-notes-4.9.0.rst
59 60 release-notes-4.8.0.rst
60 61 release-notes-4.7.2.rst
61 62 release-notes-4.7.1.rst
62 63 release-notes-4.7.0.rst
63 64 release-notes-4.6.1.rst
64 65 release-notes-4.6.0.rst
65 66 release-notes-4.5.2.rst
66 67 release-notes-4.5.1.rst
67 68 release-notes-4.5.0.rst
68 69 release-notes-4.4.2.rst
69 70 release-notes-4.4.1.rst
70 71 release-notes-4.4.0.rst
71 72 release-notes-4.3.1.rst
72 73 release-notes-4.3.0.rst
73 74 release-notes-4.2.1.rst
74 75 release-notes-4.2.0.rst
75 76 release-notes-4.1.2.rst
76 77 release-notes-4.1.1.rst
77 78 release-notes-4.1.0.rst
78 79 release-notes-4.0.1.rst
79 80 release-notes-4.0.0.rst
80 81
81 82 |RCE| 3.x Versions
82 83 ------------------
83 84
84 85 .. toctree::
85 86 :maxdepth: 1
86 87
87 88 release-notes-3.8.4.rst
88 89 release-notes-3.8.3.rst
89 90 release-notes-3.8.2.rst
90 91 release-notes-3.8.1.rst
91 92 release-notes-3.8.0.rst
92 93 release-notes-3.7.1.rst
93 94 release-notes-3.7.0.rst
94 95 release-notes-3.6.1.rst
95 96 release-notes-3.6.0.rst
96 97 release-notes-3.5.2.rst
97 98 release-notes-3.5.1.rst
98 99 release-notes-3.5.0.rst
99 100 release-notes-3.4.1.rst
100 101 release-notes-3.4.0.rst
101 102 release-notes-3.3.4.rst
102 103 release-notes-3.3.3.rst
103 104 release-notes-3.3.2.rst
104 105 release-notes-3.3.1.rst
105 106 release-notes-3.3.0.rst
106 107 release-notes-3.2.3.rst
107 108 release-notes-3.2.2.rst
108 109 release-notes-3.2.1.rst
109 110 release-notes-3.2.0.rst
110 111 release-notes-3.1.1.rst
111 112 release-notes-3.1.0.rst
112 113 release-notes-3.0.2.rst
113 114 release-notes-3.0.1.rst
114 115 release-notes-3.0.0.rst
115 116
116 117 |RCE| 2.x Versions
117 118 ------------------
118 119
119 120 .. toctree::
120 121 :maxdepth: 1
121 122
122 123 release-notes-2.2.8.rst
123 124 release-notes-2.2.7.rst
124 125 release-notes-2.2.6.rst
125 126 release-notes-2.2.5.rst
126 127 release-notes-2.2.4.rst
127 128 release-notes-2.2.3.rst
128 129 release-notes-2.2.2.rst
129 130 release-notes-2.2.1.rst
130 131 release-notes-2.2.0.rst
131 132 release-notes-2.1.0.rst
132 133 release-notes-2.0.2.rst
133 134 release-notes-2.0.1.rst
134 135 release-notes-2.0.0.rst
135 136
136 137 |RCE| 1.x Versions
137 138 ------------------
138 139
139 140 .. toctree::
140 141 :maxdepth: 1
141 142
142 143 release-notes-1.7.2.rst
143 144 release-notes-1.7.1.rst
144 145 release-notes-1.7.0.rst
145 146 release-notes-1.6.0.rst
@@ -1,1618 +1,1631 b''
1 1 # -*- coding: utf-8 -*-
2 2
3 3 # Copyright (C) 2011-2020 RhodeCode GmbH
4 4 #
5 5 # This program is free software: you can redistribute it and/or modify
6 6 # it under the terms of the GNU Affero General Public License, version 3
7 7 # (only), as published by the Free Software Foundation.
8 8 #
9 9 # This program is distributed in the hope that it will be useful,
10 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 12 # GNU General Public License for more details.
13 13 #
14 14 # You should have received a copy of the GNU Affero General Public License
15 15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
16 16 #
17 17 # This program is dual-licensed. If you wish to learn more about the
18 18 # RhodeCode Enterprise Edition, including its added features, Support services,
19 19 # and proprietary license terms, please see https://rhodecode.com/licenses/
20 20
21 21 import itertools
22 22 import logging
23 23 import os
24 24 import shutil
25 25 import tempfile
26 26 import collections
27 27 import urllib
28 28 import pathlib2
29 29
30 30 from pyramid.httpexceptions import HTTPNotFound, HTTPBadRequest, HTTPFound
31 31 from pyramid.view import view_config
32 32 from pyramid.renderers import render
33 33 from pyramid.response import Response
34 34
35 35 import rhodecode
36 36 from rhodecode.apps._base import RepoAppView
37 37
38 38
39 39 from rhodecode.lib import diffs, helpers as h, rc_cache
40 40 from rhodecode.lib import audit_logger
41 41 from rhodecode.lib.view_utils import parse_path_ref
42 42 from rhodecode.lib.exceptions import NonRelativePathError
43 43 from rhodecode.lib.codeblocks import (
44 44 filenode_as_lines_tokens, filenode_as_annotated_lines_tokens)
45 45 from rhodecode.lib.utils2 import (
46 46 convert_line_endings, detect_mode, safe_str, str2bool, safe_int, sha1, safe_unicode)
47 47 from rhodecode.lib.auth import (
48 48 LoginRequired, HasRepoPermissionAnyDecorator, CSRFRequired)
49 49 from rhodecode.lib.vcs import path as vcspath
50 50 from rhodecode.lib.vcs.backends.base import EmptyCommit
51 51 from rhodecode.lib.vcs.conf import settings
52 52 from rhodecode.lib.vcs.nodes import FileNode
53 53 from rhodecode.lib.vcs.exceptions import (
54 54 RepositoryError, CommitDoesNotExistError, EmptyRepositoryError,
55 55 ImproperArchiveTypeError, VCSError, NodeAlreadyExistsError,
56 56 NodeDoesNotExistError, CommitError, NodeError)
57 57
58 58 from rhodecode.model.scm import ScmModel
59 59 from rhodecode.model.db import Repository
60 60
61 61 log = logging.getLogger(__name__)
62 62
63 63
64 64 class RepoFilesView(RepoAppView):
65 65
66 66 @staticmethod
67 67 def adjust_file_path_for_svn(f_path, repo):
68 68 """
69 69 Computes the relative path of `f_path`.
70 70
71 71 This is mainly based on prefix matching of the recognized tags and
72 72 branches in the underlying repository.
73 73 """
74 74 tags_and_branches = itertools.chain(
75 75 repo.branches.iterkeys(),
76 76 repo.tags.iterkeys())
77 77 tags_and_branches = sorted(tags_and_branches, key=len, reverse=True)
78 78
79 79 for name in tags_and_branches:
80 80 if f_path.startswith('{}/'.format(name)):
81 81 f_path = vcspath.relpath(f_path, name)
82 82 break
83 83 return f_path
84 84
85 85 def load_default_context(self):
86 86 c = self._get_local_tmpl_context(include_app_defaults=True)
87 87 c.rhodecode_repo = self.rhodecode_vcs_repo
88 88 c.enable_downloads = self.db_repo.enable_downloads
89 89 return c
90 90
91 91 def _ensure_not_locked(self, commit_id='tip'):
92 92 _ = self.request.translate
93 93
94 94 repo = self.db_repo
95 95 if repo.enable_locking and repo.locked[0]:
96 96 h.flash(_('This repository has been locked by %s on %s')
97 97 % (h.person_by_id(repo.locked[0]),
98 98 h.format_date(h.time_to_datetime(repo.locked[1]))),
99 99 'warning')
100 100 files_url = h.route_path(
101 101 'repo_files:default_path',
102 102 repo_name=self.db_repo_name, commit_id=commit_id)
103 103 raise HTTPFound(files_url)
104 104
105 105 def forbid_non_head(self, is_head, f_path, commit_id='tip', json_mode=False):
106 106 _ = self.request.translate
107 107
108 108 if not is_head:
109 109 message = _('Cannot modify file. '
110 110 'Given commit `{}` is not head of a branch.').format(commit_id)
111 111 h.flash(message, category='warning')
112 112
113 113 if json_mode:
114 114 return message
115 115
116 116 files_url = h.route_path(
117 117 'repo_files', repo_name=self.db_repo_name, commit_id=commit_id,
118 118 f_path=f_path)
119 119 raise HTTPFound(files_url)
120 120
121 121 def check_branch_permission(self, branch_name, commit_id='tip', json_mode=False):
122 122 _ = self.request.translate
123 123
124 124 rule, branch_perm = self._rhodecode_user.get_rule_and_branch_permission(
125 125 self.db_repo_name, branch_name)
126 126 if branch_perm and branch_perm not in ['branch.push', 'branch.push_force']:
127 127 message = _('Branch `{}` changes forbidden by rule {}.').format(
128 128 h.escape(branch_name), h.escape(rule))
129 129 h.flash(message, 'warning')
130 130
131 131 if json_mode:
132 132 return message
133 133
134 134 files_url = h.route_path(
135 135 'repo_files:default_path', repo_name=self.db_repo_name, commit_id=commit_id)
136 136
137 137 raise HTTPFound(files_url)
138 138
139 139 def _get_commit_and_path(self):
140 140 default_commit_id = self.db_repo.landing_ref_name
141 141 default_f_path = '/'
142 142
143 143 commit_id = self.request.matchdict.get(
144 144 'commit_id', default_commit_id)
145 145 f_path = self._get_f_path(self.request.matchdict, default_f_path)
146 146 return commit_id, f_path
147 147
148 148 def _get_default_encoding(self, c):
149 149 enc_list = getattr(c, 'default_encodings', [])
150 150 return enc_list[0] if enc_list else 'UTF-8'
151 151
152 152 def _get_commit_or_redirect(self, commit_id, redirect_after=True):
153 153 """
154 154 This is a safe way to get commit. If an error occurs it redirects to
155 155 tip with proper message
156 156
157 157 :param commit_id: id of commit to fetch
158 158 :param redirect_after: toggle redirection
159 159 """
160 160 _ = self.request.translate
161 161
162 162 try:
163 163 return self.rhodecode_vcs_repo.get_commit(commit_id)
164 164 except EmptyRepositoryError:
165 165 if not redirect_after:
166 166 return None
167 167
168 168 _url = h.route_path(
169 169 'repo_files_add_file',
170 170 repo_name=self.db_repo_name, commit_id=0, f_path='')
171 171
172 172 if h.HasRepoPermissionAny(
173 173 'repository.write', 'repository.admin')(self.db_repo_name):
174 174 add_new = h.link_to(
175 175 _('Click here to add a new file.'), _url, class_="alert-link")
176 176 else:
177 177 add_new = ""
178 178
179 179 h.flash(h.literal(
180 180 _('There are no files yet. %s') % add_new), category='warning')
181 181 raise HTTPFound(
182 182 h.route_path('repo_summary', repo_name=self.db_repo_name))
183 183
184 184 except (CommitDoesNotExistError, LookupError) as e:
185 185 msg = _('No such commit exists for this repository. Commit: {}').format(commit_id)
186 186 h.flash(msg, category='error')
187 187 raise HTTPNotFound()
188 188 except RepositoryError as e:
189 189 h.flash(safe_str(h.escape(e)), category='error')
190 190 raise HTTPNotFound()
191 191
192 192 def _get_filenode_or_redirect(self, commit_obj, path):
193 193 """
194 194 Returns file_node, if error occurs or given path is directory,
195 195 it'll redirect to top level path
196 196 """
197 197 _ = self.request.translate
198 198
199 199 try:
200 200 file_node = commit_obj.get_node(path)
201 201 if file_node.is_dir():
202 202 raise RepositoryError('The given path is a directory')
203 203 except CommitDoesNotExistError:
204 204 log.exception('No such commit exists for this repository')
205 205 h.flash(_('No such commit exists for this repository'), category='error')
206 206 raise HTTPNotFound()
207 207 except RepositoryError as e:
208 208 log.warning('Repository error while fetching filenode `%s`. Err:%s', path, e)
209 209 h.flash(safe_str(h.escape(e)), category='error')
210 210 raise HTTPNotFound()
211 211
212 212 return file_node
213 213
214 def _is_valid_head(self, commit_id, repo):
214 def _is_valid_head(self, commit_id, repo, landing_ref):
215 215 branch_name = sha_commit_id = ''
216 216 is_head = False
217 217 log.debug('Checking if commit_id `%s` is a head for %s.', commit_id, repo)
218 218
219 219 for _branch_name, branch_commit_id in repo.branches.items():
220 220 # simple case we pass in branch name, it's a HEAD
221 221 if commit_id == _branch_name:
222 222 is_head = True
223 223 branch_name = _branch_name
224 224 sha_commit_id = branch_commit_id
225 225 break
226 226 # case when we pass in full sha commit_id, which is a head
227 227 elif commit_id == branch_commit_id:
228 228 is_head = True
229 229 branch_name = _branch_name
230 230 sha_commit_id = branch_commit_id
231 231 break
232 232
233 233 if h.is_svn(repo) and not repo.is_empty():
234 234 # Note: Subversion only has one head.
235 235 if commit_id == repo.get_commit(commit_idx=-1).raw_id:
236 236 is_head = True
237 237 return branch_name, sha_commit_id, is_head
238 238
239 239 # checked branches, means we only need to try to get the branch/commit_sha
240 if not repo.is_empty():
240 if repo.is_empty():
241 is_head = True
242 branch_name = landing_ref
243 sha_commit_id = EmptyCommit().raw_id
244 else:
241 245 commit = repo.get_commit(commit_id=commit_id)
242 246 if commit:
243 247 branch_name = commit.branch
244 248 sha_commit_id = commit.raw_id
245 249
246 250 return branch_name, sha_commit_id, is_head
247 251
248 252 def _get_tree_at_commit(self, c, commit_id, f_path, full_load=False, at_rev=None):
249 253
250 254 repo_id = self.db_repo.repo_id
251 255 force_recache = self.get_recache_flag()
252 256
253 257 cache_seconds = safe_int(
254 258 rhodecode.CONFIG.get('rc_cache.cache_repo.expiration_time'))
255 259 cache_on = not force_recache and cache_seconds > 0
256 260 log.debug(
257 261 'Computing FILE TREE for repo_id %s commit_id `%s` and path `%s`'
258 262 'with caching: %s[TTL: %ss]' % (
259 263 repo_id, commit_id, f_path, cache_on, cache_seconds or 0))
260 264
261 265 cache_namespace_uid = 'cache_repo.{}'.format(repo_id)
262 266 region = rc_cache.get_or_create_region('cache_repo', cache_namespace_uid)
263 267
264 268 @region.conditional_cache_on_arguments(namespace=cache_namespace_uid, condition=cache_on)
265 269 def compute_file_tree(ver, _name_hash, _repo_id, _commit_id, _f_path, _full_load, _at_rev):
266 270 log.debug('Generating cached file tree at ver:%s for repo_id: %s, %s, %s',
267 271 ver, _repo_id, _commit_id, _f_path)
268 272
269 273 c.full_load = _full_load
270 274 return render(
271 275 'rhodecode:templates/files/files_browser_tree.mako',
272 276 self._get_template_context(c), self.request, _at_rev)
273 277
274 278 return compute_file_tree(
275 279 rc_cache.FILE_TREE_CACHE_VER, self.db_repo.repo_name_hash,
276 280 self.db_repo.repo_id, commit_id, f_path, full_load, at_rev)
277 281
278 282 def _get_archive_spec(self, fname):
279 283 log.debug('Detecting archive spec for: `%s`', fname)
280 284
281 285 fileformat = None
282 286 ext = None
283 287 content_type = None
284 288 for a_type, content_type, extension in settings.ARCHIVE_SPECS:
285 289
286 290 if fname.endswith(extension):
287 291 fileformat = a_type
288 292 log.debug('archive is of type: %s', fileformat)
289 293 ext = extension
290 294 break
291 295
292 296 if not fileformat:
293 297 raise ValueError()
294 298
295 299 # left over part of whole fname is the commit
296 300 commit_id = fname[:-len(ext)]
297 301
298 302 return commit_id, ext, fileformat, content_type
299 303
300 304 def create_pure_path(self, *parts):
301 305 # Split paths and sanitize them, removing any ../ etc
302 306 sanitized_path = [
303 307 x for x in pathlib2.PurePath(*parts).parts
304 308 if x not in ['.', '..']]
305 309
306 310 pure_path = pathlib2.PurePath(*sanitized_path)
307 311 return pure_path
308 312
309 313 def _is_lf_enabled(self, target_repo):
310 314 lf_enabled = False
311 315
312 316 lf_key_for_vcs_map = {
313 317 'hg': 'extensions_largefiles',
314 318 'git': 'vcs_git_lfs_enabled'
315 319 }
316 320
317 321 lf_key_for_vcs = lf_key_for_vcs_map.get(target_repo.repo_type)
318 322
319 323 if lf_key_for_vcs:
320 324 lf_enabled = self._get_repo_setting(target_repo, lf_key_for_vcs)
321 325
322 326 return lf_enabled
323 327
324 328 @LoginRequired()
325 329 @HasRepoPermissionAnyDecorator(
326 330 'repository.read', 'repository.write', 'repository.admin')
327 331 @view_config(
328 332 route_name='repo_archivefile', request_method='GET',
329 333 renderer=None)
330 334 def repo_archivefile(self):
331 335 # archive cache config
332 336 from rhodecode import CONFIG
333 337 _ = self.request.translate
334 338 self.load_default_context()
335 339 default_at_path = '/'
336 340 fname = self.request.matchdict['fname']
337 341 subrepos = self.request.GET.get('subrepos') == 'true'
338 342 at_path = self.request.GET.get('at_path') or default_at_path
339 343
340 344 if not self.db_repo.enable_downloads:
341 345 return Response(_('Downloads disabled'))
342 346
343 347 try:
344 348 commit_id, ext, fileformat, content_type = \
345 349 self._get_archive_spec(fname)
346 350 except ValueError:
347 351 return Response(_('Unknown archive type for: `{}`').format(
348 352 h.escape(fname)))
349 353
350 354 try:
351 355 commit = self.rhodecode_vcs_repo.get_commit(commit_id)
352 356 except CommitDoesNotExistError:
353 357 return Response(_('Unknown commit_id {}').format(
354 358 h.escape(commit_id)))
355 359 except EmptyRepositoryError:
356 360 return Response(_('Empty repository'))
357 361
358 362 try:
359 363 at_path = commit.get_node(at_path).path or default_at_path
360 364 except Exception:
361 365 return Response(_('No node at path {} for this repository').format(at_path))
362 366
363 367 path_sha = sha1(at_path)[:8]
364 368
365 369 # original backward compat name of archive
366 370 clean_name = safe_str(self.db_repo_name.replace('/', '_'))
367 371 short_sha = safe_str(commit.short_id)
368 372
369 373 if at_path == default_at_path:
370 374 archive_name = '{}-{}{}{}'.format(
371 375 clean_name,
372 376 '-sub' if subrepos else '',
373 377 short_sha,
374 378 ext)
375 379 # custom path and new name
376 380 else:
377 381 archive_name = '{}-{}{}-{}{}'.format(
378 382 clean_name,
379 383 '-sub' if subrepos else '',
380 384 short_sha,
381 385 path_sha,
382 386 ext)
383 387
384 388 use_cached_archive = False
385 389 archive_cache_enabled = CONFIG.get(
386 390 'archive_cache_dir') and not self.request.GET.get('no_cache')
387 391 cached_archive_path = None
388 392
389 393 if archive_cache_enabled:
390 394 # check if we it's ok to write
391 395 if not os.path.isdir(CONFIG['archive_cache_dir']):
392 396 os.makedirs(CONFIG['archive_cache_dir'])
393 397 cached_archive_path = os.path.join(
394 398 CONFIG['archive_cache_dir'], archive_name)
395 399 if os.path.isfile(cached_archive_path):
396 400 log.debug('Found cached archive in %s', cached_archive_path)
397 401 fd, archive = None, cached_archive_path
398 402 use_cached_archive = True
399 403 else:
400 404 log.debug('Archive %s is not yet cached', archive_name)
401 405
402 406 if not use_cached_archive:
403 407 # generate new archive
404 408 fd, archive = tempfile.mkstemp()
405 409 log.debug('Creating new temp archive in %s', archive)
406 410 try:
407 411 commit.archive_repo(archive, kind=fileformat, subrepos=subrepos,
408 412 archive_at_path=at_path)
409 413 except ImproperArchiveTypeError:
410 414 return _('Unknown archive type')
411 415 if archive_cache_enabled:
412 416 # if we generated the archive and we have cache enabled
413 417 # let's use this for future
414 418 log.debug('Storing new archive in %s', cached_archive_path)
415 419 shutil.move(archive, cached_archive_path)
416 420 archive = cached_archive_path
417 421
418 422 # store download action
419 423 audit_logger.store_web(
420 424 'repo.archive.download', action_data={
421 425 'user_agent': self.request.user_agent,
422 426 'archive_name': archive_name,
423 427 'archive_spec': fname,
424 428 'archive_cached': use_cached_archive},
425 429 user=self._rhodecode_user,
426 430 repo=self.db_repo,
427 431 commit=True
428 432 )
429 433
430 434 def get_chunked_archive(archive_path):
431 435 with open(archive_path, 'rb') as stream:
432 436 while True:
433 437 data = stream.read(16 * 1024)
434 438 if not data:
435 439 if fd: # fd means we used temporary file
436 440 os.close(fd)
437 441 if not archive_cache_enabled:
438 442 log.debug('Destroying temp archive %s', archive_path)
439 443 os.remove(archive_path)
440 444 break
441 445 yield data
442 446
443 447 response = Response(app_iter=get_chunked_archive(archive))
444 448 response.content_disposition = str(
445 449 'attachment; filename=%s' % archive_name)
446 450 response.content_type = str(content_type)
447 451
448 452 return response
449 453
450 454 def _get_file_node(self, commit_id, f_path):
451 455 if commit_id not in ['', None, 'None', '0' * 12, '0' * 40]:
452 456 commit = self.rhodecode_vcs_repo.get_commit(commit_id=commit_id)
453 457 try:
454 458 node = commit.get_node(f_path)
455 459 if node.is_dir():
456 460 raise NodeError('%s path is a %s not a file'
457 461 % (node, type(node)))
458 462 except NodeDoesNotExistError:
459 463 commit = EmptyCommit(
460 464 commit_id=commit_id,
461 465 idx=commit.idx,
462 466 repo=commit.repository,
463 467 alias=commit.repository.alias,
464 468 message=commit.message,
465 469 author=commit.author,
466 470 date=commit.date)
467 471 node = FileNode(f_path, '', commit=commit)
468 472 else:
469 473 commit = EmptyCommit(
470 474 repo=self.rhodecode_vcs_repo,
471 475 alias=self.rhodecode_vcs_repo.alias)
472 476 node = FileNode(f_path, '', commit=commit)
473 477 return node
474 478
475 479 @LoginRequired()
476 480 @HasRepoPermissionAnyDecorator(
477 481 'repository.read', 'repository.write', 'repository.admin')
478 482 @view_config(
479 483 route_name='repo_files_diff', request_method='GET',
480 484 renderer=None)
481 485 def repo_files_diff(self):
482 486 c = self.load_default_context()
483 487 f_path = self._get_f_path(self.request.matchdict)
484 488 diff1 = self.request.GET.get('diff1', '')
485 489 diff2 = self.request.GET.get('diff2', '')
486 490
487 491 path1, diff1 = parse_path_ref(diff1, default_path=f_path)
488 492
489 493 ignore_whitespace = str2bool(self.request.GET.get('ignorews'))
490 494 line_context = self.request.GET.get('context', 3)
491 495
492 496 if not any((diff1, diff2)):
493 497 h.flash(
494 498 'Need query parameter "diff1" or "diff2" to generate a diff.',
495 499 category='error')
496 500 raise HTTPBadRequest()
497 501
498 502 c.action = self.request.GET.get('diff')
499 503 if c.action not in ['download', 'raw']:
500 504 compare_url = h.route_path(
501 505 'repo_compare',
502 506 repo_name=self.db_repo_name,
503 507 source_ref_type='rev',
504 508 source_ref=diff1,
505 509 target_repo=self.db_repo_name,
506 510 target_ref_type='rev',
507 511 target_ref=diff2,
508 512 _query=dict(f_path=f_path))
509 513 # redirect to new view if we render diff
510 514 raise HTTPFound(compare_url)
511 515
512 516 try:
513 517 node1 = self._get_file_node(diff1, path1)
514 518 node2 = self._get_file_node(diff2, f_path)
515 519 except (RepositoryError, NodeError):
516 520 log.exception("Exception while trying to get node from repository")
517 521 raise HTTPFound(
518 522 h.route_path('repo_files', repo_name=self.db_repo_name,
519 523 commit_id='tip', f_path=f_path))
520 524
521 525 if all(isinstance(node.commit, EmptyCommit)
522 526 for node in (node1, node2)):
523 527 raise HTTPNotFound()
524 528
525 529 c.commit_1 = node1.commit
526 530 c.commit_2 = node2.commit
527 531
528 532 if c.action == 'download':
529 533 _diff = diffs.get_gitdiff(node1, node2,
530 534 ignore_whitespace=ignore_whitespace,
531 535 context=line_context)
532 536 diff = diffs.DiffProcessor(_diff, format='gitdiff')
533 537
534 538 response = Response(self.path_filter.get_raw_patch(diff))
535 539 response.content_type = 'text/plain'
536 540 response.content_disposition = (
537 541 'attachment; filename=%s_%s_vs_%s.diff' % (f_path, diff1, diff2)
538 542 )
539 543 charset = self._get_default_encoding(c)
540 544 if charset:
541 545 response.charset = charset
542 546 return response
543 547
544 548 elif c.action == 'raw':
545 549 _diff = diffs.get_gitdiff(node1, node2,
546 550 ignore_whitespace=ignore_whitespace,
547 551 context=line_context)
548 552 diff = diffs.DiffProcessor(_diff, format='gitdiff')
549 553
550 554 response = Response(self.path_filter.get_raw_patch(diff))
551 555 response.content_type = 'text/plain'
552 556 charset = self._get_default_encoding(c)
553 557 if charset:
554 558 response.charset = charset
555 559 return response
556 560
557 561 # in case we ever end up here
558 562 raise HTTPNotFound()
559 563
560 564 @LoginRequired()
561 565 @HasRepoPermissionAnyDecorator(
562 566 'repository.read', 'repository.write', 'repository.admin')
563 567 @view_config(
564 568 route_name='repo_files_diff_2way_redirect', request_method='GET',
565 569 renderer=None)
566 570 def repo_files_diff_2way_redirect(self):
567 571 """
568 572 Kept only to make OLD links work
569 573 """
570 574 f_path = self._get_f_path_unchecked(self.request.matchdict)
571 575 diff1 = self.request.GET.get('diff1', '')
572 576 diff2 = self.request.GET.get('diff2', '')
573 577
574 578 if not any((diff1, diff2)):
575 579 h.flash(
576 580 'Need query parameter "diff1" or "diff2" to generate a diff.',
577 581 category='error')
578 582 raise HTTPBadRequest()
579 583
580 584 compare_url = h.route_path(
581 585 'repo_compare',
582 586 repo_name=self.db_repo_name,
583 587 source_ref_type='rev',
584 588 source_ref=diff1,
585 589 target_ref_type='rev',
586 590 target_ref=diff2,
587 591 _query=dict(f_path=f_path, diffmode='sideside',
588 592 target_repo=self.db_repo_name,))
589 593 raise HTTPFound(compare_url)
590 594
591 595 @LoginRequired()
592 596 @view_config(
593 597 route_name='repo_files:default_commit', request_method='GET',
594 598 renderer=None)
595 599 def repo_files_default(self):
596 600 c = self.load_default_context()
597 601 ref_name = c.rhodecode_db_repo.landing_ref_name
598 602 landing_url = h.repo_files_by_ref_url(
599 603 c.rhodecode_db_repo.repo_name,
600 604 c.rhodecode_db_repo.repo_type,
601 605 f_path='',
602 606 ref_name=ref_name,
603 607 commit_id='tip',
604 608 query=dict(at=ref_name)
605 609 )
606 610
607 611 raise HTTPFound(landing_url)
608 612
609 613 @LoginRequired()
610 614 @HasRepoPermissionAnyDecorator(
611 615 'repository.read', 'repository.write', 'repository.admin')
612 616 @view_config(
613 617 route_name='repo_files', request_method='GET',
614 618 renderer=None)
615 619 @view_config(
616 620 route_name='repo_files:default_path', request_method='GET',
617 621 renderer=None)
618 622 @view_config(
619 623 route_name='repo_files:rendered', request_method='GET',
620 624 renderer=None)
621 625 @view_config(
622 626 route_name='repo_files:annotated', request_method='GET',
623 627 renderer=None)
624 628 def repo_files(self):
625 629 c = self.load_default_context()
626 630
627 631 view_name = getattr(self.request.matched_route, 'name', None)
628 632
629 633 c.annotate = view_name == 'repo_files:annotated'
630 634 # default is false, but .rst/.md files later are auto rendered, we can
631 635 # overwrite auto rendering by setting this GET flag
632 636 c.renderer = view_name == 'repo_files:rendered' or \
633 637 not self.request.GET.get('no-render', False)
634 638
635 639 commit_id, f_path = self._get_commit_and_path()
636 640
637 641 c.commit = self._get_commit_or_redirect(commit_id)
638 642 c.branch = self.request.GET.get('branch', None)
639 643 c.f_path = f_path
640 644 at_rev = self.request.GET.get('at')
641 645
642 646 # prev link
643 647 try:
644 648 prev_commit = c.commit.prev(c.branch)
645 649 c.prev_commit = prev_commit
646 650 c.url_prev = h.route_path(
647 651 'repo_files', repo_name=self.db_repo_name,
648 652 commit_id=prev_commit.raw_id, f_path=f_path)
649 653 if c.branch:
650 654 c.url_prev += '?branch=%s' % c.branch
651 655 except (CommitDoesNotExistError, VCSError):
652 656 c.url_prev = '#'
653 657 c.prev_commit = EmptyCommit()
654 658
655 659 # next link
656 660 try:
657 661 next_commit = c.commit.next(c.branch)
658 662 c.next_commit = next_commit
659 663 c.url_next = h.route_path(
660 664 'repo_files', repo_name=self.db_repo_name,
661 665 commit_id=next_commit.raw_id, f_path=f_path)
662 666 if c.branch:
663 667 c.url_next += '?branch=%s' % c.branch
664 668 except (CommitDoesNotExistError, VCSError):
665 669 c.url_next = '#'
666 670 c.next_commit = EmptyCommit()
667 671
668 672 # files or dirs
669 673 try:
670 674 c.file = c.commit.get_node(f_path)
671 675 c.file_author = True
672 676 c.file_tree = ''
673 677
674 678 # load file content
675 679 if c.file.is_file():
676 680 c.lf_node = {}
677 681
678 682 has_lf_enabled = self._is_lf_enabled(self.db_repo)
679 683 if has_lf_enabled:
680 684 c.lf_node = c.file.get_largefile_node()
681 685
682 686 c.file_source_page = 'true'
683 687 c.file_last_commit = c.file.last_commit
684 688
685 689 c.file_size_too_big = c.file.size > c.visual.cut_off_limit_file
686 690
687 691 if not (c.file_size_too_big or c.file.is_binary):
688 692 if c.annotate: # annotation has precedence over renderer
689 693 c.annotated_lines = filenode_as_annotated_lines_tokens(
690 694 c.file
691 695 )
692 696 else:
693 697 c.renderer = (
694 698 c.renderer and h.renderer_from_filename(c.file.path)
695 699 )
696 700 if not c.renderer:
697 701 c.lines = filenode_as_lines_tokens(c.file)
698 702
699 _branch_name, _sha_commit_id, is_head = self._is_valid_head(
700 commit_id, self.rhodecode_vcs_repo)
703 _branch_name, _sha_commit_id, is_head = \
704 self._is_valid_head(commit_id, self.rhodecode_vcs_repo,
705 landing_ref=self.db_repo.landing_ref_name)
701 706 c.on_branch_head = is_head
702 707
703 708 branch = c.commit.branch if (
704 709 c.commit.branch and '/' not in c.commit.branch) else None
705 710 c.branch_or_raw_id = branch or c.commit.raw_id
706 711 c.branch_name = c.commit.branch or h.short_id(c.commit.raw_id)
707 712
708 713 author = c.file_last_commit.author
709 714 c.authors = [[
710 715 h.email(author),
711 716 h.person(author, 'username_or_name_or_email'),
712 717 1
713 718 ]]
714 719
715 720 else: # load tree content at path
716 721 c.file_source_page = 'false'
717 722 c.authors = []
718 723 # this loads a simple tree without metadata to speed things up
719 724 # later via ajax we call repo_nodetree_full and fetch whole
720 725 c.file_tree = self._get_tree_at_commit(c, c.commit.raw_id, f_path, at_rev=at_rev)
721 726
722 727 c.readme_data, c.readme_file = \
723 728 self._get_readme_data(self.db_repo, c.visual.default_renderer,
724 729 c.commit.raw_id, f_path)
725 730
726 731 except RepositoryError as e:
727 732 h.flash(safe_str(h.escape(e)), category='error')
728 733 raise HTTPNotFound()
729 734
730 735 if self.request.environ.get('HTTP_X_PJAX'):
731 736 html = render('rhodecode:templates/files/files_pjax.mako',
732 737 self._get_template_context(c), self.request)
733 738 else:
734 739 html = render('rhodecode:templates/files/files.mako',
735 740 self._get_template_context(c), self.request)
736 741 return Response(html)
737 742
738 743 @HasRepoPermissionAnyDecorator(
739 744 'repository.read', 'repository.write', 'repository.admin')
740 745 @view_config(
741 746 route_name='repo_files:annotated_previous', request_method='GET',
742 747 renderer=None)
743 748 def repo_files_annotated_previous(self):
744 749 self.load_default_context()
745 750
746 751 commit_id, f_path = self._get_commit_and_path()
747 752 commit = self._get_commit_or_redirect(commit_id)
748 753 prev_commit_id = commit.raw_id
749 754 line_anchor = self.request.GET.get('line_anchor')
750 755 is_file = False
751 756 try:
752 757 _file = commit.get_node(f_path)
753 758 is_file = _file.is_file()
754 759 except (NodeDoesNotExistError, CommitDoesNotExistError, VCSError):
755 760 pass
756 761
757 762 if is_file:
758 763 history = commit.get_path_history(f_path)
759 764 prev_commit_id = history[1].raw_id \
760 765 if len(history) > 1 else prev_commit_id
761 766 prev_url = h.route_path(
762 767 'repo_files:annotated', repo_name=self.db_repo_name,
763 768 commit_id=prev_commit_id, f_path=f_path,
764 769 _anchor='L{}'.format(line_anchor))
765 770
766 771 raise HTTPFound(prev_url)
767 772
768 773 @LoginRequired()
769 774 @HasRepoPermissionAnyDecorator(
770 775 'repository.read', 'repository.write', 'repository.admin')
771 776 @view_config(
772 777 route_name='repo_nodetree_full', request_method='GET',
773 778 renderer=None, xhr=True)
774 779 @view_config(
775 780 route_name='repo_nodetree_full:default_path', request_method='GET',
776 781 renderer=None, xhr=True)
777 782 def repo_nodetree_full(self):
778 783 """
779 784 Returns rendered html of file tree that contains commit date,
780 785 author, commit_id for the specified combination of
781 786 repo, commit_id and file path
782 787 """
783 788 c = self.load_default_context()
784 789
785 790 commit_id, f_path = self._get_commit_and_path()
786 791 commit = self._get_commit_or_redirect(commit_id)
787 792 try:
788 793 dir_node = commit.get_node(f_path)
789 794 except RepositoryError as e:
790 795 return Response('error: {}'.format(h.escape(safe_str(e))))
791 796
792 797 if dir_node.is_file():
793 798 return Response('')
794 799
795 800 c.file = dir_node
796 801 c.commit = commit
797 802 at_rev = self.request.GET.get('at')
798 803
799 804 html = self._get_tree_at_commit(
800 805 c, commit.raw_id, dir_node.path, full_load=True, at_rev=at_rev)
801 806
802 807 return Response(html)
803 808
804 809 def _get_attachement_headers(self, f_path):
805 810 f_name = safe_str(f_path.split(Repository.NAME_SEP)[-1])
806 811 safe_path = f_name.replace('"', '\\"')
807 812 encoded_path = urllib.quote(f_name)
808 813
809 814 return "attachment; " \
810 815 "filename=\"{}\"; " \
811 816 "filename*=UTF-8\'\'{}".format(safe_path, encoded_path)
812 817
813 818 @LoginRequired()
814 819 @HasRepoPermissionAnyDecorator(
815 820 'repository.read', 'repository.write', 'repository.admin')
816 821 @view_config(
817 822 route_name='repo_file_raw', request_method='GET',
818 823 renderer=None)
819 824 def repo_file_raw(self):
820 825 """
821 826 Action for show as raw, some mimetypes are "rendered",
822 827 those include images, icons.
823 828 """
824 829 c = self.load_default_context()
825 830
826 831 commit_id, f_path = self._get_commit_and_path()
827 832 commit = self._get_commit_or_redirect(commit_id)
828 833 file_node = self._get_filenode_or_redirect(commit, f_path)
829 834
830 835 raw_mimetype_mapping = {
831 836 # map original mimetype to a mimetype used for "show as raw"
832 837 # you can also provide a content-disposition to override the
833 838 # default "attachment" disposition.
834 839 # orig_type: (new_type, new_dispo)
835 840
836 841 # show images inline:
837 842 # Do not re-add SVG: it is unsafe and permits XSS attacks. One can
838 843 # for example render an SVG with javascript inside or even render
839 844 # HTML.
840 845 'image/x-icon': ('image/x-icon', 'inline'),
841 846 'image/png': ('image/png', 'inline'),
842 847 'image/gif': ('image/gif', 'inline'),
843 848 'image/jpeg': ('image/jpeg', 'inline'),
844 849 'application/pdf': ('application/pdf', 'inline'),
845 850 }
846 851
847 852 mimetype = file_node.mimetype
848 853 try:
849 854 mimetype, disposition = raw_mimetype_mapping[mimetype]
850 855 except KeyError:
851 856 # we don't know anything special about this, handle it safely
852 857 if file_node.is_binary:
853 858 # do same as download raw for binary files
854 859 mimetype, disposition = 'application/octet-stream', 'attachment'
855 860 else:
856 861 # do not just use the original mimetype, but force text/plain,
857 862 # otherwise it would serve text/html and that might be unsafe.
858 863 # Note: underlying vcs library fakes text/plain mimetype if the
859 864 # mimetype can not be determined and it thinks it is not
860 865 # binary.This might lead to erroneous text display in some
861 866 # cases, but helps in other cases, like with text files
862 867 # without extension.
863 868 mimetype, disposition = 'text/plain', 'inline'
864 869
865 870 if disposition == 'attachment':
866 871 disposition = self._get_attachement_headers(f_path)
867 872
868 873 stream_content = file_node.stream_bytes()
869 874
870 875 response = Response(app_iter=stream_content)
871 876 response.content_disposition = disposition
872 877 response.content_type = mimetype
873 878
874 879 charset = self._get_default_encoding(c)
875 880 if charset:
876 881 response.charset = charset
877 882
878 883 return response
879 884
880 885 @LoginRequired()
881 886 @HasRepoPermissionAnyDecorator(
882 887 'repository.read', 'repository.write', 'repository.admin')
883 888 @view_config(
884 889 route_name='repo_file_download', request_method='GET',
885 890 renderer=None)
886 891 @view_config(
887 892 route_name='repo_file_download:legacy', request_method='GET',
888 893 renderer=None)
889 894 def repo_file_download(self):
890 895 c = self.load_default_context()
891 896
892 897 commit_id, f_path = self._get_commit_and_path()
893 898 commit = self._get_commit_or_redirect(commit_id)
894 899 file_node = self._get_filenode_or_redirect(commit, f_path)
895 900
896 901 if self.request.GET.get('lf'):
897 902 # only if lf get flag is passed, we download this file
898 903 # as LFS/Largefile
899 904 lf_node = file_node.get_largefile_node()
900 905 if lf_node:
901 906 # overwrite our pointer with the REAL large-file
902 907 file_node = lf_node
903 908
904 909 disposition = self._get_attachement_headers(f_path)
905 910
906 911 stream_content = file_node.stream_bytes()
907 912
908 913 response = Response(app_iter=stream_content)
909 914 response.content_disposition = disposition
910 915 response.content_type = file_node.mimetype
911 916
912 917 charset = self._get_default_encoding(c)
913 918 if charset:
914 919 response.charset = charset
915 920
916 921 return response
917 922
918 923 def _get_nodelist_at_commit(self, repo_name, repo_id, commit_id, f_path):
919 924
920 925 cache_seconds = safe_int(
921 926 rhodecode.CONFIG.get('rc_cache.cache_repo.expiration_time'))
922 927 cache_on = cache_seconds > 0
923 928 log.debug(
924 929 'Computing FILE SEARCH for repo_id %s commit_id `%s` and path `%s`'
925 930 'with caching: %s[TTL: %ss]' % (
926 931 repo_id, commit_id, f_path, cache_on, cache_seconds or 0))
927 932
928 933 cache_namespace_uid = 'cache_repo.{}'.format(repo_id)
929 934 region = rc_cache.get_or_create_region('cache_repo', cache_namespace_uid)
930 935
931 936 @region.conditional_cache_on_arguments(namespace=cache_namespace_uid, condition=cache_on)
932 937 def compute_file_search(_name_hash, _repo_id, _commit_id, _f_path):
933 938 log.debug('Generating cached nodelist for repo_id:%s, %s, %s',
934 939 _repo_id, commit_id, f_path)
935 940 try:
936 941 _d, _f = ScmModel().get_quick_filter_nodes(repo_name, _commit_id, _f_path)
937 942 except (RepositoryError, CommitDoesNotExistError, Exception) as e:
938 943 log.exception(safe_str(e))
939 944 h.flash(safe_str(h.escape(e)), category='error')
940 945 raise HTTPFound(h.route_path(
941 946 'repo_files', repo_name=self.db_repo_name,
942 947 commit_id='tip', f_path='/'))
943 948
944 949 return _d + _f
945 950
946 951 result = compute_file_search(self.db_repo.repo_name_hash, self.db_repo.repo_id,
947 952 commit_id, f_path)
948 953 return filter(lambda n: self.path_filter.path_access_allowed(n['name']), result)
949 954
950 955 @LoginRequired()
951 956 @HasRepoPermissionAnyDecorator(
952 957 'repository.read', 'repository.write', 'repository.admin')
953 958 @view_config(
954 959 route_name='repo_files_nodelist', request_method='GET',
955 960 renderer='json_ext', xhr=True)
956 961 def repo_nodelist(self):
957 962 self.load_default_context()
958 963
959 964 commit_id, f_path = self._get_commit_and_path()
960 965 commit = self._get_commit_or_redirect(commit_id)
961 966
962 967 metadata = self._get_nodelist_at_commit(
963 968 self.db_repo_name, self.db_repo.repo_id, commit.raw_id, f_path)
964 969 return {'nodes': metadata}
965 970
966 971 def _create_references(self, branches_or_tags, symbolic_reference, f_path, ref_type):
967 972 items = []
968 973 for name, commit_id in branches_or_tags.items():
969 974 sym_ref = symbolic_reference(commit_id, name, f_path, ref_type)
970 975 items.append((sym_ref, name, ref_type))
971 976 return items
972 977
973 978 def _symbolic_reference(self, commit_id, name, f_path, ref_type):
974 979 return commit_id
975 980
976 981 def _symbolic_reference_svn(self, commit_id, name, f_path, ref_type):
977 982 return commit_id
978 983
979 984 # NOTE(dan): old code we used in "diff" mode compare
980 985 new_f_path = vcspath.join(name, f_path)
981 986 return u'%s@%s' % (new_f_path, commit_id)
982 987
983 988 def _get_node_history(self, commit_obj, f_path, commits=None):
984 989 """
985 990 get commit history for given node
986 991
987 992 :param commit_obj: commit to calculate history
988 993 :param f_path: path for node to calculate history for
989 994 :param commits: if passed don't calculate history and take
990 995 commits defined in this list
991 996 """
992 997 _ = self.request.translate
993 998
994 999 # calculate history based on tip
995 1000 tip = self.rhodecode_vcs_repo.get_commit()
996 1001 if commits is None:
997 1002 pre_load = ["author", "branch"]
998 1003 try:
999 1004 commits = tip.get_path_history(f_path, pre_load=pre_load)
1000 1005 except (NodeDoesNotExistError, CommitError):
1001 1006 # this node is not present at tip!
1002 1007 commits = commit_obj.get_path_history(f_path, pre_load=pre_load)
1003 1008
1004 1009 history = []
1005 1010 commits_group = ([], _("Changesets"))
1006 1011 for commit in commits:
1007 1012 branch = ' (%s)' % commit.branch if commit.branch else ''
1008 1013 n_desc = 'r%s:%s%s' % (commit.idx, commit.short_id, branch)
1009 1014 commits_group[0].append((commit.raw_id, n_desc, 'sha'))
1010 1015 history.append(commits_group)
1011 1016
1012 1017 symbolic_reference = self._symbolic_reference
1013 1018
1014 1019 if self.rhodecode_vcs_repo.alias == 'svn':
1015 1020 adjusted_f_path = RepoFilesView.adjust_file_path_for_svn(
1016 1021 f_path, self.rhodecode_vcs_repo)
1017 1022 if adjusted_f_path != f_path:
1018 1023 log.debug(
1019 1024 'Recognized svn tag or branch in file "%s", using svn '
1020 1025 'specific symbolic references', f_path)
1021 1026 f_path = adjusted_f_path
1022 1027 symbolic_reference = self._symbolic_reference_svn
1023 1028
1024 1029 branches = self._create_references(
1025 1030 self.rhodecode_vcs_repo.branches, symbolic_reference, f_path, 'branch')
1026 1031 branches_group = (branches, _("Branches"))
1027 1032
1028 1033 tags = self._create_references(
1029 1034 self.rhodecode_vcs_repo.tags, symbolic_reference, f_path, 'tag')
1030 1035 tags_group = (tags, _("Tags"))
1031 1036
1032 1037 history.append(branches_group)
1033 1038 history.append(tags_group)
1034 1039
1035 1040 return history, commits
1036 1041
1037 1042 @LoginRequired()
1038 1043 @HasRepoPermissionAnyDecorator(
1039 1044 'repository.read', 'repository.write', 'repository.admin')
1040 1045 @view_config(
1041 1046 route_name='repo_file_history', request_method='GET',
1042 1047 renderer='json_ext')
1043 1048 def repo_file_history(self):
1044 1049 self.load_default_context()
1045 1050
1046 1051 commit_id, f_path = self._get_commit_and_path()
1047 1052 commit = self._get_commit_or_redirect(commit_id)
1048 1053 file_node = self._get_filenode_or_redirect(commit, f_path)
1049 1054
1050 1055 if file_node.is_file():
1051 1056 file_history, _hist = self._get_node_history(commit, f_path)
1052 1057
1053 1058 res = []
1054 1059 for section_items, section in file_history:
1055 1060 items = []
1056 1061 for obj_id, obj_text, obj_type in section_items:
1057 1062 at_rev = ''
1058 1063 if obj_type in ['branch', 'bookmark', 'tag']:
1059 1064 at_rev = obj_text
1060 1065 entry = {
1061 1066 'id': obj_id,
1062 1067 'text': obj_text,
1063 1068 'type': obj_type,
1064 1069 'at_rev': at_rev
1065 1070 }
1066 1071
1067 1072 items.append(entry)
1068 1073
1069 1074 res.append({
1070 1075 'text': section,
1071 1076 'children': items
1072 1077 })
1073 1078
1074 1079 data = {
1075 1080 'more': False,
1076 1081 'results': res
1077 1082 }
1078 1083 return data
1079 1084
1080 1085 log.warning('Cannot fetch history for directory')
1081 1086 raise HTTPBadRequest()
1082 1087
1083 1088 @LoginRequired()
1084 1089 @HasRepoPermissionAnyDecorator(
1085 1090 'repository.read', 'repository.write', 'repository.admin')
1086 1091 @view_config(
1087 1092 route_name='repo_file_authors', request_method='GET',
1088 1093 renderer='rhodecode:templates/files/file_authors_box.mako')
1089 1094 def repo_file_authors(self):
1090 1095 c = self.load_default_context()
1091 1096
1092 1097 commit_id, f_path = self._get_commit_and_path()
1093 1098 commit = self._get_commit_or_redirect(commit_id)
1094 1099 file_node = self._get_filenode_or_redirect(commit, f_path)
1095 1100
1096 1101 if not file_node.is_file():
1097 1102 raise HTTPBadRequest()
1098 1103
1099 1104 c.file_last_commit = file_node.last_commit
1100 1105 if self.request.GET.get('annotate') == '1':
1101 1106 # use _hist from annotation if annotation mode is on
1102 1107 commit_ids = set(x[1] for x in file_node.annotate)
1103 1108 _hist = (
1104 1109 self.rhodecode_vcs_repo.get_commit(commit_id)
1105 1110 for commit_id in commit_ids)
1106 1111 else:
1107 1112 _f_history, _hist = self._get_node_history(commit, f_path)
1108 1113 c.file_author = False
1109 1114
1110 1115 unique = collections.OrderedDict()
1111 1116 for commit in _hist:
1112 1117 author = commit.author
1113 1118 if author not in unique:
1114 1119 unique[commit.author] = [
1115 1120 h.email(author),
1116 1121 h.person(author, 'username_or_name_or_email'),
1117 1122 1 # counter
1118 1123 ]
1119 1124
1120 1125 else:
1121 1126 # increase counter
1122 1127 unique[commit.author][2] += 1
1123 1128
1124 1129 c.authors = [val for val in unique.values()]
1125 1130
1126 1131 return self._get_template_context(c)
1127 1132
1128 1133 @LoginRequired()
1129 1134 @HasRepoPermissionAnyDecorator('repository.write', 'repository.admin')
1130 1135 @view_config(
1131 1136 route_name='repo_files_check_head', request_method='POST',
1132 1137 renderer='json_ext', xhr=True)
1133 1138 def repo_files_check_head(self):
1134 1139 self.load_default_context()
1135 1140
1136 1141 commit_id, f_path = self._get_commit_and_path()
1137 1142 _branch_name, _sha_commit_id, is_head = \
1138 self._is_valid_head(commit_id, self.rhodecode_vcs_repo)
1143 self._is_valid_head(commit_id, self.rhodecode_vcs_repo,
1144 landing_ref=self.db_repo.landing_ref_name)
1139 1145
1140 1146 new_path = self.request.POST.get('path')
1141 1147 operation = self.request.POST.get('operation')
1142 1148 path_exist = ''
1143 1149
1144 1150 if new_path and operation in ['create', 'upload']:
1145 1151 new_f_path = os.path.join(f_path.lstrip('/'), new_path)
1146 1152 try:
1147 1153 commit_obj = self.rhodecode_vcs_repo.get_commit(commit_id)
1148 1154 # NOTE(dan): construct whole path without leading /
1149 1155 file_node = commit_obj.get_node(new_f_path)
1150 1156 if file_node is not None:
1151 1157 path_exist = new_f_path
1152 1158 except EmptyRepositoryError:
1153 1159 pass
1154 1160 except Exception:
1155 1161 pass
1156 1162
1157 1163 return {
1158 1164 'branch': _branch_name,
1159 1165 'sha': _sha_commit_id,
1160 1166 'is_head': is_head,
1161 1167 'path_exists': path_exist
1162 1168 }
1163 1169
1164 1170 @LoginRequired()
1165 1171 @HasRepoPermissionAnyDecorator('repository.write', 'repository.admin')
1166 1172 @view_config(
1167 1173 route_name='repo_files_remove_file', request_method='GET',
1168 1174 renderer='rhodecode:templates/files/files_delete.mako')
1169 1175 def repo_files_remove_file(self):
1170 1176 _ = self.request.translate
1171 1177 c = self.load_default_context()
1172 1178 commit_id, f_path = self._get_commit_and_path()
1173 1179
1174 1180 self._ensure_not_locked()
1175 1181 _branch_name, _sha_commit_id, is_head = \
1176 self._is_valid_head(commit_id, self.rhodecode_vcs_repo)
1182 self._is_valid_head(commit_id, self.rhodecode_vcs_repo,
1183 landing_ref=self.db_repo.landing_ref_name)
1177 1184
1178 1185 self.forbid_non_head(is_head, f_path)
1179 1186 self.check_branch_permission(_branch_name)
1180 1187
1181 1188 c.commit = self._get_commit_or_redirect(commit_id)
1182 1189 c.file = self._get_filenode_or_redirect(c.commit, f_path)
1183 1190
1184 1191 c.default_message = _(
1185 1192 'Deleted file {} via RhodeCode Enterprise').format(f_path)
1186 1193 c.f_path = f_path
1187 1194
1188 1195 return self._get_template_context(c)
1189 1196
1190 1197 @LoginRequired()
1191 1198 @HasRepoPermissionAnyDecorator('repository.write', 'repository.admin')
1192 1199 @CSRFRequired()
1193 1200 @view_config(
1194 1201 route_name='repo_files_delete_file', request_method='POST',
1195 1202 renderer=None)
1196 1203 def repo_files_delete_file(self):
1197 1204 _ = self.request.translate
1198 1205
1199 1206 c = self.load_default_context()
1200 1207 commit_id, f_path = self._get_commit_and_path()
1201 1208
1202 1209 self._ensure_not_locked()
1203 1210 _branch_name, _sha_commit_id, is_head = \
1204 self._is_valid_head(commit_id, self.rhodecode_vcs_repo)
1211 self._is_valid_head(commit_id, self.rhodecode_vcs_repo,
1212 landing_ref=self.db_repo.landing_ref_name)
1205 1213
1206 1214 self.forbid_non_head(is_head, f_path)
1207 1215 self.check_branch_permission(_branch_name)
1208 1216
1209 1217 c.commit = self._get_commit_or_redirect(commit_id)
1210 1218 c.file = self._get_filenode_or_redirect(c.commit, f_path)
1211 1219
1212 1220 c.default_message = _(
1213 1221 'Deleted file {} via RhodeCode Enterprise').format(f_path)
1214 1222 c.f_path = f_path
1215 1223 node_path = f_path
1216 1224 author = self._rhodecode_db_user.full_contact
1217 1225 message = self.request.POST.get('message') or c.default_message
1218 1226 try:
1219 1227 nodes = {
1220 1228 node_path: {
1221 1229 'content': ''
1222 1230 }
1223 1231 }
1224 1232 ScmModel().delete_nodes(
1225 1233 user=self._rhodecode_db_user.user_id, repo=self.db_repo,
1226 1234 message=message,
1227 1235 nodes=nodes,
1228 1236 parent_commit=c.commit,
1229 1237 author=author,
1230 1238 )
1231 1239
1232 1240 h.flash(
1233 1241 _('Successfully deleted file `{}`').format(
1234 1242 h.escape(f_path)), category='success')
1235 1243 except Exception:
1236 1244 log.exception('Error during commit operation')
1237 1245 h.flash(_('Error occurred during commit'), category='error')
1238 1246 raise HTTPFound(
1239 1247 h.route_path('repo_commit', repo_name=self.db_repo_name,
1240 1248 commit_id='tip'))
1241 1249
1242 1250 @LoginRequired()
1243 1251 @HasRepoPermissionAnyDecorator('repository.write', 'repository.admin')
1244 1252 @view_config(
1245 1253 route_name='repo_files_edit_file', request_method='GET',
1246 1254 renderer='rhodecode:templates/files/files_edit.mako')
1247 1255 def repo_files_edit_file(self):
1248 1256 _ = self.request.translate
1249 1257 c = self.load_default_context()
1250 1258 commit_id, f_path = self._get_commit_and_path()
1251 1259
1252 1260 self._ensure_not_locked()
1253 1261 _branch_name, _sha_commit_id, is_head = \
1254 self._is_valid_head(commit_id, self.rhodecode_vcs_repo)
1262 self._is_valid_head(commit_id, self.rhodecode_vcs_repo,
1263 landing_ref=self.db_repo.landing_ref_name)
1255 1264
1256 1265 self.forbid_non_head(is_head, f_path, commit_id=commit_id)
1257 1266 self.check_branch_permission(_branch_name, commit_id=commit_id)
1258 1267
1259 1268 c.commit = self._get_commit_or_redirect(commit_id)
1260 1269 c.file = self._get_filenode_or_redirect(c.commit, f_path)
1261 1270
1262 1271 if c.file.is_binary:
1263 1272 files_url = h.route_path(
1264 1273 'repo_files',
1265 1274 repo_name=self.db_repo_name,
1266 1275 commit_id=c.commit.raw_id, f_path=f_path)
1267 1276 raise HTTPFound(files_url)
1268 1277
1269 1278 c.default_message = _('Edited file {} via RhodeCode Enterprise').format(f_path)
1270 1279 c.f_path = f_path
1271 1280
1272 1281 return self._get_template_context(c)
1273 1282
1274 1283 @LoginRequired()
1275 1284 @HasRepoPermissionAnyDecorator('repository.write', 'repository.admin')
1276 1285 @CSRFRequired()
1277 1286 @view_config(
1278 1287 route_name='repo_files_update_file', request_method='POST',
1279 1288 renderer=None)
1280 1289 def repo_files_update_file(self):
1281 1290 _ = self.request.translate
1282 1291 c = self.load_default_context()
1283 1292 commit_id, f_path = self._get_commit_and_path()
1284 1293
1285 1294 self._ensure_not_locked()
1286 1295
1287 1296 c.commit = self._get_commit_or_redirect(commit_id)
1288 1297 c.file = self._get_filenode_or_redirect(c.commit, f_path)
1289 1298
1290 1299 if c.file.is_binary:
1291 1300 raise HTTPFound(h.route_path('repo_files', repo_name=self.db_repo_name,
1292 1301 commit_id=c.commit.raw_id, f_path=f_path))
1293 1302
1294 1303 _branch_name, _sha_commit_id, is_head = \
1295 self._is_valid_head(commit_id, self.rhodecode_vcs_repo)
1304 self._is_valid_head(commit_id, self.rhodecode_vcs_repo,
1305 landing_ref=self.db_repo.landing_ref_name)
1296 1306
1297 1307 self.forbid_non_head(is_head, f_path, commit_id=commit_id)
1298 1308 self.check_branch_permission(_branch_name, commit_id=commit_id)
1299 1309
1300 1310 c.default_message = _('Edited file {} via RhodeCode Enterprise').format(f_path)
1301 1311 c.f_path = f_path
1302 1312
1303 1313 old_content = c.file.content
1304 1314 sl = old_content.splitlines(1)
1305 1315 first_line = sl[0] if sl else ''
1306 1316
1307 1317 r_post = self.request.POST
1308 1318 # line endings: 0 - Unix, 1 - Mac, 2 - DOS
1309 1319 line_ending_mode = detect_mode(first_line, 0)
1310 1320 content = convert_line_endings(r_post.get('content', ''), line_ending_mode)
1311 1321
1312 1322 message = r_post.get('message') or c.default_message
1313 1323 org_node_path = c.file.unicode_path
1314 1324 filename = r_post['filename']
1315 1325
1316 1326 root_path = c.file.dir_path
1317 1327 pure_path = self.create_pure_path(root_path, filename)
1318 1328 node_path = safe_unicode(bytes(pure_path))
1319 1329
1320 1330 default_redirect_url = h.route_path('repo_commit', repo_name=self.db_repo_name,
1321 1331 commit_id=commit_id)
1322 1332 if content == old_content and node_path == org_node_path:
1323 1333 h.flash(_('No changes detected on {}').format(h.escape(org_node_path)),
1324 1334 category='warning')
1325 1335 raise HTTPFound(default_redirect_url)
1326 1336
1327 1337 try:
1328 1338 mapping = {
1329 1339 org_node_path: {
1330 1340 'org_filename': org_node_path,
1331 1341 'filename': node_path,
1332 1342 'content': content,
1333 1343 'lexer': '',
1334 1344 'op': 'mod',
1335 1345 'mode': c.file.mode
1336 1346 }
1337 1347 }
1338 1348
1339 1349 commit = ScmModel().update_nodes(
1340 1350 user=self._rhodecode_db_user.user_id,
1341 1351 repo=self.db_repo,
1342 1352 message=message,
1343 1353 nodes=mapping,
1344 1354 parent_commit=c.commit,
1345 1355 )
1346 1356
1347 1357 h.flash(_('Successfully committed changes to file `{}`').format(
1348 1358 h.escape(f_path)), category='success')
1349 1359 default_redirect_url = h.route_path(
1350 1360 'repo_commit', repo_name=self.db_repo_name, commit_id=commit.raw_id)
1351 1361
1352 1362 except Exception:
1353 1363 log.exception('Error occurred during commit')
1354 1364 h.flash(_('Error occurred during commit'), category='error')
1355 1365
1356 1366 raise HTTPFound(default_redirect_url)
1357 1367
1358 1368 @LoginRequired()
1359 1369 @HasRepoPermissionAnyDecorator('repository.write', 'repository.admin')
1360 1370 @view_config(
1361 1371 route_name='repo_files_add_file', request_method='GET',
1362 1372 renderer='rhodecode:templates/files/files_add.mako')
1363 1373 @view_config(
1364 1374 route_name='repo_files_upload_file', request_method='GET',
1365 1375 renderer='rhodecode:templates/files/files_upload.mako')
1366 1376 def repo_files_add_file(self):
1367 1377 _ = self.request.translate
1368 1378 c = self.load_default_context()
1369 1379 commit_id, f_path = self._get_commit_and_path()
1370 1380
1371 1381 self._ensure_not_locked()
1372 1382
1373 1383 c.commit = self._get_commit_or_redirect(commit_id, redirect_after=False)
1374 1384 if c.commit is None:
1375 1385 c.commit = EmptyCommit(alias=self.rhodecode_vcs_repo.alias)
1376 1386
1377 1387 if self.rhodecode_vcs_repo.is_empty():
1378 1388 # for empty repository we cannot check for current branch, we rely on
1379 1389 # c.commit.branch instead
1380 1390 _branch_name, _sha_commit_id, is_head = c.commit.branch, '', True
1381 1391 else:
1382 1392 _branch_name, _sha_commit_id, is_head = \
1383 self._is_valid_head(commit_id, self.rhodecode_vcs_repo)
1393 self._is_valid_head(commit_id, self.rhodecode_vcs_repo,
1394 landing_ref=self.db_repo.landing_ref_name)
1384 1395
1385 1396 self.forbid_non_head(is_head, f_path, commit_id=commit_id)
1386 1397 self.check_branch_permission(_branch_name, commit_id=commit_id)
1387 1398
1388 1399 c.default_message = (_('Added file via RhodeCode Enterprise'))
1389 1400 c.f_path = f_path.lstrip('/') # ensure not relative path
1390 1401
1391 1402 return self._get_template_context(c)
1392 1403
1393 1404 @LoginRequired()
1394 1405 @HasRepoPermissionAnyDecorator('repository.write', 'repository.admin')
1395 1406 @CSRFRequired()
1396 1407 @view_config(
1397 1408 route_name='repo_files_create_file', request_method='POST',
1398 1409 renderer=None)
1399 1410 def repo_files_create_file(self):
1400 1411 _ = self.request.translate
1401 1412 c = self.load_default_context()
1402 1413 commit_id, f_path = self._get_commit_and_path()
1403 1414
1404 1415 self._ensure_not_locked()
1405 1416
1406 1417 c.commit = self._get_commit_or_redirect(commit_id, redirect_after=False)
1407 1418 if c.commit is None:
1408 1419 c.commit = EmptyCommit(alias=self.rhodecode_vcs_repo.alias)
1409 1420
1410 1421 # calculate redirect URL
1411 1422 if self.rhodecode_vcs_repo.is_empty():
1412 1423 default_redirect_url = h.route_path(
1413 1424 'repo_summary', repo_name=self.db_repo_name)
1414 1425 else:
1415 1426 default_redirect_url = h.route_path(
1416 1427 'repo_commit', repo_name=self.db_repo_name, commit_id='tip')
1417 1428
1418 1429 if self.rhodecode_vcs_repo.is_empty():
1419 1430 # for empty repository we cannot check for current branch, we rely on
1420 1431 # c.commit.branch instead
1421 1432 _branch_name, _sha_commit_id, is_head = c.commit.branch, '', True
1422 1433 else:
1423 1434 _branch_name, _sha_commit_id, is_head = \
1424 self._is_valid_head(commit_id, self.rhodecode_vcs_repo)
1435 self._is_valid_head(commit_id, self.rhodecode_vcs_repo,
1436 landing_ref=self.db_repo.landing_ref_name)
1425 1437
1426 1438 self.forbid_non_head(is_head, f_path, commit_id=commit_id)
1427 1439 self.check_branch_permission(_branch_name, commit_id=commit_id)
1428 1440
1429 1441 c.default_message = (_('Added file via RhodeCode Enterprise'))
1430 1442 c.f_path = f_path
1431 1443
1432 1444 r_post = self.request.POST
1433 1445 message = r_post.get('message') or c.default_message
1434 1446 filename = r_post.get('filename')
1435 1447 unix_mode = 0
1436 1448 content = convert_line_endings(r_post.get('content', ''), unix_mode)
1437 1449
1438 1450 if not filename:
1439 1451 # If there's no commit, redirect to repo summary
1440 1452 if type(c.commit) is EmptyCommit:
1441 1453 redirect_url = h.route_path(
1442 1454 'repo_summary', repo_name=self.db_repo_name)
1443 1455 else:
1444 1456 redirect_url = default_redirect_url
1445 1457 h.flash(_('No filename specified'), category='warning')
1446 1458 raise HTTPFound(redirect_url)
1447 1459
1448 1460 root_path = f_path
1449 1461 pure_path = self.create_pure_path(root_path, filename)
1450 1462 node_path = safe_unicode(bytes(pure_path).lstrip('/'))
1451 1463
1452 1464 author = self._rhodecode_db_user.full_contact
1453 1465 nodes = {
1454 1466 node_path: {
1455 1467 'content': content
1456 1468 }
1457 1469 }
1458 1470
1459 1471 try:
1460 1472
1461 1473 commit = ScmModel().create_nodes(
1462 1474 user=self._rhodecode_db_user.user_id,
1463 1475 repo=self.db_repo,
1464 1476 message=message,
1465 1477 nodes=nodes,
1466 1478 parent_commit=c.commit,
1467 1479 author=author,
1468 1480 )
1469 1481
1470 1482 h.flash(_('Successfully committed new file `{}`').format(
1471 1483 h.escape(node_path)), category='success')
1472 1484
1473 1485 default_redirect_url = h.route_path(
1474 1486 'repo_commit', repo_name=self.db_repo_name, commit_id=commit.raw_id)
1475 1487
1476 1488 except NonRelativePathError:
1477 1489 log.exception('Non Relative path found')
1478 1490 h.flash(_('The location specified must be a relative path and must not '
1479 1491 'contain .. in the path'), category='warning')
1480 1492 raise HTTPFound(default_redirect_url)
1481 1493 except (NodeError, NodeAlreadyExistsError) as e:
1482 1494 h.flash(_(h.escape(e)), category='error')
1483 1495 except Exception:
1484 1496 log.exception('Error occurred during commit')
1485 1497 h.flash(_('Error occurred during commit'), category='error')
1486 1498
1487 1499 raise HTTPFound(default_redirect_url)
1488 1500
1489 1501 @LoginRequired()
1490 1502 @HasRepoPermissionAnyDecorator('repository.write', 'repository.admin')
1491 1503 @CSRFRequired()
1492 1504 @view_config(
1493 1505 route_name='repo_files_upload_file', request_method='POST',
1494 1506 renderer='json_ext')
1495 1507 def repo_files_upload_file(self):
1496 1508 _ = self.request.translate
1497 1509 c = self.load_default_context()
1498 1510 commit_id, f_path = self._get_commit_and_path()
1499 1511
1500 1512 self._ensure_not_locked()
1501 1513
1502 1514 c.commit = self._get_commit_or_redirect(commit_id, redirect_after=False)
1503 1515 if c.commit is None:
1504 1516 c.commit = EmptyCommit(alias=self.rhodecode_vcs_repo.alias)
1505 1517
1506 1518 # calculate redirect URL
1507 1519 if self.rhodecode_vcs_repo.is_empty():
1508 1520 default_redirect_url = h.route_path(
1509 1521 'repo_summary', repo_name=self.db_repo_name)
1510 1522 else:
1511 1523 default_redirect_url = h.route_path(
1512 1524 'repo_commit', repo_name=self.db_repo_name, commit_id='tip')
1513 1525
1514 1526 if self.rhodecode_vcs_repo.is_empty():
1515 1527 # for empty repository we cannot check for current branch, we rely on
1516 1528 # c.commit.branch instead
1517 1529 _branch_name, _sha_commit_id, is_head = c.commit.branch, '', True
1518 1530 else:
1519 1531 _branch_name, _sha_commit_id, is_head = \
1520 self._is_valid_head(commit_id, self.rhodecode_vcs_repo)
1532 self._is_valid_head(commit_id, self.rhodecode_vcs_repo,
1533 landing_ref=self.db_repo.landing_ref_name)
1521 1534
1522 1535 error = self.forbid_non_head(is_head, f_path, json_mode=True)
1523 1536 if error:
1524 1537 return {
1525 1538 'error': error,
1526 1539 'redirect_url': default_redirect_url
1527 1540 }
1528 1541 error = self.check_branch_permission(_branch_name, json_mode=True)
1529 1542 if error:
1530 1543 return {
1531 1544 'error': error,
1532 1545 'redirect_url': default_redirect_url
1533 1546 }
1534 1547
1535 1548 c.default_message = (_('Uploaded file via RhodeCode Enterprise'))
1536 1549 c.f_path = f_path
1537 1550
1538 1551 r_post = self.request.POST
1539 1552
1540 1553 message = c.default_message
1541 1554 user_message = r_post.getall('message')
1542 1555 if isinstance(user_message, list) and user_message:
1543 1556 # we take the first from duplicated results if it's not empty
1544 1557 message = user_message[0] if user_message[0] else message
1545 1558
1546 1559 nodes = {}
1547 1560
1548 1561 for file_obj in r_post.getall('files_upload') or []:
1549 1562 content = file_obj.file
1550 1563 filename = file_obj.filename
1551 1564
1552 1565 root_path = f_path
1553 1566 pure_path = self.create_pure_path(root_path, filename)
1554 1567 node_path = safe_unicode(bytes(pure_path).lstrip('/'))
1555 1568
1556 1569 nodes[node_path] = {
1557 1570 'content': content
1558 1571 }
1559 1572
1560 1573 if not nodes:
1561 1574 error = 'missing files'
1562 1575 return {
1563 1576 'error': error,
1564 1577 'redirect_url': default_redirect_url
1565 1578 }
1566 1579
1567 1580 author = self._rhodecode_db_user.full_contact
1568 1581
1569 1582 try:
1570 1583 commit = ScmModel().create_nodes(
1571 1584 user=self._rhodecode_db_user.user_id,
1572 1585 repo=self.db_repo,
1573 1586 message=message,
1574 1587 nodes=nodes,
1575 1588 parent_commit=c.commit,
1576 1589 author=author,
1577 1590 )
1578 1591 if len(nodes) == 1:
1579 1592 flash_message = _('Successfully committed {} new files').format(len(nodes))
1580 1593 else:
1581 1594 flash_message = _('Successfully committed 1 new file')
1582 1595
1583 1596 h.flash(flash_message, category='success')
1584 1597
1585 1598 default_redirect_url = h.route_path(
1586 1599 'repo_commit', repo_name=self.db_repo_name, commit_id=commit.raw_id)
1587 1600
1588 1601 except NonRelativePathError:
1589 1602 log.exception('Non Relative path found')
1590 1603 error = _('The location specified must be a relative path and must not '
1591 1604 'contain .. in the path')
1592 1605 h.flash(error, category='warning')
1593 1606
1594 1607 return {
1595 1608 'error': error,
1596 1609 'redirect_url': default_redirect_url
1597 1610 }
1598 1611 except (NodeError, NodeAlreadyExistsError) as e:
1599 1612 error = h.escape(e)
1600 1613 h.flash(error, category='error')
1601 1614
1602 1615 return {
1603 1616 'error': error,
1604 1617 'redirect_url': default_redirect_url
1605 1618 }
1606 1619 except Exception:
1607 1620 log.exception('Error occurred during commit')
1608 1621 error = _('Error occurred during commit')
1609 1622 h.flash(error, category='error')
1610 1623 return {
1611 1624 'error': error,
1612 1625 'redirect_url': default_redirect_url
1613 1626 }
1614 1627
1615 1628 return {
1616 1629 'error': None,
1617 1630 'redirect_url': default_redirect_url
1618 1631 }
@@ -1,140 +1,140 b''
1 1 # -*- coding: utf-8 -*-
2 2
3 3 # Copyright (C) 2011-2020 RhodeCode GmbH
4 4 #
5 5 # This program is free software: you can redistribute it and/or modify
6 6 # it under the terms of the GNU Affero General Public License, version 3
7 7 # (only), as published by the Free Software Foundation.
8 8 #
9 9 # This program is distributed in the hope that it will be useful,
10 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 12 # GNU General Public License for more details.
13 13 #
14 14 # You should have received a copy of the GNU Affero General Public License
15 15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
16 16 #
17 17 # This program is dual-licensed. If you wish to learn more about the
18 18 # RhodeCode Enterprise Edition, including its added features, Support services,
19 19 # and proprietary license terms, please see https://rhodecode.com/licenses/
20 20
21 21 import logging
22 22
23 23 from pyramid.httpexceptions import HTTPFound
24 24 from pyramid.view import view_config
25 25
26 26 from rhodecode.apps._base import RepoAppView
27 27 from rhodecode.lib import helpers as h
28 28 from rhodecode.lib import audit_logger
29 29 from rhodecode.lib.auth import (
30 30 LoginRequired, HasRepoPermissionAnyDecorator, CSRFRequired)
31 31 from rhodecode.lib.utils2 import str2bool
32 32 from rhodecode.model.db import User
33 33 from rhodecode.model.forms import RepoPermsForm
34 34 from rhodecode.model.meta import Session
35 35 from rhodecode.model.permission import PermissionModel
36 36 from rhodecode.model.repo import RepoModel
37 37
38 38 log = logging.getLogger(__name__)
39 39
40 40
41 41 class RepoSettingsPermissionsView(RepoAppView):
42 42
43 43 def load_default_context(self):
44 44 c = self._get_local_tmpl_context()
45 45 return c
46 46
47 47 @LoginRequired()
48 48 @HasRepoPermissionAnyDecorator('repository.admin')
49 49 @view_config(
50 50 route_name='edit_repo_perms', request_method='GET',
51 51 renderer='rhodecode:templates/admin/repos/repo_edit.mako')
52 52 def edit_permissions(self):
53 53 _ = self.request.translate
54 54 c = self.load_default_context()
55 55 c.active = 'permissions'
56 56 if self.request.GET.get('branch_permissions'):
57 h.flash(_('Explicitly add user or user group with write+ '
57 h.flash(_('Explicitly add user or user group with write or higher '
58 58 'permission to modify their branch permissions.'),
59 59 category='notice')
60 60 return self._get_template_context(c)
61 61
62 62 @LoginRequired()
63 63 @HasRepoPermissionAnyDecorator('repository.admin')
64 64 @CSRFRequired()
65 65 @view_config(
66 66 route_name='edit_repo_perms', request_method='POST',
67 67 renderer='rhodecode:templates/admin/repos/repo_edit.mako')
68 68 def edit_permissions_update(self):
69 69 _ = self.request.translate
70 70 c = self.load_default_context()
71 71 c.active = 'permissions'
72 72 data = self.request.POST
73 73 # store private flag outside of HTML to verify if we can modify
74 74 # default user permissions, prevents submission of FAKE post data
75 75 # into the form for private repos
76 76 data['repo_private'] = self.db_repo.private
77 77 form = RepoPermsForm(self.request.translate)().to_python(data)
78 78 changes = RepoModel().update_permissions(
79 79 self.db_repo_name, form['perm_additions'], form['perm_updates'],
80 80 form['perm_deletions'])
81 81
82 82 action_data = {
83 83 'added': changes['added'],
84 84 'updated': changes['updated'],
85 85 'deleted': changes['deleted'],
86 86 }
87 87 audit_logger.store_web(
88 88 'repo.edit.permissions', action_data=action_data,
89 89 user=self._rhodecode_user, repo=self.db_repo)
90 90
91 91 Session().commit()
92 92 h.flash(_('Repository access permissions updated'), category='success')
93 93
94 94 affected_user_ids = None
95 95 if changes.get('default_user_changed', False):
96 96 # if we change the default user, we need to flush everyone permissions
97 97 affected_user_ids = User.get_all_user_ids()
98 98 PermissionModel().flush_user_permission_caches(
99 99 changes, affected_user_ids=affected_user_ids)
100 100
101 101 raise HTTPFound(
102 102 h.route_path('edit_repo_perms', repo_name=self.db_repo_name))
103 103
104 104 @LoginRequired()
105 105 @HasRepoPermissionAnyDecorator('repository.admin')
106 106 @CSRFRequired()
107 107 @view_config(
108 108 route_name='edit_repo_perms_set_private', request_method='POST',
109 109 renderer='json_ext')
110 110 def edit_permissions_set_private_repo(self):
111 111 _ = self.request.translate
112 112 self.load_default_context()
113 113
114 114 private_flag = str2bool(self.request.POST.get('private'))
115 115
116 116 try:
117 117 repo = RepoModel().get(self.db_repo.repo_id)
118 118 repo.private = private_flag
119 119 Session().add(repo)
120 120 RepoModel().grant_user_permission(
121 121 repo=self.db_repo, user=User.DEFAULT_USER, perm='repository.none'
122 122 )
123 123
124 124 Session().commit()
125 125
126 126 h.flash(_('Repository `{}` private mode set successfully').format(self.db_repo_name),
127 127 category='success')
128 128 # NOTE(dan): we change repo private mode we need to notify all USERS
129 129 affected_user_ids = User.get_all_user_ids()
130 130 PermissionModel().trigger_permission_flush(affected_user_ids)
131 131
132 132 except Exception:
133 133 log.exception("Exception during update of repository")
134 134 h.flash(_('Error occurred during update of repository {}').format(
135 135 self.db_repo_name), category='error')
136 136
137 137 return {
138 138 'redirect_url': h.route_path('edit_repo_perms', repo_name=self.db_repo_name),
139 139 'private': private_flag
140 140 }
@@ -1,1631 +1,1637 b''
1 1 # -*- coding: utf-8 -*-
2 2
3 3 # Copyright (C) 2011-2020 RhodeCode GmbH
4 4 #
5 5 # This program is free software: you can redistribute it and/or modify
6 6 # it under the terms of the GNU Affero General Public License, version 3
7 7 # (only), as published by the Free Software Foundation.
8 8 #
9 9 # This program is distributed in the hope that it will be useful,
10 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 12 # GNU General Public License for more details.
13 13 #
14 14 # You should have received a copy of the GNU Affero General Public License
15 15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
16 16 #
17 17 # This program is dual-licensed. If you wish to learn more about the
18 18 # RhodeCode Enterprise Edition, including its added features, Support services,
19 19 # and proprietary license terms, please see https://rhodecode.com/licenses/
20 20
21 21 import logging
22 22 import collections
23 23
24 24 import formencode
25 25 import formencode.htmlfill
26 26 import peppercorn
27 27 from pyramid.httpexceptions import (
28 28 HTTPFound, HTTPNotFound, HTTPForbidden, HTTPBadRequest, HTTPConflict)
29 29 from pyramid.view import view_config
30 30 from pyramid.renderers import render
31 31
32 32 from rhodecode.apps._base import RepoAppView, DataGridAppView
33 33
34 34 from rhodecode.lib import helpers as h, diffs, codeblocks, channelstream
35 35 from rhodecode.lib.base import vcs_operation_context
36 36 from rhodecode.lib.diffs import load_cached_diff, cache_diff, diff_cache_exist
37 37 from rhodecode.lib.exceptions import CommentVersionMismatch
38 38 from rhodecode.lib.ext_json import json
39 39 from rhodecode.lib.auth import (
40 40 LoginRequired, HasRepoPermissionAny, HasRepoPermissionAnyDecorator,
41 41 NotAnonymous, CSRFRequired)
42 42 from rhodecode.lib.utils2 import str2bool, safe_str, safe_unicode
43 43 from rhodecode.lib.vcs.backends.base import EmptyCommit, UpdateFailureReason
44 44 from rhodecode.lib.vcs.exceptions import (
45 45 CommitDoesNotExistError, RepositoryRequirementError, EmptyRepositoryError)
46 46 from rhodecode.model.changeset_status import ChangesetStatusModel
47 47 from rhodecode.model.comment import CommentsModel
48 48 from rhodecode.model.db import (
49 49 func, or_, PullRequest, ChangesetComment, ChangesetStatus, Repository)
50 50 from rhodecode.model.forms import PullRequestForm
51 51 from rhodecode.model.meta import Session
52 52 from rhodecode.model.pull_request import PullRequestModel, MergeCheck
53 53 from rhodecode.model.scm import ScmModel
54 54
55 55 log = logging.getLogger(__name__)
56 56
57 57
58 58 class RepoPullRequestsView(RepoAppView, DataGridAppView):
59 59
60 60 def load_default_context(self):
61 61 c = self._get_local_tmpl_context(include_app_defaults=True)
62 62 c.REVIEW_STATUS_APPROVED = ChangesetStatus.STATUS_APPROVED
63 63 c.REVIEW_STATUS_REJECTED = ChangesetStatus.STATUS_REJECTED
64 64 # backward compat., we use for OLD PRs a plain renderer
65 65 c.renderer = 'plain'
66 66 return c
67 67
68 68 def _get_pull_requests_list(
69 69 self, repo_name, source, filter_type, opened_by, statuses):
70 70
71 71 draw, start, limit = self._extract_chunk(self.request)
72 72 search_q, order_by, order_dir = self._extract_ordering(self.request)
73 73 _render = self.request.get_partial_renderer(
74 74 'rhodecode:templates/data_table/_dt_elements.mako')
75 75
76 76 # pagination
77 77
78 78 if filter_type == 'awaiting_review':
79 79 pull_requests = PullRequestModel().get_awaiting_review(
80 80 repo_name, search_q=search_q, source=source, opened_by=opened_by,
81 81 statuses=statuses, offset=start, length=limit,
82 82 order_by=order_by, order_dir=order_dir)
83 83 pull_requests_total_count = PullRequestModel().count_awaiting_review(
84 84 repo_name, search_q=search_q, source=source, statuses=statuses,
85 85 opened_by=opened_by)
86 86 elif filter_type == 'awaiting_my_review':
87 87 pull_requests = PullRequestModel().get_awaiting_my_review(
88 88 repo_name, search_q=search_q, source=source, opened_by=opened_by,
89 89 user_id=self._rhodecode_user.user_id, statuses=statuses,
90 90 offset=start, length=limit, order_by=order_by,
91 91 order_dir=order_dir)
92 92 pull_requests_total_count = PullRequestModel().count_awaiting_my_review(
93 93 repo_name, search_q=search_q, source=source, user_id=self._rhodecode_user.user_id,
94 94 statuses=statuses, opened_by=opened_by)
95 95 else:
96 96 pull_requests = PullRequestModel().get_all(
97 97 repo_name, search_q=search_q, source=source, opened_by=opened_by,
98 98 statuses=statuses, offset=start, length=limit,
99 99 order_by=order_by, order_dir=order_dir)
100 100 pull_requests_total_count = PullRequestModel().count_all(
101 101 repo_name, search_q=search_q, source=source, statuses=statuses,
102 102 opened_by=opened_by)
103 103
104 104 data = []
105 105 comments_model = CommentsModel()
106 106 for pr in pull_requests:
107 107 comments = comments_model.get_all_comments(
108 108 self.db_repo.repo_id, pull_request=pr)
109 109
110 110 data.append({
111 111 'name': _render('pullrequest_name',
112 112 pr.pull_request_id, pr.pull_request_state,
113 113 pr.work_in_progress, pr.target_repo.repo_name),
114 114 'name_raw': pr.pull_request_id,
115 115 'status': _render('pullrequest_status',
116 116 pr.calculated_review_status()),
117 117 'title': _render('pullrequest_title', pr.title, pr.description),
118 118 'description': h.escape(pr.description),
119 119 'updated_on': _render('pullrequest_updated_on',
120 120 h.datetime_to_time(pr.updated_on)),
121 121 'updated_on_raw': h.datetime_to_time(pr.updated_on),
122 122 'created_on': _render('pullrequest_updated_on',
123 123 h.datetime_to_time(pr.created_on)),
124 124 'created_on_raw': h.datetime_to_time(pr.created_on),
125 125 'state': pr.pull_request_state,
126 126 'author': _render('pullrequest_author',
127 127 pr.author.full_contact, ),
128 128 'author_raw': pr.author.full_name,
129 129 'comments': _render('pullrequest_comments', len(comments)),
130 130 'comments_raw': len(comments),
131 131 'closed': pr.is_closed(),
132 132 })
133 133
134 134 data = ({
135 135 'draw': draw,
136 136 'data': data,
137 137 'recordsTotal': pull_requests_total_count,
138 138 'recordsFiltered': pull_requests_total_count,
139 139 })
140 140 return data
141 141
142 142 @LoginRequired()
143 143 @HasRepoPermissionAnyDecorator(
144 144 'repository.read', 'repository.write', 'repository.admin')
145 145 @view_config(
146 146 route_name='pullrequest_show_all', request_method='GET',
147 147 renderer='rhodecode:templates/pullrequests/pullrequests.mako')
148 148 def pull_request_list(self):
149 149 c = self.load_default_context()
150 150
151 151 req_get = self.request.GET
152 152 c.source = str2bool(req_get.get('source'))
153 153 c.closed = str2bool(req_get.get('closed'))
154 154 c.my = str2bool(req_get.get('my'))
155 155 c.awaiting_review = str2bool(req_get.get('awaiting_review'))
156 156 c.awaiting_my_review = str2bool(req_get.get('awaiting_my_review'))
157 157
158 158 c.active = 'open'
159 159 if c.my:
160 160 c.active = 'my'
161 161 if c.closed:
162 162 c.active = 'closed'
163 163 if c.awaiting_review and not c.source:
164 164 c.active = 'awaiting'
165 165 if c.source and not c.awaiting_review:
166 166 c.active = 'source'
167 167 if c.awaiting_my_review:
168 168 c.active = 'awaiting_my'
169 169
170 170 return self._get_template_context(c)
171 171
172 172 @LoginRequired()
173 173 @HasRepoPermissionAnyDecorator(
174 174 'repository.read', 'repository.write', 'repository.admin')
175 175 @view_config(
176 176 route_name='pullrequest_show_all_data', request_method='GET',
177 177 renderer='json_ext', xhr=True)
178 178 def pull_request_list_data(self):
179 179 self.load_default_context()
180 180
181 181 # additional filters
182 182 req_get = self.request.GET
183 183 source = str2bool(req_get.get('source'))
184 184 closed = str2bool(req_get.get('closed'))
185 185 my = str2bool(req_get.get('my'))
186 186 awaiting_review = str2bool(req_get.get('awaiting_review'))
187 187 awaiting_my_review = str2bool(req_get.get('awaiting_my_review'))
188 188
189 189 filter_type = 'awaiting_review' if awaiting_review \
190 190 else 'awaiting_my_review' if awaiting_my_review \
191 191 else None
192 192
193 193 opened_by = None
194 194 if my:
195 195 opened_by = [self._rhodecode_user.user_id]
196 196
197 197 statuses = [PullRequest.STATUS_NEW, PullRequest.STATUS_OPEN]
198 198 if closed:
199 199 statuses = [PullRequest.STATUS_CLOSED]
200 200
201 201 data = self._get_pull_requests_list(
202 202 repo_name=self.db_repo_name, source=source,
203 203 filter_type=filter_type, opened_by=opened_by, statuses=statuses)
204 204
205 205 return data
206 206
207 207 def _is_diff_cache_enabled(self, target_repo):
208 208 caching_enabled = self._get_general_setting(
209 209 target_repo, 'rhodecode_diff_cache')
210 210 log.debug('Diff caching enabled: %s', caching_enabled)
211 211 return caching_enabled
212 212
213 213 def _get_diffset(self, source_repo_name, source_repo,
214 214 ancestor_commit,
215 215 source_ref_id, target_ref_id,
216 216 target_commit, source_commit, diff_limit, file_limit,
217 217 fulldiff, hide_whitespace_changes, diff_context, use_ancestor=True):
218 218
219 219 if use_ancestor:
220 220 # we might want to not use it for versions
221 221 target_ref_id = ancestor_commit.raw_id
222 222
223 223 vcs_diff = PullRequestModel().get_diff(
224 224 source_repo, source_ref_id, target_ref_id,
225 225 hide_whitespace_changes, diff_context)
226 226
227 227 diff_processor = diffs.DiffProcessor(
228 228 vcs_diff, format='newdiff', diff_limit=diff_limit,
229 229 file_limit=file_limit, show_full_diff=fulldiff)
230 230
231 231 _parsed = diff_processor.prepare()
232 232
233 233 diffset = codeblocks.DiffSet(
234 234 repo_name=self.db_repo_name,
235 235 source_repo_name=source_repo_name,
236 236 source_node_getter=codeblocks.diffset_node_getter(target_commit),
237 237 target_node_getter=codeblocks.diffset_node_getter(source_commit),
238 238 )
239 239 diffset = self.path_filter.render_patchset_filtered(
240 240 diffset, _parsed, target_commit.raw_id, source_commit.raw_id)
241 241
242 242 return diffset
243 243
244 244 def _get_range_diffset(self, source_scm, source_repo,
245 245 commit1, commit2, diff_limit, file_limit,
246 246 fulldiff, hide_whitespace_changes, diff_context):
247 247 vcs_diff = source_scm.get_diff(
248 248 commit1, commit2,
249 249 ignore_whitespace=hide_whitespace_changes,
250 250 context=diff_context)
251 251
252 252 diff_processor = diffs.DiffProcessor(
253 253 vcs_diff, format='newdiff', diff_limit=diff_limit,
254 254 file_limit=file_limit, show_full_diff=fulldiff)
255 255
256 256 _parsed = diff_processor.prepare()
257 257
258 258 diffset = codeblocks.DiffSet(
259 259 repo_name=source_repo.repo_name,
260 260 source_node_getter=codeblocks.diffset_node_getter(commit1),
261 261 target_node_getter=codeblocks.diffset_node_getter(commit2))
262 262
263 263 diffset = self.path_filter.render_patchset_filtered(
264 264 diffset, _parsed, commit1.raw_id, commit2.raw_id)
265 265
266 266 return diffset
267 267
268 268 @LoginRequired()
269 269 @HasRepoPermissionAnyDecorator(
270 270 'repository.read', 'repository.write', 'repository.admin')
271 271 @view_config(
272 272 route_name='pullrequest_show', request_method='GET',
273 273 renderer='rhodecode:templates/pullrequests/pullrequest_show.mako')
274 274 def pull_request_show(self):
275 275 _ = self.request.translate
276 276 c = self.load_default_context()
277 277
278 278 pull_request = PullRequest.get_or_404(
279 279 self.request.matchdict['pull_request_id'])
280 280 pull_request_id = pull_request.pull_request_id
281 281
282 282 c.state_progressing = pull_request.is_state_changing()
283 283
284 284 _new_state = {
285 285 'created': PullRequest.STATE_CREATED,
286 286 }.get(self.request.GET.get('force_state'))
287 287
288 288 if c.is_super_admin and _new_state:
289 289 with pull_request.set_state(PullRequest.STATE_UPDATING, final_state=_new_state):
290 290 h.flash(
291 291 _('Pull Request state was force changed to `{}`').format(_new_state),
292 292 category='success')
293 293 Session().commit()
294 294
295 295 raise HTTPFound(h.route_path(
296 296 'pullrequest_show', repo_name=self.db_repo_name,
297 297 pull_request_id=pull_request_id))
298 298
299 299 version = self.request.GET.get('version')
300 300 from_version = self.request.GET.get('from_version') or version
301 301 merge_checks = self.request.GET.get('merge_checks')
302 302 c.fulldiff = str2bool(self.request.GET.get('fulldiff'))
303 303
304 304 # fetch global flags of ignore ws or context lines
305 305 diff_context = diffs.get_diff_context(self.request)
306 306 hide_whitespace_changes = diffs.get_diff_whitespace_flag(self.request)
307 307
308 308 force_refresh = str2bool(self.request.GET.get('force_refresh'))
309 309
310 310 (pull_request_latest,
311 311 pull_request_at_ver,
312 312 pull_request_display_obj,
313 313 at_version) = PullRequestModel().get_pr_version(
314 314 pull_request_id, version=version)
315 315 pr_closed = pull_request_latest.is_closed()
316 316
317 317 if pr_closed and (version or from_version):
318 318 # not allow to browse versions
319 319 raise HTTPFound(h.route_path(
320 320 'pullrequest_show', repo_name=self.db_repo_name,
321 321 pull_request_id=pull_request_id))
322 322
323 323 versions = pull_request_display_obj.versions()
324 324 # used to store per-commit range diffs
325 325 c.changes = collections.OrderedDict()
326 326 c.range_diff_on = self.request.GET.get('range-diff') == "1"
327 327
328 328 c.at_version = at_version
329 329 c.at_version_num = (at_version
330 330 if at_version and at_version != 'latest'
331 331 else None)
332 332 c.at_version_pos = ChangesetComment.get_index_from_version(
333 333 c.at_version_num, versions)
334 334
335 335 (prev_pull_request_latest,
336 336 prev_pull_request_at_ver,
337 337 prev_pull_request_display_obj,
338 338 prev_at_version) = PullRequestModel().get_pr_version(
339 339 pull_request_id, version=from_version)
340 340
341 341 c.from_version = prev_at_version
342 342 c.from_version_num = (prev_at_version
343 343 if prev_at_version and prev_at_version != 'latest'
344 344 else None)
345 345 c.from_version_pos = ChangesetComment.get_index_from_version(
346 346 c.from_version_num, versions)
347 347
348 348 # define if we're in COMPARE mode or VIEW at version mode
349 349 compare = at_version != prev_at_version
350 350
351 351 # pull_requests repo_name we opened it against
352 352 # ie. target_repo must match
353 353 if self.db_repo_name != pull_request_at_ver.target_repo.repo_name:
354 354 raise HTTPNotFound()
355 355
356 356 c.shadow_clone_url = PullRequestModel().get_shadow_clone_url(
357 357 pull_request_at_ver)
358 358
359 359 c.pull_request = pull_request_display_obj
360 360 c.renderer = pull_request_at_ver.description_renderer or c.renderer
361 361 c.pull_request_latest = pull_request_latest
362 362
363 363 if compare or (at_version and not at_version == 'latest'):
364 364 c.allowed_to_change_status = False
365 365 c.allowed_to_update = False
366 366 c.allowed_to_merge = False
367 367 c.allowed_to_delete = False
368 368 c.allowed_to_comment = False
369 369 c.allowed_to_close = False
370 370 else:
371 371 can_change_status = PullRequestModel().check_user_change_status(
372 372 pull_request_at_ver, self._rhodecode_user)
373 373 c.allowed_to_change_status = can_change_status and not pr_closed
374 374
375 375 c.allowed_to_update = PullRequestModel().check_user_update(
376 376 pull_request_latest, self._rhodecode_user) and not pr_closed
377 377 c.allowed_to_merge = PullRequestModel().check_user_merge(
378 378 pull_request_latest, self._rhodecode_user) and not pr_closed
379 379 c.allowed_to_delete = PullRequestModel().check_user_delete(
380 380 pull_request_latest, self._rhodecode_user) and not pr_closed
381 381 c.allowed_to_comment = not pr_closed
382 382 c.allowed_to_close = c.allowed_to_merge and not pr_closed
383 383
384 384 c.forbid_adding_reviewers = False
385 385 c.forbid_author_to_review = False
386 386 c.forbid_commit_author_to_review = False
387 387
388 388 if pull_request_latest.reviewer_data and \
389 389 'rules' in pull_request_latest.reviewer_data:
390 390 rules = pull_request_latest.reviewer_data['rules'] or {}
391 391 try:
392 392 c.forbid_adding_reviewers = rules.get(
393 393 'forbid_adding_reviewers')
394 394 c.forbid_author_to_review = rules.get(
395 395 'forbid_author_to_review')
396 396 c.forbid_commit_author_to_review = rules.get(
397 397 'forbid_commit_author_to_review')
398 398 except Exception:
399 399 pass
400 400
401 401 # check merge capabilities
402 402 _merge_check = MergeCheck.validate(
403 403 pull_request_latest, auth_user=self._rhodecode_user,
404 404 translator=self.request.translate,
405 405 force_shadow_repo_refresh=force_refresh)
406 406
407 407 c.pr_merge_errors = _merge_check.error_details
408 408 c.pr_merge_possible = not _merge_check.failed
409 409 c.pr_merge_message = _merge_check.merge_msg
410 410 c.pr_merge_source_commit = _merge_check.source_commit
411 411 c.pr_merge_target_commit = _merge_check.target_commit
412 412
413 413 c.pr_merge_info = MergeCheck.get_merge_conditions(
414 414 pull_request_latest, translator=self.request.translate)
415 415
416 416 c.pull_request_review_status = _merge_check.review_status
417 417 if merge_checks:
418 418 self.request.override_renderer = \
419 419 'rhodecode:templates/pullrequests/pullrequest_merge_checks.mako'
420 420 return self._get_template_context(c)
421 421
422 422 comments_model = CommentsModel()
423 423
424 424 # reviewers and statuses
425 425 c.pull_request_reviewers = pull_request_at_ver.reviewers_statuses()
426 426 allowed_reviewers = [x[0].user_id for x in c.pull_request_reviewers]
427 427
428 428 # GENERAL COMMENTS with versions #
429 429 q = comments_model._all_general_comments_of_pull_request(pull_request_latest)
430 430 q = q.order_by(ChangesetComment.comment_id.asc())
431 431 general_comments = q
432 432
433 433 # pick comments we want to render at current version
434 434 c.comment_versions = comments_model.aggregate_comments(
435 435 general_comments, versions, c.at_version_num)
436 436 c.comments = c.comment_versions[c.at_version_num]['until']
437 437
438 438 # INLINE COMMENTS with versions #
439 439 q = comments_model._all_inline_comments_of_pull_request(pull_request_latest)
440 440 q = q.order_by(ChangesetComment.comment_id.asc())
441 441 inline_comments = q
442 442
443 443 c.inline_versions = comments_model.aggregate_comments(
444 444 inline_comments, versions, c.at_version_num, inline=True)
445 445
446 446 # TODOs
447 447 c.unresolved_comments = CommentsModel() \
448 448 .get_pull_request_unresolved_todos(pull_request)
449 449 c.resolved_comments = CommentsModel() \
450 450 .get_pull_request_resolved_todos(pull_request)
451 451
452 452 # inject latest version
453 453 latest_ver = PullRequest.get_pr_display_object(
454 454 pull_request_latest, pull_request_latest)
455 455
456 456 c.versions = versions + [latest_ver]
457 457
458 458 # if we use version, then do not show later comments
459 459 # than current version
460 460 display_inline_comments = collections.defaultdict(
461 461 lambda: collections.defaultdict(list))
462 462 for co in inline_comments:
463 463 if c.at_version_num:
464 464 # pick comments that are at least UPTO given version, so we
465 465 # don't render comments for higher version
466 466 should_render = co.pull_request_version_id and \
467 467 co.pull_request_version_id <= c.at_version_num
468 468 else:
469 469 # showing all, for 'latest'
470 470 should_render = True
471 471
472 472 if should_render:
473 473 display_inline_comments[co.f_path][co.line_no].append(co)
474 474
475 475 # load diff data into template context, if we use compare mode then
476 476 # diff is calculated based on changes between versions of PR
477 477
478 478 source_repo = pull_request_at_ver.source_repo
479 479 source_ref_id = pull_request_at_ver.source_ref_parts.commit_id
480 480
481 481 target_repo = pull_request_at_ver.target_repo
482 482 target_ref_id = pull_request_at_ver.target_ref_parts.commit_id
483 483
484 484 if compare:
485 485 # in compare switch the diff base to latest commit from prev version
486 486 target_ref_id = prev_pull_request_display_obj.revisions[0]
487 487
488 488 # despite opening commits for bookmarks/branches/tags, we always
489 489 # convert this to rev to prevent changes after bookmark or branch change
490 490 c.source_ref_type = 'rev'
491 491 c.source_ref = source_ref_id
492 492
493 493 c.target_ref_type = 'rev'
494 494 c.target_ref = target_ref_id
495 495
496 496 c.source_repo = source_repo
497 497 c.target_repo = target_repo
498 498
499 499 c.commit_ranges = []
500 500 source_commit = EmptyCommit()
501 501 target_commit = EmptyCommit()
502 502 c.missing_requirements = False
503 503
504 504 source_scm = source_repo.scm_instance()
505 505 target_scm = target_repo.scm_instance()
506 506
507 507 shadow_scm = None
508 508 try:
509 509 shadow_scm = pull_request_latest.get_shadow_repo()
510 510 except Exception:
511 511 log.debug('Failed to get shadow repo', exc_info=True)
512 512 # try first the existing source_repo, and then shadow
513 513 # repo if we can obtain one
514 514 commits_source_repo = source_scm
515 515 if shadow_scm:
516 516 commits_source_repo = shadow_scm
517 517
518 518 c.commits_source_repo = commits_source_repo
519 519 c.ancestor = None # set it to None, to hide it from PR view
520 520
521 521 # empty version means latest, so we keep this to prevent
522 522 # double caching
523 523 version_normalized = version or 'latest'
524 524 from_version_normalized = from_version or 'latest'
525 525
526 526 cache_path = self.rhodecode_vcs_repo.get_create_shadow_cache_pr_path(target_repo)
527 527 cache_file_path = diff_cache_exist(
528 528 cache_path, 'pull_request', pull_request_id, version_normalized,
529 529 from_version_normalized, source_ref_id, target_ref_id,
530 530 hide_whitespace_changes, diff_context, c.fulldiff)
531 531
532 532 caching_enabled = self._is_diff_cache_enabled(c.target_repo)
533 533 force_recache = self.get_recache_flag()
534 534
535 535 cached_diff = None
536 536 if caching_enabled:
537 537 cached_diff = load_cached_diff(cache_file_path)
538 538
539 539 has_proper_commit_cache = (
540 540 cached_diff and cached_diff.get('commits')
541 541 and len(cached_diff.get('commits', [])) == 5
542 542 and cached_diff.get('commits')[0]
543 543 and cached_diff.get('commits')[3])
544 544
545 545 if not force_recache and not c.range_diff_on and has_proper_commit_cache:
546 546 diff_commit_cache = \
547 547 (ancestor_commit, commit_cache, missing_requirements,
548 548 source_commit, target_commit) = cached_diff['commits']
549 549 else:
550 550 # NOTE(marcink): we reach potentially unreachable errors when a PR has
551 551 # merge errors resulting in potentially hidden commits in the shadow repo.
552 552 maybe_unreachable = _merge_check.MERGE_CHECK in _merge_check.error_details \
553 553 and _merge_check.merge_response
554 554 maybe_unreachable = maybe_unreachable \
555 555 and _merge_check.merge_response.metadata.get('unresolved_files')
556 556 log.debug("Using unreachable commits due to MERGE_CHECK in merge simulation")
557 557 diff_commit_cache = \
558 558 (ancestor_commit, commit_cache, missing_requirements,
559 559 source_commit, target_commit) = self.get_commits(
560 560 commits_source_repo,
561 561 pull_request_at_ver,
562 562 source_commit,
563 563 source_ref_id,
564 564 source_scm,
565 565 target_commit,
566 566 target_ref_id,
567 567 target_scm,
568 568 maybe_unreachable=maybe_unreachable)
569 569
570 570 # register our commit range
571 571 for comm in commit_cache.values():
572 572 c.commit_ranges.append(comm)
573 573
574 574 c.missing_requirements = missing_requirements
575 575 c.ancestor_commit = ancestor_commit
576 576 c.statuses = source_repo.statuses(
577 577 [x.raw_id for x in c.commit_ranges])
578 578
579 579 # auto collapse if we have more than limit
580 580 collapse_limit = diffs.DiffProcessor._collapse_commits_over
581 581 c.collapse_all_commits = len(c.commit_ranges) > collapse_limit
582 582 c.compare_mode = compare
583 583
584 584 # diff_limit is the old behavior, will cut off the whole diff
585 585 # if the limit is applied otherwise will just hide the
586 586 # big files from the front-end
587 587 diff_limit = c.visual.cut_off_limit_diff
588 588 file_limit = c.visual.cut_off_limit_file
589 589
590 590 c.missing_commits = False
591 591 if (c.missing_requirements
592 592 or isinstance(source_commit, EmptyCommit)
593 593 or source_commit == target_commit):
594 594
595 595 c.missing_commits = True
596 596 else:
597 597 c.inline_comments = display_inline_comments
598 598
599 599 use_ancestor = True
600 600 if from_version_normalized != version_normalized:
601 601 use_ancestor = False
602 602
603 603 has_proper_diff_cache = cached_diff and cached_diff.get('commits')
604 604 if not force_recache and has_proper_diff_cache:
605 605 c.diffset = cached_diff['diff']
606 606 else:
607 c.diffset = self._get_diffset(
608 c.source_repo.repo_name, commits_source_repo,
609 c.ancestor_commit,
610 source_ref_id, target_ref_id,
611 target_commit, source_commit,
612 diff_limit, file_limit, c.fulldiff,
613 hide_whitespace_changes, diff_context,
614 use_ancestor=use_ancestor
615 )
616
617 # save cached diff
618 if caching_enabled:
619 cache_diff(cache_file_path, c.diffset, diff_commit_cache)
620
621 c.limited_diff = c.diffset.limited_diff
622
623 # calculate removed files that are bound to comments
624 comment_deleted_files = [
625 fname for fname in display_inline_comments
626 if fname not in c.diffset.file_stats]
627
628 c.deleted_files_comments = collections.defaultdict(dict)
629 for fname, per_line_comments in display_inline_comments.items():
630 if fname in comment_deleted_files:
631 c.deleted_files_comments[fname]['stats'] = 0
632 c.deleted_files_comments[fname]['comments'] = list()
633 for lno, comments in per_line_comments.items():
634 c.deleted_files_comments[fname]['comments'].extend(comments)
635
636 # maybe calculate the range diff
637 if c.range_diff_on:
638 # TODO(marcink): set whitespace/context
639 context_lcl = 3
640 ign_whitespace_lcl = False
641
642 for commit in c.commit_ranges:
643 commit2 = commit
644 commit1 = commit.first_parent
645
646 range_diff_cache_file_path = diff_cache_exist(
647 cache_path, 'diff', commit.raw_id,
648 ign_whitespace_lcl, context_lcl, c.fulldiff)
649
650 cached_diff = None
651 if caching_enabled:
652 cached_diff = load_cached_diff(range_diff_cache_file_path)
653
654 has_proper_diff_cache = cached_diff and cached_diff.get('diff')
655 if not force_recache and has_proper_diff_cache:
656 diffset = cached_diff['diff']
657 else:
658 diffset = self._get_range_diffset(
659 commits_source_repo, source_repo,
660 commit1, commit2, diff_limit, file_limit,
661 c.fulldiff, ign_whitespace_lcl, context_lcl
662 )
607 try:
608 c.diffset = self._get_diffset(
609 c.source_repo.repo_name, commits_source_repo,
610 c.ancestor_commit,
611 source_ref_id, target_ref_id,
612 target_commit, source_commit,
613 diff_limit, file_limit, c.fulldiff,
614 hide_whitespace_changes, diff_context,
615 use_ancestor=use_ancestor
616 )
663 617
664 618 # save cached diff
665 619 if caching_enabled:
666 cache_diff(range_diff_cache_file_path, diffset, None)
620 cache_diff(cache_file_path, c.diffset, diff_commit_cache)
621 except CommitDoesNotExistError:
622 log.exception('Failed to generate diffset')
623 c.missing_commits = True
624
625 if not c.missing_commits:
626
627 c.limited_diff = c.diffset.limited_diff
628
629 # calculate removed files that are bound to comments
630 comment_deleted_files = [
631 fname for fname in display_inline_comments
632 if fname not in c.diffset.file_stats]
633
634 c.deleted_files_comments = collections.defaultdict(dict)
635 for fname, per_line_comments in display_inline_comments.items():
636 if fname in comment_deleted_files:
637 c.deleted_files_comments[fname]['stats'] = 0
638 c.deleted_files_comments[fname]['comments'] = list()
639 for lno, comments in per_line_comments.items():
640 c.deleted_files_comments[fname]['comments'].extend(comments)
641
642 # maybe calculate the range diff
643 if c.range_diff_on:
644 # TODO(marcink): set whitespace/context
645 context_lcl = 3
646 ign_whitespace_lcl = False
667 647
668 c.changes[commit.raw_id] = diffset
648 for commit in c.commit_ranges:
649 commit2 = commit
650 commit1 = commit.first_parent
651
652 range_diff_cache_file_path = diff_cache_exist(
653 cache_path, 'diff', commit.raw_id,
654 ign_whitespace_lcl, context_lcl, c.fulldiff)
655
656 cached_diff = None
657 if caching_enabled:
658 cached_diff = load_cached_diff(range_diff_cache_file_path)
659
660 has_proper_diff_cache = cached_diff and cached_diff.get('diff')
661 if not force_recache and has_proper_diff_cache:
662 diffset = cached_diff['diff']
663 else:
664 diffset = self._get_range_diffset(
665 commits_source_repo, source_repo,
666 commit1, commit2, diff_limit, file_limit,
667 c.fulldiff, ign_whitespace_lcl, context_lcl
668 )
669
670 # save cached diff
671 if caching_enabled:
672 cache_diff(range_diff_cache_file_path, diffset, None)
673
674 c.changes[commit.raw_id] = diffset
669 675
670 676 # this is a hack to properly display links, when creating PR, the
671 677 # compare view and others uses different notation, and
672 678 # compare_commits.mako renders links based on the target_repo.
673 679 # We need to swap that here to generate it properly on the html side
674 680 c.target_repo = c.source_repo
675 681
676 682 c.commit_statuses = ChangesetStatus.STATUSES
677 683
678 684 c.show_version_changes = not pr_closed
679 685 if c.show_version_changes:
680 686 cur_obj = pull_request_at_ver
681 687 prev_obj = prev_pull_request_at_ver
682 688
683 689 old_commit_ids = prev_obj.revisions
684 690 new_commit_ids = cur_obj.revisions
685 691 commit_changes = PullRequestModel()._calculate_commit_id_changes(
686 692 old_commit_ids, new_commit_ids)
687 693 c.commit_changes_summary = commit_changes
688 694
689 695 # calculate the diff for commits between versions
690 696 c.commit_changes = []
691 697
692 698 def mark(cs, fw):
693 699 return list(h.itertools.izip_longest([], cs, fillvalue=fw))
694 700
695 701 for c_type, raw_id in mark(commit_changes.added, 'a') \
696 702 + mark(commit_changes.removed, 'r') \
697 703 + mark(commit_changes.common, 'c'):
698 704
699 705 if raw_id in commit_cache:
700 706 commit = commit_cache[raw_id]
701 707 else:
702 708 try:
703 709 commit = commits_source_repo.get_commit(raw_id)
704 710 except CommitDoesNotExistError:
705 711 # in case we fail extracting still use "dummy" commit
706 712 # for display in commit diff
707 713 commit = h.AttributeDict(
708 714 {'raw_id': raw_id,
709 715 'message': 'EMPTY or MISSING COMMIT'})
710 716 c.commit_changes.append([c_type, commit])
711 717
712 718 # current user review statuses for each version
713 719 c.review_versions = {}
714 720 if self._rhodecode_user.user_id in allowed_reviewers:
715 721 for co in general_comments:
716 722 if co.author.user_id == self._rhodecode_user.user_id:
717 723 status = co.status_change
718 724 if status:
719 725 _ver_pr = status[0].comment.pull_request_version_id
720 726 c.review_versions[_ver_pr] = status[0]
721 727
722 728 return self._get_template_context(c)
723 729
724 730 def get_commits(
725 731 self, commits_source_repo, pull_request_at_ver, source_commit,
726 732 source_ref_id, source_scm, target_commit, target_ref_id, target_scm,
727 733 maybe_unreachable=False):
728 734
729 735 commit_cache = collections.OrderedDict()
730 736 missing_requirements = False
731 737
732 738 try:
733 739 pre_load = ["author", "date", "message", "branch", "parents"]
734 740
735 741 pull_request_commits = pull_request_at_ver.revisions
736 742 log.debug('Loading %s commits from %s',
737 743 len(pull_request_commits), commits_source_repo)
738 744
739 745 for rev in pull_request_commits:
740 746 comm = commits_source_repo.get_commit(commit_id=rev, pre_load=pre_load,
741 747 maybe_unreachable=maybe_unreachable)
742 748 commit_cache[comm.raw_id] = comm
743 749
744 750 # Order here matters, we first need to get target, and then
745 751 # the source
746 752 target_commit = commits_source_repo.get_commit(
747 753 commit_id=safe_str(target_ref_id))
748 754
749 755 source_commit = commits_source_repo.get_commit(
750 756 commit_id=safe_str(source_ref_id), maybe_unreachable=True)
751 757 except CommitDoesNotExistError:
752 758 log.warning('Failed to get commit from `{}` repo'.format(
753 759 commits_source_repo), exc_info=True)
754 760 except RepositoryRequirementError:
755 761 log.warning('Failed to get all required data from repo', exc_info=True)
756 762 missing_requirements = True
757 763
758 764 pr_ancestor_id = pull_request_at_ver.common_ancestor_id
759 765
760 766 try:
761 767 ancestor_commit = source_scm.get_commit(pr_ancestor_id)
762 768 except Exception:
763 769 ancestor_commit = None
764 770
765 771 return ancestor_commit, commit_cache, missing_requirements, source_commit, target_commit
766 772
767 773 def assure_not_empty_repo(self):
768 774 _ = self.request.translate
769 775
770 776 try:
771 777 self.db_repo.scm_instance().get_commit()
772 778 except EmptyRepositoryError:
773 779 h.flash(h.literal(_('There are no commits yet')),
774 780 category='warning')
775 781 raise HTTPFound(
776 782 h.route_path('repo_summary', repo_name=self.db_repo.repo_name))
777 783
778 784 @LoginRequired()
779 785 @NotAnonymous()
780 786 @HasRepoPermissionAnyDecorator(
781 787 'repository.read', 'repository.write', 'repository.admin')
782 788 @view_config(
783 789 route_name='pullrequest_new', request_method='GET',
784 790 renderer='rhodecode:templates/pullrequests/pullrequest.mako')
785 791 def pull_request_new(self):
786 792 _ = self.request.translate
787 793 c = self.load_default_context()
788 794
789 795 self.assure_not_empty_repo()
790 796 source_repo = self.db_repo
791 797
792 798 commit_id = self.request.GET.get('commit')
793 799 branch_ref = self.request.GET.get('branch')
794 800 bookmark_ref = self.request.GET.get('bookmark')
795 801
796 802 try:
797 803 source_repo_data = PullRequestModel().generate_repo_data(
798 804 source_repo, commit_id=commit_id,
799 805 branch=branch_ref, bookmark=bookmark_ref,
800 806 translator=self.request.translate)
801 807 except CommitDoesNotExistError as e:
802 808 log.exception(e)
803 809 h.flash(_('Commit does not exist'), 'error')
804 810 raise HTTPFound(
805 811 h.route_path('pullrequest_new', repo_name=source_repo.repo_name))
806 812
807 813 default_target_repo = source_repo
808 814
809 815 if source_repo.parent and c.has_origin_repo_read_perm:
810 816 parent_vcs_obj = source_repo.parent.scm_instance()
811 817 if parent_vcs_obj and not parent_vcs_obj.is_empty():
812 818 # change default if we have a parent repo
813 819 default_target_repo = source_repo.parent
814 820
815 821 target_repo_data = PullRequestModel().generate_repo_data(
816 822 default_target_repo, translator=self.request.translate)
817 823
818 824 selected_source_ref = source_repo_data['refs']['selected_ref']
819 825 title_source_ref = ''
820 826 if selected_source_ref:
821 827 title_source_ref = selected_source_ref.split(':', 2)[1]
822 828 c.default_title = PullRequestModel().generate_pullrequest_title(
823 829 source=source_repo.repo_name,
824 830 source_ref=title_source_ref,
825 831 target=default_target_repo.repo_name
826 832 )
827 833
828 834 c.default_repo_data = {
829 835 'source_repo_name': source_repo.repo_name,
830 836 'source_refs_json': json.dumps(source_repo_data),
831 837 'target_repo_name': default_target_repo.repo_name,
832 838 'target_refs_json': json.dumps(target_repo_data),
833 839 }
834 840 c.default_source_ref = selected_source_ref
835 841
836 842 return self._get_template_context(c)
837 843
838 844 @LoginRequired()
839 845 @NotAnonymous()
840 846 @HasRepoPermissionAnyDecorator(
841 847 'repository.read', 'repository.write', 'repository.admin')
842 848 @view_config(
843 849 route_name='pullrequest_repo_refs', request_method='GET',
844 850 renderer='json_ext', xhr=True)
845 851 def pull_request_repo_refs(self):
846 852 self.load_default_context()
847 853 target_repo_name = self.request.matchdict['target_repo_name']
848 854 repo = Repository.get_by_repo_name(target_repo_name)
849 855 if not repo:
850 856 raise HTTPNotFound()
851 857
852 858 target_perm = HasRepoPermissionAny(
853 859 'repository.read', 'repository.write', 'repository.admin')(
854 860 target_repo_name)
855 861 if not target_perm:
856 862 raise HTTPNotFound()
857 863
858 864 return PullRequestModel().generate_repo_data(
859 865 repo, translator=self.request.translate)
860 866
861 867 @LoginRequired()
862 868 @NotAnonymous()
863 869 @HasRepoPermissionAnyDecorator(
864 870 'repository.read', 'repository.write', 'repository.admin')
865 871 @view_config(
866 872 route_name='pullrequest_repo_targets', request_method='GET',
867 873 renderer='json_ext', xhr=True)
868 874 def pullrequest_repo_targets(self):
869 875 _ = self.request.translate
870 876 filter_query = self.request.GET.get('query')
871 877
872 878 # get the parents
873 879 parent_target_repos = []
874 880 if self.db_repo.parent:
875 881 parents_query = Repository.query() \
876 882 .order_by(func.length(Repository.repo_name)) \
877 883 .filter(Repository.fork_id == self.db_repo.parent.repo_id)
878 884
879 885 if filter_query:
880 886 ilike_expression = u'%{}%'.format(safe_unicode(filter_query))
881 887 parents_query = parents_query.filter(
882 888 Repository.repo_name.ilike(ilike_expression))
883 889 parents = parents_query.limit(20).all()
884 890
885 891 for parent in parents:
886 892 parent_vcs_obj = parent.scm_instance()
887 893 if parent_vcs_obj and not parent_vcs_obj.is_empty():
888 894 parent_target_repos.append(parent)
889 895
890 896 # get other forks, and repo itself
891 897 query = Repository.query() \
892 898 .order_by(func.length(Repository.repo_name)) \
893 899 .filter(
894 900 or_(Repository.repo_id == self.db_repo.repo_id, # repo itself
895 901 Repository.fork_id == self.db_repo.repo_id) # forks of this repo
896 902 ) \
897 903 .filter(~Repository.repo_id.in_([x.repo_id for x in parent_target_repos]))
898 904
899 905 if filter_query:
900 906 ilike_expression = u'%{}%'.format(safe_unicode(filter_query))
901 907 query = query.filter(Repository.repo_name.ilike(ilike_expression))
902 908
903 909 limit = max(20 - len(parent_target_repos), 5) # not less then 5
904 910 target_repos = query.limit(limit).all()
905 911
906 912 all_target_repos = target_repos + parent_target_repos
907 913
908 914 repos = []
909 915 # This checks permissions to the repositories
910 916 for obj in ScmModel().get_repos(all_target_repos):
911 917 repos.append({
912 918 'id': obj['name'],
913 919 'text': obj['name'],
914 920 'type': 'repo',
915 921 'repo_id': obj['dbrepo']['repo_id'],
916 922 'repo_type': obj['dbrepo']['repo_type'],
917 923 'private': obj['dbrepo']['private'],
918 924
919 925 })
920 926
921 927 data = {
922 928 'more': False,
923 929 'results': [{
924 930 'text': _('Repositories'),
925 931 'children': repos
926 932 }] if repos else []
927 933 }
928 934 return data
929 935
930 936 @LoginRequired()
931 937 @NotAnonymous()
932 938 @HasRepoPermissionAnyDecorator(
933 939 'repository.read', 'repository.write', 'repository.admin')
934 940 @CSRFRequired()
935 941 @view_config(
936 942 route_name='pullrequest_create', request_method='POST',
937 943 renderer=None)
938 944 def pull_request_create(self):
939 945 _ = self.request.translate
940 946 self.assure_not_empty_repo()
941 947 self.load_default_context()
942 948
943 949 controls = peppercorn.parse(self.request.POST.items())
944 950
945 951 try:
946 952 form = PullRequestForm(
947 953 self.request.translate, self.db_repo.repo_id)()
948 954 _form = form.to_python(controls)
949 955 except formencode.Invalid as errors:
950 956 if errors.error_dict.get('revisions'):
951 957 msg = 'Revisions: %s' % errors.error_dict['revisions']
952 958 elif errors.error_dict.get('pullrequest_title'):
953 959 msg = errors.error_dict.get('pullrequest_title')
954 960 else:
955 961 msg = _('Error creating pull request: {}').format(errors)
956 962 log.exception(msg)
957 963 h.flash(msg, 'error')
958 964
959 965 # would rather just go back to form ...
960 966 raise HTTPFound(
961 967 h.route_path('pullrequest_new', repo_name=self.db_repo_name))
962 968
963 969 source_repo = _form['source_repo']
964 970 source_ref = _form['source_ref']
965 971 target_repo = _form['target_repo']
966 972 target_ref = _form['target_ref']
967 973 commit_ids = _form['revisions'][::-1]
968 974 common_ancestor_id = _form['common_ancestor']
969 975
970 976 # find the ancestor for this pr
971 977 source_db_repo = Repository.get_by_repo_name(_form['source_repo'])
972 978 target_db_repo = Repository.get_by_repo_name(_form['target_repo'])
973 979
974 980 if not (source_db_repo or target_db_repo):
975 981 h.flash(_('source_repo or target repo not found'), category='error')
976 982 raise HTTPFound(
977 983 h.route_path('pullrequest_new', repo_name=self.db_repo_name))
978 984
979 985 # re-check permissions again here
980 986 # source_repo we must have read permissions
981 987
982 988 source_perm = HasRepoPermissionAny(
983 989 'repository.read', 'repository.write', 'repository.admin')(
984 990 source_db_repo.repo_name)
985 991 if not source_perm:
986 992 msg = _('Not Enough permissions to source repo `{}`.'.format(
987 993 source_db_repo.repo_name))
988 994 h.flash(msg, category='error')
989 995 # copy the args back to redirect
990 996 org_query = self.request.GET.mixed()
991 997 raise HTTPFound(
992 998 h.route_path('pullrequest_new', repo_name=self.db_repo_name,
993 999 _query=org_query))
994 1000
995 1001 # target repo we must have read permissions, and also later on
996 1002 # we want to check branch permissions here
997 1003 target_perm = HasRepoPermissionAny(
998 1004 'repository.read', 'repository.write', 'repository.admin')(
999 1005 target_db_repo.repo_name)
1000 1006 if not target_perm:
1001 1007 msg = _('Not Enough permissions to target repo `{}`.'.format(
1002 1008 target_db_repo.repo_name))
1003 1009 h.flash(msg, category='error')
1004 1010 # copy the args back to redirect
1005 1011 org_query = self.request.GET.mixed()
1006 1012 raise HTTPFound(
1007 1013 h.route_path('pullrequest_new', repo_name=self.db_repo_name,
1008 1014 _query=org_query))
1009 1015
1010 1016 source_scm = source_db_repo.scm_instance()
1011 1017 target_scm = target_db_repo.scm_instance()
1012 1018
1013 1019 source_commit = source_scm.get_commit(source_ref.split(':')[-1])
1014 1020 target_commit = target_scm.get_commit(target_ref.split(':')[-1])
1015 1021
1016 1022 ancestor = source_scm.get_common_ancestor(
1017 1023 source_commit.raw_id, target_commit.raw_id, target_scm)
1018 1024
1019 1025 # recalculate target ref based on ancestor
1020 1026 target_ref_type, target_ref_name, __ = _form['target_ref'].split(':')
1021 1027 target_ref = ':'.join((target_ref_type, target_ref_name, ancestor))
1022 1028
1023 1029 get_default_reviewers_data, validate_default_reviewers = \
1024 1030 PullRequestModel().get_reviewer_functions()
1025 1031
1026 1032 # recalculate reviewers logic, to make sure we can validate this
1027 1033 reviewer_rules = get_default_reviewers_data(
1028 1034 self._rhodecode_db_user, source_db_repo,
1029 1035 source_commit, target_db_repo, target_commit)
1030 1036
1031 1037 given_reviewers = _form['review_members']
1032 1038 reviewers = validate_default_reviewers(
1033 1039 given_reviewers, reviewer_rules)
1034 1040
1035 1041 pullrequest_title = _form['pullrequest_title']
1036 1042 title_source_ref = source_ref.split(':', 2)[1]
1037 1043 if not pullrequest_title:
1038 1044 pullrequest_title = PullRequestModel().generate_pullrequest_title(
1039 1045 source=source_repo,
1040 1046 source_ref=title_source_ref,
1041 1047 target=target_repo
1042 1048 )
1043 1049
1044 1050 description = _form['pullrequest_desc']
1045 1051 description_renderer = _form['description_renderer']
1046 1052
1047 1053 try:
1048 1054 pull_request = PullRequestModel().create(
1049 1055 created_by=self._rhodecode_user.user_id,
1050 1056 source_repo=source_repo,
1051 1057 source_ref=source_ref,
1052 1058 target_repo=target_repo,
1053 1059 target_ref=target_ref,
1054 1060 revisions=commit_ids,
1055 1061 common_ancestor_id=common_ancestor_id,
1056 1062 reviewers=reviewers,
1057 1063 title=pullrequest_title,
1058 1064 description=description,
1059 1065 description_renderer=description_renderer,
1060 1066 reviewer_data=reviewer_rules,
1061 1067 auth_user=self._rhodecode_user
1062 1068 )
1063 1069 Session().commit()
1064 1070
1065 1071 h.flash(_('Successfully opened new pull request'),
1066 1072 category='success')
1067 1073 except Exception:
1068 1074 msg = _('Error occurred during creation of this pull request.')
1069 1075 log.exception(msg)
1070 1076 h.flash(msg, category='error')
1071 1077
1072 1078 # copy the args back to redirect
1073 1079 org_query = self.request.GET.mixed()
1074 1080 raise HTTPFound(
1075 1081 h.route_path('pullrequest_new', repo_name=self.db_repo_name,
1076 1082 _query=org_query))
1077 1083
1078 1084 raise HTTPFound(
1079 1085 h.route_path('pullrequest_show', repo_name=target_repo,
1080 1086 pull_request_id=pull_request.pull_request_id))
1081 1087
1082 1088 @LoginRequired()
1083 1089 @NotAnonymous()
1084 1090 @HasRepoPermissionAnyDecorator(
1085 1091 'repository.read', 'repository.write', 'repository.admin')
1086 1092 @CSRFRequired()
1087 1093 @view_config(
1088 1094 route_name='pullrequest_update', request_method='POST',
1089 1095 renderer='json_ext')
1090 1096 def pull_request_update(self):
1091 1097 pull_request = PullRequest.get_or_404(
1092 1098 self.request.matchdict['pull_request_id'])
1093 1099 _ = self.request.translate
1094 1100
1095 1101 self.load_default_context()
1096 1102 redirect_url = None
1097 1103
1098 1104 if pull_request.is_closed():
1099 1105 log.debug('update: forbidden because pull request is closed')
1100 1106 msg = _(u'Cannot update closed pull requests.')
1101 1107 h.flash(msg, category='error')
1102 1108 return {'response': True,
1103 1109 'redirect_url': redirect_url}
1104 1110
1105 1111 is_state_changing = pull_request.is_state_changing()
1106 1112
1107 1113 # only owner or admin can update it
1108 1114 allowed_to_update = PullRequestModel().check_user_update(
1109 1115 pull_request, self._rhodecode_user)
1110 1116 if allowed_to_update:
1111 1117 controls = peppercorn.parse(self.request.POST.items())
1112 1118 force_refresh = str2bool(self.request.POST.get('force_refresh'))
1113 1119
1114 1120 if 'review_members' in controls:
1115 1121 self._update_reviewers(
1116 1122 pull_request, controls['review_members'],
1117 1123 pull_request.reviewer_data)
1118 1124 elif str2bool(self.request.POST.get('update_commits', 'false')):
1119 1125 if is_state_changing:
1120 1126 log.debug('commits update: forbidden because pull request is in state %s',
1121 1127 pull_request.pull_request_state)
1122 1128 msg = _(u'Cannot update pull requests commits in state other than `{}`. '
1123 1129 u'Current state is: `{}`').format(
1124 1130 PullRequest.STATE_CREATED, pull_request.pull_request_state)
1125 1131 h.flash(msg, category='error')
1126 1132 return {'response': True,
1127 1133 'redirect_url': redirect_url}
1128 1134
1129 1135 self._update_commits(pull_request)
1130 1136 if force_refresh:
1131 1137 redirect_url = h.route_path(
1132 1138 'pullrequest_show', repo_name=self.db_repo_name,
1133 1139 pull_request_id=pull_request.pull_request_id,
1134 1140 _query={"force_refresh": 1})
1135 1141 elif str2bool(self.request.POST.get('edit_pull_request', 'false')):
1136 1142 self._edit_pull_request(pull_request)
1137 1143 else:
1138 1144 raise HTTPBadRequest()
1139 1145
1140 1146 return {'response': True,
1141 1147 'redirect_url': redirect_url}
1142 1148 raise HTTPForbidden()
1143 1149
1144 1150 def _edit_pull_request(self, pull_request):
1145 1151 _ = self.request.translate
1146 1152
1147 1153 try:
1148 1154 PullRequestModel().edit(
1149 1155 pull_request,
1150 1156 self.request.POST.get('title'),
1151 1157 self.request.POST.get('description'),
1152 1158 self.request.POST.get('description_renderer'),
1153 1159 self._rhodecode_user)
1154 1160 except ValueError:
1155 1161 msg = _(u'Cannot update closed pull requests.')
1156 1162 h.flash(msg, category='error')
1157 1163 return
1158 1164 else:
1159 1165 Session().commit()
1160 1166
1161 1167 msg = _(u'Pull request title & description updated.')
1162 1168 h.flash(msg, category='success')
1163 1169 return
1164 1170
1165 1171 def _update_commits(self, pull_request):
1166 1172 _ = self.request.translate
1167 1173
1168 1174 with pull_request.set_state(PullRequest.STATE_UPDATING):
1169 1175 resp = PullRequestModel().update_commits(
1170 1176 pull_request, self._rhodecode_db_user)
1171 1177
1172 1178 if resp.executed:
1173 1179
1174 1180 if resp.target_changed and resp.source_changed:
1175 1181 changed = 'target and source repositories'
1176 1182 elif resp.target_changed and not resp.source_changed:
1177 1183 changed = 'target repository'
1178 1184 elif not resp.target_changed and resp.source_changed:
1179 1185 changed = 'source repository'
1180 1186 else:
1181 1187 changed = 'nothing'
1182 1188
1183 1189 msg = _(u'Pull request updated to "{source_commit_id}" with '
1184 1190 u'{count_added} added, {count_removed} removed commits. '
1185 1191 u'Source of changes: {change_source}')
1186 1192 msg = msg.format(
1187 1193 source_commit_id=pull_request.source_ref_parts.commit_id,
1188 1194 count_added=len(resp.changes.added),
1189 1195 count_removed=len(resp.changes.removed),
1190 1196 change_source=changed)
1191 1197 h.flash(msg, category='success')
1192 1198
1193 1199 channel = '/repo${}$/pr/{}'.format(
1194 1200 pull_request.target_repo.repo_name, pull_request.pull_request_id)
1195 1201 message = msg + (
1196 1202 ' - <a onclick="window.location.reload()">'
1197 1203 '<strong>{}</strong></a>'.format(_('Reload page')))
1198 1204 channelstream.post_message(
1199 1205 channel, message, self._rhodecode_user.username,
1200 1206 registry=self.request.registry)
1201 1207 else:
1202 1208 msg = PullRequestModel.UPDATE_STATUS_MESSAGES[resp.reason]
1203 1209 warning_reasons = [
1204 1210 UpdateFailureReason.NO_CHANGE,
1205 1211 UpdateFailureReason.WRONG_REF_TYPE,
1206 1212 ]
1207 1213 category = 'warning' if resp.reason in warning_reasons else 'error'
1208 1214 h.flash(msg, category=category)
1209 1215
1210 1216 @LoginRequired()
1211 1217 @NotAnonymous()
1212 1218 @HasRepoPermissionAnyDecorator(
1213 1219 'repository.read', 'repository.write', 'repository.admin')
1214 1220 @CSRFRequired()
1215 1221 @view_config(
1216 1222 route_name='pullrequest_merge', request_method='POST',
1217 1223 renderer='json_ext')
1218 1224 def pull_request_merge(self):
1219 1225 """
1220 1226 Merge will perform a server-side merge of the specified
1221 1227 pull request, if the pull request is approved and mergeable.
1222 1228 After successful merging, the pull request is automatically
1223 1229 closed, with a relevant comment.
1224 1230 """
1225 1231 pull_request = PullRequest.get_or_404(
1226 1232 self.request.matchdict['pull_request_id'])
1227 1233 _ = self.request.translate
1228 1234
1229 1235 if pull_request.is_state_changing():
1230 1236 log.debug('show: forbidden because pull request is in state %s',
1231 1237 pull_request.pull_request_state)
1232 1238 msg = _(u'Cannot merge pull requests in state other than `{}`. '
1233 1239 u'Current state is: `{}`').format(PullRequest.STATE_CREATED,
1234 1240 pull_request.pull_request_state)
1235 1241 h.flash(msg, category='error')
1236 1242 raise HTTPFound(
1237 1243 h.route_path('pullrequest_show',
1238 1244 repo_name=pull_request.target_repo.repo_name,
1239 1245 pull_request_id=pull_request.pull_request_id))
1240 1246
1241 1247 self.load_default_context()
1242 1248
1243 1249 with pull_request.set_state(PullRequest.STATE_UPDATING):
1244 1250 check = MergeCheck.validate(
1245 1251 pull_request, auth_user=self._rhodecode_user,
1246 1252 translator=self.request.translate)
1247 1253 merge_possible = not check.failed
1248 1254
1249 1255 for err_type, error_msg in check.errors:
1250 1256 h.flash(error_msg, category=err_type)
1251 1257
1252 1258 if merge_possible:
1253 1259 log.debug("Pre-conditions checked, trying to merge.")
1254 1260 extras = vcs_operation_context(
1255 1261 self.request.environ, repo_name=pull_request.target_repo.repo_name,
1256 1262 username=self._rhodecode_db_user.username, action='push',
1257 1263 scm=pull_request.target_repo.repo_type)
1258 1264 with pull_request.set_state(PullRequest.STATE_UPDATING):
1259 1265 self._merge_pull_request(
1260 1266 pull_request, self._rhodecode_db_user, extras)
1261 1267 else:
1262 1268 log.debug("Pre-conditions failed, NOT merging.")
1263 1269
1264 1270 raise HTTPFound(
1265 1271 h.route_path('pullrequest_show',
1266 1272 repo_name=pull_request.target_repo.repo_name,
1267 1273 pull_request_id=pull_request.pull_request_id))
1268 1274
1269 1275 def _merge_pull_request(self, pull_request, user, extras):
1270 1276 _ = self.request.translate
1271 1277 merge_resp = PullRequestModel().merge_repo(pull_request, user, extras=extras)
1272 1278
1273 1279 if merge_resp.executed:
1274 1280 log.debug("The merge was successful, closing the pull request.")
1275 1281 PullRequestModel().close_pull_request(
1276 1282 pull_request.pull_request_id, user)
1277 1283 Session().commit()
1278 1284 msg = _('Pull request was successfully merged and closed.')
1279 1285 h.flash(msg, category='success')
1280 1286 else:
1281 1287 log.debug(
1282 1288 "The merge was not successful. Merge response: %s", merge_resp)
1283 1289 msg = merge_resp.merge_status_message
1284 1290 h.flash(msg, category='error')
1285 1291
1286 1292 def _update_reviewers(self, pull_request, review_members, reviewer_rules):
1287 1293 _ = self.request.translate
1288 1294
1289 1295 get_default_reviewers_data, validate_default_reviewers = \
1290 1296 PullRequestModel().get_reviewer_functions()
1291 1297
1292 1298 try:
1293 1299 reviewers = validate_default_reviewers(review_members, reviewer_rules)
1294 1300 except ValueError as e:
1295 1301 log.error('Reviewers Validation: {}'.format(e))
1296 1302 h.flash(e, category='error')
1297 1303 return
1298 1304
1299 1305 old_calculated_status = pull_request.calculated_review_status()
1300 1306 PullRequestModel().update_reviewers(
1301 1307 pull_request, reviewers, self._rhodecode_user)
1302 1308 h.flash(_('Pull request reviewers updated.'), category='success')
1303 1309 Session().commit()
1304 1310
1305 1311 # trigger status changed if change in reviewers changes the status
1306 1312 calculated_status = pull_request.calculated_review_status()
1307 1313 if old_calculated_status != calculated_status:
1308 1314 PullRequestModel().trigger_pull_request_hook(
1309 1315 pull_request, self._rhodecode_user, 'review_status_change',
1310 1316 data={'status': calculated_status})
1311 1317
1312 1318 @LoginRequired()
1313 1319 @NotAnonymous()
1314 1320 @HasRepoPermissionAnyDecorator(
1315 1321 'repository.read', 'repository.write', 'repository.admin')
1316 1322 @CSRFRequired()
1317 1323 @view_config(
1318 1324 route_name='pullrequest_delete', request_method='POST',
1319 1325 renderer='json_ext')
1320 1326 def pull_request_delete(self):
1321 1327 _ = self.request.translate
1322 1328
1323 1329 pull_request = PullRequest.get_or_404(
1324 1330 self.request.matchdict['pull_request_id'])
1325 1331 self.load_default_context()
1326 1332
1327 1333 pr_closed = pull_request.is_closed()
1328 1334 allowed_to_delete = PullRequestModel().check_user_delete(
1329 1335 pull_request, self._rhodecode_user) and not pr_closed
1330 1336
1331 1337 # only owner can delete it !
1332 1338 if allowed_to_delete:
1333 1339 PullRequestModel().delete(pull_request, self._rhodecode_user)
1334 1340 Session().commit()
1335 1341 h.flash(_('Successfully deleted pull request'),
1336 1342 category='success')
1337 1343 raise HTTPFound(h.route_path('pullrequest_show_all',
1338 1344 repo_name=self.db_repo_name))
1339 1345
1340 1346 log.warning('user %s tried to delete pull request without access',
1341 1347 self._rhodecode_user)
1342 1348 raise HTTPNotFound()
1343 1349
1344 1350 @LoginRequired()
1345 1351 @NotAnonymous()
1346 1352 @HasRepoPermissionAnyDecorator(
1347 1353 'repository.read', 'repository.write', 'repository.admin')
1348 1354 @CSRFRequired()
1349 1355 @view_config(
1350 1356 route_name='pullrequest_comment_create', request_method='POST',
1351 1357 renderer='json_ext')
1352 1358 def pull_request_comment_create(self):
1353 1359 _ = self.request.translate
1354 1360
1355 1361 pull_request = PullRequest.get_or_404(
1356 1362 self.request.matchdict['pull_request_id'])
1357 1363 pull_request_id = pull_request.pull_request_id
1358 1364
1359 1365 if pull_request.is_closed():
1360 1366 log.debug('comment: forbidden because pull request is closed')
1361 1367 raise HTTPForbidden()
1362 1368
1363 1369 allowed_to_comment = PullRequestModel().check_user_comment(
1364 1370 pull_request, self._rhodecode_user)
1365 1371 if not allowed_to_comment:
1366 1372 log.debug(
1367 1373 'comment: forbidden because pull request is from forbidden repo')
1368 1374 raise HTTPForbidden()
1369 1375
1370 1376 c = self.load_default_context()
1371 1377
1372 1378 status = self.request.POST.get('changeset_status', None)
1373 1379 text = self.request.POST.get('text')
1374 1380 comment_type = self.request.POST.get('comment_type')
1375 1381 resolves_comment_id = self.request.POST.get('resolves_comment_id', None)
1376 1382 close_pull_request = self.request.POST.get('close_pull_request')
1377 1383
1378 1384 # the logic here should work like following, if we submit close
1379 1385 # pr comment, use `close_pull_request_with_comment` function
1380 1386 # else handle regular comment logic
1381 1387
1382 1388 if close_pull_request:
1383 1389 # only owner or admin or person with write permissions
1384 1390 allowed_to_close = PullRequestModel().check_user_update(
1385 1391 pull_request, self._rhodecode_user)
1386 1392 if not allowed_to_close:
1387 1393 log.debug('comment: forbidden because not allowed to close '
1388 1394 'pull request %s', pull_request_id)
1389 1395 raise HTTPForbidden()
1390 1396
1391 1397 # This also triggers `review_status_change`
1392 1398 comment, status = PullRequestModel().close_pull_request_with_comment(
1393 1399 pull_request, self._rhodecode_user, self.db_repo, message=text,
1394 1400 auth_user=self._rhodecode_user)
1395 1401 Session().flush()
1396 1402
1397 1403 PullRequestModel().trigger_pull_request_hook(
1398 1404 pull_request, self._rhodecode_user, 'comment',
1399 1405 data={'comment': comment})
1400 1406
1401 1407 else:
1402 1408 # regular comment case, could be inline, or one with status.
1403 1409 # for that one we check also permissions
1404 1410
1405 1411 allowed_to_change_status = PullRequestModel().check_user_change_status(
1406 1412 pull_request, self._rhodecode_user)
1407 1413
1408 1414 if status and allowed_to_change_status:
1409 1415 message = (_('Status change %(transition_icon)s %(status)s')
1410 1416 % {'transition_icon': '>',
1411 1417 'status': ChangesetStatus.get_status_lbl(status)})
1412 1418 text = text or message
1413 1419
1414 1420 comment = CommentsModel().create(
1415 1421 text=text,
1416 1422 repo=self.db_repo.repo_id,
1417 1423 user=self._rhodecode_user.user_id,
1418 1424 pull_request=pull_request,
1419 1425 f_path=self.request.POST.get('f_path'),
1420 1426 line_no=self.request.POST.get('line'),
1421 1427 status_change=(ChangesetStatus.get_status_lbl(status)
1422 1428 if status and allowed_to_change_status else None),
1423 1429 status_change_type=(status
1424 1430 if status and allowed_to_change_status else None),
1425 1431 comment_type=comment_type,
1426 1432 resolves_comment_id=resolves_comment_id,
1427 1433 auth_user=self._rhodecode_user
1428 1434 )
1429 1435
1430 1436 if allowed_to_change_status:
1431 1437 # calculate old status before we change it
1432 1438 old_calculated_status = pull_request.calculated_review_status()
1433 1439
1434 1440 # get status if set !
1435 1441 if status:
1436 1442 ChangesetStatusModel().set_status(
1437 1443 self.db_repo.repo_id,
1438 1444 status,
1439 1445 self._rhodecode_user.user_id,
1440 1446 comment,
1441 1447 pull_request=pull_request
1442 1448 )
1443 1449
1444 1450 Session().flush()
1445 1451 # this is somehow required to get access to some relationship
1446 1452 # loaded on comment
1447 1453 Session().refresh(comment)
1448 1454
1449 1455 PullRequestModel().trigger_pull_request_hook(
1450 1456 pull_request, self._rhodecode_user, 'comment',
1451 1457 data={'comment': comment})
1452 1458
1453 1459 # we now calculate the status of pull request, and based on that
1454 1460 # calculation we set the commits status
1455 1461 calculated_status = pull_request.calculated_review_status()
1456 1462 if old_calculated_status != calculated_status:
1457 1463 PullRequestModel().trigger_pull_request_hook(
1458 1464 pull_request, self._rhodecode_user, 'review_status_change',
1459 1465 data={'status': calculated_status})
1460 1466
1461 1467 Session().commit()
1462 1468
1463 1469 data = {
1464 1470 'target_id': h.safeid(h.safe_unicode(
1465 1471 self.request.POST.get('f_path'))),
1466 1472 }
1467 1473 if comment:
1468 1474 c.co = comment
1469 1475 rendered_comment = render(
1470 1476 'rhodecode:templates/changeset/changeset_comment_block.mako',
1471 1477 self._get_template_context(c), self.request)
1472 1478
1473 1479 data.update(comment.get_dict())
1474 1480 data.update({'rendered_text': rendered_comment})
1475 1481
1476 1482 return data
1477 1483
1478 1484 @LoginRequired()
1479 1485 @NotAnonymous()
1480 1486 @HasRepoPermissionAnyDecorator(
1481 1487 'repository.read', 'repository.write', 'repository.admin')
1482 1488 @CSRFRequired()
1483 1489 @view_config(
1484 1490 route_name='pullrequest_comment_delete', request_method='POST',
1485 1491 renderer='json_ext')
1486 1492 def pull_request_comment_delete(self):
1487 1493 pull_request = PullRequest.get_or_404(
1488 1494 self.request.matchdict['pull_request_id'])
1489 1495
1490 1496 comment = ChangesetComment.get_or_404(
1491 1497 self.request.matchdict['comment_id'])
1492 1498 comment_id = comment.comment_id
1493 1499
1494 1500 if comment.immutable:
1495 1501 # don't allow deleting comments that are immutable
1496 1502 raise HTTPForbidden()
1497 1503
1498 1504 if pull_request.is_closed():
1499 1505 log.debug('comment: forbidden because pull request is closed')
1500 1506 raise HTTPForbidden()
1501 1507
1502 1508 if not comment:
1503 1509 log.debug('Comment with id:%s not found, skipping', comment_id)
1504 1510 # comment already deleted in another call probably
1505 1511 return True
1506 1512
1507 1513 if comment.pull_request.is_closed():
1508 1514 # don't allow deleting comments on closed pull request
1509 1515 raise HTTPForbidden()
1510 1516
1511 1517 is_repo_admin = h.HasRepoPermissionAny('repository.admin')(self.db_repo_name)
1512 1518 super_admin = h.HasPermissionAny('hg.admin')()
1513 1519 comment_owner = comment.author.user_id == self._rhodecode_user.user_id
1514 1520 is_repo_comment = comment.repo.repo_name == self.db_repo_name
1515 1521 comment_repo_admin = is_repo_admin and is_repo_comment
1516 1522
1517 1523 if super_admin or comment_owner or comment_repo_admin:
1518 1524 old_calculated_status = comment.pull_request.calculated_review_status()
1519 1525 CommentsModel().delete(comment=comment, auth_user=self._rhodecode_user)
1520 1526 Session().commit()
1521 1527 calculated_status = comment.pull_request.calculated_review_status()
1522 1528 if old_calculated_status != calculated_status:
1523 1529 PullRequestModel().trigger_pull_request_hook(
1524 1530 comment.pull_request, self._rhodecode_user, 'review_status_change',
1525 1531 data={'status': calculated_status})
1526 1532 return True
1527 1533 else:
1528 1534 log.warning('No permissions for user %s to delete comment_id: %s',
1529 1535 self._rhodecode_db_user, comment_id)
1530 1536 raise HTTPNotFound()
1531 1537
1532 1538 @LoginRequired()
1533 1539 @NotAnonymous()
1534 1540 @HasRepoPermissionAnyDecorator(
1535 1541 'repository.read', 'repository.write', 'repository.admin')
1536 1542 @CSRFRequired()
1537 1543 @view_config(
1538 1544 route_name='pullrequest_comment_edit', request_method='POST',
1539 1545 renderer='json_ext')
1540 1546 def pull_request_comment_edit(self):
1541 1547 self.load_default_context()
1542 1548
1543 1549 pull_request = PullRequest.get_or_404(
1544 1550 self.request.matchdict['pull_request_id']
1545 1551 )
1546 1552 comment = ChangesetComment.get_or_404(
1547 1553 self.request.matchdict['comment_id']
1548 1554 )
1549 1555 comment_id = comment.comment_id
1550 1556
1551 1557 if comment.immutable:
1552 1558 # don't allow deleting comments that are immutable
1553 1559 raise HTTPForbidden()
1554 1560
1555 1561 if pull_request.is_closed():
1556 1562 log.debug('comment: forbidden because pull request is closed')
1557 1563 raise HTTPForbidden()
1558 1564
1559 1565 if not comment:
1560 1566 log.debug('Comment with id:%s not found, skipping', comment_id)
1561 1567 # comment already deleted in another call probably
1562 1568 return True
1563 1569
1564 1570 if comment.pull_request.is_closed():
1565 1571 # don't allow deleting comments on closed pull request
1566 1572 raise HTTPForbidden()
1567 1573
1568 1574 is_repo_admin = h.HasRepoPermissionAny('repository.admin')(self.db_repo_name)
1569 1575 super_admin = h.HasPermissionAny('hg.admin')()
1570 1576 comment_owner = comment.author.user_id == self._rhodecode_user.user_id
1571 1577 is_repo_comment = comment.repo.repo_name == self.db_repo_name
1572 1578 comment_repo_admin = is_repo_admin and is_repo_comment
1573 1579
1574 1580 if super_admin or comment_owner or comment_repo_admin:
1575 1581 text = self.request.POST.get('text')
1576 1582 version = self.request.POST.get('version')
1577 1583 if text == comment.text:
1578 1584 log.warning(
1579 1585 'Comment(PR): '
1580 1586 'Trying to create new version '
1581 1587 'with the same comment body {}'.format(
1582 1588 comment_id,
1583 1589 )
1584 1590 )
1585 1591 raise HTTPNotFound()
1586 1592
1587 1593 if version.isdigit():
1588 1594 version = int(version)
1589 1595 else:
1590 1596 log.warning(
1591 1597 'Comment(PR): Wrong version type {} {} '
1592 1598 'for comment {}'.format(
1593 1599 version,
1594 1600 type(version),
1595 1601 comment_id,
1596 1602 )
1597 1603 )
1598 1604 raise HTTPNotFound()
1599 1605
1600 1606 try:
1601 1607 comment_history = CommentsModel().edit(
1602 1608 comment_id=comment_id,
1603 1609 text=text,
1604 1610 auth_user=self._rhodecode_user,
1605 1611 version=version,
1606 1612 )
1607 1613 except CommentVersionMismatch:
1608 1614 raise HTTPConflict()
1609 1615
1610 1616 if not comment_history:
1611 1617 raise HTTPNotFound()
1612 1618
1613 1619 Session().commit()
1614 1620
1615 1621 PullRequestModel().trigger_pull_request_hook(
1616 1622 pull_request, self._rhodecode_user, 'comment_edit',
1617 1623 data={'comment': comment})
1618 1624
1619 1625 return {
1620 1626 'comment_history_id': comment_history.comment_history_id,
1621 1627 'comment_id': comment.comment_id,
1622 1628 'comment_version': comment_history.version,
1623 1629 'comment_author_username': comment_history.author.username,
1624 1630 'comment_author_gravatar': h.gravatar_url(comment_history.author.email, 16),
1625 1631 'comment_created_on': h.age_component(comment_history.created_on,
1626 1632 time_is_local=True),
1627 1633 }
1628 1634 else:
1629 1635 log.warning('No permissions for user %s to edit comment_id: %s',
1630 1636 self._rhodecode_db_user, comment_id)
1631 1637 raise HTTPNotFound()
@@ -1,162 +1,162 b''
1 1 # -*- coding: utf-8 -*-
2 2
3 3 # Copyright (C) 2016-2020 RhodeCode GmbH
4 4 #
5 5 # This program is free software: you can redistribute it and/or modify
6 6 # it under the terms of the GNU Affero General Public License, version 3
7 7 # (only), as published by the Free Software Foundation.
8 8 #
9 9 # This program is distributed in the hope that it will be useful,
10 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 12 # GNU General Public License for more details.
13 13 #
14 14 # You should have received a copy of the GNU Affero General Public License
15 15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
16 16 #
17 17 # This program is dual-licensed. If you wish to learn more about the
18 18 # RhodeCode Enterprise Edition, including its added features, Support services,
19 19 # and proprietary license terms, please see https://rhodecode.com/licenses/
20 20
21 21 import os
22 22 import sys
23 23 import json
24 24 import logging
25 25
26 26 from rhodecode.lib.hooks_daemon import prepare_callback_daemon
27 27 from rhodecode.lib.vcs.conf import settings as vcs_settings
28 28 from rhodecode.model.scm import ScmModel
29 29
30 30 log = logging.getLogger(__name__)
31 31
32 32
33 33 class VcsServer(object):
34 34 _path = None # set executable path for hg/git/svn binary
35 35 backend = None # set in child classes
36 36 tunnel = None # subprocess handling tunnel
37 37 write_perms = ['repository.admin', 'repository.write']
38 38 read_perms = ['repository.read', 'repository.admin', 'repository.write']
39 39
40 40 def __init__(self, user, user_permissions, config, env):
41 41 self.user = user
42 42 self.user_permissions = user_permissions
43 43 self.config = config
44 44 self.env = env
45 45 self.stdin = sys.stdin
46 46
47 47 self.repo_name = None
48 48 self.repo_mode = None
49 49 self.store = ''
50 50 self.ini_path = ''
51 51
52 52 def _invalidate_cache(self, repo_name):
53 53 """
54 54 Set's cache for this repository for invalidation on next access
55 55
56 56 :param repo_name: full repo name, also a cache key
57 57 """
58 58 ScmModel().mark_for_invalidation(repo_name)
59 59
60 60 def has_write_perm(self):
61 61 permission = self.user_permissions.get(self.repo_name)
62 62 if permission in ['repository.write', 'repository.admin']:
63 63 return True
64 64
65 65 return False
66 66
67 67 def _check_permissions(self, action):
68 68 permission = self.user_permissions.get(self.repo_name)
69 69 log.debug('permission for %s on %s are: %s',
70 70 self.user, self.repo_name, permission)
71 71
72 72 if not permission:
73 73 log.error('user `%s` permissions to repo:%s are empty. Forbidding access.',
74 74 self.user, self.repo_name)
75 75 return -2
76 76
77 77 if action == 'pull':
78 78 if permission in self.read_perms:
79 79 log.info(
80 80 'READ Permissions for User "%s" detected to repo "%s"!',
81 81 self.user, self.repo_name)
82 82 return 0
83 83 else:
84 84 if permission in self.write_perms:
85 85 log.info(
86 'WRITE+ Permissions for User "%s" detected to repo "%s"!',
86 'WRITE, or Higher Permissions for User "%s" detected to repo "%s"!',
87 87 self.user, self.repo_name)
88 88 return 0
89 89
90 90 log.error('Cannot properly fetch or verify user `%s` permissions. '
91 91 'Permissions: %s, vcs action: %s',
92 92 self.user, permission, action)
93 93 return -2
94 94
95 95 def update_environment(self, action, extras=None):
96 96
97 97 scm_data = {
98 98 'ip': os.environ['SSH_CLIENT'].split()[0],
99 99 'username': self.user.username,
100 100 'user_id': self.user.user_id,
101 101 'action': action,
102 102 'repository': self.repo_name,
103 103 'scm': self.backend,
104 104 'config': self.ini_path,
105 105 'repo_store': self.store,
106 106 'make_lock': None,
107 107 'locked_by': [None, None],
108 108 'server_url': None,
109 109 'user_agent': 'ssh-user-agent',
110 110 'hooks': ['push', 'pull'],
111 111 'hooks_module': 'rhodecode.lib.hooks_daemon',
112 112 'is_shadow_repo': False,
113 113 'detect_force_push': False,
114 114 'check_branch_perms': False,
115 115
116 116 'SSH': True,
117 117 'SSH_PERMISSIONS': self.user_permissions.get(self.repo_name),
118 118 }
119 119 if extras:
120 120 scm_data.update(extras)
121 121 os.putenv("RC_SCM_DATA", json.dumps(scm_data))
122 122
123 123 def get_root_store(self):
124 124 root_store = self.store
125 125 if not root_store.endswith('/'):
126 126 # always append trailing slash
127 127 root_store = root_store + '/'
128 128 return root_store
129 129
130 130 def _handle_tunnel(self, extras):
131 131 # pre-auth
132 132 action = 'pull'
133 133 exit_code = self._check_permissions(action)
134 134 if exit_code:
135 135 return exit_code, False
136 136
137 137 req = self.env['request']
138 138 server_url = req.host_url + req.script_name
139 139 extras['server_url'] = server_url
140 140
141 141 log.debug('Using %s binaries from path %s', self.backend, self._path)
142 142 exit_code = self.tunnel.run(extras)
143 143
144 144 return exit_code, action == "push"
145 145
146 146 def run(self, tunnel_extras=None):
147 147 tunnel_extras = tunnel_extras or {}
148 148 extras = {}
149 149 extras.update(tunnel_extras)
150 150
151 151 callback_daemon, extras = prepare_callback_daemon(
152 152 extras, protocol=vcs_settings.HOOKS_PROTOCOL,
153 153 host=vcs_settings.HOOKS_HOST,
154 154 use_direct_calls=False)
155 155
156 156 with callback_daemon:
157 157 try:
158 158 return self._handle_tunnel(extras)
159 159 finally:
160 160 log.debug('Running cleanup with cache invalidation')
161 161 if self.repo_name:
162 162 self._invalidate_cache(self.repo_name)
This diff has been collapsed as it changes many lines, (2485 lines changed) Show them Hide them
@@ -1,11328 +1,11487 b''
1 1 # Translations template for rhodecode-enterprise-ce.
2 2 # Copyright (C) 2020 RhodeCode GmbH
3 3 # This file is distributed under the same license as the rhodecode-enterprise-ce project.
4 4 # FIRST AUTHOR <EMAIL@ADDRESS>, 2020.
5 5 #
6 6 #, fuzzy
7 7 msgid ""
8 8 msgstr ""
9 "Project-Id-Version: rhodecode-enterprise-ce 4.19.0\n"
9 "Project-Id-Version: rhodecode-enterprise-ce 4.20.0\n"
10 10 "Report-Msgid-Bugs-To: marcin@rhodecode.com\n"
11 "POT-Creation-Date: 2020-05-22 09:45+0000\n"
11 "POT-Creation-Date: 2020-07-20 11:46+0000\n"
12 12 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13 13 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14 14 "Language-Team: LANGUAGE <LL@li.org>\n"
15 15 "MIME-Version: 1.0\n"
16 16 "Content-Type: text/plain; charset=utf-8\n"
17 17 "Content-Transfer-Encoding: 8bit\n"
18 18 "Generated-By: Babel 1.3\n"
19 19
20 20 #: rhodecode/apps/admin/views/defaults.py:90
21 21 msgid "Default settings updated successfully"
22 22 msgstr ""
23 23
24 24 #: rhodecode/apps/admin/views/defaults.py:108
25 25 msgid "Error occurred during update of default values"
26 26 msgstr ""
27 27
28 28 #: rhodecode/apps/admin/views/exception_tracker.py:156
29 29 msgid "Removed {} Exceptions"
30 30 msgstr ""
31 31
32 32 #: rhodecode/apps/admin/views/exception_tracker.py:173
33 33 msgid "Removed Exception {}"
34 34 msgstr ""
35 35
36 36 #: rhodecode/apps/admin/views/permissions.py:121
37 37 msgid "Application permissions updated successfully"
38 38 msgstr ""
39 39
40 40 #: rhodecode/apps/admin/views/permissions.py:142
41 41 #: rhodecode/apps/admin/views/permissions.py:218
42 42 #: rhodecode/apps/admin/views/permissions.py:320
43 43 msgid "Error occurred during update of permissions"
44 44 msgstr ""
45 45
46 46 #: rhodecode/apps/admin/views/permissions.py:198
47 47 msgid "Object permissions updated successfully"
48 48 msgstr ""
49 49
50 50 #: rhodecode/apps/admin/views/permissions.py:300
51 51 msgid "Global permissions updated successfully"
52 52 msgstr ""
53 53
54 54 #: rhodecode/apps/admin/views/permissions.py:485
55 55 #: rhodecode/templates/admin/gists/gist_show.mako:50
56 56 #: rhodecode/templates/admin/integrations/list.mako:172
57 57 #: rhodecode/templates/admin/my_account/my_account_profile.mako:7
58 58 #: rhodecode/templates/base/issue_tracker_settings.mako:137
59 #: rhodecode/templates/changeset/changeset_file_comment.mako:201
60 #: rhodecode/templates/changeset/changeset_file_comment.mako:205
61 #: rhodecode/templates/changeset/changeset_file_comment.mako:209
59 62 #: rhodecode/templates/data_table/_dt_elements.mako:173
60 63 #: rhodecode/templates/data_table/_dt_elements.mako:251
61 64 #: rhodecode/templates/data_table/_dt_elements.mako:266
62 65 #: rhodecode/templates/data_table/_dt_elements.mako:267
63 66 #: rhodecode/templates/data_table/_dt_elements.mako:282
64 67 #: rhodecode/templates/debug_style/buttons.html:128
65 #: rhodecode/templates/files/files_add.mako:56
66 #: rhodecode/templates/files/files_edit.mako:58
67 #: rhodecode/templates/files/files_source.mako:29
68 #: rhodecode/templates/files/files_source.mako:42
68 #: rhodecode/templates/files/files_add.mako:55
69 #: rhodecode/templates/files/files_edit.mako:57
70 #: rhodecode/templates/files/files_source.mako:39
71 #: rhodecode/templates/files/files_source.mako:52
69 72 #: rhodecode/templates/pullrequests/pullrequest_show.mako:74
70 73 #: rhodecode/templates/pullrequests/pullrequest_show.mako:302
71 74 #: rhodecode/templates/user_group/profile.mako:8
72 75 #: rhodecode/templates/users/user_profile.mako:8
73 76 msgid "Edit"
74 77 msgstr ""
75 78
76 79 #: rhodecode/apps/admin/views/permissions.py:513
77 80 msgid "Updated SSH keys file: {}"
78 81 msgstr ""
79 82
80 83 #: rhodecode/apps/admin/views/permissions.py:516
81 84 msgid "SSH key support is disabled in .ini file"
82 85 msgstr ""
83 86
84 #: rhodecode/apps/admin/views/repo_groups.py:328
87 #: rhodecode/apps/admin/views/repo_groups.py:342
85 88 #, python-format
86 89 msgid "Created repository group %s"
87 90 msgstr ""
88 91
89 #: rhodecode/apps/admin/views/repo_groups.py:346
92 #: rhodecode/apps/admin/views/repo_groups.py:360
90 93 #, python-format
91 94 msgid "Error occurred during creation of repository group %s"
92 95 msgstr ""
93 96
94 97 #: rhodecode/apps/admin/views/sessions.py:92
95 98 msgid "Cleaned up old sessions"
96 99 msgstr ""
97 100
98 101 #: rhodecode/apps/admin/views/sessions.py:97
99 102 msgid "Failed to cleanup up old sessions"
100 103 msgstr ""
101 104
102 #: rhodecode/apps/admin/views/settings.py:162
103 #: rhodecode/apps/admin/views/settings.py:317
104 #: rhodecode/apps/admin/views/settings.py:392
105 #: rhodecode/apps/admin/views/settings.py:726
105 #: rhodecode/apps/admin/views/settings.py:163
106 #: rhodecode/apps/admin/views/settings.py:319
107 #: rhodecode/apps/admin/views/settings.py:394
108 #: rhodecode/apps/admin/views/settings.py:727
106 109 #: rhodecode/apps/repository/views/repo_settings_vcs.py:124
107 110 msgid "Some form inputs contain invalid data."
108 111 msgstr ""
109 112
110 #: rhodecode/apps/admin/views/settings.py:189
111 #: rhodecode/apps/admin/views/settings.py:353
113 #: rhodecode/apps/admin/views/settings.py:190
114 #: rhodecode/apps/admin/views/settings.py:355
112 115 msgid "Error occurred during updating application settings"
113 116 msgstr ""
114 117
115 #: rhodecode/apps/admin/views/settings.py:193
118 #: rhodecode/apps/admin/views/settings.py:194
116 119 #: rhodecode/apps/repository/views/repo_settings_vcs.py:143
117 120 msgid "Updated VCS settings"
118 121 msgstr ""
119 122
120 #: rhodecode/apps/admin/views/settings.py:267
123 #: rhodecode/apps/admin/views/settings.py:269
121 124 #, python-format
122 125 msgid "Repositories successfully rescanned added: %s ; removed: %s"
123 126 msgstr ""
124 127
125 #: rhodecode/apps/admin/views/settings.py:349
128 #: rhodecode/apps/admin/views/settings.py:351
126 129 msgid "Updated application settings"
127 130 msgstr ""
128 131
129 #: rhodecode/apps/admin/views/settings.py:431
132 #: rhodecode/apps/admin/views/settings.py:433
130 133 msgid "Updated visualisation settings"
131 134 msgstr ""
132 135
133 #: rhodecode/apps/admin/views/settings.py:434
136 #: rhodecode/apps/admin/views/settings.py:436
134 137 msgid "Error occurred during updating visualisation settings"
135 138 msgstr ""
136 139
137 #: rhodecode/apps/admin/views/settings.py:496
140 #: rhodecode/apps/admin/views/settings.py:498
138 141 #: rhodecode/apps/repository/views/repo_settings_issue_trackers.py:127
139 142 msgid "Invalid issue tracker pattern: {}"
140 143 msgstr ""
141 144
142 #: rhodecode/apps/admin/views/settings.py:513
145 #: rhodecode/apps/admin/views/settings.py:515
143 146 #: rhodecode/apps/repository/views/repo_settings_issue_trackers.py:136
144 147 msgid "Updated issue tracker entries"
145 148 msgstr ""
146 149
147 #: rhodecode/apps/admin/views/settings.py:533
150 #: rhodecode/apps/admin/views/settings.py:535
148 151 #: rhodecode/apps/repository/views/repo_settings_issue_trackers.py:91
149 152 msgid "Removed issue tracker entry."
150 153 msgstr ""
151 154
152 #: rhodecode/apps/admin/views/settings.py:571
155 #: rhodecode/apps/admin/views/settings.py:573
153 156 msgid "Please enter email address"
154 157 msgstr ""
155 158
156 #: rhodecode/apps/admin/views/settings.py:588
159 #: rhodecode/apps/admin/views/settings.py:589
157 160 msgid "Send email task created"
158 161 msgstr ""
159 162
160 #: rhodecode/apps/admin/views/settings.py:638
163 #: rhodecode/apps/admin/views/settings.py:639
161 164 msgid "Added new hook"
162 165 msgstr ""
163 166
164 #: rhodecode/apps/admin/views/settings.py:653
167 #: rhodecode/apps/admin/views/settings.py:654
165 168 msgid "Updated hooks"
166 169 msgstr ""
167 170
168 #: rhodecode/apps/admin/views/settings.py:657
171 #: rhodecode/apps/admin/views/settings.py:658
169 172 msgid "Error occurred during hook creation"
170 173 msgstr ""
171 174
172 #: rhodecode/apps/admin/views/settings.py:750
175 #: rhodecode/apps/admin/views/settings.py:751
173 176 msgid "Error occurred during updating labs settings"
174 177 msgstr ""
175 178
176 #: rhodecode/apps/admin/views/settings.py:755
179 #: rhodecode/apps/admin/views/settings.py:756
177 180 msgid "Updated Labs settings"
178 181 msgstr ""
179 182
180 183 #: rhodecode/apps/admin/views/svn_config.py:46
181 184 msgid "Apache configuration for Subversion generated at `{}`."
182 185 msgstr ""
183 186
184 187 #: rhodecode/apps/admin/views/svn_config.py:54
185 188 msgid "Failed to generate the Apache configuration for Subversion."
186 189 msgstr ""
187 190
188 191 #: rhodecode/apps/admin/views/system_info.py:79
189 192 msgid "Note: please make sure this server can access `${url}` for the update link to work"
190 193 msgstr ""
191 194
192 195 #: rhodecode/apps/admin/views/system_info.py:90
193 196 msgid "Update info"
194 197 msgstr ""
195 198
196 199 #: rhodecode/apps/admin/views/system_info.py:92
197 200 msgid "Check for updates"
198 201 msgstr ""
199 202
200 203 #: rhodecode/apps/admin/views/system_info.py:97
201 204 msgid "RhodeCode Version"
202 205 msgstr ""
203 206
204 207 #: rhodecode/apps/admin/views/system_info.py:98
205 208 msgid "Latest version"
206 209 msgstr ""
207 210
208 211 #: rhodecode/apps/admin/views/system_info.py:99
209 212 msgid "RhodeCode Base URL"
210 213 msgstr ""
211 214
212 215 #: rhodecode/apps/admin/views/system_info.py:100
213 216 msgid "RhodeCode Server IP"
214 217 msgstr ""
215 218
216 219 #: rhodecode/apps/admin/views/system_info.py:101
217 220 msgid "RhodeCode Server ID"
218 221 msgstr ""
219 222
220 223 #: rhodecode/apps/admin/views/system_info.py:102
221 224 msgid "RhodeCode Configuration"
222 225 msgstr ""
223 226
224 227 #: rhodecode/apps/admin/views/system_info.py:103
225 228 msgid "RhodeCode Certificate"
226 229 msgstr ""
227 230
228 231 #: rhodecode/apps/admin/views/system_info.py:104
229 232 msgid "Workers"
230 233 msgstr ""
231 234
232 235 #: rhodecode/apps/admin/views/system_info.py:105
233 236 msgid "Worker Type"
234 237 msgstr ""
235 238
236 239 #: rhodecode/apps/admin/views/system_info.py:109
237 240 msgid "Database"
238 241 msgstr ""
239 242
240 243 #: rhodecode/apps/admin/views/system_info.py:110
241 244 msgid "Database version"
242 245 msgstr ""
243 246
244 247 #: rhodecode/apps/admin/views/system_info.py:114
245 248 msgid "Platform"
246 249 msgstr ""
247 250
248 251 #: rhodecode/apps/admin/views/system_info.py:115
249 252 msgid "Platform UUID"
250 253 msgstr ""
251 254
252 255 #: rhodecode/apps/admin/views/system_info.py:116
253 256 msgid "Lang"
254 257 msgstr ""
255 258
256 259 #: rhodecode/apps/admin/views/system_info.py:117
257 260 msgid "Python version"
258 261 msgstr ""
259 262
260 263 #: rhodecode/apps/admin/views/system_info.py:118
261 264 msgid "Python path"
262 265 msgstr ""
263 266
264 267 #: rhodecode/apps/admin/views/system_info.py:122
265 268 msgid "CPU"
266 269 msgstr ""
267 270
268 271 #: rhodecode/apps/admin/views/system_info.py:123
269 272 msgid "Load"
270 273 msgstr ""
271 274
272 275 #: rhodecode/apps/admin/views/system_info.py:124
273 276 msgid "Memory"
274 277 msgstr ""
275 278
276 279 #: rhodecode/apps/admin/views/system_info.py:125
277 280 msgid "Uptime"
278 281 msgstr ""
279 282
280 283 #: rhodecode/apps/admin/views/system_info.py:129
281 284 msgid "Ulimit"
282 285 msgstr ""
283 286
284 287 #: rhodecode/apps/admin/views/system_info.py:132
285 288 msgid "Storage location"
286 289 msgstr ""
287 290
288 291 #: rhodecode/apps/admin/views/system_info.py:133
289 292 msgid "Storage info"
290 293 msgstr ""
291 294
292 295 #: rhodecode/apps/admin/views/system_info.py:134
293 296 msgid "Storage inodes"
294 297 msgstr ""
295 298
296 299 #: rhodecode/apps/admin/views/system_info.py:136
297 300 msgid "Gist storage location"
298 301 msgstr ""
299 302
300 303 #: rhodecode/apps/admin/views/system_info.py:137
301 304 msgid "Gist storage info"
302 305 msgstr ""
303 306
304 307 #: rhodecode/apps/admin/views/system_info.py:139
305 308 msgid "Archive cache storage location"
306 309 msgstr ""
307 310
308 311 #: rhodecode/apps/admin/views/system_info.py:140
309 312 msgid "Archive cache info"
310 313 msgstr ""
311 314
312 315 #: rhodecode/apps/admin/views/system_info.py:142
313 316 msgid "Temp storage location"
314 317 msgstr ""
315 318
316 319 #: rhodecode/apps/admin/views/system_info.py:143
317 320 msgid "Temp storage info"
318 321 msgstr ""
319 322
320 323 #: rhodecode/apps/admin/views/system_info.py:145
321 324 msgid "Search info"
322 325 msgstr ""
323 326
324 327 #: rhodecode/apps/admin/views/system_info.py:146
325 328 msgid "Search location"
326 329 msgstr ""
327 330
328 331 #: rhodecode/apps/admin/views/system_info.py:150
329 332 msgid "VCS Backends"
330 333 msgstr ""
331 334
332 335 #: rhodecode/apps/admin/views/system_info.py:151
333 336 #: rhodecode/templates/admin/settings/settings_system.mako:32
334 337 msgid "VCS Server"
335 338 msgstr ""
336 339
337 340 #: rhodecode/apps/admin/views/system_info.py:152
338 341 msgid "GIT"
339 342 msgstr ""
340 343
341 344 #: rhodecode/apps/admin/views/system_info.py:153
342 345 msgid "HG"
343 346 msgstr ""
344 347
345 348 #: rhodecode/apps/admin/views/system_info.py:154
346 349 msgid "SVN"
347 350 msgstr ""
348 351
349 352 #: rhodecode/apps/admin/views/user_groups.py:238
350 353 #, python-format
351 354 msgid "Created user group %(user_group_link)s"
352 355 msgstr ""
353 356
354 357 #: rhodecode/apps/admin/views/user_groups.py:260
355 358 #, python-format
356 359 msgid "Error occurred during creation of user group %s"
357 360 msgstr ""
358 361
359 362 #: rhodecode/apps/admin/views/users.py:222
360 363 #, python-format
361 364 msgid "Created user %(user_link)s"
362 365 msgstr ""
363 366
364 367 #: rhodecode/apps/admin/views/users.py:243
365 368 #, python-format
366 369 msgid "Error occurred during creation of user %s"
367 370 msgstr ""
368 371
369 372 #: rhodecode/apps/admin/views/users.py:345
370 373 msgid "User updated successfully"
371 374 msgstr ""
372 375
373 376 #: rhodecode/apps/admin/views/users.py:363
374 377 #, python-format
375 378 msgid "Error occurred during update of user %s"
376 379 msgstr ""
377 380
378 381 #: rhodecode/apps/admin/views/users.py:394
379 382 #, python-format
380 383 msgid "Detached %s repositories"
381 384 msgstr ""
382 385
383 386 #: rhodecode/apps/admin/views/users.py:397
384 387 #, python-format
385 388 msgid "Deleted %s repositories"
386 389 msgstr ""
387 390
388 391 #: rhodecode/apps/admin/views/users.py:403
389 392 #, python-format
390 393 msgid "Detached %s repository groups"
391 394 msgstr ""
392 395
393 396 #: rhodecode/apps/admin/views/users.py:406
394 397 #, python-format
395 398 msgid "Deleted %s repository groups"
396 399 msgstr ""
397 400
398 401 #: rhodecode/apps/admin/views/users.py:412
399 402 #, python-format
400 403 msgid "Detached %s user groups"
401 404 msgstr ""
402 405
403 406 #: rhodecode/apps/admin/views/users.py:415
404 407 #, python-format
405 408 msgid "Deleted %s user groups"
406 409 msgstr ""
407 410
408 411 #: rhodecode/apps/admin/views/users.py:421
409 412 #, python-format
410 413 msgid "Detached %s pull requests"
411 414 msgstr ""
412 415
413 416 #: rhodecode/apps/admin/views/users.py:424
414 417 #, python-format
415 418 msgid "Deleted %s pull requests"
416 419 msgstr ""
417 420
418 421 #: rhodecode/apps/admin/views/users.py:430
419 422 #, python-format
420 423 msgid "Detached %s artifacts"
421 424 msgstr ""
422 425
423 426 #: rhodecode/apps/admin/views/users.py:433
424 427 #, python-format
425 428 msgid "Deleted %s artifacts"
426 429 msgstr ""
427 430
428 431 #: rhodecode/apps/admin/views/users.py:482
429 432 msgid "Successfully deleted user `{}`"
430 433 msgstr ""
431 434
432 435 #: rhodecode/apps/admin/views/users.py:489
433 436 msgid "An error occurred during deletion of user"
434 437 msgstr ""
435 438
436 439 #: rhodecode/apps/admin/views/users.py:558
437 440 msgid ""
438 441 "The user participates as reviewer in {} pull request and cannot be deleted. \n"
439 442 "You can set the user to \"{}\" instead of deleting it."
440 443 msgstr ""
441 444
442 445 #: rhodecode/apps/admin/views/users.py:564
443 446 msgid ""
444 447 "The user participates as reviewer in {} pull requests and cannot be deleted. \n"
445 448 "You can set the user to \"{}\" instead of deleting it."
446 449 msgstr ""
447 450
448 451 #: rhodecode/apps/admin/views/users.py:653
449 452 msgid "User global permissions updated successfully"
450 453 msgstr ""
451 454
452 455 #: rhodecode/apps/admin/views/users.py:671
453 456 #: rhodecode/apps/user_group/views/__init__.py:479
454 457 msgid "An error occurred during permissions saving"
455 458 msgstr ""
456 459
457 460 #: rhodecode/apps/admin/views/users.py:694
458 461 msgid "Force password change enabled for user"
459 462 msgstr ""
460 463
461 464 #: rhodecode/apps/admin/views/users.py:702
462 465 #: rhodecode/apps/admin/views/users.py:732
463 466 msgid "An error occurred during password reset for user"
464 467 msgstr ""
465 468
466 469 #: rhodecode/apps/admin/views/users.py:723
467 470 msgid "Force password change disabled for user"
468 471 msgstr ""
469 472
470 473 #: rhodecode/apps/admin/views/users.py:796
471 474 #, python-format
472 475 msgid "Linked repository group `%s` as personal"
473 476 msgstr ""
474 477
475 478 #: rhodecode/apps/admin/views/users.py:802
476 479 #, python-format
477 480 msgid "Created repository group `%s`"
478 481 msgstr ""
479 482
480 483 #: rhodecode/apps/admin/views/users.py:806
481 484 #, python-format
482 485 msgid "Repository group `%s` is already taken"
483 486 msgstr ""
484 487
485 488 #: rhodecode/apps/admin/views/users.py:811
486 489 msgid "An error occurred during repository group creation for user"
487 490 msgstr ""
488 491
489 492 #: rhodecode/apps/admin/views/users.py:834
490 493 #: rhodecode/apps/my_account/views/my_account.py:161
491 #: rhodecode/templates/admin/my_account/my_account_auth_tokens.mako:22
492 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:27
494 #: rhodecode/templates/admin/my_account/my_account_auth_tokens.mako:28
495 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:33
493 496 msgid "Role"
494 497 msgstr ""
495 498
496 499 #: rhodecode/apps/admin/views/users.py:892
497 500 #: rhodecode/apps/my_account/views/my_account.py:217
498 501 msgid "Auth token successfully created"
499 502 msgstr ""
500 503
501 504 #: rhodecode/apps/admin/views/users.py:921
502 505 #: rhodecode/apps/my_account/views/my_account.py:241
503 506 msgid "Auth token successfully deleted"
504 507 msgstr ""
505 508
506 509 #: rhodecode/apps/admin/views/users.py:997
507 510 #: rhodecode/apps/my_account/views/my_account_ssh_keys.py:117
508 511 msgid "Ssh Key successfully created"
509 512 msgstr ""
510 513
511 514 #: rhodecode/apps/admin/views/users.py:1003
512 515 #: rhodecode/apps/admin/views/users.py:1007
513 516 #: rhodecode/apps/my_account/views/my_account_ssh_keys.py:123
514 517 #: rhodecode/apps/my_account/views/my_account_ssh_keys.py:127
515 518 msgid "An error occurred during ssh key saving: {}"
516 519 msgstr ""
517 520
518 521 #: rhodecode/apps/admin/views/users.py:1041
519 522 #: rhodecode/apps/my_account/views/my_account_ssh_keys.py:157
520 523 msgid "Ssh key successfully deleted"
521 524 msgstr ""
522 525
523 526 #: rhodecode/apps/admin/views/users.py:1087
524 527 #, python-format
525 528 msgid "Added new email address `%s` for user account"
526 529 msgstr ""
527 530
528 531 #: rhodecode/apps/admin/views/users.py:1093
529 532 msgid "Email `{}` is already registered for another user."
530 533 msgstr ""
531 534
532 535 #: rhodecode/apps/admin/views/users.py:1097
533 536 msgid "An error occurred during email saving"
534 537 msgstr ""
535 538
536 539 #: rhodecode/apps/admin/views/users.py:1124
537 540 msgid "Removed email address from user account"
538 541 msgstr ""
539 542
540 543 #: rhodecode/apps/admin/views/users.py:1170
541 544 #, python-format
542 545 msgid "An error occurred during ip saving:%s"
543 546 msgstr ""
544 547
545 548 #: rhodecode/apps/admin/views/users.py:1192
546 549 msgid "An error occurred during ip saving"
547 550 msgstr ""
548 551
549 552 #: rhodecode/apps/admin/views/users.py:1196
550 553 #, python-format
551 554 msgid "Added ips %s to user whitelist"
552 555 msgstr ""
553 556
554 557 #: rhodecode/apps/admin/views/users.py:1226
555 558 msgid "Removed ip address from user whitelist"
556 559 msgstr ""
557 560
558 561 #: rhodecode/apps/admin/views/users.py:1291
559 562 msgid "Groups successfully changed"
560 563 msgstr ""
561 564
562 565 #: rhodecode/apps/admin/views/users.py:1411
563 566 msgid "Deleted {} cache keys"
564 567 msgstr ""
565 568
566 569 #: rhodecode/apps/gist/views.py:57 rhodecode/model/auth_token.py:51
567 570 msgid "forever"
568 571 msgstr ""
569 572
570 573 #: rhodecode/apps/gist/views.py:58
571 574 msgid "5 minutes"
572 575 msgstr ""
573 576
574 577 #: rhodecode/apps/gist/views.py:59
575 578 msgid "1 hour"
576 579 msgstr ""
577 580
578 581 #: rhodecode/apps/gist/views.py:60
579 582 msgid "1 day"
580 583 msgstr ""
581 584
582 585 #: rhodecode/apps/gist/views.py:61
583 586 msgid "1 month"
584 587 msgstr ""
585 588
586 #: rhodecode/apps/gist/views.py:64 rhodecode/public/js/scripts.js:46848
589 #: rhodecode/apps/gist/views.py:64 rhodecode/public/js/scripts.js:47676
587 590 #: rhodecode/public/js/scripts.min.js:1
588 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:35
591 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:42
589 592 #: rhodecode/public/js/src/rhodecode.js:625
590 593 msgid "Lifetime"
591 594 msgstr ""
592 595
593 596 #: rhodecode/apps/gist/views.py:66
594 597 msgid "Requires registered account"
595 598 msgstr ""
596 599
597 600 #: rhodecode/apps/gist/views.py:67
598 601 msgid "Can be accessed by anonymous users"
599 602 msgstr ""
600 603
601 604 #: rhodecode/apps/gist/views.py:218
602 605 msgid "Error occurred during gist creation"
603 606 msgstr ""
604 607
605 608 #: rhodecode/apps/gist/views.py:242
606 609 #, python-format
607 610 msgid "Deleted gist %s"
608 611 msgstr ""
609 612
610 613 #: rhodecode/apps/gist/views.py:330
611 614 #: rhodecode/templates/admin/gists/gist_show.mako:76
612 #: rhodecode/templates/admin/my_account/my_account_auth_tokens.mako:44
613 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:49
615 #: rhodecode/templates/admin/my_account/my_account_auth_tokens.mako:50
616 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:55
614 617 #: rhodecode/templates/data_table/_dt_elements.mako:341
615 618 msgid "never"
616 619 msgstr ""
617 620
618 621 #: rhodecode/apps/gist/views.py:336
619 622 #, python-format
620 623 msgid "%(expiry)s - current value"
621 624 msgstr ""
622 625
623 626 #: rhodecode/apps/gist/views.py:381
624 627 msgid "Successfully updated gist content"
625 628 msgstr ""
626 629
627 630 #: rhodecode/apps/gist/views.py:386
628 631 msgid "Successfully updated gist data"
629 632 msgstr ""
630 633
631 634 #: rhodecode/apps/gist/views.py:389
632 635 msgid "Error occurred during update of gist {}: {}"
633 636 msgstr ""
634 637
635 638 #: rhodecode/apps/gist/views.py:393
636 639 #, python-format
637 640 msgid "Error occurred during update of gist %s"
638 641 msgstr ""
639 642
640 643 #: rhodecode/apps/home/views.py:452
641 #: rhodecode/apps/repository/views/repo_pull_requests.py:914
642 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:209
644 #: rhodecode/apps/repository/views/repo_pull_requests.py:930
645 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:219
643 646 #: rhodecode/templates/admin/repos/repo_add.mako:15
644 647 #: rhodecode/templates/admin/repos/repo_add.mako:19
645 648 #: rhodecode/templates/admin/users/user_edit_advanced.mako:12
646 #: rhodecode/templates/base/base.mako:107
647 #: rhodecode/templates/base/base.mako:126
648 #: rhodecode/templates/base/base.mako:1172
649 #: rhodecode/templates/base/base.mako:112
650 #: rhodecode/templates/base/base.mako:131
651 #: rhodecode/templates/base/base.mako:1192
649 652 msgid "Repositories"
650 653 msgstr ""
651 654
652 655 #: rhodecode/apps/home/views.py:479
653 656 #: rhodecode/templates/admin/integrations/form.mako:17
654 657 #: rhodecode/templates/admin/integrations/list.mako:10
655 658 #: rhodecode/templates/admin/permissions/permissions_objects.mako:31
656 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:208
659 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:218
657 660 msgid "Repository Groups"
658 661 msgstr ""
659 662
660 663 #: rhodecode/apps/journal/views.py:133 rhodecode/apps/journal/views.py:179
661 664 msgid "public journal"
662 665 msgstr ""
663 666
664 667 #: rhodecode/apps/journal/views.py:137 rhodecode/apps/journal/views.py:183
665 668 msgid "journal"
666 669 msgstr ""
667 670
668 671 #: rhodecode/apps/login/views.py:304 rhodecode/apps/login/views.py:403
669 672 msgid "Bad captcha"
670 673 msgstr ""
671 674
672 675 #: rhodecode/apps/login/views.py:330
673 676 msgid "You have successfully registered with RhodeCode. You can log-in now."
674 677 msgstr ""
675 678
676 679 #: rhodecode/apps/login/views.py:334
677 680 msgid "Please use the {identity} button to log-in"
678 681 msgstr ""
679 682
680 683 #: rhodecode/apps/login/views.py:372
681 684 msgid "If such email exists, a password reset link was sent to it."
682 685 msgstr ""
683 686
684 687 #: rhodecode/apps/login/views.py:385
685 688 msgid "Password reset has been disabled."
686 689 msgstr ""
687 690
688 691 #: rhodecode/apps/login/views.py:474
689 692 msgid "Given reset token is invalid"
690 693 msgstr ""
691 694
692 695 #: rhodecode/apps/login/views.py:482
693 696 msgid "Your password reset was successful, a new password has been sent to your email"
694 697 msgstr ""
695 698
696 699 #: rhodecode/apps/my_account/views/my_account.py:136
697 700 msgid "Error occurred during update of user password"
698 701 msgstr ""
699 702
700 703 #: rhodecode/apps/my_account/views/my_account.py:143
701 704 msgid "Successfully updated password"
702 705 msgstr ""
703 706
704 707 #: rhodecode/apps/my_account/views/my_account.py:305
705 708 msgid "Error occurred during adding email"
706 709 msgstr ""
707 710
708 711 #: rhodecode/apps/my_account/views/my_account.py:308
709 712 msgid "Successfully added email"
710 713 msgstr ""
711 714
712 715 #: rhodecode/apps/my_account/views/my_account.py:330
713 716 msgid "Email successfully deleted"
714 717 msgstr ""
715 718
716 719 #: rhodecode/apps/my_account/views/my_account.py:540
717 720 msgid "Position {} is defined twice. Please correct this error."
718 721 msgstr ""
719 722
720 723 #: rhodecode/apps/my_account/views/my_account.py:553
721 724 msgid "Update Bookmarks"
722 725 msgstr ""
723 726
724 727 #: rhodecode/apps/my_account/views/my_account.py:555
725 728 msgid "Failed to update bookmarks. Make sure an unique position is used."
726 729 msgstr ""
727 730
728 731 #: rhodecode/apps/my_account/views/my_account.py:707
729 732 msgid "Your account was updated successfully"
730 733 msgstr ""
731 734
732 735 #: rhodecode/apps/my_account/views/my_account.py:714
733 736 msgid "Error occurred during update of user"
734 737 msgstr ""
735 738
736 739 #: rhodecode/apps/repo_group/views/repo_group_advanced.py:57
737 740 #: rhodecode/apps/repository/views/repo_settings_advanced.py:85
738 741 msgid "updated commit cache"
739 742 msgstr ""
740 743
741 744 #: rhodecode/apps/repo_group/views/repo_group_advanced.py:105
742 745 #, python-format
743 746 msgid "Removed repository group `%s`"
744 747 msgstr ""
745 748
746 749 #: rhodecode/apps/repo_group/views/repo_group_advanced.py:109
747 750 #, python-format
748 751 msgid "Error occurred during deletion of repository group %s"
749 752 msgstr ""
750 753
751 754 #: rhodecode/apps/repo_group/views/repo_group_permissions.py:75
752 755 #: rhodecode/apps/user_group/views/__init__.py:346
753 756 msgid "Cannot change permission for yourself as admin"
754 757 msgstr ""
755 758
756 759 #: rhodecode/apps/repo_group/views/repo_group_permissions.py:99
757 760 msgid "Repository Group permissions updated"
758 761 msgstr ""
759 762
760 763 #: rhodecode/apps/repo_group/views/repo_group_settings.py:174
761 764 msgid "Repository Group `{}` updated successfully"
762 765 msgstr ""
763 766
764 767 #: rhodecode/apps/repo_group/views/repo_group_settings.py:179
765 768 #, python-format
766 769 msgid "Error occurred during update of repository group %s"
767 770 msgstr ""
768 771
769 772 #: rhodecode/apps/repository/views/repo_caches.py:80
770 773 msgid "Cache invalidation successful"
771 774 msgstr ""
772 775
773 776 #: rhodecode/apps/repository/views/repo_caches.py:84
774 777 msgid "An error occurred during cache invalidation"
775 778 msgstr ""
776 779
777 780 #: rhodecode/apps/repository/views/repo_changelog.py:66
778 781 #: rhodecode/apps/repository/views/repo_compare.py:64
779 #: rhodecode/apps/repository/views/repo_pull_requests.py:763
782 #: rhodecode/apps/repository/views/repo_pull_requests.py:779
780 783 msgid "There are no commits yet"
781 784 msgstr ""
782 785
783 786 #: rhodecode/apps/repository/views/repo_changelog.py:71
784 #: rhodecode/apps/repository/views/repo_files.py:185
785 787 #: rhodecode/apps/repository/views/repo_files.py:205
786 788 msgid "No such commit exists for this repository"
787 789 msgstr ""
788 790
789 791 #: rhodecode/apps/repository/views/repo_checks.py:103
790 792 #, python-format
791 793 msgid "Created repository %s from %s"
792 794 msgstr ""
793 795
794 796 #: rhodecode/apps/repository/views/repo_checks.py:112
795 797 #, python-format
796 798 msgid "Forked repository %s as %s"
797 799 msgstr ""
798 800
799 801 #: rhodecode/apps/repository/views/repo_checks.py:115
800 802 #, python-format
801 803 msgid "Created repository %s"
802 804 msgstr ""
803 805
804 #: rhodecode/apps/repository/views/repo_commits.py:111
806 #: rhodecode/apps/repository/views/repo_commits.py:112
805 807 msgid "No such commit exists. Org exception: `{}`"
806 808 msgstr ""
807 809
808 #: rhodecode/apps/repository/views/repo_commits.py:330
809 #: rhodecode/apps/repository/views/repo_pull_requests.py:1399
810 #: rhodecode/apps/repository/views/repo_commits.py:331
811 #: rhodecode/apps/repository/views/repo_pull_requests.py:1415
810 812 #, python-format
811 813 msgid "Status change %(transition_icon)s %(status)s"
812 814 msgstr ""
813 815
814 #: rhodecode/apps/repository/views/repo_commits.py:375
816 #: rhodecode/apps/repository/views/repo_commits.py:376
815 817 msgid "Changing the status of a commit associated with a closed pull request is not allowed"
816 818 msgstr ""
817 819
818 820 #: rhodecode/apps/repository/views/repo_compare.py:102
819 821 msgid "Select commit"
820 822 msgstr ""
821 823
822 824 #: rhodecode/apps/repository/views/repo_compare.py:173
823 825 msgid "Could not find the source repo: `{}`"
824 826 msgstr ""
825 827
826 828 #: rhodecode/apps/repository/views/repo_compare.py:181
827 829 msgid "Could not find the target repo: `{}`"
828 830 msgstr ""
829 831
830 832 #: rhodecode/apps/repository/views/repo_compare.py:192
831 833 msgid "The comparison of two different kinds of remote repos is not available"
832 834 msgstr ""
833 835
834 836 #: rhodecode/apps/repository/views/repo_compare.py:225
835 837 msgid "Could not compare repos with different large file settings"
836 838 msgstr ""
837 839
838 840 #: rhodecode/apps/repository/views/repo_compare.py:271
839 841 #, python-format
840 842 msgid "Repositories unrelated. Cannot compare commit %(commit1)s from repository %(repo1)s with commit %(commit2)s from repository %(repo2)s."
841 843 msgstr ""
842 844
843 845 #: rhodecode/apps/repository/views/repo_feed.py:68
844 846 #, python-format
845 847 msgid "Changes on %s repository"
846 848 msgstr ""
847 849
848 850 #: rhodecode/apps/repository/views/repo_feed.py:69
849 851 #, python-format
850 852 msgid "%s %s feed"
851 853 msgstr ""
852 854
853 855 #: rhodecode/apps/repository/views/repo_files.py:96
854 856 #, python-format
855 857 msgid "This repository has been locked by %s on %s"
856 858 msgstr ""
857 859
858 860 #: rhodecode/apps/repository/views/repo_files.py:109
859 861 msgid "Cannot modify file. Given commit `{}` is not head of a branch."
860 862 msgstr ""
861 863
862 864 #: rhodecode/apps/repository/views/repo_files.py:127
863 865 msgid "Branch `{}` changes forbidden by rule {}."
864 866 msgstr ""
865 867
866 868 #: rhodecode/apps/repository/views/repo_files.py:175
867 869 msgid "Click here to add a new file."
868 870 msgstr ""
869 871
870 872 #: rhodecode/apps/repository/views/repo_files.py:180
871 873 #, python-format
872 874 msgid "There are no files yet. %s"
873 875 msgstr ""
874 876
877 #: rhodecode/apps/repository/views/repo_files.py:185
878 msgid "No such commit exists for this repository. Commit: {}"
879 msgstr ""
880
875 881 #: rhodecode/apps/repository/views/repo_files.py:341
876 882 msgid "Downloads disabled"
877 883 msgstr ""
878 884
879 885 #: rhodecode/apps/repository/views/repo_files.py:347
880 886 msgid "Unknown archive type for: `{}`"
881 887 msgstr ""
882 888
883 889 #: rhodecode/apps/repository/views/repo_files.py:353
884 890 msgid "Unknown commit_id {}"
885 891 msgstr ""
886 892
887 893 #: rhodecode/apps/repository/views/repo_files.py:356
888 894 msgid "Empty repository"
889 895 msgstr ""
890 896
891 897 #: rhodecode/apps/repository/views/repo_files.py:361
892 898 msgid "No node at path {} for this repository"
893 899 msgstr ""
894 900
895 901 #: rhodecode/apps/repository/views/repo_files.py:410
896 902 msgid "Unknown archive type"
897 903 msgstr ""
898 904
899 #: rhodecode/apps/repository/views/repo_files.py:990
905 #: rhodecode/apps/repository/views/repo_files.py:1005
900 906 msgid "Changesets"
901 907 msgstr ""
902 908
903 #: rhodecode/apps/repository/views/repo_files.py:1011
909 #: rhodecode/apps/repository/views/repo_files.py:1026
904 910 #: rhodecode/apps/repository/views/repo_summary.py:264
905 911 #: rhodecode/model/pull_request.py:1740 rhodecode/model/scm.py:995
906 912 #: rhodecode/templates/base/vcs_settings.mako:235
907 913 #: rhodecode/templates/summary/components.mako:10
908 914 msgid "Branches"
909 915 msgstr ""
910 916
911 #: rhodecode/apps/repository/views/repo_files.py:1015
917 #: rhodecode/apps/repository/views/repo_files.py:1030
912 918 #: rhodecode/model/scm.py:1012 rhodecode/templates/base/vcs_settings.mako:260
913 919 #: rhodecode/templates/summary/components.mako:34
914 920 msgid "Tags"
915 921 msgstr ""
916 922
917 #: rhodecode/apps/repository/views/repo_files.py:1169
918 #: rhodecode/apps/repository/views/repo_files.py:1197
923 #: rhodecode/apps/repository/views/repo_files.py:1184
924 #: rhodecode/apps/repository/views/repo_files.py:1212
919 925 msgid "Deleted file {} via RhodeCode Enterprise"
920 926 msgstr ""
921 927
922 #: rhodecode/apps/repository/views/repo_files.py:1218
928 #: rhodecode/apps/repository/views/repo_files.py:1233
923 929 msgid "Successfully deleted file `{}`"
924 930 msgstr ""
925 931
926 #: rhodecode/apps/repository/views/repo_files.py:1222
927 #: rhodecode/apps/repository/views/repo_files.py:1339
928 #: rhodecode/apps/repository/views/repo_files.py:1470
929 #: rhodecode/apps/repository/views/repo_files.py:1593
932 #: rhodecode/apps/repository/views/repo_files.py:1237
933 #: rhodecode/apps/repository/views/repo_files.py:1354
934 #: rhodecode/apps/repository/views/repo_files.py:1485
935 #: rhodecode/apps/repository/views/repo_files.py:1608
930 936 msgid "Error occurred during commit"
931 937 msgstr ""
932 938
933 #: rhodecode/apps/repository/views/repo_files.py:1254
934 #: rhodecode/apps/repository/views/repo_files.py:1285
939 #: rhodecode/apps/repository/views/repo_files.py:1269
940 #: rhodecode/apps/repository/views/repo_files.py:1300
935 941 msgid "Edited file {} via RhodeCode Enterprise"
936 942 msgstr ""
937 943
938 #: rhodecode/apps/repository/views/repo_files.py:1308
944 #: rhodecode/apps/repository/views/repo_files.py:1323
939 945 msgid "No changes detected on {}"
940 946 msgstr ""
941 947
942 #: rhodecode/apps/repository/views/repo_files.py:1332
948 #: rhodecode/apps/repository/views/repo_files.py:1347
943 949 msgid "Successfully committed changes to file `{}`"
944 950 msgstr ""
945 951
946 #: rhodecode/apps/repository/views/repo_files.py:1373
947 #: rhodecode/apps/repository/views/repo_files.py:1414
952 #: rhodecode/apps/repository/views/repo_files.py:1388
953 #: rhodecode/apps/repository/views/repo_files.py:1429
948 954 msgid "Added file via RhodeCode Enterprise"
949 955 msgstr ""
950 956
951 #: rhodecode/apps/repository/views/repo_files.py:1430
957 #: rhodecode/apps/repository/views/repo_files.py:1445
952 958 msgid "No filename specified"
953 959 msgstr ""
954 960
955 #: rhodecode/apps/repository/views/repo_files.py:1455
961 #: rhodecode/apps/repository/views/repo_files.py:1470
956 962 msgid "Successfully committed new file `{}`"
957 963 msgstr ""
958 964
959 #: rhodecode/apps/repository/views/repo_files.py:1463
960 #: rhodecode/apps/repository/views/repo_files.py:1575
965 #: rhodecode/apps/repository/views/repo_files.py:1478
966 #: rhodecode/apps/repository/views/repo_files.py:1590
961 967 msgid "The location specified must be a relative path and must not contain .. in the path"
962 968 msgstr ""
963 969
964 #: rhodecode/apps/repository/views/repo_files.py:1520
970 #: rhodecode/apps/repository/views/repo_files.py:1535
965 971 msgid "Uploaded file via RhodeCode Enterprise"
966 972 msgstr ""
967 973
968 #: rhodecode/apps/repository/views/repo_files.py:1564
974 #: rhodecode/apps/repository/views/repo_files.py:1579
969 975 msgid "Successfully committed {} new files"
970 976 msgstr ""
971 977
972 #: rhodecode/apps/repository/views/repo_files.py:1566
978 #: rhodecode/apps/repository/views/repo_files.py:1581
973 979 msgid "Successfully committed 1 new file"
974 980 msgstr ""
975 981
976 982 #: rhodecode/apps/repository/views/repo_forks.py:146
977 983 msgid "Compare fork"
978 984 msgstr ""
979 985
980 986 #: rhodecode/apps/repository/views/repo_forks.py:251
981 987 #, python-format
982 988 msgid "An error occurred during repository forking %s"
983 989 msgstr ""
984 990
985 991 #: rhodecode/apps/repository/views/repo_permissions.py:57
986 992 msgid "Explicitly add user or user group with write+ permission to modify their branch permissions."
987 993 msgstr ""
988 994
989 995 #: rhodecode/apps/repository/views/repo_permissions.py:92
990 996 msgid "Repository access permissions updated"
991 997 msgstr ""
992 998
993 999 #: rhodecode/apps/repository/views/repo_permissions.py:126
994 1000 msgid "Repository `{}` private mode set successfully"
995 1001 msgstr ""
996 1002
997 1003 #: rhodecode/apps/repository/views/repo_permissions.py:134
998 1004 #: rhodecode/apps/repository/views/repo_settings.py:176
999 1005 msgid "Error occurred during update of repository {}"
1000 1006 msgstr ""
1001 1007
1002 #: rhodecode/apps/repository/views/repo_pull_requests.py:287
1008 #: rhodecode/apps/repository/views/repo_pull_requests.py:291
1003 1009 msgid "Pull Request state was force changed to `{}`"
1004 1010 msgstr ""
1005 1011
1006 #: rhodecode/apps/repository/views/repo_pull_requests.py:793
1012 #: rhodecode/apps/repository/views/repo_pull_requests.py:809
1007 1013 msgid "Commit does not exist"
1008 1014 msgstr ""
1009 1015
1010 #: rhodecode/apps/repository/views/repo_pull_requests.py:945
1016 #: rhodecode/apps/repository/views/repo_pull_requests.py:961
1011 1017 msgid "Error creating pull request: {}"
1012 1018 msgstr ""
1013 1019
1014 #: rhodecode/apps/repository/views/repo_pull_requests.py:965
1020 #: rhodecode/apps/repository/views/repo_pull_requests.py:981
1015 1021 msgid "source_repo or target repo not found"
1016 1022 msgstr ""
1017 1023
1018 #: rhodecode/apps/repository/views/repo_pull_requests.py:976
1024 #: rhodecode/apps/repository/views/repo_pull_requests.py:992
1019 1025 msgid "Not Enough permissions to source repo `{}`."
1020 1026 msgstr ""
1021 1027
1022 #: rhodecode/apps/repository/views/repo_pull_requests.py:991
1028 #: rhodecode/apps/repository/views/repo_pull_requests.py:1007
1023 1029 msgid "Not Enough permissions to target repo `{}`."
1024 1030 msgstr ""
1025 1031
1026 #: rhodecode/apps/repository/views/repo_pull_requests.py:1055
1032 #: rhodecode/apps/repository/views/repo_pull_requests.py:1071
1027 1033 msgid "Successfully opened new pull request"
1028 1034 msgstr ""
1029 1035
1030 #: rhodecode/apps/repository/views/repo_pull_requests.py:1058
1036 #: rhodecode/apps/repository/views/repo_pull_requests.py:1074
1031 1037 msgid "Error occurred during creation of this pull request."
1032 1038 msgstr ""
1033 1039
1034 #: rhodecode/apps/repository/views/repo_pull_requests.py:1090
1035 #: rhodecode/apps/repository/views/repo_pull_requests.py:1145
1040 #: rhodecode/apps/repository/views/repo_pull_requests.py:1106
1041 #: rhodecode/apps/repository/views/repo_pull_requests.py:1161
1036 1042 msgid "Cannot update closed pull requests."
1037 1043 msgstr ""
1038 1044
1039 #: rhodecode/apps/repository/views/repo_pull_requests.py:1112
1045 #: rhodecode/apps/repository/views/repo_pull_requests.py:1128
1040 1046 msgid "Cannot update pull requests commits in state other than `{}`. Current state is: `{}`"
1041 1047 msgstr ""
1042 1048
1043 #: rhodecode/apps/repository/views/repo_pull_requests.py:1151
1049 #: rhodecode/apps/repository/views/repo_pull_requests.py:1167
1044 1050 msgid "Pull request title & description updated."
1045 1051 msgstr ""
1046 1052
1047 #: rhodecode/apps/repository/views/repo_pull_requests.py:1173
1053 #: rhodecode/apps/repository/views/repo_pull_requests.py:1189
1048 1054 msgid "Pull request updated to \"{source_commit_id}\" with {count_added} added, {count_removed} removed commits. Source of changes: {change_source}"
1049 1055 msgstr ""
1050 1056
1051 #: rhodecode/apps/repository/views/repo_pull_requests.py:1187
1057 #: rhodecode/apps/repository/views/repo_pull_requests.py:1203
1052 1058 msgid "Reload page"
1053 1059 msgstr ""
1054 1060
1055 #: rhodecode/apps/repository/views/repo_pull_requests.py:1222
1061 #: rhodecode/apps/repository/views/repo_pull_requests.py:1238
1056 1062 msgid "Cannot merge pull requests in state other than `{}`. Current state is: `{}`"
1057 1063 msgstr ""
1058 1064
1059 #: rhodecode/apps/repository/views/repo_pull_requests.py:1268
1065 #: rhodecode/apps/repository/views/repo_pull_requests.py:1284
1060 1066 msgid "Pull request was successfully merged and closed."
1061 1067 msgstr ""
1062 1068
1063 #: rhodecode/apps/repository/views/repo_pull_requests.py:1292
1069 #: rhodecode/apps/repository/views/repo_pull_requests.py:1308
1064 1070 msgid "Pull request reviewers updated."
1065 1071 msgstr ""
1066 1072
1067 #: rhodecode/apps/repository/views/repo_pull_requests.py:1325
1073 #: rhodecode/apps/repository/views/repo_pull_requests.py:1341
1068 1074 msgid "Successfully deleted pull request"
1069 1075 msgstr ""
1070 1076
1071 1077 #: rhodecode/apps/repository/views/repo_settings.py:172
1072 1078 msgid "Repository `{}` updated successfully"
1073 1079 msgstr ""
1074 1080
1075 1081 #: rhodecode/apps/repository/views/repo_settings.py:209
1076 1082 msgid "Unlocked"
1077 1083 msgstr ""
1078 1084
1079 1085 #: rhodecode/apps/repository/views/repo_settings.py:214
1080 1086 msgid "Locked"
1081 1087 msgstr ""
1082 1088
1083 1089 #: rhodecode/apps/repository/views/repo_settings.py:216
1084 1090 #, python-format
1085 1091 msgid "Repository has been %s"
1086 1092 msgstr ""
1087 1093
1088 1094 #: rhodecode/apps/repository/views/repo_settings.py:220
1089 1095 #: rhodecode/apps/repository/views/repo_settings_advanced.py:305
1090 1096 msgid "An error occurred during unlocking"
1091 1097 msgstr ""
1092 1098
1093 1099 #: rhodecode/apps/repository/views/repo_settings.py:264
1094 1100 msgid "An error occurred during deletion of repository stats"
1095 1101 msgstr ""
1096 1102
1097 1103 #: rhodecode/apps/repository/views/repo_settings_advanced.py:114
1098 1104 #, python-format
1099 1105 msgid "Archived repository `%s`"
1100 1106 msgstr ""
1101 1107
1102 1108 #: rhodecode/apps/repository/views/repo_settings_advanced.py:119
1103 1109 #, python-format
1104 1110 msgid "An error occurred during archiving of `%s`"
1105 1111 msgstr ""
1106 1112
1107 1113 #: rhodecode/apps/repository/views/repo_settings_advanced.py:157
1108 1114 #, python-format
1109 1115 msgid "Detached %s forks"
1110 1116 msgstr ""
1111 1117
1112 1118 #: rhodecode/apps/repository/views/repo_settings_advanced.py:159
1113 1119 #, python-format
1114 1120 msgid "Deleted %s forks"
1115 1121 msgstr ""
1116 1122
1117 1123 #: rhodecode/apps/repository/views/repo_settings_advanced.py:168
1118 1124 #, python-format
1119 1125 msgid "Deleted repository `%s`"
1120 1126 msgstr ""
1121 1127
1122 1128 #: rhodecode/apps/repository/views/repo_settings_advanced.py:175
1123 1129 msgid "detach or delete"
1124 1130 msgstr ""
1125 1131
1126 1132 #: rhodecode/apps/repository/views/repo_settings_advanced.py:176
1127 1133 msgid "Cannot delete `{repo}` it still contains attached forks. Try using {delete_or_detach} option."
1128 1134 msgstr ""
1129 1135
1130 1136 #: rhodecode/apps/repository/views/repo_settings_advanced.py:191
1131 1137 msgid "Cannot delete `{repo}` it still contains {num} attached pull requests. Consider archiving the repository instead."
1132 1138 msgstr ""
1133 1139
1134 1140 #: rhodecode/apps/repository/views/repo_settings_advanced.py:200
1135 1141 #, python-format
1136 1142 msgid "An error occurred during deletion of `%s`"
1137 1143 msgstr ""
1138 1144
1139 1145 #: rhodecode/apps/repository/views/repo_settings_advanced.py:225
1140 1146 msgid "Updated repository visibility in public journal"
1141 1147 msgstr ""
1142 1148
1143 1149 #: rhodecode/apps/repository/views/repo_settings_advanced.py:229
1144 1150 msgid "An error occurred during setting this repository in public journal"
1145 1151 msgstr ""
1146 1152
1147 1153 #: rhodecode/apps/repository/views/repo_settings_advanced.py:265
1148 1154 msgid "Nothing"
1149 1155 msgstr ""
1150 1156
1151 1157 #: rhodecode/apps/repository/views/repo_settings_advanced.py:268
1152 1158 #, python-format
1153 1159 msgid "Marked repo %s as fork of %s"
1154 1160 msgstr ""
1155 1161
1156 1162 #: rhodecode/apps/repository/views/repo_settings_advanced.py:275
1157 1163 msgid "An error occurred during this operation"
1158 1164 msgstr ""
1159 1165
1160 1166 #: rhodecode/apps/repository/views/repo_settings_advanced.py:299
1161 1167 msgid "Locked repository"
1162 1168 msgstr ""
1163 1169
1164 1170 #: rhodecode/apps/repository/views/repo_settings_advanced.py:302
1165 1171 msgid "Unlocked repository"
1166 1172 msgstr ""
1167 1173
1168 1174 #: rhodecode/apps/repository/views/repo_settings_advanced.py:322
1169 1175 msgid "installed updated hooks into this repository"
1170 1176 msgstr ""
1171 1177
1172 1178 #: rhodecode/apps/repository/views/repo_settings_fields.py:86
1173 1179 msgid "An error occurred during creation of field"
1174 1180 msgstr ""
1175 1181
1176 1182 #: rhodecode/apps/repository/views/repo_settings_fields.py:108
1177 1183 msgid "An error occurred during removal of field"
1178 1184 msgstr ""
1179 1185
1180 1186 #: rhodecode/apps/repository/views/repo_settings_issue_trackers.py:86
1181 1187 msgid "Error occurred during deleting issue tracker entry"
1182 1188 msgstr ""
1183 1189
1184 1190 #: rhodecode/apps/repository/views/repo_settings_remote.py:64
1185 1191 msgid "Pulled from remote location"
1186 1192 msgstr ""
1187 1193
1188 1194 #: rhodecode/apps/repository/views/repo_settings_remote.py:67
1189 1195 msgid "An error occurred during pull from remote location"
1190 1196 msgstr ""
1191 1197
1192 1198 #: rhodecode/apps/repository/views/repo_settings_vcs.py:147
1193 1199 msgid "Error occurred during updating repository VCS settings"
1194 1200 msgstr ""
1195 1201
1196 1202 #: rhodecode/apps/repository/views/repo_summary.py:240
1197 1203 #: rhodecode/templates/admin/permissions/permissions.mako:42
1198 1204 #: rhodecode/templates/summary/components.mako:8
1199 1205 msgid "Branch"
1200 1206 msgstr ""
1201 1207
1202 1208 #: rhodecode/apps/repository/views/repo_summary.py:241
1203 1209 #: rhodecode/templates/summary/components.mako:32
1204 1210 msgid "Tag"
1205 1211 msgstr ""
1206 1212
1207 1213 #: rhodecode/apps/repository/views/repo_summary.py:242
1208 1214 #: rhodecode/templates/summary/components.mako:44
1209 1215 msgid "Bookmark"
1210 1216 msgstr ""
1211 1217
1212 1218 #: rhodecode/apps/repository/views/repo_summary.py:265
1213 1219 msgid "Closed branches"
1214 1220 msgstr ""
1215 1221
1216 1222 #: rhodecode/apps/ssh_support/events.py:29
1217 1223 msgid "RhodeCode SSH Key files changed."
1218 1224 msgstr ""
1219 1225
1220 1226 #: rhodecode/apps/svn_support/events.py:30
1221 1227 msgid "Configuration for Apache mad_dav_svn changed."
1222 1228 msgstr ""
1223 1229
1224 1230 #: rhodecode/apps/user_group/views/__init__.py:188
1225 1231 #, python-format
1226 1232 msgid "Updated user group %s"
1227 1233 msgstr ""
1228 1234
1229 1235 #: rhodecode/apps/user_group/views/__init__.py:224
1230 1236 #, python-format
1231 1237 msgid "Error occurred during update of user group %s"
1232 1238 msgstr ""
1233 1239
1234 1240 #: rhodecode/apps/user_group/views/__init__.py:250
1235 1241 msgid "Successfully deleted user group"
1236 1242 msgstr ""
1237 1243
1238 1244 #: rhodecode/apps/user_group/views/__init__.py:255
1239 1245 msgid "An error occurred during deletion of user group"
1240 1246 msgstr ""
1241 1247
1242 1248 #: rhodecode/apps/user_group/views/__init__.py:359
1243 1249 msgid "Target group cannot be the same"
1244 1250 msgstr ""
1245 1251
1246 1252 #: rhodecode/apps/user_group/views/__init__.py:374
1247 1253 msgid "User Group permissions updated"
1248 1254 msgstr ""
1249 1255
1250 1256 #: rhodecode/apps/user_group/views/__init__.py:459
1251 1257 msgid "User Group global permissions updated successfully"
1252 1258 msgstr ""
1253 1259
1254 1260 #: rhodecode/apps/user_group/views/__init__.py:541
1255 1261 msgid "User Group synchronization updated successfully"
1256 1262 msgstr ""
1257 1263
1258 1264 #: rhodecode/apps/user_group/views/__init__.py:545
1259 1265 msgid "An error occurred during synchronization update"
1260 1266 msgstr ""
1261 1267
1262 1268 #: rhodecode/authentication/routes.py:61
1263 1269 #: rhodecode/templates/admin/auth/plugin_settings.mako:14
1264 1270 msgid "Authentication Plugins"
1265 1271 msgstr ""
1266 1272
1267 1273 #: rhodecode/authentication/schema.py:36
1268 1274 msgid "Enable or disable this authentication plugin."
1269 1275 msgstr ""
1270 1276
1271 1277 #: rhodecode/authentication/schema.py:38 rhodecode/integrations/schema.py:32
1272 1278 #: rhodecode/model/permission.py:110 rhodecode/model/permission.py:114
1273 1279 #: rhodecode/model/permission.py:118 rhodecode/model/permission.py:122
1274 1280 #: rhodecode/model/permission.py:126 rhodecode/model/permission.py:130
1275 1281 #: rhodecode/model/validation_schema/schemas/integration_schema.py:195
1276 1282 #: rhodecode/templates/admin/auth/auth_settings.mako:64
1277 1283 #: rhodecode/templates/admin/integrations/list.mako:71
1278 1284 #: rhodecode/templates/admin/my_account/my_account_notifications.mako:23
1279 1285 msgid "Enabled"
1280 1286 msgstr ""
1281 1287
1282 1288 #: rhodecode/authentication/schema.py:44
1283 1289 msgid ""
1284 1290 "Amount of seconds to cache the authentication and permissions check response call for this plugin. \n"
1285 1291 "Useful for expensive calls like LDAP to improve the performance of the system (0 means disabled)."
1286 1292 msgstr ""
1287 1293
1288 1294 #: rhodecode/authentication/schema.py:49
1289 1295 msgid "Auth Cache TTL"
1290 1296 msgstr ""
1291 1297
1292 1298 #: rhodecode/authentication/views.py:92
1293 1299 msgid "Errors exist when saving plugin settings. Please check the form inputs."
1294 1300 msgstr ""
1295 1301
1296 1302 #: rhodecode/authentication/views.py:105 rhodecode/authentication/views.py:164
1297 1303 msgid "Auth settings updated successfully."
1298 1304 msgstr ""
1299 1305
1300 1306 #: rhodecode/authentication/views.py:167
1301 1307 msgid "Errors exist when saving plugin setting. Please check the form inputs."
1302 1308 msgstr ""
1303 1309
1304 1310 #: rhodecode/authentication/views.py:175
1305 1311 msgid "Error occurred during update of auth settings."
1306 1312 msgstr ""
1307 1313
1308 1314 #: rhodecode/authentication/plugins/auth_crowd.py:60
1309 1315 msgid "The FQDN or IP of the Atlassian CROWD Server"
1310 1316 msgstr ""
1311 1317
1312 1318 #: rhodecode/authentication/plugins/auth_crowd.py:62
1313 1319 msgid "Host"
1314 1320 msgstr ""
1315 1321
1316 1322 #: rhodecode/authentication/plugins/auth_crowd.py:67
1317 1323 msgid "The Port in use by the Atlassian CROWD Server"
1318 1324 msgstr ""
1319 1325
1320 1326 #: rhodecode/authentication/plugins/auth_crowd.py:69
1321 1327 #: rhodecode/authentication/plugins/auth_ldap.py:270
1322 1328 msgid "Port"
1323 1329 msgstr ""
1324 1330
1325 1331 #: rhodecode/authentication/plugins/auth_crowd.py:75
1326 1332 msgid "The Application Name to authenticate to CROWD"
1327 1333 msgstr ""
1328 1334
1329 1335 #: rhodecode/authentication/plugins/auth_crowd.py:77
1330 1336 msgid "Application Name"
1331 1337 msgstr ""
1332 1338
1333 1339 #: rhodecode/authentication/plugins/auth_crowd.py:82
1334 1340 msgid "The password to authenticate to CROWD"
1335 1341 msgstr ""
1336 1342
1337 1343 #: rhodecode/authentication/plugins/auth_crowd.py:84
1338 1344 msgid "Application Password"
1339 1345 msgstr ""
1340 1346
1341 1347 #: rhodecode/authentication/plugins/auth_crowd.py:89
1342 1348 msgid "A comma separated list of group names that identify users as RhodeCode Administrators"
1343 1349 msgstr ""
1344 1350
1345 1351 #: rhodecode/authentication/plugins/auth_crowd.py:93
1346 1352 msgid "Admin Groups"
1347 1353 msgstr ""
1348 1354
1349 1355 #: rhodecode/authentication/plugins/auth_crowd.py:217
1350 1356 msgid "CROWD"
1351 1357 msgstr ""
1352 1358
1353 1359 #: rhodecode/authentication/plugins/auth_headers.py:54
1354 1360 msgid "Header to extract the user from"
1355 1361 msgstr ""
1356 1362
1357 1363 #: rhodecode/authentication/plugins/auth_headers.py:56
1358 1364 msgid "Header"
1359 1365 msgstr ""
1360 1366
1361 1367 #: rhodecode/authentication/plugins/auth_headers.py:61
1362 1368 msgid "Header to extract the user from when main one fails"
1363 1369 msgstr ""
1364 1370
1365 1371 #: rhodecode/authentication/plugins/auth_headers.py:63
1366 1372 msgid "Fallback header"
1367 1373 msgstr ""
1368 1374
1369 1375 #: rhodecode/authentication/plugins/auth_headers.py:68
1370 1376 msgid "Perform cleaning of user, if passed user has @ in username then first part before @ is taken. If there's \\ in the username only the part after \\ is taken"
1371 1377 msgstr ""
1372 1378
1373 1379 #: rhodecode/authentication/plugins/auth_headers.py:73
1374 1380 msgid "Clean username"
1375 1381 msgstr ""
1376 1382
1377 1383 #: rhodecode/authentication/plugins/auth_headers.py:99
1378 1384 msgid "Headers"
1379 1385 msgstr ""
1380 1386
1381 1387 #: rhodecode/authentication/plugins/auth_jasig_cas.py:62
1382 1388 msgid "The url of the Jasig CAS REST service"
1383 1389 msgstr ""
1384 1390
1385 1391 #: rhodecode/authentication/plugins/auth_jasig_cas.py:64
1386 1392 msgid "URL"
1387 1393 msgstr ""
1388 1394
1389 1395 #: rhodecode/authentication/plugins/auth_jasig_cas.py:93
1390 1396 msgid "Jasig-CAS"
1391 1397 msgstr ""
1392 1398
1393 1399 #: rhodecode/authentication/plugins/auth_ldap.py:258
1394 1400 msgid ""
1395 1401 "Host[s] of the LDAP Server \n"
1396 1402 "(e.g., 192.168.2.154, or ldap-server.domain.com.\n"
1397 1403 " Multiple servers can be specified using commas"
1398 1404 msgstr ""
1399 1405
1400 1406 #: rhodecode/authentication/plugins/auth_ldap.py:262
1401 1407 msgid "LDAP Host"
1402 1408 msgstr ""
1403 1409
1404 1410 #: rhodecode/authentication/plugins/auth_ldap.py:267
1405 1411 msgid "Custom port that the LDAP server is listening on. Default value is: 389, use 636 for LDAPS (SSL)"
1406 1412 msgstr ""
1407 1413
1408 1414 #: rhodecode/authentication/plugins/auth_ldap.py:277
1409 1415 msgid "Timeout for LDAP connection"
1410 1416 msgstr ""
1411 1417
1412 1418 #: rhodecode/authentication/plugins/auth_ldap.py:279
1413 1419 msgid "Connection timeout"
1414 1420 msgstr ""
1415 1421
1416 1422 #: rhodecode/authentication/plugins/auth_ldap.py:286
1417 1423 msgid ""
1418 1424 "Optional user DN/account to connect to LDAP if authentication is required. \n"
1419 1425 "e.g., cn=admin,dc=mydomain,dc=com, or uid=root,cn=users,dc=mydomain,dc=com, or admin@mydomain.com"
1420 1426 msgstr ""
1421 1427
1422 1428 #: rhodecode/authentication/plugins/auth_ldap.py:291
1423 1429 msgid "Bind account"
1424 1430 msgstr ""
1425 1431
1426 1432 #: rhodecode/authentication/plugins/auth_ldap.py:296
1427 1433 msgid "Password to authenticate for given user DN."
1428 1434 msgstr ""
1429 1435
1430 1436 #: rhodecode/authentication/plugins/auth_ldap.py:299
1431 1437 msgid "Bind account password"
1432 1438 msgstr ""
1433 1439
1434 1440 #: rhodecode/authentication/plugins/auth_ldap.py:304
1435 1441 msgid "TLS Type"
1436 1442 msgstr ""
1437 1443
1438 1444 #: rhodecode/authentication/plugins/auth_ldap.py:305
1439 1445 msgid "Connection Security"
1440 1446 msgstr ""
1441 1447
1442 1448 #: rhodecode/authentication/plugins/auth_ldap.py:311
1443 1449 msgid ""
1444 1450 "Require Cert over TLS?. Self-signed and custom certificates can be used when\n"
1445 1451 " `RhodeCode Certificate` found in admin > settings > system info page is extended."
1446 1452 msgstr ""
1447 1453
1448 1454 #: rhodecode/authentication/plugins/auth_ldap.py:314
1449 1455 msgid "Certificate Checks"
1450 1456 msgstr ""
1451 1457
1452 1458 #: rhodecode/authentication/plugins/auth_ldap.py:320
1453 1459 msgid ""
1454 1460 "This specifies the PEM-format file path containing certificates for use in TLS connection.\n"
1455 1461 "If not specified `TLS Cert dir` will be used"
1456 1462 msgstr ""
1457 1463
1458 1464 #: rhodecode/authentication/plugins/auth_ldap.py:323
1459 1465 msgid "TLS Cert file"
1460 1466 msgstr ""
1461 1467
1462 1468 #: rhodecode/authentication/plugins/auth_ldap.py:329
1463 1469 msgid "This specifies the path of a directory that contains individual CA certificates in separate files."
1464 1470 msgstr ""
1465 1471
1466 1472 #: rhodecode/authentication/plugins/auth_ldap.py:331
1467 1473 msgid "TLS Cert dir"
1468 1474 msgstr ""
1469 1475
1470 1476 #: rhodecode/authentication/plugins/auth_ldap.py:336
1471 1477 msgid ""
1472 1478 "Base DN to search. Dynamic bind is supported. Add `$login` marker in it to be replaced with current user username \n"
1473 1479 "(e.g., dc=mydomain,dc=com, or ou=Users,dc=mydomain,dc=com)"
1474 1480 msgstr ""
1475 1481
1476 1482 #: rhodecode/authentication/plugins/auth_ldap.py:341
1477 1483 msgid "Base DN"
1478 1484 msgstr ""
1479 1485
1480 1486 #: rhodecode/authentication/plugins/auth_ldap.py:346
1481 1487 msgid ""
1482 1488 "Filter to narrow results \n"
1483 1489 "(e.g., (&(objectCategory=Person)(objectClass=user)), or \n"
1484 1490 "(memberof=cn=rc-login,ou=groups,ou=company,dc=mydomain,dc=com)))"
1485 1491 msgstr ""
1486 1492
1487 1493 #: rhodecode/authentication/plugins/auth_ldap.py:351
1488 1494 msgid "LDAP Search Filter"
1489 1495 msgstr ""
1490 1496
1491 1497 #: rhodecode/authentication/plugins/auth_ldap.py:357
1492 1498 msgid "How deep to search LDAP. If unsure set to SUBTREE"
1493 1499 msgstr ""
1494 1500
1495 1501 #: rhodecode/authentication/plugins/auth_ldap.py:358
1496 1502 msgid "LDAP Search Scope"
1497 1503 msgstr ""
1498 1504
1499 1505 #: rhodecode/authentication/plugins/auth_ldap.py:364
1500 1506 msgid "LDAP Attribute to map to user name (e.g., uid, or sAMAccountName)"
1501 1507 msgstr ""
1502 1508
1503 1509 #: rhodecode/authentication/plugins/auth_ldap.py:366
1504 1510 msgid "Login Attribute"
1505 1511 msgstr ""
1506 1512
1507 1513 #: rhodecode/authentication/plugins/auth_ldap.py:367
1508 1514 msgid "The LDAP Login attribute of the CN must be specified"
1509 1515 msgstr ""
1510 1516
1511 1517 #: rhodecode/authentication/plugins/auth_ldap.py:372
1512 1518 msgid ""
1513 1519 "LDAP Attribute to map to email address (e.g., mail).\n"
1514 1520 "Emails are a crucial part of RhodeCode. \n"
1515 1521 "If possible add a valid email attribute to ldap users."
1516 1522 msgstr ""
1517 1523
1518 1524 #: rhodecode/authentication/plugins/auth_ldap.py:377
1519 1525 msgid "Email Attribute"
1520 1526 msgstr ""
1521 1527
1522 1528 #: rhodecode/authentication/plugins/auth_ldap.py:382
1523 1529 msgid "LDAP Attribute to map to first name (e.g., givenName)"
1524 1530 msgstr ""
1525 1531
1526 1532 #: rhodecode/authentication/plugins/auth_ldap.py:385
1527 1533 msgid "First Name Attribute"
1528 1534 msgstr ""
1529 1535
1530 1536 #: rhodecode/authentication/plugins/auth_ldap.py:390
1531 1537 msgid "LDAP Attribute to map to last name (e.g., sn)"
1532 1538 msgstr ""
1533 1539
1534 1540 #: rhodecode/authentication/plugins/auth_ldap.py:393
1535 1541 msgid "Last Name Attribute"
1536 1542 msgstr ""
1537 1543
1538 1544 #: rhodecode/authentication/plugins/auth_ldap.py:425
1539 1545 msgid "LDAP"
1540 1546 msgstr ""
1541 1547
1542 1548 #: rhodecode/authentication/plugins/auth_pam.py:60
1543 1549 msgid "PAM service name to use for authentication."
1544 1550 msgstr ""
1545 1551
1546 1552 #: rhodecode/authentication/plugins/auth_pam.py:62
1547 1553 msgid "PAM service name"
1548 1554 msgstr ""
1549 1555
1550 1556 #: rhodecode/authentication/plugins/auth_pam.py:67
1551 1557 msgid "Regular expression for extracting user name/email etc. from Unix userinfo."
1552 1558 msgstr ""
1553 1559
1554 1560 #: rhodecode/authentication/plugins/auth_pam.py:70
1555 1561 msgid "Gecos Regex"
1556 1562 msgstr ""
1557 1563
1558 1564 #: rhodecode/authentication/plugins/auth_pam.py:99
1559 1565 msgid "PAM"
1560 1566 msgstr ""
1561 1567
1562 1568 #: rhodecode/authentication/plugins/auth_rhodecode.py:79
1563 1569 msgid "RhodeCode Internal"
1564 1570 msgstr ""
1565 1571
1566 1572 #: rhodecode/authentication/plugins/auth_rhodecode.py:200
1567 1573 msgid "Allowed user types for authentication using this plugin."
1568 1574 msgstr ""
1569 1575
1570 1576 #: rhodecode/authentication/plugins/auth_rhodecode.py:201
1571 1577 msgid "User restriction"
1572 1578 msgstr ""
1573 1579
1574 1580 #: rhodecode/authentication/plugins/auth_rhodecode.py:209
1575 1581 msgid "Allowed protocols for authentication using this plugin. VCS means GIT/HG/SVN. HTTP is web based login."
1576 1582 msgstr ""
1577 1583
1578 1584 #: rhodecode/authentication/plugins/auth_rhodecode.py:211
1579 1585 #: rhodecode/authentication/plugins/auth_token.py:173
1580 1586 msgid "Scope restriction"
1581 1587 msgstr ""
1582 1588
1583 1589 #: rhodecode/authentication/plugins/auth_token.py:77
1584 1590 msgid "Rhodecode Token"
1585 1591 msgstr ""
1586 1592
1587 1593 #: rhodecode/authentication/plugins/auth_token.py:172
1588 1594 msgid "Choose operation scope restriction when authenticating."
1589 1595 msgstr ""
1590 1596
1591 #: rhodecode/events/pullrequest.py:79
1597 #: rhodecode/events/pullrequest.py:78
1592 1598 msgid "pullrequest created"
1593 1599 msgstr ""
1594 1600
1595 #: rhodecode/events/pullrequest.py:80
1601 #: rhodecode/events/pullrequest.py:79
1596 1602 msgid "Event triggered after pull request was created"
1597 1603 msgstr ""
1598 1604
1605 #: rhodecode/events/pullrequest.py:88
1606 msgid "pullrequest closed"
1607 msgstr ""
1608
1599 1609 #: rhodecode/events/pullrequest.py:89
1600 msgid "pullrequest closed"
1601 msgstr ""
1602
1603 #: rhodecode/events/pullrequest.py:90
1604 1610 msgid "Event triggered after pull request was closed"
1605 1611 msgstr ""
1606 1612
1613 #: rhodecode/events/pullrequest.py:98
1614 msgid "pullrequest commits updated"
1615 msgstr ""
1616
1607 1617 #: rhodecode/events/pullrequest.py:99
1608 msgid "pullrequest commits updated"
1609 msgstr ""
1610
1611 #: rhodecode/events/pullrequest.py:100
1612 1618 msgid "Event triggered after pull requests was updated"
1613 1619 msgstr ""
1614 1620
1621 #: rhodecode/events/pullrequest.py:108
1622 msgid "pullrequest review changed"
1623 msgstr ""
1624
1615 1625 #: rhodecode/events/pullrequest.py:109
1616 msgid "pullrequest review changed"
1617 msgstr ""
1618
1619 #: rhodecode/events/pullrequest.py:110
1620 1626 msgid "Event triggered after a review status of a pull requests has changed to other."
1621 1627 msgstr ""
1622 1628
1629 #: rhodecode/events/pullrequest.py:123
1630 msgid "pullrequest merged"
1631 msgstr ""
1632
1623 1633 #: rhodecode/events/pullrequest.py:124
1624 msgid "pullrequest merged"
1625 msgstr ""
1626
1627 #: rhodecode/events/pullrequest.py:125
1628 1634 msgid "Event triggered after a successful merge operation was executed on a pull request"
1629 1635 msgstr ""
1630 1636
1637 #: rhodecode/events/pullrequest.py:134
1638 msgid "pullrequest commented"
1639 msgstr ""
1640
1631 1641 #: rhodecode/events/pullrequest.py:135
1632 msgid "pullrequest commented"
1633 msgstr ""
1634
1635 #: rhodecode/events/pullrequest.py:136
1636 1642 msgid "Event triggered after a comment was made on a code in the pull request"
1637 1643 msgstr ""
1638 1644
1645 #: rhodecode/events/pullrequest.py:173
1646 msgid "pullrequest comment edited"
1647 msgstr ""
1648
1649 #: rhodecode/events/pullrequest.py:174
1650 msgid "Event triggered after a comment was edited on a code in the pull request"
1651 msgstr ""
1652
1639 1653 #: rhodecode/events/repo.py:191
1640 1654 msgid "repository commit comment"
1641 1655 msgstr ""
1642 1656
1643 1657 #: rhodecode/events/repo.py:192
1644 1658 msgid "Event triggered after a comment was made on commit inside a repository"
1645 1659 msgstr ""
1646 1660
1647 #: rhodecode/events/repo.py:224
1661 #: rhodecode/events/repo.py:226
1662 msgid "repository commit edit comment"
1663 msgstr ""
1664
1665 #: rhodecode/events/repo.py:227
1666 msgid "Event triggered after a comment was edited on commit inside a repository"
1667 msgstr ""
1668
1669 #: rhodecode/events/repo.py:260
1648 1670 msgid "repository pre create"
1649 1671 msgstr ""
1650 1672
1651 #: rhodecode/events/repo.py:225
1673 #: rhodecode/events/repo.py:261
1652 1674 msgid "Event triggered before repository is created"
1653 1675 msgstr ""
1654 1676
1655 #: rhodecode/events/repo.py:234
1677 #: rhodecode/events/repo.py:270
1656 1678 msgid "repository created"
1657 1679 msgstr ""
1658 1680
1659 #: rhodecode/events/repo.py:235
1681 #: rhodecode/events/repo.py:271
1660 1682 msgid "Event triggered after repository was created"
1661 1683 msgstr ""
1662 1684
1663 #: rhodecode/events/repo.py:244
1685 #: rhodecode/events/repo.py:280
1664 1686 msgid "repository pre delete"
1665 1687 msgstr ""
1666 1688
1667 #: rhodecode/events/repo.py:245
1689 #: rhodecode/events/repo.py:281
1668 1690 msgid "Event triggered before a repository is deleted"
1669 1691 msgstr ""
1670 1692
1671 #: rhodecode/events/repo.py:254
1693 #: rhodecode/events/repo.py:290
1672 1694 msgid "repository deleted"
1673 1695 msgstr ""
1674 1696
1675 #: rhodecode/events/repo.py:255
1697 #: rhodecode/events/repo.py:291
1676 1698 msgid "Event triggered after repository was deleted"
1677 1699 msgstr ""
1678 1700
1679 #: rhodecode/events/repo.py:295
1701 #: rhodecode/events/repo.py:331
1680 1702 msgid "repository pre pull"
1681 1703 msgstr ""
1682 1704
1683 #: rhodecode/events/repo.py:296
1705 #: rhodecode/events/repo.py:332
1684 1706 msgid "Event triggered before repository code is pulled"
1685 1707 msgstr ""
1686 1708
1687 #: rhodecode/events/repo.py:305
1709 #: rhodecode/events/repo.py:341
1688 1710 msgid "repository pull"
1689 1711 msgstr ""
1690 1712
1691 #: rhodecode/events/repo.py:306
1713 #: rhodecode/events/repo.py:342
1692 1714 msgid "Event triggered after repository code was pulled"
1693 1715 msgstr ""
1694 1716
1695 #: rhodecode/events/repo.py:315
1717 #: rhodecode/events/repo.py:351
1696 1718 msgid "repository pre push"
1697 1719 msgstr ""
1698 1720
1699 #: rhodecode/events/repo.py:316
1721 #: rhodecode/events/repo.py:352
1700 1722 msgid "Event triggered before the code is pushed to a repository"
1701 1723 msgstr ""
1702 1724
1703 #: rhodecode/events/repo.py:328
1725 #: rhodecode/events/repo.py:364
1704 1726 msgid "repository push"
1705 1727 msgstr ""
1706 1728
1707 #: rhodecode/events/repo.py:329
1729 #: rhodecode/events/repo.py:365
1708 1730 msgid "Event triggered after the code was pushed to a repository"
1709 1731 msgstr ""
1710 1732
1711 1733 #: rhodecode/events/repo_group.py:62
1712 1734 msgid "repository group created"
1713 1735 msgstr ""
1714 1736
1715 1737 #: rhodecode/events/repo_group.py:63
1716 1738 msgid "Event triggered after a repository group was created"
1717 1739 msgstr ""
1718 1740
1719 1741 #: rhodecode/events/repo_group.py:72
1720 1742 msgid "repository group deleted"
1721 1743 msgstr ""
1722 1744
1723 1745 #: rhodecode/events/repo_group.py:73
1724 1746 msgid "Event triggered after a repository group was deleted"
1725 1747 msgstr ""
1726 1748
1727 1749 #: rhodecode/events/repo_group.py:82
1728 1750 msgid "repository group update"
1729 1751 msgstr ""
1730 1752
1731 1753 #: rhodecode/events/repo_group.py:83
1732 1754 msgid "Event triggered after a repository group was updated"
1733 1755 msgstr ""
1734 1756
1735 1757 #: rhodecode/events/user.py:37
1736 1758 msgid "user registered"
1737 1759 msgstr ""
1738 1760
1739 1761 #: rhodecode/events/user.py:52
1740 1762 msgid "user pre create"
1741 1763 msgstr ""
1742 1764
1743 1765 #: rhodecode/events/user.py:66
1744 1766 msgid "user post create"
1745 1767 msgstr ""
1746 1768
1747 1769 #: rhodecode/events/user.py:80
1748 1770 msgid "user pre update"
1749 1771 msgstr ""
1750 1772
1751 1773 #: rhodecode/events/user.py:100
1752 1774 msgid "user permissions change"
1753 1775 msgstr ""
1754 1776
1755 1777 #: rhodecode/forms/__init__.py:35
1756 #: rhodecode/templates/admin/my_account/my_account_auth_tokens.mako:97
1778 #: rhodecode/templates/admin/my_account/my_account_auth_tokens.mako:103
1757 1779 #: rhodecode/templates/admin/my_account/my_account_ssh_keys.mako:73
1758 1780 #: rhodecode/templates/admin/permissions/permissions_application.mako:60
1759 1781 #: rhodecode/templates/admin/permissions/permissions_ips.mako:64
1760 1782 #: rhodecode/templates/admin/permissions/permissions_objects.mako:60
1761 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:217
1783 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:227
1762 1784 #: rhodecode/templates/admin/repo_groups/repo_group_edit_settings.mako:78
1763 1785 #: rhodecode/templates/admin/repos/repo_edit_fields.mako:66
1764 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:201
1786 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:207
1765 1787 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:251
1766 1788 #: rhodecode/templates/admin/repos/repo_edit_vcs.mako:44
1767 1789 #: rhodecode/templates/admin/settings/settings_global.mako:141
1768 1790 #: rhodecode/templates/admin/settings/settings_issuetracker.mako:16
1769 1791 #: rhodecode/templates/admin/settings/settings_labs.mako:49
1770 1792 #: rhodecode/templates/admin/settings/settings_vcs.mako:14
1771 1793 #: rhodecode/templates/admin/settings/settings_visual.mako:215
1772 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:207
1773 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:101
1794 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:217
1795 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:107
1774 1796 #: rhodecode/templates/admin/users/user_edit_emails.mako:66
1775 1797 #: rhodecode/templates/admin/users/user_edit_ips.mako:76
1776 1798 #: rhodecode/templates/admin/users/user_edit_profile.mako:155
1777 1799 #: rhodecode/templates/admin/users/user_edit_ssh_keys.mako:72
1778 #: rhodecode/templates/base/default_perms_box.mako:89
1800 #: rhodecode/templates/base/default_perms_box.mako:102
1779 1801 msgid "Reset"
1780 1802 msgstr ""
1781 1803
1782 #: rhodecode/forms/__init__.py:36 rhodecode/public/js/scripts.js:37802
1804 #: rhodecode/forms/__init__.py:36 rhodecode/public/js/scripts.js:38311
1783 1805 #: rhodecode/public/js/scripts.min.js:1
1784 #: rhodecode/public/js/src/rhodecode/utils/ajax.js:158
1806 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:24
1807 #: rhodecode/public/js/src/rhodecode/utils/ajax.js:161
1785 1808 #: rhodecode/templates/admin/gists/gist_show.mako:59
1786 1809 #: rhodecode/templates/admin/integrations/list.mako:179
1787 #: rhodecode/templates/admin/my_account/my_account_auth_tokens.mako:59
1810 #: rhodecode/templates/admin/my_account/my_account_auth_tokens.mako:65
1788 1811 #: rhodecode/templates/admin/my_account/my_account_emails.mako:33
1789 1812 #: rhodecode/templates/admin/my_account/my_account_ssh_keys.mako:34
1790 1813 #: rhodecode/templates/admin/notifications/notifications_data.mako:22
1791 1814 #: rhodecode/templates/admin/notifications/notifications_show.mako:37
1792 1815 #: rhodecode/templates/admin/permissions/permissions_ips.mako:29
1793 1816 #: rhodecode/templates/admin/repos/repo_edit_fields.mako:25
1794 1817 #: rhodecode/templates/admin/settings/settings_hooks.mako:46
1795 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:63
1818 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:69
1796 1819 #: rhodecode/templates/admin/users/user_edit_emails.mako:34
1797 1820 #: rhodecode/templates/admin/users/user_edit_ips.mako:40
1798 1821 #: rhodecode/templates/admin/users/user_edit_ssh_keys.mako:35
1799 1822 #: rhodecode/templates/base/issue_tracker_settings.mako:146
1800 1823 #: rhodecode/templates/base/vcs_settings.mako:244
1801 1824 #: rhodecode/templates/base/vcs_settings.mako:269
1802 #: rhodecode/templates/changeset/changeset_file_comment.mako:140
1803 #: rhodecode/templates/changeset/changeset_file_comment.mako:142
1804 #: rhodecode/templates/changeset/changeset_file_comment.mako:145
1825 #: rhodecode/templates/changeset/changeset_file_comment.mako:203
1826 #: rhodecode/templates/changeset/changeset_file_comment.mako:206
1827 #: rhodecode/templates/changeset/changeset_file_comment.mako:210
1805 1828 #: rhodecode/templates/data_table/_dt_elements.mako:436
1806 1829 #: rhodecode/templates/debug_style/buttons.html:132
1807 #: rhodecode/templates/files/files_source.mako:30
1808 #: rhodecode/templates/files/files_source.mako:37
1809 #: rhodecode/templates/files/files_source.mako:43
1830 #: rhodecode/templates/files/files_source.mako:40
1831 #: rhodecode/templates/files/files_source.mako:47
1832 #: rhodecode/templates/files/files_source.mako:53
1810 1833 msgid "Delete"
1811 1834 msgstr ""
1812 1835
1813 1836 #: rhodecode/integrations/schema.py:30
1814 1837 #: rhodecode/model/validation_schema/schemas/integration_schema.py:193
1815 1838 msgid "Enable or disable this integration."
1816 1839 msgstr ""
1817 1840
1818 1841 #: rhodecode/integrations/schema.py:37
1819 1842 #: rhodecode/model/validation_schema/schemas/integration_schema.py:174
1820 1843 msgid "Short name for this integration."
1821 1844 msgstr ""
1822 1845
1823 1846 #: rhodecode/integrations/schema.py:39
1824 1847 #: rhodecode/model/validation_schema/schemas/integration_schema.py:176
1825 1848 msgid "Integration name"
1826 1849 msgstr ""
1827 1850
1828 1851 #: rhodecode/integrations/schema.py:51
1829 1852 msgid "Limit integrations to to work only on the direct children repositories of this repository group (no subgroups)"
1830 1853 msgstr ""
1831 1854
1832 1855 #: rhodecode/integrations/schema.py:55
1833 1856 msgid "Limit to childen repos only"
1834 1857 msgstr ""
1835 1858
1836 1859 #: rhodecode/integrations/schema.py:63
1837 1860 msgid "Limit integrations to to work only on root level repositories"
1838 1861 msgstr ""
1839 1862
1840 1863 #: rhodecode/integrations/schema.py:66
1841 1864 msgid "Root repositories only"
1842 1865 msgstr ""
1843 1866
1844 1867 #: rhodecode/integrations/views.py:147
1845 1868 msgid "{repo_name} repository"
1846 1869 msgstr ""
1847 1870
1848 1871 #: rhodecode/integrations/views.py:150
1849 1872 msgid "{repo_group_name} repo group"
1850 1873 msgstr ""
1851 1874
1852 1875 #: rhodecode/integrations/views.py:153
1853 1876 #: rhodecode/templates/admin/permissions/permissions.mako:36
1854 1877 msgid "Global"
1855 1878 msgstr ""
1856 1879
1857 1880 #: rhodecode/integrations/views.py:157
1858 1881 msgid "{name} integration"
1859 1882 msgstr ""
1860 1883
1861 1884 #: rhodecode/integrations/views.py:172
1862 1885 msgid "Integration {integration_name} deleted successfully."
1863 1886 msgstr ""
1864 1887
1865 1888 #: rhodecode/integrations/views.py:305
1866 1889 msgid "Errors exist when saving integration settings. Please check the form inputs."
1867 1890 msgstr ""
1868 1891
1869 1892 #: rhodecode/integrations/views.py:330
1870 1893 msgid "Integration {integration_name} updated successfully."
1871 1894 msgstr ""
1872 1895
1873 1896 #: rhodecode/integrations/types/email.py:157
1874 1897 msgid "Recipients"
1875 1898 msgstr ""
1876 1899
1877 1900 #: rhodecode/integrations/types/email.py:158
1878 1901 msgid "Email addresses to send push events to"
1879 1902 msgstr ""
1880 1903
1881 1904 #: rhodecode/integrations/types/email.py:163
1882 1905 #: rhodecode/integrations/types/email.py:164
1883 1906 msgid "Email address"
1884 1907 msgstr ""
1885 1908
1886 1909 #: rhodecode/integrations/types/email.py:175
1887 1910 #: rhodecode/templates/register.mako:95
1888 1911 #: rhodecode/templates/admin/my_account/my_account_profile.mako:78
1889 1912 #: rhodecode/templates/admin/users/user_add.mako:86
1890 1913 #: rhodecode/templates/admin/users/user_edit_profile.mako:65
1891 1914 #: rhodecode/templates/admin/users/users.mako:76
1892 #: rhodecode/templates/email_templates/user_registration.mako:50
1915 #: rhodecode/templates/email_templates/user_registration.mako:51
1893 1916 #: rhodecode/templates/users/user_profile.mako:69
1894 1917 msgid "Email"
1895 1918 msgstr ""
1896 1919
1897 1920 #: rhodecode/integrations/types/email.py:176
1898 1921 msgid "Send repo push summaries to a list of recipients via email"
1899 1922 msgstr ""
1900 1923
1901 1924 #: rhodecode/integrations/types/hipchat.py:63
1902 1925 msgid "Yellow"
1903 1926 msgstr ""
1904 1927
1905 1928 #: rhodecode/integrations/types/hipchat.py:64
1906 1929 msgid "Red"
1907 1930 msgstr ""
1908 1931
1909 1932 #: rhodecode/integrations/types/hipchat.py:65
1910 1933 msgid "Green"
1911 1934 msgstr ""
1912 1935
1913 1936 #: rhodecode/integrations/types/hipchat.py:66
1914 1937 msgid "Purple"
1915 1938 msgstr ""
1916 1939
1917 1940 #: rhodecode/integrations/types/hipchat.py:67
1918 1941 msgid "Gray"
1919 1942 msgstr ""
1920 1943
1921 1944 #: rhodecode/integrations/types/hipchat.py:72
1922 1945 msgid "Hipchat server URL"
1923 1946 msgstr ""
1924 1947
1925 1948 #: rhodecode/integrations/types/hipchat.py:73
1926 1949 msgid "Hipchat integration url."
1927 1950 msgstr ""
1928 1951
1929 1952 #: rhodecode/integrations/types/hipchat.py:83
1930 1953 msgid "Notify"
1931 1954 msgstr ""
1932 1955
1933 1956 #: rhodecode/integrations/types/hipchat.py:84
1934 1957 msgid "Make a notification to the users in room."
1935 1958 msgstr ""
1936 1959
1937 1960 #: rhodecode/integrations/types/hipchat.py:90
1938 1961 msgid "Color"
1939 1962 msgstr ""
1940 1963
1941 1964 #: rhodecode/integrations/types/hipchat.py:91
1942 1965 msgid "Background color of message."
1943 1966 msgstr ""
1944 1967
1945 1968 #: rhodecode/integrations/types/hipchat.py:102
1946 1969 msgid "Hipchat"
1947 1970 msgstr ""
1948 1971
1949 1972 #: rhodecode/integrations/types/hipchat.py:103
1950 1973 msgid "Send events such as repo pushes and pull requests to your hipchat channel."
1951 1974 msgstr ""
1952 1975
1953 1976 #: rhodecode/integrations/types/slack.py:72
1954 1977 msgid "Slack service URL"
1955 1978 msgstr ""
1956 1979
1957 1980 #: rhodecode/integrations/types/slack.py:73
1958 1981 msgid "This can be setup at the <a href=\"https://my.slack.com/services/new/incoming-webhook/\">slack app manager</a>"
1959 1982 msgstr ""
1960 1983
1961 1984 #: rhodecode/integrations/types/slack.py:86
1962 1985 #: rhodecode/integrations/types/webhook.py:81 rhodecode/templates/login.mako:44
1963 1986 #: rhodecode/templates/register.mako:48
1964 1987 #: rhodecode/templates/admin/admin_log_base.mako:7
1965 1988 #: rhodecode/templates/admin/my_account/my_account_profile.mako:38
1966 1989 #: rhodecode/templates/admin/my_account/my_account_profile_edit.mako:29
1967 1990 #: rhodecode/templates/admin/permissions/permissions_ssh_keys.mako:45
1968 1991 #: rhodecode/templates/admin/user_groups/user_group_edit_settings.mako:74
1969 1992 #: rhodecode/templates/admin/users/user_add.mako:35
1970 1993 #: rhodecode/templates/admin/users/user_edit_profile.mako:39
1971 1994 #: rhodecode/templates/admin/users/users.mako:74
1972 1995 #: rhodecode/templates/debug_style/login.html:36
1973 #: rhodecode/templates/email_templates/user_registration.mako:42
1996 #: rhodecode/templates/email_templates/user_registration.mako:43
1974 1997 #: rhodecode/templates/user_group/profile.mako:61
1975 1998 #: rhodecode/templates/users/user_profile.mako:29
1976 1999 msgid "Username"
1977 2000 msgstr ""
1978 2001
1979 2002 #: rhodecode/integrations/types/slack.py:87
1980 2003 msgid "Username to show notifications coming from."
1981 2004 msgstr ""
1982 2005
1983 2006 #: rhodecode/integrations/types/slack.py:96
1984 2007 msgid "Channel"
1985 2008 msgstr ""
1986 2009
1987 2010 #: rhodecode/integrations/types/slack.py:97
1988 2011 msgid "Channel to send notifications to."
1989 2012 msgstr ""
1990 2013
1991 2014 #: rhodecode/integrations/types/slack.py:106
1992 2015 msgid "Emoji"
1993 2016 msgstr ""
1994 2017
1995 2018 #: rhodecode/integrations/types/slack.py:107
1996 2019 msgid "Emoji to use eg. :studio_microphone:"
1997 2020 msgstr ""
1998 2021
1999 2022 #: rhodecode/integrations/types/slack.py:118
2000 2023 msgid "Slack"
2001 2024 msgstr ""
2002 2025
2003 2026 #: rhodecode/integrations/types/slack.py:119
2004 2027 msgid "Send events such as repo pushes and pull requests to your slack channel."
2005 2028 msgstr ""
2006 2029
2007 2030 #: rhodecode/integrations/types/webhook.py:49
2008 2031 msgid "Webhook URL"
2009 2032 msgstr ""
2010 2033
2011 2034 #: rhodecode/integrations/types/webhook.py:51
2012 2035 msgid "URL to which Webhook should submit data. If used some of the variables would trigger multiple calls, like ${branch} or ${commit_id}. Webhook will be called as many times as unique objects in data in such cases."
2013 2036 msgstr ""
2014 2037
2015 2038 #: rhodecode/integrations/types/webhook.py:70
2016 2039 msgid "Secret Token"
2017 2040 msgstr ""
2018 2041
2019 2042 #: rhodecode/integrations/types/webhook.py:71
2020 2043 msgid "Optional string used to validate received payloads. It will be sent together with event data in JSON"
2021 2044 msgstr ""
2022 2045
2023 2046 #: rhodecode/integrations/types/webhook.py:82
2024 2047 msgid "Optional username to authenticate the call."
2025 2048 msgstr ""
2026 2049
2027 2050 #: rhodecode/integrations/types/webhook.py:91 rhodecode/templates/login.mako:51
2028 2051 #: rhodecode/templates/register.mako:62
2029 2052 #: rhodecode/templates/admin/my_account/my_account.mako:31
2030 2053 #: rhodecode/templates/admin/users/user_add.mako:44
2031 2054 #: rhodecode/templates/debug_style/login.html:45
2032 2055 msgid "Password"
2033 2056 msgstr ""
2034 2057
2035 2058 #: rhodecode/integrations/types/webhook.py:92
2036 2059 msgid "Optional password to authenticate the call."
2037 2060 msgstr ""
2038 2061
2039 2062 #: rhodecode/integrations/types/webhook.py:102
2040 2063 msgid "Custom Header Key"
2041 2064 msgstr ""
2042 2065
2043 2066 #: rhodecode/integrations/types/webhook.py:103
2044 2067 msgid "Custom Header name to be set when calling endpoint."
2045 2068 msgstr ""
2046 2069
2047 2070 #: rhodecode/integrations/types/webhook.py:112
2048 2071 msgid "Custom Header Value"
2049 2072 msgstr ""
2050 2073
2051 2074 #: rhodecode/integrations/types/webhook.py:113
2052 2075 msgid "Custom Header value to be set when calling endpoint."
2053 2076 msgstr ""
2054 2077
2055 2078 #: rhodecode/integrations/types/webhook.py:122
2056 2079 msgid "Call Method"
2057 2080 msgstr ""
2058 2081
2059 2082 #: rhodecode/integrations/types/webhook.py:123
2060 2083 msgid "Select a HTTP method to use when calling the Webhook."
2061 2084 msgstr ""
2062 2085
2063 2086 #: rhodecode/integrations/types/webhook.py:135
2064 2087 msgid "Webhook"
2065 2088 msgstr ""
2066 2089
2067 2090 #: rhodecode/integrations/types/webhook.py:136
2068 2091 msgid "send JSON data to a url endpoint"
2069 2092 msgstr ""
2070 2093
2071 2094 #: rhodecode/lib/action_parser.py:93
2072 2095 msgid "[deleted] repository"
2073 2096 msgstr ""
2074 2097
2075 2098 #: rhodecode/lib/action_parser.py:96 rhodecode/lib/action_parser.py:114
2076 2099 msgid "[created] repository"
2077 2100 msgstr ""
2078 2101
2079 2102 #: rhodecode/lib/action_parser.py:99
2080 2103 msgid "[created] repository as fork"
2081 2104 msgstr ""
2082 2105
2083 2106 #: rhodecode/lib/action_parser.py:102 rhodecode/lib/action_parser.py:117
2084 2107 msgid "[forked] repository"
2085 2108 msgstr ""
2086 2109
2087 2110 #: rhodecode/lib/action_parser.py:105 rhodecode/lib/action_parser.py:120
2088 2111 msgid "[updated] repository"
2089 2112 msgstr ""
2090 2113
2091 2114 #: rhodecode/lib/action_parser.py:108
2092 2115 msgid "[downloaded] archive from repository"
2093 2116 msgstr ""
2094 2117
2095 2118 #: rhodecode/lib/action_parser.py:111
2096 2119 msgid "[delete] repository"
2097 2120 msgstr ""
2098 2121
2099 2122 #: rhodecode/lib/action_parser.py:123
2100 2123 msgid "[created] user"
2101 2124 msgstr ""
2102 2125
2103 2126 #: rhodecode/lib/action_parser.py:126
2104 2127 msgid "[updated] user"
2105 2128 msgstr ""
2106 2129
2107 2130 #: rhodecode/lib/action_parser.py:129
2108 2131 msgid "[created] user group"
2109 2132 msgstr ""
2110 2133
2111 2134 #: rhodecode/lib/action_parser.py:132
2112 2135 msgid "[updated] user group"
2113 2136 msgstr ""
2114 2137
2115 2138 #: rhodecode/lib/action_parser.py:135
2116 2139 msgid "[commented] on commit in repository"
2117 2140 msgstr ""
2118 2141
2119 2142 #: rhodecode/lib/action_parser.py:138
2120 2143 msgid "[commented] on pull request for"
2121 2144 msgstr ""
2122 2145
2123 2146 #: rhodecode/lib/action_parser.py:141
2124 2147 msgid "[closed] pull request for"
2125 2148 msgstr ""
2126 2149
2127 2150 #: rhodecode/lib/action_parser.py:144
2128 2151 msgid "[merged] pull request for"
2129 2152 msgstr ""
2130 2153
2131 2154 #: rhodecode/lib/action_parser.py:147
2132 2155 msgid "[pushed] into"
2133 2156 msgstr ""
2134 2157
2135 2158 #: rhodecode/lib/action_parser.py:150
2136 2159 msgid "[committed via RhodeCode] into repository"
2137 2160 msgstr ""
2138 2161
2139 2162 #: rhodecode/lib/action_parser.py:153
2140 2163 msgid "[pulled from remote] into repository"
2141 2164 msgstr ""
2142 2165
2143 2166 #: rhodecode/lib/action_parser.py:156
2144 2167 msgid "[pulled] from"
2145 2168 msgstr ""
2146 2169
2147 2170 #: rhodecode/lib/action_parser.py:159
2148 2171 msgid "[started following] repository"
2149 2172 msgstr ""
2150 2173
2151 2174 #: rhodecode/lib/action_parser.py:162
2152 2175 msgid "[stopped following] repository"
2153 2176 msgstr ""
2154 2177
2155 2178 #: rhodecode/lib/action_parser.py:172
2156 2179 #, python-format
2157 2180 msgid "fork name %s"
2158 2181 msgstr ""
2159 2182
2160 2183 #: rhodecode/lib/action_parser.py:191
2161 2184 #, python-format
2162 2185 msgid "Pull request #%s"
2163 2186 msgstr ""
2164 2187
2165 2188 #: rhodecode/lib/action_parser.py:226
2166 2189 #, python-format
2167 2190 msgid "Show all combined commits %s->%s"
2168 2191 msgstr ""
2169 2192
2170 2193 #: rhodecode/lib/action_parser.py:231
2171 2194 msgid "compare view"
2172 2195 msgstr ""
2173 2196
2174 2197 #: rhodecode/lib/action_parser.py:238
2175 2198 #, python-format
2176 2199 msgid " and %(num)s more commits"
2177 2200 msgstr ""
2178 2201
2179 2202 #: rhodecode/lib/action_parser.py:293
2180 2203 #, python-format
2181 2204 msgid "Deleted branch: %s"
2182 2205 msgstr ""
2183 2206
2184 2207 #: rhodecode/lib/action_parser.py:296
2185 2208 #, python-format
2186 2209 msgid "Created tag: %s"
2187 2210 msgstr ""
2188 2211
2189 2212 #: rhodecode/lib/action_parser.py:309
2190 2213 msgid "Commit not found"
2191 2214 msgstr ""
2192 2215
2193 #: rhodecode/lib/auth.py:1760
2216 #: rhodecode/lib/auth.py:1769
2194 2217 msgid "IP {} not allowed"
2195 2218 msgstr ""
2196 2219
2197 #: rhodecode/lib/auth.py:1852
2220 #: rhodecode/lib/auth.py:1861
2198 2221 msgid "You need to be a registered user to perform this action"
2199 2222 msgstr ""
2200 2223
2201 #: rhodecode/lib/auth.py:1896
2224 #: rhodecode/lib/auth.py:1905
2202 2225 msgid "You need to be signed in to view this page"
2203 2226 msgstr ""
2204 2227
2205 2228 #: rhodecode/lib/diffs.py:903
2206 2229 msgid "Click to select line"
2207 2230 msgstr ""
2208 2231
2209 #: rhodecode/lib/helpers.py:1721
2232 #: rhodecode/lib/helpers.py:1803
2210 2233 msgid ""
2211 2234 "Example filter terms:\n"
2212 2235 " repository:vcs\n"
2213 2236 " username:marcin\n"
2214 2237 " username:(NOT marcin)\n"
2215 2238 " action:*push*\n"
2216 2239 " ip:127.0.0.1\n"
2217 2240 " date:20120101\n"
2218 2241 " date:[20120101100000 TO 20120102]\n"
2219 2242 "\n"
2220 2243 "Actions: {actions}\n"
2221 2244 "\n"
2222 2245 "Generate wildcards using '*' character:\n"
2223 2246 " \"repository:vcs*\" - search everything starting with 'vcs'\n"
2224 2247 " \"repository:*vcs*\" - search for repository containing 'vcs'\n"
2225 2248 "\n"
2226 2249 "Optional AND / OR operators in queries\n"
2227 2250 " \"repository:vcs OR repository:test\"\n"
2228 2251 " \"username:test AND repository:test*\"\n"
2229 2252 msgstr ""
2230 2253
2231 #: rhodecode/lib/helpers.py:1745
2254 #: rhodecode/lib/helpers.py:1827
2232 2255 #, python-format
2233 2256 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"
2234 2257 msgstr ""
2235 2258
2236 2259 #: rhodecode/lib/utils2.py:542
2237 2260 msgid "in ${ago}"
2238 2261 msgstr ""
2239 2262
2240 2263 #: rhodecode/lib/utils2.py:548
2241 2264 msgid "${ago} ago"
2242 2265 msgstr ""
2243 2266
2244 2267 #: rhodecode/lib/utils2.py:557
2245 2268 msgid "${val}, ${detail}"
2246 2269 msgstr ""
2247 2270
2248 2271 #: rhodecode/lib/utils2.py:559
2249 2272 msgid "${val}, ${detail} ago"
2250 2273 msgstr ""
2251 2274
2252 2275 #: rhodecode/lib/utils2.py:561
2253 2276 msgid "in ${val}, ${detail}"
2254 2277 msgstr ""
2255 2278
2256 2279 #: rhodecode/lib/utils2.py:563
2257 2280 msgid "${val} and ${detail}"
2258 2281 msgstr ""
2259 2282
2260 2283 #: rhodecode/lib/utils2.py:565
2261 2284 msgid "${val} and ${detail} ago"
2262 2285 msgstr ""
2263 2286
2264 2287 #: rhodecode/lib/utils2.py:567
2265 2288 msgid "in ${val} and ${detail}"
2266 2289 msgstr ""
2267 2290
2268 #: rhodecode/lib/utils2.py:571 rhodecode/public/js/scripts.js:22115
2291 #: rhodecode/lib/utils2.py:571 rhodecode/public/js/scripts.js:22612
2269 2292 #: rhodecode/public/js/scripts.min.js:1
2270 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:111
2293 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:127
2271 2294 #: rhodecode/public/js/src/plugins/jquery.timeago-extension.js:174
2272 2295 msgid "just now"
2273 2296 msgstr ""
2274 2297
2275 2298 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:568
2276 2299 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:581
2277 2300 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:598
2278 2301 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:681
2279 2302 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:656
2280 2303 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:658
2281 2304 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:681
2282 2305 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:682
2283 2306 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:699
2284 2307 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:716
2285 2308 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:732
2286 2309 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:735
2287 2310 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:737
2288 2311 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:737
2289 2312 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:764
2290 2313 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:774
2291 2314 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:815
2292 2315 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:815
2293 2316 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:816
2294 2317 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:816
2295 2318 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:822
2296 2319 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:944
2297 2320 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:969
2298 2321 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2587
2299 2322 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2653
2300 2323 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2739
2301 2324 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2772
2302 2325 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2772
2303 2326 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:2987
2304 2327 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3073
2328 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3079
2305 2329 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2275
2306 2330 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2267
2307 2331 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2266
2308 2332 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2270
2309 2333 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2270
2310 2334 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2321
2311 2335 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2322
2312 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2522 rhodecode/model/db.py:3079
2336 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2522 rhodecode/model/db.py:3110
2313 2337 msgid "Repository no access"
2314 2338 msgstr ""
2315 2339
2316 2340 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:569
2317 2341 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:582
2318 2342 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:599
2319 2343 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:682
2320 2344 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:657
2321 2345 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:659
2322 2346 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:682
2323 2347 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:683
2324 2348 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:700
2325 2349 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:717
2326 2350 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:733
2327 2351 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:736
2328 2352 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:738
2329 2353 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:738
2330 2354 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:765
2331 2355 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:775
2332 2356 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:816
2333 2357 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:816
2334 2358 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:817
2335 2359 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:817
2336 2360 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:823
2337 2361 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:945
2338 2362 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:970
2339 2363 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2588
2340 2364 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2654
2341 2365 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2740
2342 2366 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2773
2343 2367 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2773
2344 2368 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:2988
2345 2369 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3074
2370 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3080
2346 2371 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2276
2347 2372 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2268
2348 2373 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2267
2349 2374 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2271
2350 2375 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2271
2351 2376 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2322
2352 2377 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2323
2353 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2523 rhodecode/model/db.py:3080
2378 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2523 rhodecode/model/db.py:3111
2354 2379 msgid "Repository read access"
2355 2380 msgstr ""
2356 2381
2357 2382 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:570
2358 2383 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:583
2359 2384 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:600
2360 2385 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:683
2361 2386 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:658
2362 2387 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:660
2363 2388 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:683
2364 2389 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:684
2365 2390 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:701
2366 2391 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:718
2367 2392 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:734
2368 2393 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:737
2369 2394 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:739
2370 2395 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:739
2371 2396 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:766
2372 2397 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:776
2373 2398 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:817
2374 2399 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:817
2375 2400 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:818
2376 2401 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:818
2377 2402 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:824
2378 2403 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:946
2379 2404 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:971
2380 2405 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2589
2381 2406 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2655
2382 2407 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2741
2383 2408 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2774
2384 2409 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2774
2385 2410 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:2989
2386 2411 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3075
2412 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3081
2387 2413 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2277
2388 2414 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2269
2389 2415 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2268
2390 2416 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2272
2391 2417 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2272
2392 2418 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2323
2393 2419 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2324
2394 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2524 rhodecode/model/db.py:3081
2420 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2524 rhodecode/model/db.py:3112
2395 2421 msgid "Repository write access"
2396 2422 msgstr ""
2397 2423
2398 2424 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:571
2399 2425 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:584
2400 2426 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:601
2401 2427 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:684
2402 2428 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:659
2403 2429 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:661
2404 2430 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:684
2405 2431 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:685
2406 2432 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:702
2407 2433 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:719
2408 2434 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:735
2409 2435 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:738
2410 2436 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:740
2411 2437 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:740
2412 2438 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:767
2413 2439 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:777
2414 2440 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:818
2415 2441 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:818
2416 2442 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:819
2417 2443 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:819
2418 2444 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:825
2419 2445 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:947
2420 2446 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:972
2421 2447 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2590
2422 2448 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2656
2423 2449 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2742
2424 2450 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2775
2425 2451 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2775
2426 2452 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:2990
2427 2453 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3076
2454 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3082
2428 2455 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2278
2429 2456 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2270
2430 2457 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2269
2431 2458 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2273
2432 2459 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2273
2433 2460 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2324
2434 2461 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2325
2435 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2525 rhodecode/model/db.py:3082
2462 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2525 rhodecode/model/db.py:3113
2436 2463 msgid "Repository admin access"
2437 2464 msgstr ""
2438 2465
2439 2466 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:573
2440 2467 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:586
2441 2468 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:603
2442 2469 msgid "Repositories Group no access"
2443 2470 msgstr ""
2444 2471
2445 2472 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:574
2446 2473 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:587
2447 2474 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:604
2448 2475 msgid "Repositories Group read access"
2449 2476 msgstr ""
2450 2477
2451 2478 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:575
2452 2479 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:588
2453 2480 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:605
2454 2481 msgid "Repositories Group write access"
2455 2482 msgstr ""
2456 2483
2457 2484 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:576
2458 2485 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:589
2459 2486 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:606
2460 2487 msgid "Repositories Group admin access"
2461 2488 msgstr ""
2462 2489
2463 2490 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:578
2464 2491 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:591
2465 2492 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:608
2466 2493 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:691
2467 2494 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:654
2468 2495 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:656
2469 2496 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:679
2470 2497 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:680
2471 2498 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:697
2472 2499 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:714
2473 2500 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:730
2474 2501 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:733
2475 2502 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:735
2476 2503 msgid "RhodeCode Administrator"
2477 2504 msgstr ""
2478 2505
2479 2506 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:579
2480 2507 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:592
2481 2508 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:609
2482 2509 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:692
2483 2510 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:677
2484 2511 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:679
2485 2512 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:702
2486 2513 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:703
2487 2514 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:720
2488 2515 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:737
2489 2516 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:753
2490 2517 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:756
2491 2518 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:758
2492 2519 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:758
2493 2520 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:785
2494 2521 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:795
2495 2522 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:836
2496 2523 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:836
2497 2524 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:837
2498 2525 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:837
2499 2526 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:843
2500 2527 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:965
2501 2528 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:990
2502 2529 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2608
2503 2530 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2679
2504 2531 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2765
2505 2532 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2798
2506 2533 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2798
2507 2534 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3013
2508 2535 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3099
2536 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3105
2509 2537 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2296
2510 2538 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2288
2511 2539 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2287
2512 2540 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2291
2513 2541 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2291
2514 2542 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2342
2515 2543 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2343
2516 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2543 rhodecode/model/db.py:3105
2544 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2543 rhodecode/model/db.py:3136
2517 2545 msgid "Repository creation disabled"
2518 2546 msgstr ""
2519 2547
2520 2548 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:580
2521 2549 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:593
2522 2550 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:610
2523 2551 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:693
2524 2552 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:678
2525 2553 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:680
2526 2554 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:703
2527 2555 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:704
2528 2556 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:721
2529 2557 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:738
2530 2558 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:754
2531 2559 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:757
2532 2560 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:759
2533 2561 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:759
2534 2562 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:786
2535 2563 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:796
2536 2564 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:837
2537 2565 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:837
2538 2566 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:838
2539 2567 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:838
2540 2568 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:844
2541 2569 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:966
2542 2570 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:991
2543 2571 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2609
2544 2572 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2680
2545 2573 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2766
2546 2574 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2799
2547 2575 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2799
2548 2576 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3014
2549 2577 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3100
2578 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3106
2550 2579 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2297
2551 2580 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2289
2552 2581 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2288
2553 2582 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2292
2554 2583 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2292
2555 2584 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2343
2556 2585 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2344
2557 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2544 rhodecode/model/db.py:3106
2586 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2544 rhodecode/model/db.py:3137
2558 2587 msgid "Repository creation enabled"
2559 2588 msgstr ""
2560 2589
2561 2590 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:581
2562 2591 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:594
2563 2592 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:611
2564 2593 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:694
2565 2594 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:680
2566 2595 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:682
2567 2596 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:705
2568 2597 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:706
2569 2598 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:723
2570 2599 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:740
2571 2600 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:758
2572 2601 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:761
2573 2602 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:763
2574 2603 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:763
2575 2604 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:790
2576 2605 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:800
2577 2606 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:841
2578 2607 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:841
2579 2608 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:842
2580 2609 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:842
2581 2610 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:848
2582 2611 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:970
2583 2612 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:995
2584 2613 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2613
2585 2614 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2684
2586 2615 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2770
2587 2616 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2803
2588 2617 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2803
2589 2618 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3018
2590 2619 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3104
2620 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3110
2591 2621 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2301
2592 2622 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2293
2593 2623 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2292
2594 2624 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2296
2595 2625 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2296
2596 2626 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2347
2597 2627 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2348
2598 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2548 rhodecode/model/db.py:3110
2628 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2548 rhodecode/model/db.py:3141
2599 2629 msgid "Repository forking disabled"
2600 2630 msgstr ""
2601 2631
2602 2632 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:582
2603 2633 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:595
2604 2634 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:612
2605 2635 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:695
2606 2636 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:681
2607 2637 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:683
2608 2638 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:706
2609 2639 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:707
2610 2640 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:724
2611 2641 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:741
2612 2642 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:759
2613 2643 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:762
2614 2644 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:764
2615 2645 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:764
2616 2646 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:791
2617 2647 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:801
2618 2648 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:842
2619 2649 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:842
2620 2650 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:843
2621 2651 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:843
2622 2652 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:849
2623 2653 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:971
2624 2654 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:996
2625 2655 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2614
2626 2656 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2685
2627 2657 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2771
2628 2658 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2804
2629 2659 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2804
2630 2660 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3019
2631 2661 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3105
2662 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3111
2632 2663 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2302
2633 2664 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2294
2634 2665 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2293
2635 2666 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2297
2636 2667 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2297
2637 2668 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2348
2638 2669 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2349
2639 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2549 rhodecode/model/db.py:3111
2670 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2549 rhodecode/model/db.py:3142
2640 2671 msgid "Repository forking enabled"
2641 2672 msgstr ""
2642 2673
2643 2674 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:583
2644 2675 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:596
2645 2676 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:613
2646 2677 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:696
2647 2678 msgid "Register disabled"
2648 2679 msgstr ""
2649 2680
2650 2681 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:584
2651 2682 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:597
2652 2683 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:614
2653 2684 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:697
2654 2685 msgid "Register new user with RhodeCode with manual activation"
2655 2686 msgstr ""
2656 2687
2657 2688 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:587
2658 2689 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:600
2659 2690 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:617
2660 2691 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:700
2661 2692 msgid "Register new user with RhodeCode with auto activation"
2662 2693 msgstr ""
2663 2694
2664 2695 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:843
2665 2696 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:864
2666 2697 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:873
2667 2698 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:956
2668 2699 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:994
2669 2700 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:996
2670 2701 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:1019
2671 2702 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:1020
2672 2703 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:1037
2673 2704 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:1054
2674 2705 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:1073
2675 2706 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:1076
2676 2707 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:1087
2677 2708 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:1090
2678 2709 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:1120
2679 2710 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:1134
2680 2711 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:1175
2681 2712 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:1175
2682 2713 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:1184
2683 2714 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:1184
2684 2715 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:1194
2685 2716 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:1316
2686 2717 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:1341
2687 2718 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:3295
2688 2719 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:3378
2689 2720 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:3491
2690 2721 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:3524
2691 2722 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:3525
2692 2723 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3757
2693 2724 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3843
2725 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3890
2694 2726 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2915
2695 2727 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2907
2696 2728 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2907
2697 2729 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2910
2698 2730 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2910
2699 2731 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:3011
2700 2732 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:3012
2701 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:3230 rhodecode/model/db.py:3859
2702 #: rhodecode/public/js/scripts.js:41391 rhodecode/public/js/scripts.min.js:1
2703 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:56
2704 #: rhodecode/public/js/src/rhodecode/pullrequests.js:350
2733 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:3230 rhodecode/model/db.py:3935
2734 #: rhodecode/public/js/scripts.js:42219 rhodecode/public/js/scripts.min.js:1
2735 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:64
2736 #: rhodecode/public/js/src/rhodecode/pullrequests.js:352
2705 2737 msgid "Not Reviewed"
2706 2738 msgstr ""
2707 2739
2708 2740 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:844
2709 2741 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:865
2710 2742 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:874
2711 2743 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:957
2712 2744 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:995
2713 2745 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:997
2714 2746 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:1020
2715 2747 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:1021
2716 2748 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:1038
2717 2749 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:1055
2718 2750 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:1074
2719 2751 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:1077
2720 2752 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:1088
2721 2753 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:1091
2722 2754 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:1121
2723 2755 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:1135
2724 2756 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:1176
2725 2757 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:1176
2726 2758 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:1185
2727 2759 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:1185
2728 2760 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:1195
2729 2761 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:1317
2730 2762 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:1342
2731 2763 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:3296
2732 2764 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:3379
2733 2765 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:3492
2734 2766 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:3525
2735 2767 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:3526
2736 2768 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3758
2737 2769 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3844
2770 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3891
2738 2771 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2916
2739 2772 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2908
2740 2773 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2908
2741 2774 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2911
2742 2775 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2911
2743 2776 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:3012
2744 2777 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:3013
2745 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:3231 rhodecode/model/db.py:3860
2778 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:3231 rhodecode/model/db.py:3936
2746 2779 msgid "Approved"
2747 2780 msgstr ""
2748 2781
2749 2782 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:845
2750 2783 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:866
2751 2784 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:875
2752 2785 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:958
2753 2786 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:996
2754 2787 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:998
2755 2788 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:1021
2756 2789 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:1022
2757 2790 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:1039
2758 2791 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:1056
2759 2792 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:1075
2760 2793 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:1078
2761 2794 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:1089
2762 2795 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:1092
2763 2796 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:1122
2764 2797 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:1136
2765 2798 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:1177
2766 2799 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:1177
2767 2800 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:1186
2768 2801 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:1186
2769 2802 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:1196
2770 2803 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:1318
2771 2804 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:1343
2772 2805 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:3297
2773 2806 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:3380
2774 2807 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:3493
2775 2808 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:3526
2776 2809 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:3527
2777 2810 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3759
2778 2811 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3845
2812 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3892
2779 2813 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2917
2780 2814 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2909
2781 2815 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2909
2782 2816 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2912
2783 2817 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2912
2784 2818 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:3013
2785 2819 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:3014
2786 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:3232 rhodecode/model/db.py:3861
2820 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:3232 rhodecode/model/db.py:3937
2787 2821 msgid "Rejected"
2788 2822 msgstr ""
2789 2823
2790 2824 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:846
2791 2825 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:867
2792 2826 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:876
2793 2827 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:959
2794 2828 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:997
2795 2829 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:999
2796 2830 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:1022
2797 2831 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:1023
2798 2832 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:1040
2799 2833 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:1057
2800 2834 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:1076
2801 2835 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:1079
2802 2836 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:1090
2803 2837 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:1093
2804 2838 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:1123
2805 2839 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:1137
2806 2840 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:1178
2807 2841 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:1178
2808 2842 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:1187
2809 2843 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:1187
2810 2844 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:1197
2811 2845 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:1319
2812 2846 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:1344
2813 2847 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:3298
2814 2848 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:3381
2815 2849 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:3494
2816 2850 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:3527
2817 2851 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:3528
2818 2852 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3760
2819 2853 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3846
2854 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3893
2820 2855 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2918
2821 2856 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2910
2822 2857 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2910
2823 2858 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2913
2824 2859 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2913
2825 2860 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:3014
2826 2861 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:3015
2827 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:3233 rhodecode/model/db.py:3862
2862 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:3233 rhodecode/model/db.py:3938
2828 2863 msgid "Under Review"
2829 2864 msgstr ""
2830 2865
2831 2866 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:686
2832 2867 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:661
2833 2868 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:663
2834 2869 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:686
2835 2870 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:687
2836 2871 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:704
2837 2872 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:721
2838 2873 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:737
2839 2874 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:740
2840 2875 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:742
2841 2876 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:742
2842 2877 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:769
2843 2878 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:779
2844 2879 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:820
2845 2880 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:820
2846 2881 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:821
2847 2882 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:821
2848 2883 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:827
2849 2884 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:949
2850 2885 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:974
2851 2886 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2592
2852 2887 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2658
2853 2888 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2744
2854 2889 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2777
2855 2890 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2777
2856 2891 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:2992
2857 2892 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3078
2893 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3084
2858 2894 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2280
2859 2895 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2272
2860 2896 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2271
2861 2897 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2275
2862 2898 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2275
2863 2899 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2326
2864 2900 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2327
2865 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2527 rhodecode/model/db.py:3084
2901 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2527 rhodecode/model/db.py:3115
2866 2902 msgid "Repository group no access"
2867 2903 msgstr ""
2868 2904
2869 2905 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:687
2870 2906 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:662
2871 2907 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:664
2872 2908 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:687
2873 2909 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:688
2874 2910 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:705
2875 2911 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:722
2876 2912 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:738
2877 2913 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:741
2878 2914 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:743
2879 2915 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:743
2880 2916 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:770
2881 2917 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:780
2882 2918 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:821
2883 2919 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:821
2884 2920 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:822
2885 2921 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:822
2886 2922 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:828
2887 2923 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:950
2888 2924 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:975
2889 2925 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2593
2890 2926 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2659
2891 2927 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2745
2892 2928 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2778
2893 2929 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2778
2894 2930 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:2993
2895 2931 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3079
2932 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3085
2896 2933 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2281
2897 2934 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2273
2898 2935 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2272
2899 2936 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2276
2900 2937 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2276
2901 2938 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2327
2902 2939 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2328
2903 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2528 rhodecode/model/db.py:3085
2940 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2528 rhodecode/model/db.py:3116
2904 2941 msgid "Repository group read access"
2905 2942 msgstr ""
2906 2943
2907 2944 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:688
2908 2945 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:663
2909 2946 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:665
2910 2947 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:688
2911 2948 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:689
2912 2949 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:706
2913 2950 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:723
2914 2951 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:739
2915 2952 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:742
2916 2953 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:744
2917 2954 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:744
2918 2955 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:771
2919 2956 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:781
2920 2957 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:822
2921 2958 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:822
2922 2959 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:823
2923 2960 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:823
2924 2961 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:829
2925 2962 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:951
2926 2963 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:976
2927 2964 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2594
2928 2965 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2660
2929 2966 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2746
2930 2967 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2779
2931 2968 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2779
2932 2969 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:2994
2933 2970 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3080
2971 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3086
2934 2972 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2282
2935 2973 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2274
2936 2974 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2273
2937 2975 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2277
2938 2976 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2277
2939 2977 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2328
2940 2978 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2329
2941 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2529 rhodecode/model/db.py:3086
2979 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2529 rhodecode/model/db.py:3117
2942 2980 msgid "Repository group write access"
2943 2981 msgstr ""
2944 2982
2945 2983 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:689
2946 2984 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:664
2947 2985 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:666
2948 2986 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:689
2949 2987 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:690
2950 2988 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:707
2951 2989 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:724
2952 2990 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:740
2953 2991 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:743
2954 2992 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:745
2955 2993 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:745
2956 2994 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:772
2957 2995 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:782
2958 2996 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:823
2959 2997 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:823
2960 2998 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:824
2961 2999 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:824
2962 3000 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:830
2963 3001 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:952
2964 3002 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:977
2965 3003 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2595
2966 3004 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2661
2967 3005 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2747
2968 3006 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2780
2969 3007 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2780
2970 3008 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:2995
2971 3009 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3081
3010 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3087
2972 3011 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2283
2973 3012 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2275
2974 3013 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2274
2975 3014 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2278
2976 3015 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2278
2977 3016 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2329
2978 3017 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2330
2979 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2530 rhodecode/model/db.py:3087
3018 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2530 rhodecode/model/db.py:3118
2980 3019 msgid "Repository group admin access"
2981 3020 msgstr ""
2982 3021
2983 3022 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:666
2984 3023 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:668
2985 3024 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:691
2986 3025 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:692
2987 3026 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:709
2988 3027 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:726
2989 3028 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:742
2990 3029 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:745
2991 3030 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:747
2992 3031 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:747
2993 3032 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:774
2994 3033 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:784
2995 3034 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:825
2996 3035 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:825
2997 3036 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:826
2998 3037 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:826
2999 3038 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:832
3000 3039 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:954
3001 3040 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:979
3002 3041 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2597
3003 3042 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2663
3004 3043 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2749
3005 3044 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2782
3006 3045 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2782
3007 3046 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:2997
3008 3047 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3083
3048 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3089
3009 3049 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2285
3010 3050 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2277
3011 3051 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2276
3012 3052 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2280
3013 3053 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2280
3014 3054 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2331
3015 3055 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2332
3016 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2532 rhodecode/model/db.py:3089
3056 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2532 rhodecode/model/db.py:3120
3017 3057 msgid "User group no access"
3018 3058 msgstr ""
3019 3059
3020 3060 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:667
3021 3061 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:669
3022 3062 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:692
3023 3063 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:693
3024 3064 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:710
3025 3065 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:727
3026 3066 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:743
3027 3067 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:746
3028 3068 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:748
3029 3069 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:748
3030 3070 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:775
3031 3071 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:785
3032 3072 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:826
3033 3073 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:826
3034 3074 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:827
3035 3075 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:827
3036 3076 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:833
3037 3077 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:955
3038 3078 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:980
3039 3079 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2598
3040 3080 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2664
3041 3081 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2750
3042 3082 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2783
3043 3083 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2783
3044 3084 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:2998
3045 3085 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3084
3086 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3090
3046 3087 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2286
3047 3088 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2278
3048 3089 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2277
3049 3090 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2281
3050 3091 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2281
3051 3092 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2332
3052 3093 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2333
3053 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2533 rhodecode/model/db.py:3090
3094 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2533 rhodecode/model/db.py:3121
3054 3095 msgid "User group read access"
3055 3096 msgstr ""
3056 3097
3057 3098 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:668
3058 3099 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:670
3059 3100 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:693
3060 3101 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:694
3061 3102 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:711
3062 3103 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:728
3063 3104 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:744
3064 3105 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:747
3065 3106 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:749
3066 3107 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:749
3067 3108 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:776
3068 3109 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:786
3069 3110 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:827
3070 3111 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:827
3071 3112 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:828
3072 3113 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:828
3073 3114 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:834
3074 3115 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:956
3075 3116 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:981
3076 3117 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2599
3077 3118 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2665
3078 3119 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2751
3079 3120 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2784
3080 3121 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2784
3081 3122 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:2999
3082 3123 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3085
3124 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3091
3083 3125 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2287
3084 3126 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2279
3085 3127 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2278
3086 3128 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2282
3087 3129 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2282
3088 3130 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2333
3089 3131 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2334
3090 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2534 rhodecode/model/db.py:3091
3132 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2534 rhodecode/model/db.py:3122
3091 3133 msgid "User group write access"
3092 3134 msgstr ""
3093 3135
3094 3136 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:669
3095 3137 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:671
3096 3138 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:694
3097 3139 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:695
3098 3140 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:712
3099 3141 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:729
3100 3142 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:745
3101 3143 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:748
3102 3144 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:750
3103 3145 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:750
3104 3146 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:777
3105 3147 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:787
3106 3148 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:828
3107 3149 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:828
3108 3150 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:829
3109 3151 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:829
3110 3152 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:835
3111 3153 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:957
3112 3154 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:982
3113 3155 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2600
3114 3156 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2666
3115 3157 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2752
3116 3158 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2785
3117 3159 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2785
3118 3160 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3000
3119 3161 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3086
3162 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3092
3120 3163 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2288
3121 3164 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2280
3122 3165 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2279
3123 3166 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2283
3124 3167 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2283
3125 3168 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2334
3126 3169 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2335
3127 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2535 rhodecode/model/db.py:3092
3170 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2535 rhodecode/model/db.py:3123
3128 3171 msgid "User group admin access"
3129 3172 msgstr ""
3130 3173
3131 3174 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:671
3132 3175 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:673
3133 3176 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:696
3134 3177 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:697
3135 3178 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:714
3136 3179 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:731
3137 3180 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:747
3138 3181 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:750
3139 3182 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:752
3140 3183 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:752
3141 3184 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:779
3142 3185 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:789
3143 3186 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:830
3144 3187 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:830
3145 3188 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:831
3146 3189 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:831
3147 3190 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:837
3148 3191 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:959
3149 3192 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:984
3150 3193 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2602
3151 3194 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2673
3152 3195 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2759
3153 3196 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2792
3154 3197 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2792
3155 3198 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3007
3156 3199 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3093
3200 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3099
3157 3201 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2290
3158 3202 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2282
3159 3203 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2281
3160 3204 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2285
3161 3205 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2285
3162 3206 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2336
3163 3207 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2337
3164 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2537 rhodecode/model/db.py:3099
3208 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2537 rhodecode/model/db.py:3130
3165 3209 msgid "Repository Group creation disabled"
3166 3210 msgstr ""
3167 3211
3168 3212 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:672
3169 3213 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:674
3170 3214 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:697
3171 3215 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:698
3172 3216 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:715
3173 3217 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:732
3174 3218 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:748
3175 3219 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:751
3176 3220 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:753
3177 3221 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:753
3178 3222 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:780
3179 3223 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:790
3180 3224 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:831
3181 3225 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:831
3182 3226 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:832
3183 3227 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:832
3184 3228 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:838
3185 3229 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:960
3186 3230 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:985
3187 3231 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2603
3188 3232 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2674
3189 3233 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2760
3190 3234 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2793
3191 3235 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2793
3192 3236 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3008
3193 3237 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3094
3238 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3100
3194 3239 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2291
3195 3240 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2283
3196 3241 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2282
3197 3242 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2286
3198 3243 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2286
3199 3244 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2337
3200 3245 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2338
3201 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2538 rhodecode/model/db.py:3100
3246 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2538 rhodecode/model/db.py:3131
3202 3247 msgid "Repository Group creation enabled"
3203 3248 msgstr ""
3204 3249
3205 3250 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:674
3206 3251 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:676
3207 3252 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:699
3208 3253 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:700
3209 3254 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:717
3210 3255 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:734
3211 3256 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:750
3212 3257 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:753
3213 3258 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:755
3214 3259 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:755
3215 3260 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:782
3216 3261 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:792
3217 3262 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:833
3218 3263 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:833
3219 3264 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:834
3220 3265 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:834
3221 3266 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:840
3222 3267 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:962
3223 3268 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:987
3224 3269 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2605
3225 3270 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2676
3226 3271 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2762
3227 3272 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2795
3228 3273 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2795
3229 3274 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3010
3230 3275 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3096
3276 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3102
3231 3277 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2293
3232 3278 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2285
3233 3279 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2284
3234 3280 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2288
3235 3281 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2288
3236 3282 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2339
3237 3283 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2340
3238 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2540 rhodecode/model/db.py:3102
3284 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2540 rhodecode/model/db.py:3133
3239 3285 msgid "User Group creation disabled"
3240 3286 msgstr ""
3241 3287
3242 3288 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:675
3243 3289 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:677
3244 3290 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:700
3245 3291 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:701
3246 3292 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:718
3247 3293 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:735
3248 3294 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:751
3249 3295 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:754
3250 3296 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:756
3251 3297 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:756
3252 3298 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:783
3253 3299 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:793
3254 3300 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:834
3255 3301 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:834
3256 3302 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:835
3257 3303 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:835
3258 3304 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:841
3259 3305 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:963
3260 3306 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:988
3261 3307 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2606
3262 3308 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2677
3263 3309 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2763
3264 3310 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2796
3265 3311 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2796
3266 3312 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3011
3267 3313 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3097
3314 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3103
3268 3315 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2294
3269 3316 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2286
3270 3317 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2285
3271 3318 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2289
3272 3319 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2289
3273 3320 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2340
3274 3321 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2341
3275 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2541 rhodecode/model/db.py:3103
3322 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2541 rhodecode/model/db.py:3134
3276 3323 msgid "User Group creation enabled"
3277 3324 msgstr ""
3278 3325
3279 3326 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:683
3280 3327 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:685
3281 3328 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:708
3282 3329 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:709
3283 3330 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:726
3284 3331 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:743
3285 3332 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:761
3286 3333 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:764
3287 3334 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:766
3288 3335 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:766
3289 3336 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:793
3290 3337 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:803
3291 3338 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:844
3292 3339 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:844
3293 3340 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:845
3294 3341 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:845
3295 3342 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:851
3296 3343 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:973
3297 3344 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:998
3298 3345 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2616
3299 3346 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2687
3300 3347 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2773
3301 3348 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2806
3302 3349 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2806
3303 3350 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3021
3304 3351 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3107
3352 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3113
3305 3353 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2304
3306 3354 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2296
3307 3355 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2295
3308 3356 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2299
3309 3357 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2299
3310 3358 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2350
3311 3359 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2351
3312 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2551 rhodecode/model/db.py:3113
3360 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2551 rhodecode/model/db.py:3144
3313 3361 msgid "Registration disabled"
3314 3362 msgstr ""
3315 3363
3316 3364 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:684
3317 3365 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:686
3318 3366 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:709
3319 3367 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:710
3320 3368 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:727
3321 3369 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:744
3322 3370 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:762
3323 3371 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:765
3324 3372 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:767
3325 3373 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:767
3326 3374 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:794
3327 3375 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:804
3328 3376 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:845
3329 3377 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:845
3330 3378 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:846
3331 3379 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:846
3332 3380 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:852
3333 3381 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:974
3334 3382 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:999
3335 3383 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2617
3336 3384 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2688
3337 3385 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2774
3338 3386 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2807
3339 3387 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2807
3340 3388 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3022
3341 3389 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3108
3390 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3114
3342 3391 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2305
3343 3392 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2297
3344 3393 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2296
3345 3394 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2300
3346 3395 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2300
3347 3396 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2351
3348 3397 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2352
3349 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2552 rhodecode/model/db.py:3114
3398 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2552 rhodecode/model/db.py:3145
3350 3399 msgid "User Registration with manual account activation"
3351 3400 msgstr ""
3352 3401
3353 3402 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:685
3354 3403 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:687
3355 3404 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:710
3356 3405 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:711
3357 3406 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:728
3358 3407 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:745
3359 3408 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:763
3360 3409 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:766
3361 3410 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:768
3362 3411 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:768
3363 3412 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:795
3364 3413 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:805
3365 3414 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:846
3366 3415 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:846
3367 3416 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:847
3368 3417 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:847
3369 3418 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:853
3370 3419 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:975
3371 3420 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:1000
3372 3421 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2618
3373 3422 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2689
3374 3423 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2775
3375 3424 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2808
3376 3425 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2808
3377 3426 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3023
3378 3427 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3109
3428 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3115
3379 3429 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2306
3380 3430 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2298
3381 3431 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2297
3382 3432 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2301
3383 3433 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2301
3384 3434 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2352
3385 3435 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2353
3386 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2553 rhodecode/model/db.py:3115
3436 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2553 rhodecode/model/db.py:3146
3387 3437 msgid "User Registration with automatic account activation"
3388 3438 msgstr ""
3389 3439
3390 3440 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:687
3391 3441 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:689
3392 3442 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:712
3393 3443 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:713
3394 3444 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:730
3395 3445 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:747
3396 3446 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:765
3397 3447 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:768
3398 3448 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:770
3399 3449 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:770
3400 3450 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:797
3401 3451 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:807
3402 3452 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:848
3403 3453 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:848
3404 3454 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:849
3405 3455 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:849
3406 3456 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:855
3407 3457 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:977
3408 3458 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:1002
3409 3459 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2624
3410 3460 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2695
3411 3461 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2781
3412 3462 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2814
3413 3463 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2814
3414 3464 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3029
3415 3465 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3115
3466 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3121
3416 3467 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2308
3417 3468 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2300
3418 3469 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2299
3419 3470 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2303
3420 3471 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2303
3421 3472 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2358
3422 3473 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2359
3423 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2559 rhodecode/model/db.py:3121
3474 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2559 rhodecode/model/db.py:3152
3424 3475 #: rhodecode/model/permission.py:105
3425 3476 msgid "Manual activation of external account"
3426 3477 msgstr ""
3427 3478
3428 3479 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:688
3429 3480 #: rhodecode/lib/dbmigrate/schema/db_1_8_0.py:690
3430 3481 #: rhodecode/lib/dbmigrate/schema/db_2_0_0.py:713
3431 3482 #: rhodecode/lib/dbmigrate/schema/db_2_0_1.py:714
3432 3483 #: rhodecode/lib/dbmigrate/schema/db_2_0_2.py:731
3433 3484 #: rhodecode/lib/dbmigrate/schema/db_2_1_0.py:748
3434 3485 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:766
3435 3486 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:769
3436 3487 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:771
3437 3488 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:771
3438 3489 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:798
3439 3490 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:808
3440 3491 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:849
3441 3492 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:849
3442 3493 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:850
3443 3494 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:850
3444 3495 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:856
3445 3496 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:978
3446 3497 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:1003
3447 3498 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2625
3448 3499 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2696
3449 3500 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2782
3450 3501 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2815
3451 3502 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2815
3452 3503 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3030
3453 3504 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3116
3505 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3122
3454 3506 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2309
3455 3507 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2301
3456 3508 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2300
3457 3509 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2304
3458 3510 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2304
3459 3511 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2359
3460 3512 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2360
3461 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2560 rhodecode/model/db.py:3122
3513 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2560 rhodecode/model/db.py:3153
3462 3514 #: rhodecode/model/permission.py:106
3463 3515 msgid "Automatic activation of external account"
3464 3516 msgstr ""
3465 3517
3466 3518 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:755
3467 3519 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:758
3468 3520 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:760
3469 3521 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:760
3470 3522 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:787
3471 3523 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:797
3472 3524 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:838
3473 3525 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:838
3474 3526 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:839
3475 3527 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:839
3476 3528 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:845
3477 3529 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:967
3478 3530 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:992
3479 3531 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2610
3480 3532 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2681
3481 3533 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2767
3482 3534 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2800
3483 3535 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2800
3484 3536 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3015
3485 3537 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3101
3538 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3107
3486 3539 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2298
3487 3540 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2290
3488 3541 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2289
3489 3542 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2293
3490 3543 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2293
3491 3544 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2344
3492 3545 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2345
3493 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2545 rhodecode/model/db.py:3107
3546 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2545 rhodecode/model/db.py:3138
3494 3547 msgid "Repository creation enabled with write permission to a repository group"
3495 3548 msgstr ""
3496 3549
3497 3550 #: rhodecode/lib/dbmigrate/schema/db_2_2_0.py:756
3498 3551 #: rhodecode/lib/dbmigrate/schema/db_2_2_3.py:759
3499 3552 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_0.py:761
3500 3553 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:761
3501 3554 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:788
3502 3555 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:798
3503 3556 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:839
3504 3557 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:839
3505 3558 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:840
3506 3559 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:840
3507 3560 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:846
3508 3561 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:968
3509 3562 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:993
3510 3563 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2611
3511 3564 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2682
3512 3565 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2768
3513 3566 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2801
3514 3567 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2801
3515 3568 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3016
3516 3569 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3102
3570 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3108
3517 3571 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2299
3518 3572 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2291
3519 3573 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2290
3520 3574 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2294
3521 3575 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2294
3522 3576 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2345
3523 3577 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2346
3524 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2546 rhodecode/model/db.py:3108
3578 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2546 rhodecode/model/db.py:3139
3525 3579 msgid "Repository creation disabled with write permission to a repository group"
3526 3580 msgstr ""
3527 3581
3528 3582 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_1.py:735
3529 3583 #: rhodecode/lib/dbmigrate/schema/db_2_3_0_2.py:762
3530 3584 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:772
3531 3585 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:813
3532 3586 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:813
3533 3587 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:814
3534 3588 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:814
3535 3589 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:820
3536 3590 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:942
3537 3591 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:967
3538 3592 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2585
3539 3593 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2651
3540 3594 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2737
3541 3595 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2770
3542 3596 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2770
3543 3597 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:2985
3544 3598 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3071
3599 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3077
3545 3600 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2273
3546 3601 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2265
3547 3602 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2264
3548 3603 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2268
3549 3604 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2268
3550 3605 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2319
3551 3606 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2320
3552 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2520 rhodecode/model/db.py:3077
3607 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2520 rhodecode/model/db.py:3108
3553 3608 msgid "RhodeCode Super Administrator"
3554 3609 msgstr ""
3555 3610
3556 3611 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:810
3557 3612 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:851
3558 3613 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:851
3559 3614 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:852
3560 3615 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:852
3561 3616 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:858
3562 3617 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:980
3563 3618 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:1005
3564 3619 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2627
3565 3620 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2698
3566 3621 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2784
3567 3622 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2817
3568 3623 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2817
3569 3624 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3032
3570 3625 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3118
3626 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3124
3571 3627 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2311
3572 3628 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2303
3573 3629 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2302
3574 3630 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2306
3575 3631 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2306
3576 3632 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2361
3577 3633 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2362
3578 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2562 rhodecode/model/db.py:3124
3634 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2562 rhodecode/model/db.py:3155
3579 3635 msgid "Inherit object permissions from default user disabled"
3580 3636 msgstr ""
3581 3637
3582 3638 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_0.py:811
3583 3639 #: rhodecode/lib/dbmigrate/schema/db_3_0_0_1.py:852
3584 3640 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_0.py:852
3585 3641 #: rhodecode/lib/dbmigrate/schema/db_3_1_0_1.py:853
3586 3642 #: rhodecode/lib/dbmigrate/schema/db_3_2_0_0.py:853
3587 3643 #: rhodecode/lib/dbmigrate/schema/db_3_3_0_0.py:859
3588 3644 #: rhodecode/lib/dbmigrate/schema/db_3_5_0_0.py:981
3589 3645 #: rhodecode/lib/dbmigrate/schema/db_3_7_0_0.py:1006
3590 3646 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2628
3591 3647 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2699
3592 3648 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2785
3593 3649 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2818
3594 3650 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2818
3595 3651 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3033
3596 3652 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3119
3653 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3125
3597 3654 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2312
3598 3655 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2304
3599 3656 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2303
3600 3657 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2307
3601 3658 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2307
3602 3659 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2362
3603 3660 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2363
3604 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2563 rhodecode/model/db.py:3125
3661 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2563 rhodecode/model/db.py:3156
3605 3662 msgid "Inherit object permissions from default user enabled"
3606 3663 msgstr ""
3607 3664
3608 3665 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:1103
3609 3666 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:1107
3610 3667 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:1118
3611 3668 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:1120
3612 3669 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:1120
3613 3670 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:1137
3614 3671 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:1189
3672 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:1195
3615 3673 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:910
3616 3674 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:911
3617 3675 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:910
3618 3676 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:912
3619 3677 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:912
3620 3678 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:955
3621 3679 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:956
3622 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:1050 rhodecode/model/db.py:1195
3680 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:1050 rhodecode/model/db.py:1202
3623 3681 msgid "all"
3624 3682 msgstr ""
3625 3683
3626 3684 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:1104
3627 3685 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:1108
3628 3686 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:1119
3629 3687 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:1121
3630 3688 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:1121
3631 3689 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:1138
3632 3690 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:1190
3691 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:1196
3633 3692 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:911
3634 3693 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:912
3635 3694 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:911
3636 3695 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:913
3637 3696 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:913
3638 3697 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:956
3639 3698 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:957
3640 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:1051 rhodecode/model/db.py:1196
3699 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:1051 rhodecode/model/db.py:1203
3641 3700 msgid "http/web interface"
3642 3701 msgstr ""
3643 3702
3644 3703 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:1105
3645 3704 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:1109
3646 3705 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:1120
3647 3706 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:1122
3648 3707 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:1122
3649 3708 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:1139
3650 3709 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:1191
3710 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:1197
3651 3711 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:912
3652 3712 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:913
3653 3713 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:912
3654 3714 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:914
3655 3715 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:914
3656 3716 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:957
3657 3717 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:958
3658 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:1052 rhodecode/model/db.py:1197
3718 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:1052 rhodecode/model/db.py:1204
3659 3719 msgid "vcs (git/hg/svn protocol)"
3660 3720 msgstr ""
3661 3721
3662 3722 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:1106
3663 3723 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:1110
3664 3724 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:1121
3665 3725 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:1123
3666 3726 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:1123
3667 3727 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:1140
3668 3728 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:1192
3729 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:1198
3669 3730 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:913
3670 3731 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:914
3671 3732 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:913
3672 3733 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:915
3673 3734 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:915
3674 3735 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:958
3675 3736 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:959
3676 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:1053 rhodecode/model/db.py:1198
3737 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:1053 rhodecode/model/db.py:1205
3677 3738 msgid "api calls"
3678 3739 msgstr ""
3679 3740
3680 3741 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:1107
3681 3742 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:1111
3682 3743 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:1122
3683 3744 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:1124
3684 3745 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:1124
3685 3746 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:1141
3686 3747 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:1193
3748 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:1199
3687 3749 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:914
3688 3750 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:915
3689 3751 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:914
3690 3752 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:916
3691 3753 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:916
3692 3754 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:959
3693 3755 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:960
3694 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:1054 rhodecode/model/db.py:1199
3756 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:1054 rhodecode/model/db.py:1206
3695 3757 msgid "feed access"
3696 3758 msgstr ""
3697 3759
3698 3760 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2348
3699 3761 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2414
3700 3762 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2488
3701 3763 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2511
3702 3764 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2511
3703 3765 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:2638
3704 3766 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:2729
3767 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:2735
3705 3768 #: rhodecode/lib/dbmigrate/schema/db_4_3_0_0.py:2051
3706 3769 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_0.py:2043
3707 3770 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_1.py:2042
3708 3771 #: rhodecode/lib/dbmigrate/schema/db_4_4_0_2.py:2046
3709 3772 #: rhodecode/lib/dbmigrate/schema/db_4_5_0_0.py:2046
3710 3773 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2090
3711 3774 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2091
3712 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2284 rhodecode/model/db.py:2735
3775 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2284 rhodecode/model/db.py:2766
3713 3776 msgid "No parent"
3714 3777 msgstr ""
3715 3778
3716 3779 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2620
3717 3780 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2691
3718 3781 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2777
3719 3782 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2810
3720 3783 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2810
3721 3784 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3025
3722 3785 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3111
3786 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3117
3723 3787 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2354
3724 3788 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2355
3725 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2555 rhodecode/model/db.py:3117
3789 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2555 rhodecode/model/db.py:3148
3726 3790 msgid "Password reset enabled"
3727 3791 msgstr ""
3728 3792
3729 3793 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2621
3730 3794 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2692
3731 3795 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2778
3732 3796 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2811
3733 3797 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2811
3734 3798 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3026
3735 3799 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3112
3800 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3118
3736 3801 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2355
3737 3802 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2356
3738 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2556 rhodecode/model/db.py:3118
3803 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2556 rhodecode/model/db.py:3149
3739 3804 msgid "Password reset hidden"
3740 3805 msgstr ""
3741 3806
3742 3807 #: rhodecode/lib/dbmigrate/schema/db_4_11_0_0.py:2622
3743 3808 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2693
3744 3809 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2779
3745 3810 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2812
3746 3811 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2812
3747 3812 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3027
3748 3813 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3113
3814 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3119
3749 3815 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_0.py:2356
3750 3816 #: rhodecode/lib/dbmigrate/schema/db_4_7_0_1.py:2357
3751 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2557 rhodecode/model/db.py:3119
3817 #: rhodecode/lib/dbmigrate/schema/db_4_9_0_0.py:2557 rhodecode/model/db.py:3150
3752 3818 msgid "Password reset disabled"
3753 3819 msgstr ""
3754 3820
3755 3821 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2668
3756 3822 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2754
3757 3823 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2787
3758 3824 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2787
3759 3825 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3002
3760 3826 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3088
3761 #: rhodecode/model/db.py:3094
3827 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3094
3828 #: rhodecode/model/db.py:3125
3762 3829 msgid "Branch no permissions"
3763 3830 msgstr ""
3764 3831
3765 3832 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2669
3766 3833 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2755
3767 3834 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2788
3768 3835 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2788
3769 3836 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3003
3770 3837 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3089
3771 #: rhodecode/model/db.py:3095
3838 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3095
3839 #: rhodecode/model/db.py:3126
3772 3840 msgid "Branch access by web merge"
3773 3841 msgstr ""
3774 3842
3775 3843 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2670
3776 3844 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2756
3777 3845 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2789
3778 3846 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2789
3779 3847 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3004
3780 3848 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3090
3781 #: rhodecode/model/db.py:3096
3849 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3096
3850 #: rhodecode/model/db.py:3127
3782 3851 msgid "Branch access by push"
3783 3852 msgstr ""
3784 3853
3785 3854 #: rhodecode/lib/dbmigrate/schema/db_4_13_0_0.py:2671
3786 3855 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_0.py:2757
3787 3856 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_1.py:2790
3788 3857 #: rhodecode/lib/dbmigrate/schema/db_4_16_0_2.py:2790
3789 3858 #: rhodecode/lib/dbmigrate/schema/db_4_18_0_1.py:3005
3790 3859 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:3091
3791 #: rhodecode/model/db.py:3097
3860 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:3097
3861 #: rhodecode/model/db.py:3128
3792 3862 msgid "Branch access by push with force"
3793 3863 msgstr ""
3794 3864
3795 3865 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_0.py:1194
3796 #: rhodecode/model/db.py:1200
3866 #: rhodecode/lib/dbmigrate/schema/db_4_19_0_2.py:1200
3867 #: rhodecode/model/db.py:1207
3797 3868 msgid "artifacts downloads"
3798 3869 msgstr ""
3799 3870
3800 3871 #: rhodecode/lib/index/whoosh.py:189
3801 3872 msgid "Index Type"
3802 3873 msgstr ""
3803 3874
3804 3875 #: rhodecode/lib/index/whoosh.py:192
3805 3876 msgid "File Index"
3806 3877 msgstr ""
3807 3878
3808 3879 #: rhodecode/lib/index/whoosh.py:193 rhodecode/lib/index/whoosh.py:199
3809 3880 msgid "Indexed documents"
3810 3881 msgstr ""
3811 3882
3812 3883 #: rhodecode/lib/index/whoosh.py:194 rhodecode/lib/index/whoosh.py:200
3813 3884 msgid "Last update"
3814 3885 msgstr ""
3815 3886
3816 3887 #: rhodecode/lib/index/whoosh.py:198
3817 3888 msgid "Commit index"
3818 3889 msgstr ""
3819 3890
3820 3891 #: rhodecode/lib/vcs/backends/base.py:150
3821 3892 msgid "This pull request can be automatically merged."
3822 3893 msgstr ""
3823 3894
3824 3895 #: rhodecode/lib/vcs/backends/base.py:152
3825 3896 msgid "This pull request cannot be merged because of an unhandled exception. {exception}"
3826 3897 msgstr ""
3827 3898
3828 3899 #: rhodecode/lib/vcs/backends/base.py:155
3829 3900 msgid "This pull request cannot be merged because of merge conflicts. {unresolved_files}"
3830 3901 msgstr ""
3831 3902
3832 3903 #: rhodecode/lib/vcs/backends/base.py:157
3833 3904 msgid "This pull request could not be merged because push to target:`{target}@{merge_commit}` failed."
3834 3905 msgstr ""
3835 3906
3836 3907 #: rhodecode/lib/vcs/backends/base.py:160
3837 3908 msgid "This pull request cannot be merged because the target `{target_ref.name}` is not a head."
3838 3909 msgstr ""
3839 3910
3840 3911 #: rhodecode/lib/vcs/backends/base.py:163
3841 3912 msgid "This pull request cannot be merged because the source contains more branches than the target."
3842 3913 msgstr ""
3843 3914
3844 3915 #: rhodecode/lib/vcs/backends/base.py:166
3845 3916 msgid "This pull request cannot be merged because the target `{target_ref.name}` has multiple heads: `{heads}`."
3846 3917 msgstr ""
3847 3918
3848 3919 #: rhodecode/lib/vcs/backends/base.py:169
3849 3920 msgid "This pull request cannot be merged because the target repository is locked by {locked_by}."
3850 3921 msgstr ""
3851 3922
3852 3923 #: rhodecode/lib/vcs/backends/base.py:173
3853 3924 msgid "This pull request cannot be merged because the target reference `{target_ref.name}` is missing."
3854 3925 msgstr ""
3855 3926
3856 3927 #: rhodecode/lib/vcs/backends/base.py:176
3857 3928 msgid "This pull request cannot be merged because the source reference `{source_ref.name}` is missing."
3858 3929 msgstr ""
3859 3930
3860 3931 #: rhodecode/lib/vcs/backends/base.py:179
3861 3932 msgid "This pull request cannot be merged because of conflicts related to sub repositories."
3862 3933 msgstr ""
3863 3934
3864 3935 #: rhodecode/lib/vcs/backends/base.py:184
3865 3936 msgid "This pull request cannot be merged because the target or the source reference is missing."
3866 3937 msgstr ""
3867 3938
3868 3939 #: rhodecode/model/auth_token.py:53
3869 3940 msgid "5 minutes {end_date}"
3870 3941 msgstr ""
3871 3942
3872 3943 #: rhodecode/model/auth_token.py:55
3873 3944 msgid "1 hour {end_date}"
3874 3945 msgstr ""
3875 3946
3876 3947 #: rhodecode/model/auth_token.py:57
3877 3948 msgid "1 day {end_date}"
3878 3949 msgstr ""
3879 3950
3880 3951 #: rhodecode/model/auth_token.py:59
3881 3952 msgid "1 month {end_date}"
3882 3953 msgstr ""
3883 3954
3884 #: rhodecode/model/comment.py:473
3955 #: rhodecode/model/comment.py:485
3885 3956 msgid "made a comment"
3886 3957 msgstr ""
3887 3958
3888 #: rhodecode/model/comment.py:474
3959 #: rhodecode/model/comment.py:486
3889 3960 msgid "Show it now"
3890 3961 msgstr ""
3891 3962
3963 #: rhodecode/model/db.py:1213
3964 msgid "Token for all actions."
3965 msgstr ""
3966
3967 #: rhodecode/model/db.py:1214
3968 msgid "Token to access RhodeCode pages via web interface without login using `api_access_controllers_whitelist` functionality."
3969 msgstr ""
3970
3971 #: rhodecode/model/db.py:1216
3972 msgid "Token to interact over git/hg/svn protocols. Requires auth_token authentication plugin to be active. <br/>Such Token should be used then instead of a password to interact with a repository, and additionally can be limited to single repository using repo scope."
3973 msgstr ""
3974
3975 #: rhodecode/model/db.py:1221
3976 msgid "Token limited to api calls."
3977 msgstr ""
3978
3979 #: rhodecode/model/db.py:1222
3980 msgid "Token to read RSS/ATOM feed."
3981 msgstr ""
3982
3983 #: rhodecode/model/db.py:1223
3984 msgid "Token for artifacts downloads."
3985 msgstr ""
3986
3892 3987 #: rhodecode/model/forms.py:88
3893 3988 msgid "Please enter a login"
3894 3989 msgstr ""
3895 3990
3896 3991 #: rhodecode/model/forms.py:89
3897 3992 #, python-format
3898 3993 msgid "Enter a value %(min)i characters long or more"
3899 3994 msgstr ""
3900 3995
3901 3996 #: rhodecode/model/forms.py:99
3902 3997 msgid "Please enter a password"
3903 3998 msgstr ""
3904 3999
3905 4000 #: rhodecode/model/forms.py:100
3906 4001 #, python-format
3907 4002 msgid "Enter %(min)i characters or more"
3908 4003 msgstr ""
3909 4004
3910 #: rhodecode/model/notification.py:246
4005 #: rhodecode/model/notification.py:248
3911 4006 #, python-format
3912 4007 msgid "%(user)s commented on commit %(date_or_age)s"
3913 4008 msgstr ""
3914 4009
3915 #: rhodecode/model/notification.py:247
4010 #: rhodecode/model/notification.py:249
3916 4011 #, python-format
3917 4012 msgid "%(user)s commented on commit at %(date_or_age)s"
3918 4013 msgstr ""
3919 4014
3920 #: rhodecode/model/notification.py:250
4015 #: rhodecode/model/notification.py:252
3921 4016 #, python-format
3922 4017 msgid "%(user)s sent message %(date_or_age)s"
3923 4018 msgstr ""
3924 4019
3925 #: rhodecode/model/notification.py:251
4020 #: rhodecode/model/notification.py:253
3926 4021 #, python-format
3927 4022 msgid "%(user)s sent message at %(date_or_age)s"
3928 4023 msgstr ""
3929 4024
3930 #: rhodecode/model/notification.py:254
4025 #: rhodecode/model/notification.py:256
3931 4026 #, python-format
3932 4027 msgid "%(user)s mentioned you %(date_or_age)s"
3933 4028 msgstr ""
3934 4029
3935 #: rhodecode/model/notification.py:255
4030 #: rhodecode/model/notification.py:257
3936 4031 #, python-format
3937 4032 msgid "%(user)s mentioned you at %(date_or_age)s"
3938 4033 msgstr ""
3939 4034
3940 #: rhodecode/model/notification.py:258
4035 #: rhodecode/model/notification.py:260
3941 4036 #, python-format
3942 4037 msgid "%(user)s registered in RhodeCode %(date_or_age)s"
3943 4038 msgstr ""
3944 4039
3945 #: rhodecode/model/notification.py:259
4040 #: rhodecode/model/notification.py:261
3946 4041 #, python-format
3947 4042 msgid "%(user)s registered in RhodeCode at %(date_or_age)s"
3948 4043 msgstr ""
3949 4044
3950 #: rhodecode/model/notification.py:262
4045 #: rhodecode/model/notification.py:264
3951 4046 #, python-format
3952 4047 msgid "%(user)s opened new pull request %(date_or_age)s"
3953 4048 msgstr ""
3954 4049
3955 #: rhodecode/model/notification.py:263
4050 #: rhodecode/model/notification.py:265
3956 4051 #, python-format
3957 4052 msgid "%(user)s opened new pull request at %(date_or_age)s"
3958 4053 msgstr ""
3959 4054
3960 #: rhodecode/model/notification.py:266
4055 #: rhodecode/model/notification.py:268
3961 4056 #, python-format
3962 4057 msgid "%(user)s updated pull request %(date_or_age)s"
3963 4058 msgstr ""
3964 4059
3965 #: rhodecode/model/notification.py:267
4060 #: rhodecode/model/notification.py:269
3966 4061 #, python-format
3967 4062 msgid "%(user)s updated pull request at %(date_or_age)s"
3968 4063 msgstr ""
3969 4064
3970 #: rhodecode/model/notification.py:270
4065 #: rhodecode/model/notification.py:272
3971 4066 #, python-format
3972 4067 msgid "%(user)s commented on pull request %(date_or_age)s"
3973 4068 msgstr ""
3974 4069
3975 #: rhodecode/model/notification.py:271
4070 #: rhodecode/model/notification.py:273
3976 4071 #, python-format
3977 4072 msgid "%(user)s commented on pull request at %(date_or_age)s"
3978 4073 msgstr ""
3979 4074
3980 4075 #: rhodecode/model/permission.py:71 rhodecode/model/permission.py:77
3981 4076 #: rhodecode/model/permission.py:83
3982 4077 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:11
3983 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:207
4078 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:217
3984 4079 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:11
3985 4080 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:15
3986 4081 msgid "None"
3987 4082 msgstr ""
3988 4083
3989 4084 #: rhodecode/model/permission.py:72 rhodecode/model/permission.py:78
3990 4085 #: rhodecode/model/permission.py:84
3991 4086 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:12
3992 4087 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:12
3993 4088 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:16
3994 4089 msgid "Read"
3995 4090 msgstr ""
3996 4091
3997 4092 #: rhodecode/model/permission.py:73 rhodecode/model/permission.py:79
3998 4093 #: rhodecode/model/permission.py:85
3999 4094 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:13
4000 4095 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:13
4001 4096 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:17
4002 #: rhodecode/templates/changeset/changeset_file_comment.mako:272
4003 #: rhodecode/templates/changeset/changeset_file_comment.mako:323
4097 #: rhodecode/templates/changeset/changeset_file_comment.mako:337
4098 #: rhodecode/templates/changeset/changeset_file_comment.mako:388
4004 4099 #: rhodecode/templates/data_table/_dt_elements.mako:450
4005 4100 msgid "Write"
4006 4101 msgstr ""
4007 4102
4008 4103 #: rhodecode/model/permission.py:74 rhodecode/model/permission.py:80
4009 4104 #: rhodecode/model/permission.py:86
4010 4105 #: rhodecode/templates/admin/auth/plugin_settings.mako:12
4011 4106 #: rhodecode/templates/admin/defaults/defaults.mako:12
4012 4107 #: rhodecode/templates/admin/integrations/base.mako:21
4013 4108 #: rhodecode/templates/admin/integrations/form.mako:15
4014 4109 #: rhodecode/templates/admin/integrations/form.mako:28
4015 4110 #: rhodecode/templates/admin/integrations/global.mako:12
4016 4111 #: rhodecode/templates/admin/integrations/list.mako:8
4017 4112 #: rhodecode/templates/admin/integrations/list.mako:14
4018 4113 #: rhodecode/templates/admin/integrations/new.mako:11
4019 4114 #: rhodecode/templates/admin/permissions/permissions.mako:12
4020 4115 #: rhodecode/templates/admin/repo_groups/repo_group_add.mako:12
4021 4116 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:14
4022 4117 #: rhodecode/templates/admin/repos/repo_add.mako:13
4023 4118 #: rhodecode/templates/admin/repos/repo_add.mako:17
4024 4119 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:14
4025 4120 #: rhodecode/templates/admin/settings/settings.mako:12
4026 4121 #: rhodecode/templates/admin/user_groups/user_group_add.mako:11
4027 4122 #: rhodecode/templates/admin/user_groups/user_group_edit.mako:12
4028 4123 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:18
4029 4124 #: rhodecode/templates/admin/users/user_add.mako:11
4030 4125 #: rhodecode/templates/admin/users/user_edit.mako:12
4031 #: rhodecode/templates/base/base.mako:832
4126 #: rhodecode/templates/base/base.mako:839
4032 4127 msgid "Admin"
4033 4128 msgstr ""
4034 4129
4035 4130 #: rhodecode/model/permission.py:89
4036 4131 msgid "Protected/No Access"
4037 4132 msgstr ""
4038 4133
4039 4134 #: rhodecode/model/permission.py:90
4040 4135 msgid "Web merge"
4041 4136 msgstr ""
4042 4137
4043 4138 #: rhodecode/model/permission.py:91
4044 4139 msgid "Push"
4045 4140 msgstr ""
4046 4141
4047 4142 #: rhodecode/model/permission.py:92
4048 4143 msgid "Force Push"
4049 4144 msgstr ""
4050 4145
4051 4146 #: rhodecode/model/permission.py:95 rhodecode/model/permission.py:109
4052 4147 #: rhodecode/model/permission.py:113 rhodecode/model/permission.py:117
4053 4148 #: rhodecode/model/permission.py:121 rhodecode/model/permission.py:125
4054 4149 #: rhodecode/model/permission.py:129
4055 4150 #: rhodecode/templates/admin/my_account/my_account_notifications.mako:27
4056 4151 msgid "Disabled"
4057 4152 msgstr ""
4058 4153
4059 4154 #: rhodecode/model/permission.py:96
4060 4155 msgid "Allowed with manual account activation"
4061 4156 msgstr ""
4062 4157
4063 4158 #: rhodecode/model/permission.py:97
4064 4159 msgid "Allowed with automatic account activation"
4065 4160 msgstr ""
4066 4161
4067 4162 #: rhodecode/model/permission.py:100
4068 4163 msgid "Allow password recovery"
4069 4164 msgstr ""
4070 4165
4071 4166 #: rhodecode/model/permission.py:101
4072 4167 msgid "Hide password recovery link"
4073 4168 msgstr ""
4074 4169
4075 4170 #: rhodecode/model/permission.py:102
4076 4171 msgid "Disable password recovery"
4077 4172 msgstr ""
4078 4173
4079 4174 #: rhodecode/model/pull_request.py:215
4080 4175 msgid "Pull request update successful."
4081 4176 msgstr ""
4082 4177
4083 4178 #: rhodecode/model/pull_request.py:217
4084 4179 msgid "Pull request update failed because of an unknown error."
4085 4180 msgstr ""
4086 4181
4087 4182 #: rhodecode/model/pull_request.py:219
4088 4183 msgid "No update needed because the source and target have not changed."
4089 4184 msgstr ""
4090 4185
4091 4186 #: rhodecode/model/pull_request.py:221
4092 4187 msgid "Pull request cannot be updated because the reference type is not supported for an update. Only Branch, Tag or Bookmark is allowed."
4093 4188 msgstr ""
4094 4189
4095 4190 #: rhodecode/model/pull_request.py:224
4096 4191 msgid "This pull request cannot be updated because the target reference is missing."
4097 4192 msgstr ""
4098 4193
4099 4194 #: rhodecode/model/pull_request.py:227
4100 4195 msgid "This pull request cannot be updated because the source reference is missing."
4101 4196 msgstr ""
4102 4197
4103 4198 #: rhodecode/model/pull_request.py:1518
4104 4199 msgid "Server-side pull request merging is disabled."
4105 4200 msgstr ""
4106 4201
4107 4202 #: rhodecode/model/pull_request.py:1521
4108 4203 msgid "This pull request is closed."
4109 4204 msgstr ""
4110 4205
4111 4206 #: rhodecode/model/pull_request.py:1535
4112 4207 msgid "Pull request merging is not supported."
4113 4208 msgstr ""
4114 4209
4115 4210 #: rhodecode/model/pull_request.py:1552
4116 4211 msgid "Target repository large files support is disabled."
4117 4212 msgstr ""
4118 4213
4119 4214 #: rhodecode/model/pull_request.py:1555
4120 4215 msgid "Source repository large files support is disabled."
4121 4216 msgstr ""
4122 4217
4123 4218 #: rhodecode/model/pull_request.py:1739 rhodecode/model/scm.py:1004
4124 4219 #: rhodecode/templates/admin/my_account/my_account.mako:32
4125 #: rhodecode/templates/base/base.mako:629
4220 #: rhodecode/templates/base/base.mako:636
4126 4221 #: rhodecode/templates/summary/components.mako:46
4127 4222 msgid "Bookmarks"
4128 4223 msgstr ""
4129 4224
4130 4225 #: rhodecode/model/pull_request.py:1744
4131 4226 msgid "Commit IDs"
4132 4227 msgstr ""
4133 4228
4134 4229 #: rhodecode/model/pull_request.py:1747
4135 4230 #: rhodecode/templates/summary/components.mako:22
4136 4231 msgid "Closed Branches"
4137 4232 msgstr ""
4138 4233
4139 4234 #: rhodecode/model/pull_request.py:1929
4140 4235 msgid "WIP marker in title prevents from accidental merge."
4141 4236 msgstr ""
4142 4237
4143 4238 #: rhodecode/model/pull_request.py:1939
4144 4239 msgid "User `{}` not allowed to perform merge."
4145 4240 msgstr ""
4146 4241
4147 4242 #: rhodecode/model/pull_request.py:1957
4148 4243 msgid "Target branch `{}` changes rejected by rule {}."
4149 4244 msgstr ""
4150 4245
4151 4246 #: rhodecode/model/pull_request.py:1971
4152 4247 msgid "Pull request reviewer approval is pending."
4153 4248 msgstr ""
4154 4249
4155 4250 #: rhodecode/model/pull_request.py:1985
4156 4251 msgid "Cannot merge, {} TODO still not resolved."
4157 4252 msgstr ""
4158 4253
4159 4254 #: rhodecode/model/pull_request.py:1988
4160 4255 msgid "Cannot merge, {} TODOs still not resolved."
4161 4256 msgstr ""
4162 4257
4163 4258 #: rhodecode/model/pull_request.py:2043
4164 4259 msgid "Merge strategy: rebase"
4165 4260 msgstr ""
4166 4261
4167 4262 #: rhodecode/model/pull_request.py:2048
4168 4263 msgid "Merge strategy: explicit merge commit"
4169 4264 msgstr ""
4170 4265
4171 4266 #: rhodecode/model/pull_request.py:2056
4172 msgid "Source branch will be closed after merge."
4267 msgid "Source branch will be closed before the merge."
4173 4268 msgstr ""
4174 4269
4175 4270 #: rhodecode/model/pull_request.py:2058
4176 msgid "Source branch will be deleted after merge."
4271 msgid "Source branch will be deleted after the merge."
4177 4272 msgstr ""
4178 4273
4179 4274 #: rhodecode/model/validators.py:93 rhodecode/model/validators.py:94
4180 4275 msgid "Value cannot be an empty list"
4181 4276 msgstr ""
4182 4277
4183 4278 #: rhodecode/model/validators.py:140
4184 4279 msgid "Pattern already exists"
4185 4280 msgstr ""
4186 4281
4187 4282 #: rhodecode/model/validators.py:161
4188 4283 #, python-format
4189 4284 msgid "Username \"%(username)s\" already exists"
4190 4285 msgstr ""
4191 4286
4192 4287 #: rhodecode/model/validators.py:163
4193 4288 #, python-format
4194 4289 msgid "Username \"%(username)s\" is forbidden"
4195 4290 msgstr ""
4196 4291
4197 4292 #: rhodecode/model/validators.py:165
4198 4293 #: rhodecode/model/validation_schema/schemas/user_schema.py:71
4199 4294 msgid "Username may only contain alphanumeric characters underscores, periods or dashes and must begin with alphanumeric character or underscore"
4200 4295 msgstr ""
4201 4296
4202 4297 #: rhodecode/model/validators.py:196
4203 4298 #, python-format
4204 4299 msgid "Username %(username)s is not valid"
4205 4300 msgstr ""
4206 4301
4207 4302 #: rhodecode/model/validators.py:197
4208 4303 #, python-format
4209 4304 msgid "Username %(username)s is disabled"
4210 4305 msgstr ""
4211 4306
4212 4307 #: rhodecode/model/validators.py:222
4213 4308 msgid "Invalid user group name"
4214 4309 msgstr ""
4215 4310
4216 4311 #: rhodecode/model/validators.py:223
4217 4312 #, python-format
4218 4313 msgid "User group `%(usergroup)s` already exists"
4219 4314 msgstr ""
4220 4315
4221 4316 #: rhodecode/model/validators.py:225
4222 4317 msgid "user group name may only contain alphanumeric characters underscores, periods or dashes and must begin with alphanumeric character"
4223 4318 msgstr ""
4224 4319
4225 4320 #: rhodecode/model/validators.py:265
4226 4321 msgid "Cannot assign this group as parent"
4227 4322 msgstr ""
4228 4323
4229 4324 #: rhodecode/model/validators.py:266
4230 4325 #, python-format
4231 4326 msgid "Group \"%(group_name)s\" already exists"
4232 4327 msgstr ""
4233 4328
4234 4329 #: rhodecode/model/validators.py:267
4235 4330 #, python-format
4236 4331 msgid "Repository with name \"%(group_name)s\" already exists"
4237 4332 msgstr ""
4238 4333
4239 4334 #: rhodecode/model/validators.py:269
4240 4335 msgid "no permission to store repository groupin this location"
4241 4336 msgstr ""
4242 4337
4243 4338 #: rhodecode/model/validators.py:271
4244 4339 msgid "no permission to store repository group in root location"
4245 4340 msgstr ""
4246 4341
4247 4342 #: rhodecode/model/validators.py:388
4248 4343 msgid "Invalid characters (non-ascii) in password"
4249 4344 msgstr ""
4250 4345
4251 4346 #: rhodecode/model/validators.py:407
4252 4347 msgid "Passwords do not match"
4253 4348 msgstr ""
4254 4349
4255 4350 #: rhodecode/model/validators.py:427
4256 4351 msgid "invalid password"
4257 4352 msgstr ""
4258 4353
4259 4354 #: rhodecode/model/validators.py:428
4260 4355 msgid "invalid user name"
4261 4356 msgstr ""
4262 4357
4263 4358 #: rhodecode/model/validators.py:429
4264 4359 msgid "Your account is disabled"
4265 4360 msgstr ""
4266 4361
4267 4362 #: rhodecode/model/validators.py:465
4268 4363 #, python-format
4269 4364 msgid "Repository name %(repo)s is disallowed"
4270 4365 msgstr ""
4271 4366
4272 4367 #: rhodecode/model/validators.py:467
4273 4368 #, python-format
4274 4369 msgid "Repository with name %(repo)s already exists"
4275 4370 msgstr ""
4276 4371
4277 4372 #: rhodecode/model/validators.py:469
4278 4373 #, python-format
4279 4374 msgid "Repository group with name \"%(repo)s\" already exists"
4280 4375 msgstr ""
4281 4376
4282 4377 #: rhodecode/model/validators.py:472
4283 4378 #, python-format
4284 4379 msgid "Repository with name %(repo)s exists in group \"%(group)s\""
4285 4380 msgstr ""
4286 4381
4287 4382 #: rhodecode/model/validators.py:474
4288 4383 #, python-format
4289 4384 msgid "Repository group with name \"%(repo)s\" exists in group \"%(group)s\""
4290 4385 msgstr ""
4291 4386
4292 4387 #: rhodecode/model/validators.py:567
4293 #: rhodecode/model/validation_schema/schemas/repo_schema.py:230
4388 #: rhodecode/model/validation_schema/schemas/repo_schema.py:236
4294 4389 msgid "Repository name cannot end with .git"
4295 4390 msgstr ""
4296 4391
4297 4392 #: rhodecode/model/validators.py:627
4298 4393 #, python-format
4299 4394 msgid "invalid clone url for %(rtype)s repository"
4300 4395 msgstr ""
4301 4396
4302 4397 #: rhodecode/model/validators.py:628
4303 4398 #, python-format
4304 4399 msgid "Invalid clone url, provide a valid clone url starting with one of %(allowed_prefixes)s"
4305 4400 msgstr ""
4306 4401
4307 4402 #: rhodecode/model/validators.py:660
4308 4403 msgid "Fork have to be the same type as parent"
4309 4404 msgstr ""
4310 4405
4311 4406 #: rhodecode/model/validators.py:677
4312 4407 msgid "You do not have the permission to create repositories in this group."
4313 4408 msgstr ""
4314 4409
4315 4410 #: rhodecode/model/validators.py:680
4316 4411 #: rhodecode/model/validation_schema/schemas/repo_schema.py:136
4317 4412 msgid "You do not have the permission to store repositories in the root location."
4318 4413 msgstr ""
4319 4414
4320 4415 #: rhodecode/model/validators.py:740
4321 4416 msgid "This username or user group name is not valid"
4322 4417 msgstr ""
4323 4418
4324 4419 #: rhodecode/model/validators.py:853
4325 4420 msgid "This is not a valid path"
4326 4421 msgstr ""
4327 4422
4328 4423 #: rhodecode/model/validators.py:871
4329 4424 #: rhodecode/model/validation_schema/schemas/user_schema.py:144
4330 4425 #: rhodecode/model/validation_schema/schemas/user_schema.py:148
4331 4426 msgid "This e-mail address is already taken"
4332 4427 msgstr ""
4333 4428
4334 4429 #: rhodecode/model/validators.py:893
4335 4430 #, python-format
4336 4431 msgid "e-mail \"%(email)s\" does not exist."
4337 4432 msgstr ""
4338 4433
4339 4434 #: rhodecode/model/validators.py:914
4340 4435 #, python-format
4341 4436 msgid "Revisions %(revs)s are already part of pull request or have set status"
4342 4437 msgstr ""
4343 4438
4344 4439 #: rhodecode/model/validators.py:947
4345 4440 #: rhodecode/model/validation_schema/validators.py:41
4346 4441 #: rhodecode/model/validation_schema/validators.py:54
4347 4442 msgid "Please enter a valid IPv4 or IpV6 address"
4348 4443 msgstr ""
4349 4444
4350 4445 #: rhodecode/model/validators.py:948
4351 4446 #, python-format
4352 4447 msgid "The network size (bits) must be within the range of 0-32 (not %(bits)r)"
4353 4448 msgstr ""
4354 4449
4355 4450 #: rhodecode/model/validators.py:976
4356 4451 msgid "Key name can only consist of letters, underscore, dash or numbers"
4357 4452 msgstr ""
4358 4453
4359 4454 #: rhodecode/model/validators.py:993
4360 4455 #, python-format
4361 4456 msgid "Plugins %(loaded)s and %(next_to_load)s both export the same name"
4362 4457 msgstr ""
4363 4458
4364 4459 #: rhodecode/model/validators.py:996
4365 4460 #, python-format
4366 4461 msgid "The plugin \"%(plugin_id)s\" is missing an includeme function."
4367 4462 msgstr ""
4368 4463
4369 4464 #: rhodecode/model/validators.py:999
4370 4465 #, python-format
4371 4466 msgid "Can not load plugin \"%(plugin_id)s\""
4372 4467 msgstr ""
4373 4468
4374 4469 #: rhodecode/model/validators.py:1001
4375 4470 #, python-format
4376 4471 msgid "No plugin available with ID \"%(plugin_id)s\""
4377 4472 msgstr ""
4378 4473
4379 4474 #: rhodecode/model/validators.py:1069
4380 4475 msgid "Url must start with http or /"
4381 4476 msgstr ""
4382 4477
4383 4478 #: rhodecode/model/validation_schema/validators.py:62
4384 4479 msgid "Invalid glob pattern"
4385 4480 msgstr ""
4386 4481
4387 4482 #: rhodecode/model/validation_schema/validators.py:71
4388 4483 msgid "Name must start with a letter or number. Got `{}`"
4389 4484 msgstr ""
4390 4485
4391 4486 #: rhodecode/model/validation_schema/validators.py:142
4392 4487 msgid "invalid clone url for {repo_type} repository"
4393 4488 msgstr ""
4394 4489
4395 4490 #: rhodecode/model/validation_schema/validators.py:151
4396 4491 msgid "Please enter a valid json object"
4397 4492 msgstr ""
4398 4493
4399 4494 #: rhodecode/model/validation_schema/schemas/comment_schema.py:42
4400 4495 #: rhodecode/model/validation_schema/schemas/gist_schema.py:89
4401 4496 msgid "Gist with name {} already exists"
4402 4497 msgstr ""
4403 4498
4404 4499 #: rhodecode/model/validation_schema/schemas/comment_schema.py:48
4405 4500 #: rhodecode/model/validation_schema/schemas/gist_schema.py:95
4406 4501 msgid "Filename {} cannot be inside a directory"
4407 4502 msgstr ""
4408 4503
4409 4504 #: rhodecode/model/validation_schema/schemas/gist_schema.py:132
4410 4505 msgid "Duplicated value for filename found: `{}`"
4411 4506 msgstr ""
4412 4507
4413 4508 #: rhodecode/model/validation_schema/schemas/integration_schema.py:36
4414 4509 msgid "Pick a scope:"
4415 4510 msgstr ""
4416 4511
4417 4512 #: rhodecode/model/validation_schema/schemas/integration_schema.py:39
4418 4513 msgid "Global (all repositories)"
4419 4514 msgstr ""
4420 4515
4421 4516 #: rhodecode/model/validation_schema/schemas/integration_schema.py:40
4422 4517 msgid "Top level repositories only"
4423 4518 msgstr ""
4424 4519
4425 4520 #: rhodecode/model/validation_schema/schemas/integration_schema.py:79
4426 4521 msgid "Only repo admins can create integrations"
4427 4522 msgstr ""
4428 4523
4429 4524 #: rhodecode/model/validation_schema/schemas/integration_schema.py:86
4430 4525 msgid "Only repogroup admins can create integrations"
4431 4526 msgstr ""
4432 4527
4433 4528 #: rhodecode/model/validation_schema/schemas/integration_schema.py:91
4434 4529 msgid "Only superadmins can create global integrations"
4435 4530 msgstr ""
4436 4531
4437 4532 #: rhodecode/model/validation_schema/schemas/integration_schema.py:181
4438 4533 msgid "Scope of the integration. Recursive means the integration runs on all repos of that group and children recursively."
4439 4534 msgstr ""
4440 4535
4441 4536 #: rhodecode/model/validation_schema/schemas/integration_schema.py:184
4442 4537 msgid "Integration scope"
4443 4538 msgstr ""
4444 4539
4445 4540 #: rhodecode/model/validation_schema/schemas/integration_schema.py:214
4446 4541 msgid "General integration options"
4447 4542 msgstr ""
4448 4543
4449 4544 #: rhodecode/model/validation_schema/schemas/integration_schema.py:217
4450 4545 msgid "{integration_type} settings"
4451 4546 msgstr ""
4452 4547
4453 4548 #: rhodecode/model/validation_schema/schemas/repo_group_schema.py:52
4549 msgid "Parent repository group `{}` does not exist"
4550 msgstr ""
4551
4454 4552 #: rhodecode/model/validation_schema/schemas/repo_group_schema.py:56
4455 msgid "Parent repository group `{}` does not exist"
4456 msgstr ""
4457
4458 #: rhodecode/model/validation_schema/schemas/repo_group_schema.py:58
4553 msgid "You do not have the permissions to store repository groups inside repository group `{}`"
4554 msgstr ""
4555
4556 #: rhodecode/model/validation_schema/schemas/repo_group_schema.py:59
4459 4557 msgid "You do not have the permission to store repository groups in the root location."
4460 4558 msgstr ""
4461 4559
4462 #: rhodecode/model/validation_schema/schemas/repo_group_schema.py:118
4560 #: rhodecode/model/validation_schema/schemas/repo_group_schema.py:125
4463 4561 msgid "Repo group owner with id `{}` does not exists"
4464 4562 msgstr ""
4465 4563
4466 #: rhodecode/model/validation_schema/schemas/repo_group_schema.py:136
4467 #: rhodecode/model/validation_schema/schemas/repo_schema.py:215
4564 #: rhodecode/model/validation_schema/schemas/repo_group_schema.py:143
4565 #: rhodecode/model/validation_schema/schemas/repo_schema.py:221
4468 4566 msgid "Repository with name `{}` already exists"
4469 4567 msgstr ""
4470 4568
4471 #: rhodecode/model/validation_schema/schemas/repo_group_schema.py:141
4472 #: rhodecode/model/validation_schema/schemas/repo_schema.py:220
4569 #: rhodecode/model/validation_schema/schemas/repo_group_schema.py:148
4570 #: rhodecode/model/validation_schema/schemas/repo_schema.py:226
4473 4571 msgid "Repository group with name `{}` already exists"
4474 4572 msgstr ""
4475 4573
4476 4574 #: rhodecode/model/validation_schema/schemas/repo_schema.py:60
4477 4575 msgid "Repo owner with id `{}` does not exists"
4478 4576 msgstr ""
4479 4577
4480 4578 #: rhodecode/model/validation_schema/schemas/repo_schema.py:102
4481 4579 msgid "Fork with id `{}` does not exists"
4482 4580 msgstr ""
4483 4581
4484 4582 #: rhodecode/model/validation_schema/schemas/repo_schema.py:105
4485 4583 msgid "Cannot set fork of parameter of this repository to itself"
4486 4584 msgstr ""
4487 4585
4488 4586 #: rhodecode/model/validation_schema/schemas/repo_schema.py:130
4489 4587 #: rhodecode/model/validation_schema/schemas/repo_schema.py:134
4490 4588 msgid "Repository group `{}` does not exist"
4491 4589 msgstr ""
4492 4590
4493 4591 #: rhodecode/model/validation_schema/schemas/user_group_schema.py:32
4494 4592 msgid "Allowed in name are letters, numbers, and `-`, `_`, `.` Name must start with a letter or number. Got `{}`"
4495 4593 msgstr ""
4496 4594
4497 4595 #: rhodecode/model/validation_schema/schemas/user_group_schema.py:48
4498 4596 msgid "User group owner with id `{}` does not exists"
4499 4597 msgstr ""
4500 4598
4501 4599 #: rhodecode/model/validation_schema/schemas/user_schema.py:39
4502 4600 msgid "Password is incorrect"
4503 4601 msgstr ""
4504 4602
4505 4603 #: rhodecode/model/validation_schema/schemas/user_schema.py:62
4506 4604 msgid "New password must be different to old password"
4507 4605 msgstr ""
4508 4606
4509 4607 #: rhodecode/model/validation_schema/schemas/user_schema.py:183
4510 4608 msgid "Additional emails can be specified at <a href=\"{}\">extra emails</a> page."
4511 4609 msgstr ""
4512 4610
4513 #: rhodecode/public/js/scripts.js:20588 rhodecode/public/js/scripts.min.js:1
4514 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:51
4611 #: rhodecode/public/js/scripts.js:19
4612 msgid ": , "
4613 msgstr ""
4614
4615 #: rhodecode/public/js/scripts.js:20822 rhodecode/public/js/scripts.min.js:1
4616 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:59
4515 4617 #: rhodecode/public/js/src/plugins/jquery.autocomplete.js:87
4516 4618 msgid "No results"
4517 4619 msgstr ""
4518 4620
4519 #: rhodecode/public/js/scripts.js:22050 rhodecode/public/js/scripts.min.js:1
4520 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:144
4621 #: rhodecode/public/js/scripts.js:22547 rhodecode/public/js/scripts.min.js:1
4622 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:161
4521 4623 #: rhodecode/public/js/src/plugins/jquery.timeago-extension.js:109
4522 4624 msgid "{0} year"
4523 4625 msgstr ""
4524 4626
4525 #: rhodecode/public/js/scripts.js:22051 rhodecode/public/js/scripts.min.js:1
4526 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:132
4627 #: rhodecode/public/js/scripts.js:22548 rhodecode/public/js/scripts.min.js:1
4628 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:149
4527 4629 #: rhodecode/public/js/src/plugins/jquery.timeago-extension.js:110
4528 4630 msgid "{0} month"
4529 4631 msgstr ""
4530 4632
4531 #: rhodecode/public/js/scripts.js:22052 rhodecode/public/js/scripts.min.js:1
4532 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:127
4633 #: rhodecode/public/js/scripts.js:22549 rhodecode/public/js/scripts.min.js:1
4634 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:144
4533 4635 #: rhodecode/public/js/src/plugins/jquery.timeago-extension.js:111
4534 4636 msgid "{0} day"
4535 4637 msgstr ""
4536 4638
4537 #: rhodecode/public/js/scripts.js:22053 rhodecode/public/js/scripts.min.js:1
4538 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:129
4639 #: rhodecode/public/js/scripts.js:22550 rhodecode/public/js/scripts.min.js:1
4640 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:146
4539 4641 #: rhodecode/public/js/src/plugins/jquery.timeago-extension.js:112
4540 4642 msgid "{0} hour"
4541 4643 msgstr ""
4542 4644
4543 #: rhodecode/public/js/scripts.js:22054 rhodecode/public/js/scripts.min.js:1
4544 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:131
4645 #: rhodecode/public/js/scripts.js:22551 rhodecode/public/js/scripts.min.js:1
4646 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:148
4545 4647 #: rhodecode/public/js/src/plugins/jquery.timeago-extension.js:113
4546 4648 msgid "{0} min"
4547 4649 msgstr ""
4548 4650
4549 #: rhodecode/public/js/scripts.js:22055 rhodecode/public/js/scripts.min.js:1
4550 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:141
4651 #: rhodecode/public/js/scripts.js:22552 rhodecode/public/js/scripts.min.js:1
4652 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:158
4551 4653 #: rhodecode/public/js/src/plugins/jquery.timeago-extension.js:114
4552 4654 msgid "{0} sec"
4553 4655 msgstr ""
4554 4656
4555 #: rhodecode/public/js/scripts.js:22075 rhodecode/public/js/scripts.min.js:1
4556 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:108
4657 #: rhodecode/public/js/scripts.js:22572 rhodecode/public/js/scripts.min.js:1
4658 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:124
4557 4659 #: rhodecode/public/js/src/plugins/jquery.timeago-extension.js:134
4558 4660 msgid "in {0}"
4559 4661 msgstr ""
4560 4662
4561 #: rhodecode/public/js/scripts.js:22083 rhodecode/public/js/scripts.min.js:1
4562 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:124
4663 #: rhodecode/public/js/scripts.js:22580 rhodecode/public/js/scripts.min.js:1
4664 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:141
4563 4665 #: rhodecode/public/js/src/plugins/jquery.timeago-extension.js:142
4564 4666 msgid "{0} ago"
4565 4667 msgstr ""
4566 4668
4567 #: rhodecode/public/js/scripts.js:22095 rhodecode/public/js/scripts.min.js:1
4568 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:146
4669 #: rhodecode/public/js/scripts.js:22592 rhodecode/public/js/scripts.min.js:1
4670 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:163
4569 4671 #: rhodecode/public/js/src/plugins/jquery.timeago-extension.js:154
4570 4672 msgid "{0}, {1} ago"
4571 4673 msgstr ""
4572 4674
4573 #: rhodecode/public/js/scripts.js:22097 rhodecode/public/js/scripts.min.js:1
4574 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:110
4675 #: rhodecode/public/js/scripts.js:22594 rhodecode/public/js/scripts.min.js:1
4676 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:126
4575 4677 #: rhodecode/public/js/src/plugins/jquery.timeago-extension.js:156
4576 4678 msgid "in {0}, {1}"
4577 4679 msgstr ""
4578 4680
4579 #: rhodecode/public/js/scripts.js:22101 rhodecode/public/js/scripts.min.js:1
4580 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:125
4681 #: rhodecode/public/js/scripts.js:22598 rhodecode/public/js/scripts.min.js:1
4682 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:142
4581 4683 #: rhodecode/public/js/src/plugins/jquery.timeago-extension.js:160
4582 4684 msgid "{0} and {1}"
4583 4685 msgstr ""
4584 4686
4585 #: rhodecode/public/js/scripts.js:22103 rhodecode/public/js/scripts.min.js:1
4586 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:126
4687 #: rhodecode/public/js/scripts.js:22600 rhodecode/public/js/scripts.min.js:1
4688 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:143
4587 4689 #: rhodecode/public/js/src/plugins/jquery.timeago-extension.js:162
4588 4690 msgid "{0} and {1} ago"
4589 4691 msgstr ""
4590 4692
4591 #: rhodecode/public/js/scripts.js:22105 rhodecode/public/js/scripts.min.js:1
4592 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:109
4693 #: rhodecode/public/js/scripts.js:22602 rhodecode/public/js/scripts.min.js:1
4694 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:125
4593 4695 #: rhodecode/public/js/src/plugins/jquery.timeago-extension.js:164
4594 4696 msgid "in {0} and {1}"
4595 4697 msgstr ""
4596 4698
4597 #: rhodecode/public/js/scripts.js:37103 rhodecode/public/js/scripts.min.js:1
4598 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:38
4699 #: rhodecode/public/js/scripts.js:37600 rhodecode/public/js/scripts.min.js:1
4700 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:46
4599 4701 #: rhodecode/public/js/rhodecode/i18n/select2/translations.js:4
4600 4702 msgid "Loading more results..."
4601 4703 msgstr ""
4602 4704
4603 #: rhodecode/public/js/scripts.js:37106 rhodecode/public/js/scripts.min.js:1
4604 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:67
4705 #: rhodecode/public/js/scripts.js:37603 rhodecode/public/js/scripts.min.js:1
4706 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:76
4605 4707 #: rhodecode/public/js/rhodecode/i18n/select2/translations.js:7
4606 4708 msgid "Searching..."
4607 4709 msgstr ""
4608 4710
4609 #: rhodecode/public/js/scripts.js:37109 rhodecode/public/js/scripts.min.js:1
4610 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:44
4711 #: rhodecode/public/js/scripts.js:37606 rhodecode/public/js/scripts.min.js:1
4712 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:52
4611 4713 #: rhodecode/public/js/rhodecode/i18n/select2/translations.js:10
4612 4714 msgid "No matches found"
4613 4715 msgstr ""
4614 4716
4615 #: rhodecode/public/js/scripts.js:37112 rhodecode/public/js/scripts.min.js:1
4616 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:37
4717 #: rhodecode/public/js/scripts.js:37609 rhodecode/public/js/scripts.min.js:1
4718 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:45
4617 4719 #: rhodecode/public/js/rhodecode/i18n/select2/translations.js:13
4618 4720 msgid "Loading failed"
4619 4721 msgstr ""
4620 4722
4621 #: rhodecode/public/js/scripts.js:37116 rhodecode/public/js/scripts.min.js:1
4622 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:58
4723 #: rhodecode/public/js/scripts.js:37613 rhodecode/public/js/scripts.min.js:1
4724 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:66
4623 4725 #: rhodecode/public/js/rhodecode/i18n/select2/translations.js:17
4624 4726 msgid "One result is available, press enter to select it."
4625 4727 msgstr ""
4626 4728
4627 #: rhodecode/public/js/scripts.js:37118 rhodecode/public/js/scripts.min.js:1
4628 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:140
4729 #: rhodecode/public/js/scripts.js:37615 rhodecode/public/js/scripts.min.js:1
4730 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:157
4629 4731 #: rhodecode/public/js/rhodecode/i18n/select2/translations.js:19
4630 4732 msgid "{0} results are available, use up and down arrow keys to navigate."
4631 4733 msgstr ""
4632 4734
4633 #: rhodecode/public/js/scripts.js:37123 rhodecode/public/js/scripts.min.js:1
4634 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:63
4735 #: rhodecode/public/js/scripts.js:37620 rhodecode/public/js/scripts.min.js:1
4736 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:71
4635 4737 #: rhodecode/public/js/rhodecode/i18n/select2/translations.js:24
4636 4738 msgid "Please enter {0} or more character"
4637 4739 msgstr ""
4638 4740
4639 #: rhodecode/public/js/scripts.js:37125 rhodecode/public/js/scripts.min.js:1
4640 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:64
4741 #: rhodecode/public/js/scripts.js:37622 rhodecode/public/js/scripts.min.js:1
4742 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:72
4641 4743 #: rhodecode/public/js/rhodecode/i18n/select2/translations.js:26
4642 4744 msgid "Please enter {0} or more characters"
4643 4745 msgstr ""
4644 4746
4645 #: rhodecode/public/js/scripts.js:37130 rhodecode/public/js/scripts.min.js:1
4646 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:61
4747 #: rhodecode/public/js/scripts.js:37627 rhodecode/public/js/scripts.min.js:1
4748 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:69
4647 4749 #: rhodecode/public/js/rhodecode/i18n/select2/translations.js:31
4648 4750 msgid "Please delete {0} character"
4649 4751 msgstr ""
4650 4752
4651 #: rhodecode/public/js/scripts.js:37132 rhodecode/public/js/scripts.min.js:1
4652 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:62
4753 #: rhodecode/public/js/scripts.js:37629 rhodecode/public/js/scripts.min.js:1
4754 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:70
4653 4755 #: rhodecode/public/js/rhodecode/i18n/select2/translations.js:33
4654 4756 msgid "Please delete {0} characters"
4655 4757 msgstr ""
4656 4758
4657 #: rhodecode/public/js/scripts.js:37136 rhodecode/public/js/scripts.min.js:1
4658 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:98
4759 #: rhodecode/public/js/scripts.js:37633 rhodecode/public/js/scripts.min.js:1
4760 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:114
4659 4761 #: rhodecode/public/js/rhodecode/i18n/select2/translations.js:37
4660 4762 msgid "You can only select {0} item"
4661 4763 msgstr ""
4662 4764
4663 #: rhodecode/public/js/scripts.js:37138 rhodecode/public/js/scripts.min.js:1
4664 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:99
4765 #: rhodecode/public/js/scripts.js:37635 rhodecode/public/js/scripts.min.js:1
4766 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:115
4665 4767 #: rhodecode/public/js/rhodecode/i18n/select2/translations.js:39
4666 4768 msgid "You can only select {0} items"
4667 4769 msgstr ""
4668 4770
4669 #: rhodecode/public/js/scripts.js:37780 rhodecode/public/js/scripts.min.js:1
4670 #: rhodecode/public/js/src/rhodecode/utils/ajax.js:136
4771 #: rhodecode/public/js/scripts.js:38285 rhodecode/public/js/scripts.min.js:1
4772 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:7
4773 #: rhodecode/public/js/src/rhodecode/utils/ajax.js:135
4671 4774 msgid "Ajax Request Error"
4672 4775 msgstr ""
4673 4776
4674 #: rhodecode/public/js/scripts.js:38178 rhodecode/public/js/scripts.min.js:1
4675 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:116
4777 #: rhodecode/public/js/scripts.js:38687 rhodecode/public/js/scripts.min.js:1
4778 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:133
4676 4779 #: rhodecode/public/js/src/rhodecode/changelog.js:35
4677 4780 msgid "showing {0} out of {1} commit"
4678 4781 msgstr ""
4679 4782
4680 #: rhodecode/public/js/scripts.js:38180 rhodecode/public/js/scripts.min.js:1
4681 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:117
4783 #: rhodecode/public/js/scripts.js:38689 rhodecode/public/js/scripts.min.js:1
4784 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:134
4682 4785 #: rhodecode/public/js/src/rhodecode/changelog.js:37
4683 4786 msgid "showing {0} out of {1} commits"
4684 4787 msgstr ""
4685 4788
4686 #: rhodecode/public/js/scripts.js:38718 rhodecode/public/js/scripts.min.js:1
4687 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:70
4789 #: rhodecode/public/js/scripts.js:39227 rhodecode/public/js/scripts.min.js:1
4790 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:79
4688 4791 #: rhodecode/public/js/src/rhodecode/codemirror.js:363
4689 4792 msgid "Set status to Approved"
4690 4793 msgstr ""
4691 4794
4692 #: rhodecode/public/js/scripts.js:38738 rhodecode/public/js/scripts.min.js:1
4693 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:71
4795 #: rhodecode/public/js/scripts.js:39247 rhodecode/public/js/scripts.min.js:1
4796 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:80
4694 4797 #: rhodecode/public/js/src/rhodecode/codemirror.js:383
4695 4798 msgid "Set status to Rejected"
4696 4799 msgstr ""
4697 4800
4698 #: rhodecode/public/js/scripts.js:38757 rhodecode/public/js/scripts.min.js:1
4699 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:88
4801 #: rhodecode/public/js/scripts.js:39266 rhodecode/public/js/scripts.min.js:1
4802 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:99
4700 4803 #: rhodecode/public/js/src/rhodecode/codemirror.js:402
4701 4804 msgid "TODO comment"
4702 4805 msgstr ""
4703 4806
4704 #: rhodecode/public/js/scripts.js:38777 rhodecode/public/js/scripts.min.js:1
4705 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:57
4807 #: rhodecode/public/js/scripts.js:39286 rhodecode/public/js/scripts.min.js:1
4808 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:65
4706 4809 #: rhodecode/public/js/src/rhodecode/codemirror.js:422
4707 4810 msgid "Note Comment"
4708 4811 msgstr ""
4709 4812
4710 #: rhodecode/public/js/scripts.js:39078 rhodecode/public/js/scripts.js:39432
4813 #: rhodecode/public/js/scripts.js:39587 rhodecode/public/js/scripts.js:39962
4711 4814 #: rhodecode/public/js/scripts.min.js:1
4712 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:82
4815 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:93
4713 4816 #: rhodecode/public/js/src/rhodecode/codemirror.js:723
4714 #: rhodecode/public/js/src/rhodecode/comments.js:233
4817 #: rhodecode/public/js/src/rhodecode/comments.js:254
4715 4818 msgid "Status Review"
4716 4819 msgstr ""
4717 4820
4718 #: rhodecode/public/js/scripts.js:39093 rhodecode/public/js/scripts.js:39447
4821 #: rhodecode/public/js/scripts.js:39602 rhodecode/public/js/scripts.js:39977
4719 4822 #: rhodecode/public/js/scripts.min.js:1
4720 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:17
4823 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:21
4721 4824 #: rhodecode/public/js/src/rhodecode/codemirror.js:738
4722 #: rhodecode/public/js/src/rhodecode/comments.js:248
4825 #: rhodecode/public/js/src/rhodecode/comments.js:269
4723 4826 msgid "Comment text will be set automatically based on currently selected status ({0}) ..."
4724 4827 msgstr ""
4725 4828
4726 #: rhodecode/public/js/scripts.js:39174 rhodecode/public/js/scripts.js:39642
4727 #: rhodecode/public/js/scripts.js:40669 rhodecode/public/js/scripts.min.js:1
4728 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:36
4829 #: rhodecode/public/js/scripts.js:39683 rhodecode/public/js/scripts.js:40172
4830 #: rhodecode/public/js/scripts.js:41495 rhodecode/public/js/scripts.min.js:1
4831 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:43
4729 4832 #: rhodecode/public/js/src/rhodecode/codemirror.js:819
4730 #: rhodecode/public/js/src/rhodecode/comments.js:443
4833 #: rhodecode/public/js/src/rhodecode/comments.js:464
4731 4834 #: rhodecode/public/js/src/rhodecode/files.js:499
4732 #: rhodecode/templates/files/files_browser_tree.mako:54
4835 #: rhodecode/templates/files/files_browser_tree.mako:57
4733 4836 msgid "Loading ..."
4734 4837 msgstr ""
4735 4838
4736 #: rhodecode/public/js/scripts.js:39348 rhodecode/public/js/scripts.min.js:1
4737 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:115
4738 #: rhodecode/public/js/src/rhodecode/comments.js:149
4839 #: rhodecode/public/js/scripts.js:39844 rhodecode/public/js/scripts.min.js:1
4840 #: rhodecode/public/js/src/rhodecode/comments.js:136
4841 msgid "Updated Comment"
4842 msgstr ""
4843
4844 #: rhodecode/public/js/scripts.js:39868 rhodecode/public/js/scripts.min.js:1
4845 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:132
4846 #: rhodecode/public/js/src/rhodecode/comments.js:160
4739 4847 msgid "resolve comment"
4740 4848 msgstr ""
4741 4849
4742 #: rhodecode/public/js/scripts.js:39591 rhodecode/public/js/scripts.min.js:1
4743 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:85
4744 #: rhodecode/public/js/src/rhodecode/comments.js:392
4850 #: rhodecode/public/js/scripts.js:40121 rhodecode/public/js/scripts.min.js:1
4851 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:96
4852 #: rhodecode/public/js/src/rhodecode/comments.js:413
4745 4853 msgid "Submitting..."
4746 4854 msgstr ""
4747 4855
4748 #: rhodecode/public/js/scripts.js:39794 rhodecode/public/js/scripts.min.js:1
4749 #: rhodecode/public/js/src/rhodecode/comments.js:595
4856 #: rhodecode/public/js/scripts.js:40403 rhodecode/public/js/scripts.min.js:1
4857 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:113
4858 #: rhodecode/public/js/src/rhodecode/comments.js:695
4750 4859 msgid "Yes, delete comment #{0}!"
4751 4860 msgstr ""
4752 4861
4753 #: rhodecode/public/js/scripts.js:39849 rhodecode/public/js/scripts.min.js:1
4754 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:34
4755 #: rhodecode/public/js/src/rhodecode/comments.js:650
4862 #: rhodecode/public/js/scripts.js:40458 rhodecode/public/js/scripts.min.js:1
4863 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:41
4864 #: rhodecode/public/js/src/rhodecode/comments.js:750
4756 4865 msgid "Leave a resolution comment, or click resolve button to resolve TODO comment #{0}"
4757 4866 msgstr ""
4758 4867
4759 #: rhodecode/public/js/scripts.js:40015 rhodecode/public/js/scripts.min.js:1
4760 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:32
4761 #: rhodecode/public/js/src/rhodecode/comments.js:816
4868 #: rhodecode/public/js/scripts.js:40667 rhodecode/public/js/scripts.min.js:1
4869 #: rhodecode/public/js/src/rhodecode/comments.js:959
4870 msgid "Comment body was not changed."
4871 msgstr ""
4872
4873 #: rhodecode/public/js/scripts.js:40840 rhodecode/public/js/scripts.min.js:1
4874 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:39
4875 #: rhodecode/public/js/src/rhodecode/comments.js:1132
4762 4876 msgid "Leave a comment on line {0}."
4763 4877 msgstr ""
4764 4878
4765 #: rhodecode/public/js/scripts.js:40140 rhodecode/public/js/scripts.min.js:1
4766 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:89
4767 #: rhodecode/public/js/src/rhodecode/comments.js:941
4879 #: rhodecode/public/js/scripts.js:40966 rhodecode/public/js/scripts.min.js:1
4880 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:100
4881 #: rhodecode/public/js/src/rhodecode/comments.js:1258
4768 4882 msgid "TODO from comment {0} was fixed."
4769 4883 msgstr ""
4770 4884
4771 #: rhodecode/public/js/scripts.js:40418 rhodecode/public/js/scripts.min.js:1
4772 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:119
4885 #: rhodecode/public/js/scripts.js:41244 rhodecode/public/js/scripts.min.js:1
4886 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:136
4773 4887 #: rhodecode/public/js/src/rhodecode/files.js:248
4774 4888 msgid "truncated result"
4775 4889 msgstr ""
4776 4890
4777 #: rhodecode/public/js/scripts.js:40420 rhodecode/public/js/scripts.min.js:1
4778 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:120
4891 #: rhodecode/public/js/scripts.js:41246 rhodecode/public/js/scripts.min.js:1
4892 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:137
4779 4893 #: rhodecode/public/js/src/rhodecode/files.js:250
4780 4894 msgid "truncated results"
4781 4895 msgstr ""
4782 4896
4783 #: rhodecode/public/js/scripts.js:40429 rhodecode/public/js/scripts.min.js:1
4784 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:45
4897 #: rhodecode/public/js/scripts.js:41255 rhodecode/public/js/scripts.min.js:1
4898 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:53
4785 4899 #: rhodecode/public/js/src/rhodecode/files.js:259
4786 4900 msgid "No matching files"
4787 4901 msgstr ""
4788 4902
4789 #: rhodecode/public/js/scripts.js:40487 rhodecode/public/js/scripts.min.js:1
4790 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:68
4903 #: rhodecode/public/js/scripts.js:41313 rhodecode/public/js/scripts.min.js:1
4904 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:77
4791 4905 #: rhodecode/public/js/src/rhodecode/files.js:317
4792 4906 msgid "Selection link"
4793 4907 msgstr ""
4794 4908
4795 #: rhodecode/public/js/scripts.js:40584 rhodecode/public/js/scripts.min.js:1
4796 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:5
4909 #: rhodecode/public/js/scripts.js:41410 rhodecode/public/js/scripts.min.js:1
4910 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:8
4797 4911 #: rhodecode/public/js/src/rhodecode/files.js:414
4798 4912 msgid "All Authors"
4799 4913 msgstr ""
4800 4914
4801 #: rhodecode/public/js/scripts.js:40734 rhodecode/public/js/scripts.js:40737
4915 #: rhodecode/public/js/scripts.js:41560 rhodecode/public/js/scripts.js:41563
4802 4916 #: rhodecode/public/js/scripts.min.js:1
4917 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:33
4803 4918 #: rhodecode/public/js/src/rhodecode/files.js:564
4804 4919 #: rhodecode/public/js/src/rhodecode/files.js:567
4805 4920 msgid "File `{0}` has a newer version available, or has been removed. Click {1} to see the latest version."
4806 4921 msgstr ""
4807 4922
4808 #: rhodecode/public/js/scripts.js:40740 rhodecode/public/js/scripts.min.js:1
4923 #: rhodecode/public/js/scripts.js:41566 rhodecode/public/js/scripts.min.js:1
4924 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:103
4809 4925 #: rhodecode/public/js/src/rhodecode/files.js:570
4810 4926 msgid "There is an existing path `{0}` at this commit."
4811 4927 msgstr ""
4812 4928
4813 #: rhodecode/public/js/scripts.js:40743 rhodecode/public/js/scripts.min.js:1
4929 #: rhodecode/public/js/scripts.js:41569 rhodecode/public/js/scripts.min.js:1
4930 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:102
4814 4931 #: rhodecode/public/js/src/rhodecode/files.js:573
4815 4932 msgid "There is a later version of file tree available. Click {0} to create a file at the latest tree."
4816 4933 msgstr ""
4817 4934
4818 #: rhodecode/public/js/scripts.js:40797 rhodecode/public/js/scripts.min.js:1
4819 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:84
4935 #: rhodecode/public/js/scripts.js:41623 rhodecode/public/js/scripts.min.js:1
4936 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:95
4820 4937 #: rhodecode/public/js/src/rhodecode/followers.js:26
4821 4938 msgid "Stopped watching this repository"
4822 4939 msgstr ""
4823 4940
4824 #: rhodecode/public/js/scripts.js:40798 rhodecode/public/js/scripts.min.js:1
4825 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:97
4941 #: rhodecode/public/js/scripts.js:41624 rhodecode/public/js/scripts.min.js:1
4942 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:112
4826 4943 #: rhodecode/public/js/src/rhodecode/followers.js:27
4827 #: rhodecode/templates/base/base.mako:301
4944 #: rhodecode/templates/base/base.mako:308
4828 4945 msgid "Watch"
4829 4946 msgstr ""
4830 4947
4831 #: rhodecode/public/js/scripts.js:40801 rhodecode/public/js/scripts.min.js:1
4832 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:81
4948 #: rhodecode/public/js/scripts.js:41627 rhodecode/public/js/scripts.min.js:1
4949 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:92
4833 4950 #: rhodecode/public/js/src/rhodecode/followers.js:30
4834 4951 msgid "Started watching this repository"
4835 4952 msgstr ""
4836 4953
4837 #: rhodecode/public/js/scripts.js:40802 rhodecode/public/js/scripts.min.js:1
4838 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:93
4954 #: rhodecode/public/js/scripts.js:41628 rhodecode/public/js/scripts.min.js:1
4955 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:108
4839 4956 #: rhodecode/public/js/src/rhodecode/followers.js:31
4840 #: rhodecode/templates/base/base.mako:299
4957 #: rhodecode/templates/base/base.mako:306
4841 4958 msgid "Unwatch"
4842 4959 msgstr ""
4843 4960
4844 #: rhodecode/public/js/scripts.js:41182 rhodecode/public/js/scripts.min.js:1
4845 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:7
4846 #: rhodecode/public/js/src/rhodecode/pullrequests.js:141
4961 #: rhodecode/public/js/scripts.js:42010 rhodecode/public/js/scripts.min.js:1
4962 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:10
4963 #: rhodecode/public/js/src/rhodecode/pullrequests.js:143
4847 4964 msgid "All reviewers must vote."
4848 4965 msgstr ""
4849 4966
4850 #: rhodecode/public/js/scripts.js:41191 rhodecode/public/js/scripts.min.js:1
4851 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:6
4852 #: rhodecode/public/js/src/rhodecode/pullrequests.js:150
4967 #: rhodecode/public/js/scripts.js:42019 rhodecode/public/js/scripts.min.js:1
4968 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:9
4969 #: rhodecode/public/js/src/rhodecode/pullrequests.js:152
4853 4970 msgid "All individual reviewers must vote."
4854 4971 msgstr ""
4855 4972
4856 #: rhodecode/public/js/scripts.js:41196 rhodecode/public/js/scripts.min.js:1
4857 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:9
4858 #: rhodecode/public/js/src/rhodecode/pullrequests.js:155
4973 #: rhodecode/public/js/scripts.js:42024 rhodecode/public/js/scripts.min.js:1
4974 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:12
4975 #: rhodecode/public/js/src/rhodecode/pullrequests.js:157
4859 4976 msgid "At least {0} reviewer must vote."
4860 4977 msgstr ""
4861 4978
4862 #: rhodecode/public/js/scripts.js:41202 rhodecode/public/js/scripts.min.js:1
4863 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:10
4864 #: rhodecode/public/js/src/rhodecode/pullrequests.js:161
4979 #: rhodecode/public/js/scripts.js:42030 rhodecode/public/js/scripts.min.js:1
4980 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:13
4981 #: rhodecode/public/js/src/rhodecode/pullrequests.js:163
4865 4982 msgid "At least {0} reviewers must vote."
4866 4983 msgstr ""
4867 4984
4868 #: rhodecode/public/js/scripts.js:41218 rhodecode/public/js/scripts.min.js:1
4869 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:65
4870 #: rhodecode/public/js/src/rhodecode/pullrequests.js:177
4985 #: rhodecode/public/js/scripts.js:42046 rhodecode/public/js/scripts.min.js:1
4986 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:74
4987 #: rhodecode/public/js/src/rhodecode/pullrequests.js:179
4871 4988 msgid "Reviewers picked from source code changes."
4872 4989 msgstr ""
4873 4990
4874 #: rhodecode/public/js/scripts.js:41225 rhodecode/public/js/scripts.min.js:1
4875 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:4
4876 #: rhodecode/public/js/src/rhodecode/pullrequests.js:184
4991 #: rhodecode/public/js/scripts.js:42053 rhodecode/public/js/scripts.min.js:1
4992 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:6
4993 #: rhodecode/public/js/src/rhodecode/pullrequests.js:186
4877 4994 msgid "Adding new reviewers is forbidden."
4878 4995 msgstr ""
4879 4996
4880 #: rhodecode/public/js/scripts.js:41232 rhodecode/public/js/scripts.min.js:1
4881 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:11
4882 #: rhodecode/public/js/src/rhodecode/pullrequests.js:191
4997 #: rhodecode/public/js/scripts.js:42060 rhodecode/public/js/scripts.min.js:1
4998 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:15
4999 #: rhodecode/public/js/src/rhodecode/pullrequests.js:193
4883 5000 msgid "Author is not allowed to be a reviewer."
4884 5001 msgstr ""
4885 5002
4886 #: rhodecode/public/js/scripts.js:41246 rhodecode/public/js/scripts.min.js:1
4887 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:18
4888 #: rhodecode/public/js/src/rhodecode/pullrequests.js:205
5003 #: rhodecode/public/js/scripts.js:42074 rhodecode/public/js/scripts.min.js:1
5004 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:22
5005 #: rhodecode/public/js/src/rhodecode/pullrequests.js:207
4889 5006 msgid "Commit Authors are not allowed to be a reviewer."
4890 5007 msgstr ""
4891 5008
4892 #: rhodecode/public/js/scripts.js:41268 rhodecode/public/js/scripts.min.js:1
4893 #: rhodecode/public/js/src/rhodecode/pullrequests.js:227
5009 #: rhodecode/public/js/scripts.js:42096 rhodecode/public/js/scripts.min.js:1
5010 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:44
5011 #: rhodecode/public/js/src/rhodecode/pullrequests.js:229
4894 5012 msgid "Loading diff ..."
4895 5013 msgstr ""
4896 5014
4897 #: rhodecode/public/js/scripts.js:41307 rhodecode/public/js/scripts.min.js:1
4898 #: rhodecode/public/js/src/rhodecode/pullrequests.js:266
5015 #: rhodecode/public/js/scripts.js:42135 rhodecode/public/js/scripts.min.js:1
5016 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:130
5017 #: rhodecode/public/js/src/rhodecode/pullrequests.js:268
4899 5018 msgid "no commits"
4900 5019 msgstr ""
4901 5020
4902 #: rhodecode/public/js/scripts.js:41378 rhodecode/public/js/scripts.min.js:1
4903 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:96
4904 #: rhodecode/public/js/src/rhodecode/pullrequests.js:337
5021 #: rhodecode/public/js/scripts.js:42206 rhodecode/public/js/scripts.min.js:1
5022 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:111
5023 #: rhodecode/public/js/src/rhodecode/pullrequests.js:339
4905 5024 msgid "User `{0}` not allowed to be a reviewer"
4906 5025 msgstr ""
4907 5026
4908 #: rhodecode/public/js/scripts.js:41384 rhodecode/public/js/scripts.min.js:1
4909 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:95
4910 #: rhodecode/public/js/src/rhodecode/pullrequests.js:343
5027 #: rhodecode/public/js/scripts.js:42212 rhodecode/public/js/scripts.min.js:1
5028 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:110
5029 #: rhodecode/public/js/src/rhodecode/pullrequests.js:345
4911 5030 msgid "User `{0}` already in reviewers"
4912 5031 msgstr ""
4913 5032
4914 #: rhodecode/public/js/scripts.js:41487 rhodecode/public/js/scripts.min.js:1
4915 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:101
4916 #: rhodecode/public/js/src/rhodecode/pullrequests.js:446
5033 #: rhodecode/public/js/scripts.js:42315 rhodecode/public/js/scripts.min.js:1
5034 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:117
5035 #: rhodecode/public/js/src/rhodecode/pullrequests.js:448
4917 5036 msgid "added manually by \"{0}\""
4918 5037 msgstr ""
4919 5038
4920 #: rhodecode/public/js/scripts.js:41491 rhodecode/public/js/scripts.min.js:1
4921 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:113
4922 #: rhodecode/public/js/src/rhodecode/pullrequests.js:450
5039 #: rhodecode/public/js/scripts.js:42319 rhodecode/public/js/scripts.min.js:1
5040 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:129
5041 #: rhodecode/public/js/src/rhodecode/pullrequests.js:452
4923 5042 msgid "member of \"{0}\""
4924 5043 msgstr ""
4925 5044
4926 #: rhodecode/public/js/scripts.js:41682 rhodecode/public/js/scripts.min.js:1
4927 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:94
4928 #: rhodecode/public/js/src/rhodecode/pullrequests.js:641
5045 #: rhodecode/public/js/scripts.js:42510 rhodecode/public/js/scripts.min.js:1
5046 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:109
5047 #: rhodecode/public/js/src/rhodecode/pullrequests.js:643
4929 5048 msgid "Updating..."
4930 5049 msgstr ""
4931 5050
4932 #: rhodecode/public/js/scripts.js:41692 rhodecode/public/js/scripts.min.js:1
4933 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:28
4934 #: rhodecode/public/js/src/rhodecode/pullrequests.js:651
5051 #: rhodecode/public/js/scripts.js:42520 rhodecode/public/js/scripts.min.js:1
5052 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:35
5053 #: rhodecode/public/js/src/rhodecode/pullrequests.js:653
4935 5054 msgid "Force updating..."
4936 5055 msgstr ""
4937 5056
4938 #: rhodecode/public/js/scripts.js:46140 rhodecode/public/js/scripts.min.js:1
5057 #: rhodecode/public/js/scripts.js:46968 rhodecode/public/js/scripts.min.js:1
5058 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:88
4939 5059 #: rhodecode/public/js/src/rhodecode/users.js:54
4940 5060 msgid "Show this authentication token?"
4941 5061 msgstr ""
4942 5062
4943 #: rhodecode/public/js/scripts.js:46142 rhodecode/public/js/scripts.min.js:1
5063 #: rhodecode/public/js/scripts.js:46970 rhodecode/public/js/scripts.min.js:1
5064 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:81
4944 5065 #: rhodecode/public/js/src/rhodecode/users.js:56
4945 5066 msgid "Show"
4946 5067 msgstr ""
4947 5068
4948 #: rhodecode/public/js/scripts.js:46178 rhodecode/public/js/scripts.min.js:1
5069 #: rhodecode/public/js/scripts.js:47006 rhodecode/public/js/scripts.min.js:1
5070 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:14
4949 5071 #: rhodecode/public/js/src/rhodecode/users.js:92
4950 5072 msgid "Authentication Token"
4951 5073 msgstr ""
4952 5074
4953 #: rhodecode/public/js/scripts.js:46367 rhodecode/public/js/scripts.min.js:1
4954 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:105
5075 #: rhodecode/public/js/scripts.js:47195 rhodecode/public/js/scripts.min.js:1
5076 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:121
4955 5077 #: rhodecode/public/js/src/rhodecode.js:144
4956 5078 msgid "file"
4957 5079 msgstr ""
4958 5080
4959 #: rhodecode/public/js/scripts.js:46511 rhodecode/public/js/scripts.min.js:1
4960 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:39
5081 #: rhodecode/public/js/scripts.js:47339 rhodecode/public/js/scripts.min.js:1
5082 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:47
4961 5083 #: rhodecode/public/js/src/rhodecode.js:288
4962 5084 msgid "Loading..."
4963 5085 msgstr ""
4964 5086
4965 #: rhodecode/public/js/scripts.js:46884 rhodecode/public/js/scripts.min.js:1
4966 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:102
5087 #: rhodecode/public/js/scripts.js:47712 rhodecode/public/js/scripts.min.js:1
5088 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:118
4967 5089 #: rhodecode/public/js/src/rhodecode.js:661
4968 5090 msgid "date not in future"
4969 5091 msgstr ""
4970 5092
4971 #: rhodecode/public/js/scripts.js:46892 rhodecode/public/js/scripts.min.js:1
4972 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:79
5093 #: rhodecode/public/js/scripts.js:47720 rhodecode/public/js/scripts.min.js:1
5094 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:90
4973 5095 #: rhodecode/public/js/src/rhodecode.js:669
4974 5096 msgid "Specified expiration date"
4975 5097 msgstr ""
4976 5098
4977 5099 #: rhodecode/public/js/scripts.min.js:1
4978 5100 msgid "action"
4979 5101 msgstr ""
4980 5102
4981 5103 #: rhodecode/public/js/scripts.min.js:1
4982 5104 msgid "target"
4983 5105 msgstr ""
4984 5106
4985 5107 #: rhodecode/public/js/scripts.min.js:1
4986 5108 msgid "text"
4987 5109 msgstr ""
4988 5110
4989 5111 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:2
4990 5112 msgid "(from usergroup {0})"
4991 5113 msgstr ""
4992 5114
4993 5115 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:3
4994 #: rhodecode/templates/codeblocks/diffs.mako:606
4995 #: rhodecode/templates/codeblocks/diffs.mako:610
5116 msgid "<strong>{0} file</strong> changed, "
5117 msgstr ""
5118
5119 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:4
5120 msgid "<strong>{0} files</strong> changed, "
5121 msgstr ""
5122
5123 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:5
5124 #: rhodecode/templates/codeblocks/diffs.mako:618
5125 #: rhodecode/templates/codeblocks/diffs.mako:622
4996 5126 msgid "Add another comment"
4997 5127 msgstr ""
4998 5128
4999 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:8
5129 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:11
5000 5130 msgid "Are you sure to close this pull request without merging?"
5001 5131 msgstr ""
5002 5132
5003 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:12
5133 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:16
5004 5134 msgid "Changed files"
5005 5135 msgstr ""
5006 5136
5007 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:13
5137 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:17
5008 5138 #: rhodecode/public/js/src/i18n_messages.js:5
5009 5139 #: rhodecode/templates/pullrequests/pullrequest_show.mako:288
5010 5140 msgid "Close"
5011 5141 msgstr ""
5012 5142
5013 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:14
5143 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:18
5014 5144 #: rhodecode/templates/codeblocks/diffs.mako:131
5015 5145 msgid "Collapse all files"
5016 5146 msgstr ""
5017 5147
5018 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:15
5019 msgid "Collapse {0} commit"
5020 msgstr ""
5021
5022 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:16
5023 msgid "Collapse {0} commits"
5024 msgstr ""
5025
5026 5148 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:19
5027 msgid "Context file: "
5149 msgid "Collapse {0} commit"
5028 5150 msgstr ""
5029 5151
5030 5152 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:20
5031 msgid "Delete this comment?"
5032 msgstr ""
5033
5034 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:21
5035 msgid "Diff to Commit "
5036 msgstr ""
5037
5038 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:22
5039 #: rhodecode/templates/codeblocks/diffs.mako:129
5040 msgid "Expand all files"
5153 msgid "Collapse {0} commits"
5041 5154 msgstr ""
5042 5155
5043 5156 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:23
5044 msgid "Expand {0} commit"
5045 msgstr ""
5046
5047 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:24
5048 msgid "Expand {0} commits"
5157 msgid "Context file: "
5049 5158 msgstr ""
5050 5159
5051 5160 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:25
5052 msgid "Fetching repository state failed. Error code: {0} {1}. Try <a href=\"{2}\">refreshing</a> this page."
5161 msgid "Delete this comment?"
5053 5162 msgstr ""
5054 5163
5055 5164 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:26
5056 msgid "Fetching repository state failed. Error code: {0} {1}. Try refreshing this page."
5165 msgid "Diff to Commit "
5057 5166 msgstr ""
5058 5167
5059 5168 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:27
5060 msgid "Follow"
5169 msgid "Error during search operation"
5170 msgstr ""
5171
5172 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:28
5173 #: rhodecode/templates/codeblocks/diffs.mako:129
5174 msgid "Expand all files"
5061 5175 msgstr ""
5062 5176
5063 5177 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:29
5064 msgid "Hide full context diff"
5178 msgid "Expand {0} commit"
5065 5179 msgstr ""
5066 5180
5067 5181 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:30
5068 msgid "Hide whitespace changes"
5182 msgid "Expand {0} commits"
5069 5183 msgstr ""
5070 5184
5071 5185 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:31
5186 msgid "Fetching repository state failed. Error code: {0} {1}. Try <a href=\"{2}\">refreshing</a> this page."
5187 msgstr ""
5188
5189 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:32
5190 msgid "Fetching repository state failed. Error code: {0} {1}. Try refreshing this page."
5191 msgstr ""
5192
5193 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:34
5194 msgid "Follow"
5195 msgstr ""
5196
5197 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:36
5198 msgid "Hide full context diff"
5199 msgstr ""
5200
5201 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:37
5202 msgid "Hide whitespace changes"
5203 msgstr ""
5204
5205 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:38
5072 5206 #: rhodecode/public/js/src/i18n_messages.js:4
5073 5207 msgid "Invite reviewers to this discussion"
5074 5208 msgstr ""
5075 5209
5076 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:33
5077 msgid "Leave a comment, or click resolve button to resolve TODO comment #{0}"
5078 msgstr ""
5079
5080 5210 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:40
5081 msgid "No bookmarks available yet."
5082 msgstr ""
5083
5084 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:41
5085 msgid "No branches available yet."
5086 msgstr ""
5087
5088 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:42
5089 msgid "No forks available yet."
5090 msgstr ""
5091
5092 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:43
5093 msgid "No gists available yet."
5094 msgstr ""
5095
5096 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:46
5097 msgid "No pull requests available yet."
5098 msgstr ""
5099
5100 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:47
5101 msgid "No repositories available yet."
5211 msgid "Leave a comment, or click resolve button to resolve TODO comment #{0}"
5102 5212 msgstr ""
5103 5213
5104 5214 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:48
5105 msgid "No repositories present."
5215 msgid "No bookmarks available yet."
5106 5216 msgstr ""
5107 5217
5108 5218 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:49
5109 msgid "No repository groups available yet."
5219 msgid "No branches available yet."
5110 5220 msgstr ""
5111 5221
5112 5222 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:50
5113 msgid "No repository groups present."
5114 msgstr ""
5115
5116 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:52
5117 msgid "No ssh keys available yet."
5118 msgstr ""
5119
5120 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:53
5121 msgid "No tags available yet."
5223 msgid "No forks available yet."
5224 msgstr ""
5225
5226 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:51
5227 msgid "No gists available yet."
5122 5228 msgstr ""
5123 5229
5124 5230 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:54
5125 msgid "No user groups available yet."
5231 msgid "No pull requests available yet."
5126 5232 msgstr ""
5127 5233
5128 5234 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:55
5129 msgid "No users available yet."
5130 msgstr ""
5131
5132 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:59
5133 #: rhodecode/templates/commits/changelog.mako:78
5134 msgid "Open new pull request"
5235 msgid "No repositories available yet."
5236 msgstr ""
5237
5238 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:56
5239 msgid "No repositories present."
5240 msgstr ""
5241
5242 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:57
5243 msgid "No repository groups available yet."
5244 msgstr ""
5245
5246 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:58
5247 msgid "No repository groups present."
5135 5248 msgstr ""
5136 5249
5137 5250 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:60
5251 msgid "No ssh keys available yet."
5252 msgstr ""
5253
5254 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:61
5255 msgid "No tags available yet."
5256 msgstr ""
5257
5258 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:62
5259 msgid "No user groups available yet."
5260 msgstr ""
5261
5262 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:63
5263 msgid "No users available yet."
5264 msgstr ""
5265
5266 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:67
5267 #: rhodecode/templates/commits/changelog.mako:78
5268 msgid "Open new pull request"
5269 msgstr ""
5270
5271 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:68
5138 5272 msgid "Open new pull request for selected commit"
5139 5273 msgstr ""
5140 5274
5141 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:66
5275 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:73
5276 msgid "Please wait creating pull request..."
5277 msgstr ""
5278
5279 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:75
5142 5280 msgid "Saving..."
5143 5281 msgstr ""
5144 5282
5145 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:69
5283 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:78
5146 5284 #: rhodecode/public/js/src/i18n_messages.js:6
5147 5285 #: rhodecode/templates/admin/settings/settings_email.mako:50
5148 5286 msgid "Send"
5149 5287 msgstr ""
5150 5288
5151 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:72
5289 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:82
5152 5290 msgid "Show at Commit "
5153 5291 msgstr ""
5154 5292
5155 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:73
5156 msgid "Show commit range {0} ... {1}"
5157 msgstr ""
5158
5159 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:74
5160 msgid "Show full context diff"
5161 msgstr ""
5162
5163 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:75
5164 #: rhodecode/templates/admin/settings/settings_exceptions_browse.mako:40
5165 msgid "Show more"
5166 msgstr ""
5167
5168 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:76
5169 msgid "Show selected commit __S"
5170 msgstr ""
5171
5172 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:77
5173 msgid "Show selected commits __S ... __E"
5174 msgstr ""
5175
5176 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:78
5177 msgid "Show whitespace changes"
5178 msgstr ""
5179
5180 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:80
5181 msgid "Start following this repository"
5182 msgstr ""
5183
5184 5293 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:83
5185 msgid "Stop following this repository"
5294 msgid "Show commit range {0} ... {1}"
5295 msgstr ""
5296
5297 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:84
5298 msgid "Show full context diff"
5299 msgstr ""
5300
5301 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:85
5302 #: rhodecode/templates/admin/settings/settings_exceptions_browse.mako:40
5303 msgid "Show more"
5186 5304 msgstr ""
5187 5305
5188 5306 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:86
5189 #: rhodecode/public/js/src/i18n_messages.js:7
5190 msgid "Switch to chat"
5307 msgid "Show selected commit __S"
5191 5308 msgstr ""
5192 5309
5193 5310 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:87
5194 #: rhodecode/public/js/src/i18n_messages.js:8
5195 msgid "Switch to comment"
5196 msgstr ""
5197
5198 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:90
5199 msgid "There are currently no open pull requests requiring your participation."
5311 msgid "Show selected commits __S ... __E"
5312 msgstr ""
5313
5314 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:89
5315 msgid "Show whitespace changes"
5200 5316 msgstr ""
5201 5317
5202 5318 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:91
5203 msgid "Toggle Wide Mode diff"
5204 msgstr ""
5205
5206 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:92
5207 msgid "Unfollow"
5208 msgstr ""
5209
5210 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:100
5211 #: rhodecode/templates/admin/auth/auth_settings.mako:69
5212 msgid "activated"
5213 msgstr ""
5214
5215 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:103
5216 msgid "disabled"
5319 msgid "Start following this repository"
5320 msgstr ""
5321
5322 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:94
5323 msgid "Stop following this repository"
5324 msgstr ""
5325
5326 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:97
5327 #: rhodecode/public/js/src/i18n_messages.js:7
5328 msgid "Switch to chat"
5329 msgstr ""
5330
5331 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:98
5332 #: rhodecode/public/js/src/i18n_messages.js:8
5333 msgid "Switch to comment"
5334 msgstr ""
5335
5336 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:101
5337 msgid "There are currently no open pull requests requiring your participation."
5217 5338 msgstr ""
5218 5339
5219 5340 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:104
5220 msgid "enabled"
5341 msgid "This pull requests will consist of <strong>{0} commit</strong>."
5342 msgstr ""
5343
5344 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:105
5345 msgid "This pull requests will consist of <strong>{0} commits</strong>."
5221 5346 msgstr ""
5222 5347
5223 5348 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:106
5224 msgid "files"
5349 msgid "Toggle Wide Mode diff"
5225 5350 msgstr ""
5226 5351
5227 5352 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:107
5228 msgid "go to numeric commit"
5229 msgstr ""
5230
5231 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:112
5232 #: rhodecode/templates/index_base.mako:27
5233 #: rhodecode/templates/pullrequests/pullrequest.mako:136
5234 msgid "loading..."
5235 msgstr ""
5236
5237 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:114
5353 msgid "Unfollow"
5354 msgstr ""
5355
5356 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:116
5238 5357 #: rhodecode/templates/admin/auth/auth_settings.mako:69
5239 msgid "not active"
5240 msgstr ""
5241
5242 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:118
5243 msgid "specify commit"
5244 msgstr ""
5245
5246 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:121
5247 msgid "{0} ({1} inactive) of {2} user groups ({3} inactive)"
5358 msgid "activated"
5359 msgstr ""
5360
5361 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:119
5362 msgid "disabled"
5363 msgstr ""
5364
5365 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:120
5366 msgid "enabled"
5248 5367 msgstr ""
5249 5368
5250 5369 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:122
5251 msgid "{0} ({1} inactive) of {2} users ({3} inactive)"
5370 msgid "files"
5252 5371 msgstr ""
5253 5372
5254 5373 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:123
5255 msgid "{0} active out of {1} users"
5374 msgid "go to numeric commit"
5256 5375 msgstr ""
5257 5376
5258 5377 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:128
5259 msgid "{0} days"
5260 msgstr ""
5261
5262 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:130
5263 msgid "{0} hours"
5264 msgstr ""
5265
5266 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:133
5267 msgid "{0} months"
5268 msgstr ""
5269
5270 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:134
5271 msgid "{0} of {1} repositories"
5378 #: rhodecode/templates/index_base.mako:27
5379 #: rhodecode/templates/pullrequests/pullrequest.mako:136
5380 msgid "loading..."
5381 msgstr ""
5382
5383 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:131
5384 #: rhodecode/templates/admin/auth/auth_settings.mako:69
5385 msgid "not active"
5272 5386 msgstr ""
5273 5387
5274 5388 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:135
5275 msgid "{0} of {1} repository groups"
5276 msgstr ""
5277
5278 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:136
5279 msgid "{0} out of {1} ssh keys"
5280 msgstr ""
5281
5282 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:137
5283 msgid "{0} out of {1} users"
5389 msgid "specify commit"
5284 5390 msgstr ""
5285 5391
5286 5392 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:138
5287 msgid "{0} repositories"
5393 msgid "{0} ({1} inactive) of {2} user groups ({3} inactive)"
5288 5394 msgstr ""
5289 5395
5290 5396 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:139
5291 msgid "{0} repository groups"
5292 msgstr ""
5293
5294 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:142
5295 msgid "{0} user groups ({1} inactive)"
5296 msgstr ""
5297
5298 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:143
5299 msgid "{0} users ({1} inactive)"
5397 msgid "{0} ({1} inactive) of {2} users ({3} inactive)"
5398 msgstr ""
5399
5400 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:140
5401 msgid "{0} active out of {1} users"
5300 5402 msgstr ""
5301 5403
5302 5404 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:145
5405 msgid "{0} days"
5406 msgstr ""
5407
5408 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:147
5409 msgid "{0} hours"
5410 msgstr ""
5411
5412 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:150
5413 msgid "{0} months"
5414 msgstr ""
5415
5416 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:151
5417 msgid "{0} of {1} repositories"
5418 msgstr ""
5419
5420 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:152
5421 msgid "{0} of {1} repository groups"
5422 msgstr ""
5423
5424 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:153
5425 msgid "{0} out of {1} ssh keys"
5426 msgstr ""
5427
5428 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:154
5429 msgid "{0} out of {1} users"
5430 msgstr ""
5431
5432 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:155
5433 msgid "{0} repositories"
5434 msgstr ""
5435
5436 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:156
5437 msgid "{0} repository groups"
5438 msgstr ""
5439
5440 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:159
5441 msgid "{0} user groups ({1} inactive)"
5442 msgstr ""
5443
5444 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:160
5445 msgid "{0} users ({1} inactive)"
5446 msgstr ""
5447
5448 #: rhodecode/public/js/rhodecode/i18n/js_translations.js:162
5303 5449 msgid "{0} years"
5304 5450 msgstr ""
5305 5451
5306 5452 #: rhodecode/public/js/src/math_jax/extensions/HelpDialog.js:19
5307 5453 msgid "HelpDialog"
5308 5454 msgstr ""
5309 5455
5310 5456 #: rhodecode/public/js/src/math_jax/jax/output/HTML-CSS/autoload/mglyph.js:19
5311 5457 msgid "MathML"
5312 5458 msgstr ""
5313 5459
5314 5460 #: rhodecode/templates/index.mako:5
5315 5461 msgid "Dashboard"
5316 5462 msgstr ""
5317 5463
5318 5464 #: rhodecode/templates/index_base.mako:21
5319 5465 msgid "No repositories or repositories groups exists here."
5320 5466 msgstr ""
5321 5467
5322 5468 #: rhodecode/templates/index_base.mako:80
5323 5469 #: rhodecode/templates/index_base.mako:167
5324 5470 #: rhodecode/templates/admin/gists/gist_index.mako:107
5325 5471 #: rhodecode/templates/admin/integrations/list.mako:72
5326 5472 #: rhodecode/templates/admin/my_account/my_account_repos.mako:28
5327 5473 #: rhodecode/templates/admin/my_account/my_account_user_group_membership.mako:39
5328 5474 #: rhodecode/templates/admin/my_account/my_account_watched.mako:28
5329 5475 #: rhodecode/templates/admin/repo_groups/repo_groups.mako:74
5330 5476 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:16
5331 5477 #: rhodecode/templates/admin/repos/repos.mako:76
5332 5478 #: rhodecode/templates/admin/user_groups/user_groups.mako:76
5333 5479 #: rhodecode/templates/admin/users/user_edit_groups.mako:57
5334 #: rhodecode/templates/base/perms_summary.mako:168
5335 #: rhodecode/templates/base/perms_summary.mako:242
5480 #: rhodecode/templates/base/perms_summary.mako:173
5481 #: rhodecode/templates/base/perms_summary.mako:247
5336 5482 #: rhodecode/templates/bookmarks/bookmarks.mako:57
5337 5483 #: rhodecode/templates/branches/branches.mako:56
5338 #: rhodecode/templates/files/files_browser_tree.mako:13
5484 #: rhodecode/templates/files/files_browser_tree.mako:16
5339 5485 #: rhodecode/templates/tags/tags.mako:57
5340 5486 msgid "Name"
5341 5487 msgstr ""
5342 5488
5343 5489 #: rhodecode/templates/index_base.mako:89
5344 5490 #: rhodecode/templates/index_base.mako:176
5345 5491 #: rhodecode/templates/admin/gists/gist_index.mako:109
5346 #: rhodecode/templates/admin/my_account/my_account_auth_tokens.mako:21
5347 #: rhodecode/templates/admin/my_account/my_account_auth_tokens.mako:81
5492 #: rhodecode/templates/admin/my_account/my_account_auth_tokens.mako:27
5493 #: rhodecode/templates/admin/my_account/my_account_auth_tokens.mako:87
5348 5494 #: rhodecode/templates/admin/my_account/my_account_profile.mako:68
5349 5495 #: rhodecode/templates/admin/my_account/my_account_ssh_keys.mako:10
5350 5496 #: rhodecode/templates/admin/my_account/my_account_ssh_keys.mako:58
5351 5497 #: rhodecode/templates/admin/my_account/my_account_user_group_membership.mako:44
5352 5498 #: rhodecode/templates/admin/permissions/permissions_ssh_keys.mako:49
5353 #: rhodecode/templates/admin/repo_groups/repo_group_add.mako:53
5499 #: rhodecode/templates/admin/repo_groups/repo_group_add.mako:58
5354 5500 #: rhodecode/templates/admin/repo_groups/repo_group_edit_settings.mako:55
5355 5501 #: rhodecode/templates/admin/repo_groups/repo_groups.mako:77
5356 5502 #: rhodecode/templates/admin/repos/repo_add_base.mako:83
5357 5503 #: rhodecode/templates/admin/repos/repo_edit_issuetracker.mako:30
5358 5504 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:170
5359 5505 #: rhodecode/templates/admin/repos/repos.mako:84
5360 5506 #: rhodecode/templates/admin/user_groups/user_group_add.mako:42
5361 5507 #: rhodecode/templates/admin/user_groups/user_group_edit_settings.mako:46
5362 5508 #: rhodecode/templates/admin/user_groups/user_groups.mako:78
5363 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:26
5364 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:85
5509 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:32
5510 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:91
5365 5511 #: rhodecode/templates/admin/users/user_edit_groups.mako:62
5366 5512 #: rhodecode/templates/admin/users/user_edit_ips.mako:17
5367 5513 #: rhodecode/templates/admin/users/user_edit_profile.mako:74
5368 5514 #: rhodecode/templates/admin/users/user_edit_ssh_keys.mako:15
5369 5515 #: rhodecode/templates/admin/users/user_edit_ssh_keys.mako:57
5370 5516 #: rhodecode/templates/base/issue_tracker_settings.mako:78
5371 5517 #: rhodecode/templates/compare/compare_commits.mako:19
5372 #: rhodecode/templates/email_templates/pull_request_review.mako:43
5373 #: rhodecode/templates/email_templates/pull_request_review.mako:123
5374 #: rhodecode/templates/email_templates/pull_request_update.mako:43
5375 #: rhodecode/templates/email_templates/pull_request_update.mako:135
5518 #: rhodecode/templates/email_templates/pull_request_review.mako:45
5519 #: rhodecode/templates/email_templates/pull_request_review.mako:126
5520 #: rhodecode/templates/email_templates/pull_request_update.mako:45
5521 #: rhodecode/templates/email_templates/pull_request_update.mako:139
5376 5522 #: rhodecode/templates/forks/fork.mako:56
5377 5523 #: rhodecode/templates/forks/forks.mako:62
5378 5524 #: rhodecode/templates/pullrequests/pullrequest.mako:50
5379 #: rhodecode/templates/pullrequests/pullrequest_show.mako:562
5525 #: rhodecode/templates/pullrequests/pullrequest_show.mako:560
5380 5526 #: rhodecode/templates/summary/components.mako:159
5381 5527 #: rhodecode/templates/user_group/profile.mako:25
5382 5528 #: rhodecode/templates/users/user_profile.mako:59
5383 5529 msgid "Description"
5384 5530 msgstr ""
5385 5531
5386 5532 #: rhodecode/templates/index_base.mako:96
5387 5533 #: rhodecode/templates/index_base.mako:183
5388 5534 #: rhodecode/templates/admin/repo_groups/repo_groups.mako:80
5389 5535 #: rhodecode/templates/admin/repos/repos.mako:91
5390 5536 msgid "Last Change"
5391 5537 msgstr ""
5392 5538
5393 5539 #: rhodecode/templates/index_base.mako:109
5394 5540 #: rhodecode/templates/index_base.mako:196
5395 5541 #: rhodecode/templates/admin/my_account/my_account_user_group_membership.mako:50
5396 5542 #: rhodecode/templates/admin/repo_groups/repo_group_edit_advanced.mako:8
5397 5543 #: rhodecode/templates/admin/repo_groups/repo_group_edit_settings.mako:37
5398 5544 #: rhodecode/templates/admin/repo_groups/repo_groups.mako:84
5399 5545 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:6
5400 5546 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:152
5401 5547 #: rhodecode/templates/admin/repos/repos.mako:104
5402 5548 #: rhodecode/templates/admin/user_groups/user_group_edit_advanced.mako:6
5403 5549 #: rhodecode/templates/admin/user_groups/user_group_edit_settings.mako:28
5404 5550 #: rhodecode/templates/admin/user_groups/user_groups.mako:86
5405 5551 #: rhodecode/templates/admin/users/user_edit_groups.mako:68
5406 5552 #: rhodecode/templates/forks/forks.mako:58
5407 5553 #: rhodecode/templates/summary/components.mako:148
5408 5554 #: rhodecode/templates/user_group/profile.mako:35
5409 5555 msgid "Owner"
5410 5556 msgstr ""
5411 5557
5412 5558 #: rhodecode/templates/index_base.mako:190
5413 5559 #: rhodecode/templates/admin/repos/repos.mako:98
5414 5560 #: rhodecode/templates/bookmarks/bookmarks.mako:64
5415 5561 #: rhodecode/templates/branches/branches.mako:63
5416 5562 #: rhodecode/templates/compare/compare_commits.mako:17
5417 #: rhodecode/templates/email_templates/commit_comment.mako:56
5418 #: rhodecode/templates/email_templates/commit_comment.mako:109
5419 #: rhodecode/templates/email_templates/commit_comment.mako:135
5563 #: rhodecode/templates/email_templates/commit_comment.mako:60
5564 #: rhodecode/templates/email_templates/commit_comment.mako:114
5565 #: rhodecode/templates/email_templates/commit_comment.mako:141
5420 5566 #: rhodecode/templates/files/file_authors_box.mako:28
5421 #: rhodecode/templates/pullrequests/pullrequest_show.mako:560
5567 #: rhodecode/templates/pullrequests/pullrequest_show.mako:558
5422 5568 #: rhodecode/templates/search/search_commit.mako:9
5423 5569 #: rhodecode/templates/summary/components.mako:117
5424 5570 #: rhodecode/templates/summary/components.mako:125
5425 5571 #: rhodecode/templates/summary/summary_commits.mako:8
5426 5572 #: rhodecode/templates/tags/tags.mako:64
5427 5573 msgid "Commit"
5428 5574 msgstr ""
5429 5575
5430 5576 #: rhodecode/templates/index_repo_group.mako:5
5431 5577 #, python-format
5432 5578 msgid "%s Repository group dashboard"
5433 5579 msgstr ""
5434 5580
5435 5581 #: rhodecode/templates/index_repo_group.mako:13
5436 #: rhodecode/templates/base/base.mako:804
5437 #: rhodecode/templates/base/base.mako:805
5582 #: rhodecode/templates/base/base.mako:811
5583 #: rhodecode/templates/base/base.mako:812
5438 5584 msgid "Home"
5439 5585 msgstr ""
5440 5586
5441 5587 #: rhodecode/templates/login.mako:5 rhodecode/templates/login.mako:91
5442 5588 #: rhodecode/templates/debug_style/login.html:60
5443 5589 msgid "Sign In"
5444 5590 msgstr ""
5445 5591
5446 5592 #: rhodecode/templates/login.mako:39
5447 5593 msgid "Sign In using username/password"
5448 5594 msgstr ""
5449 5595
5450 5596 #: rhodecode/templates/login.mako:53
5451 5597 msgid "Forgot your password?"
5452 5598 msgstr ""
5453 5599
5454 5600 #: rhodecode/templates/login.mako:66
5455 5601 msgid "Remember my indefinitely"
5456 5602 msgstr ""
5457 5603
5458 5604 #: rhodecode/templates/login.mako:68
5459 5605 msgid "Remember me for {}"
5460 5606 msgstr ""
5461 5607
5462 5608 #: rhodecode/templates/login.mako:74
5463 5609 msgid "Create a new account."
5464 5610 msgstr ""
5465 5611
5466 5612 #: rhodecode/templates/login.mako:81
5467 5613 msgid "Password reset is disabled."
5468 5614 msgstr ""
5469 5615
5470 5616 #: rhodecode/templates/login.mako:82
5471 5617 msgid "Please contact "
5472 5618 msgstr ""
5473 5619
5474 5620 #: rhodecode/templates/login.mako:84 rhodecode/templates/password_reset.mako:39
5475 #: rhodecode/templates/base/base.mako:59
5621 #: rhodecode/templates/base/base.mako:61
5476 5622 msgid "Support"
5477 5623 msgstr ""
5478 5624
5479 5625 #: rhodecode/templates/login.mako:85 rhodecode/templates/password_reset.mako:40
5480 5626 msgid "or"
5481 5627 msgstr ""
5482 5628
5483 5629 #: rhodecode/templates/login.mako:87 rhodecode/templates/password_reset.mako:42
5484 5630 msgid "an administrator if you need help."
5485 5631 msgstr ""
5486 5632
5487 5633 #: rhodecode/templates/login.mako:91
5488 5634 msgid "Sign in to {}"
5489 5635 msgstr ""
5490 5636
5491 5637 #: rhodecode/templates/password_reset.mako:5
5492 5638 msgid "Reset Password"
5493 5639 msgstr ""
5494 5640
5495 5641 #: rhodecode/templates/password_reset.mako:37
5496 5642 msgid "Password reset is disabled. Please contact "
5497 5643 msgstr ""
5498 5644
5499 5645 #: rhodecode/templates/password_reset.mako:49
5500 5646 msgid "Reset your Password"
5501 5647 msgstr ""
5502 5648
5503 5649 #: rhodecode/templates/password_reset.mako:50
5504 5650 msgid "Go to the login page to sign in."
5505 5651 msgstr ""
5506 5652
5507 5653 #: rhodecode/templates/password_reset.mako:54
5508 5654 msgid "Email Address"
5509 5655 msgstr ""
5510 5656
5511 5657 #: rhodecode/templates/password_reset.mako:60
5512 5658 msgid "Password reset link will be sent to matching email address"
5513 5659 msgstr ""
5514 5660
5515 5661 #: rhodecode/templates/password_reset.mako:64
5516 5662 #: rhodecode/templates/register.mako:104
5517 5663 msgid "Captcha"
5518 5664 msgstr ""
5519 5665
5520 5666 #: rhodecode/templates/password_reset.mako:75
5521 5667 msgid "Send password reset email"
5522 5668 msgstr ""
5523 5669
5524 5670 #: rhodecode/templates/register.mako:5
5525 5671 msgid "Create an Account"
5526 5672 msgstr ""
5527 5673
5528 5674 #: rhodecode/templates/register.mako:38
5529 5675 msgid "Create an account linked with {}"
5530 5676 msgstr ""
5531 5677
5532 5678 #: rhodecode/templates/register.mako:40
5533 5679 msgid "Create an account"
5534 5680 msgstr ""
5535 5681
5536 5682 #: rhodecode/templates/register.mako:43
5537 5683 msgid "Go to the login page to sign in with an existing account."
5538 5684 msgstr ""
5539 5685
5540 5686 #: rhodecode/templates/register.mako:69
5541 5687 msgid "Re-enter password"
5542 5688 msgstr ""
5543 5689
5544 5690 #: rhodecode/templates/register.mako:81
5545 5691 #: rhodecode/templates/admin/my_account/my_account_profile.mako:48
5546 5692 #: rhodecode/templates/admin/my_account/my_account_profile_edit.mako:38
5547 5693 #: rhodecode/templates/admin/users/user_add.mako:68
5548 5694 #: rhodecode/templates/admin/users/user_edit_profile.mako:47
5549 5695 #: rhodecode/templates/admin/users/users.mako:78
5550 5696 msgid "First Name"
5551 5697 msgstr ""
5552 5698
5553 5699 #: rhodecode/templates/register.mako:88
5554 5700 #: rhodecode/templates/admin/my_account/my_account_profile.mako:58
5555 5701 #: rhodecode/templates/admin/my_account/my_account_profile_edit.mako:47
5556 5702 #: rhodecode/templates/admin/users/user_add.mako:77
5557 5703 #: rhodecode/templates/admin/users/user_edit_profile.mako:56
5558 5704 #: rhodecode/templates/admin/users/users.mako:80
5559 5705 msgid "Last Name"
5560 5706 msgstr ""
5561 5707
5562 5708 #: rhodecode/templates/register.mako:116
5563 5709 msgid "Account activation requires admin approval."
5564 5710 msgstr ""
5565 5711
5566 5712 #: rhodecode/templates/register.mako:123
5567 5713 msgid "Create Account"
5568 5714 msgstr ""
5569 5715
5570 5716 #: rhodecode/templates/register.mako:123
5571 5717 msgid "Create Account in {}"
5572 5718 msgstr ""
5573 5719
5574 5720 #: rhodecode/templates/admin/admin_audit_log_entry.mako:6
5575 5721 msgid "Admin audit log entry"
5576 5722 msgstr ""
5577 5723
5578 5724 #: rhodecode/templates/admin/admin_audit_log_entry.mako:26
5579 5725 msgid "Audit long entry"
5580 5726 msgstr ""
5581 5727
5582 5728 #: rhodecode/templates/admin/admin_audit_log_entry.mako:34
5583 5729 #: rhodecode/templates/users/user.mako:4
5584 5730 msgid "User"
5585 5731 msgstr ""
5586 5732
5587 5733 #: rhodecode/templates/admin/admin_audit_log_entry.mako:46
5588 5734 #: rhodecode/templates/admin/admin_log_base.mako:11
5589 5735 #: rhodecode/templates/bookmarks/bookmarks.mako:59
5590 5736 #: rhodecode/templates/branches/branches.mako:58
5591 5737 #: rhodecode/templates/tags/tags.mako:59
5592 5738 msgid "Date"
5593 5739 msgstr ""
5594 5740
5595 5741 #: rhodecode/templates/admin/admin_audit_log_entry.mako:54
5596 5742 #: rhodecode/templates/admin/admin_log_base.mako:12
5597 5743 msgid "IP"
5598 5744 msgstr ""
5599 5745
5600 5746 #: rhodecode/templates/admin/admin_audit_log_entry.mako:63
5601 5747 #: rhodecode/templates/admin/admin_log_base.mako:8
5602 #: rhodecode/templates/admin/my_account/my_account_auth_tokens.mako:25
5748 #: rhodecode/templates/admin/my_account/my_account_auth_tokens.mako:31
5603 5749 #: rhodecode/templates/admin/my_account/my_account_ssh_keys.mako:13
5604 5750 #: rhodecode/templates/admin/permissions/permissions_ssh_keys.mako:55
5605 5751 #: rhodecode/templates/admin/repo_groups/repo_groups.mako:86
5606 5752 #: rhodecode/templates/admin/repos/repo_edit_fields.mako:13
5607 5753 #: rhodecode/templates/admin/repos/repos.mako:116
5608 5754 #: rhodecode/templates/admin/user_groups/user_group_edit_settings.mako:75
5609 5755 #: rhodecode/templates/admin/user_groups/user_groups.mako:88
5610 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:30
5756 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:36
5611 5757 #: rhodecode/templates/admin/users/user_edit_groups.mako:76
5612 5758 #: rhodecode/templates/admin/users/user_edit_ssh_keys.mako:18
5613 5759 #: rhodecode/templates/admin/users/users.mako:91
5614 5760 #: rhodecode/templates/forks/forks.mako:69
5615 5761 msgid "Action"
5616 5762 msgstr ""
5617 5763
5618 5764 #: rhodecode/templates/admin/admin_audit_log_entry.mako:81
5619 5765 #: rhodecode/templates/admin/admin_log_base.mako:9
5620 5766 msgid "Action Data"
5621 5767 msgstr ""
5622 5768
5623 5769 #: rhodecode/templates/admin/admin_audit_log_entry.mako:89
5624 5770 #: rhodecode/templates/admin/admin_log_base.mako:47
5625 5771 msgid "data not available for v1 entries type"
5626 5772 msgstr ""
5627 5773
5628 5774 #: rhodecode/templates/admin/admin_audit_log_entry.mako:95
5629 5775 #: rhodecode/templates/admin/admin_log_base.mako:10
5630 5776 #: rhodecode/templates/admin/defaults/defaults.mako:32
5631 5777 #: rhodecode/templates/admin/permissions/permissions_objects.mako:16
5632 #: rhodecode/templates/base/base.mako:649
5633 #: rhodecode/templates/base/base.mako:651
5634 #: rhodecode/templates/base/base.mako:653
5778 #: rhodecode/templates/base/base.mako:656
5779 #: rhodecode/templates/base/base.mako:658
5780 #: rhodecode/templates/base/base.mako:660
5635 5781 #: rhodecode/templates/search/search_commit.mako:8
5636 5782 #: rhodecode/templates/search/search_path.mako:7
5637 5783 msgid "Repository"
5638 5784 msgstr ""
5639 5785
5640 5786 #: rhodecode/templates/admin/admin_audit_logs.mako:5
5641 #: rhodecode/templates/base/base.mako:106
5787 #: rhodecode/templates/base/base.mako:111
5642 5788 msgid "Admin audit logs"
5643 5789 msgstr ""
5644 5790
5645 5791 #: rhodecode/templates/admin/admin_audit_logs.mako:25
5646 5792 msgid "filter..."
5647 5793 msgstr ""
5648 5794
5649 5795 #: rhodecode/templates/admin/admin_audit_logs.mako:26
5650 5796 #: rhodecode/templates/admin/repos/repo_edit_audit.mako:15
5651 5797 #: rhodecode/templates/admin/users/user_edit_audit.mako:18
5652 5798 #: rhodecode/templates/journal/journal.mako:13
5653 5799 msgid "filter"
5654 5800 msgstr ""
5655 5801
5656 5802 #: rhodecode/templates/admin/admin_audit_logs.mako:27
5657 5803 #: rhodecode/templates/admin/repos/repo_edit.mako:91
5658 5804 #: rhodecode/templates/admin/users/user_edit.mako:48
5659 5805 msgid "Audit logs"
5660 5806 msgstr ""
5661 5807
5662 5808 #: rhodecode/templates/admin/admin_audit_logs.mako:29
5663 5809 #: rhodecode/templates/admin/repos/repo_edit_audit.mako:18
5664 5810 #: rhodecode/templates/admin/users/user_edit_audit.mako:21
5665 5811 #: rhodecode/templates/journal/journal.mako:16
5666 5812 msgid "Example Queries"
5667 5813 msgstr ""
5668 5814
5669 5815 #: rhodecode/templates/admin/admin_log_base.mako:6
5670 5816 msgid "Uid"
5671 5817 msgstr ""
5672 5818
5673 5819 #: rhodecode/templates/admin/admin_log_base.mako:42
5674 5820 msgid "toggle"
5675 5821 msgstr ""
5676 5822
5677 5823 #: rhodecode/templates/admin/admin_log_base.mako:68
5678 5824 msgid "No actions yet"
5679 5825 msgstr ""
5680 5826
5681 5827 #: rhodecode/templates/admin/main.mako:5
5682 5828 #: rhodecode/templates/admin/settings/settings.mako:5
5683 5829 msgid "Settings administration"
5684 5830 msgstr ""
5685 5831
5686 5832 #: rhodecode/templates/admin/main.mako:26
5687 5833 msgid "Administration area"
5688 5834 msgstr ""
5689 5835
5690 5836 #: rhodecode/templates/admin/main.mako:30
5691 5837 msgid "Repositories under administration"
5692 5838 msgstr ""
5693 5839
5694 5840 #: rhodecode/templates/admin/main.mako:34
5695 5841 #: rhodecode/templates/admin/repos/repo_add.mako:22
5696 5842 #: rhodecode/templates/admin/repos/repos.mako:31
5697 5843 msgid "Add Repository"
5698 5844 msgstr ""
5699 5845
5700 5846 #: rhodecode/templates/admin/main.mako:39
5701 5847 msgid "Repository groups under administration"
5702 5848 msgstr ""
5703 5849
5704 5850 #: rhodecode/templates/admin/main.mako:43
5705 5851 #: rhodecode/templates/admin/repo_groups/repo_group_add.mako:16
5706 5852 #: rhodecode/templates/admin/repo_groups/repo_groups.mako:31
5707 5853 msgid "Add Repository Group"
5708 5854 msgstr ""
5709 5855
5710 5856 #: rhodecode/templates/admin/main.mako:48
5711 5857 msgid "User groups under administration"
5712 5858 msgstr ""
5713 5859
5714 5860 #: rhodecode/templates/admin/main.mako:52
5715 5861 #: rhodecode/templates/admin/user_groups/user_group_add.mako:15
5716 5862 #: rhodecode/templates/admin/user_groups/user_groups.mako:31
5717 5863 msgid "Add User Group"
5718 5864 msgstr ""
5719 5865
5720 5866 #: rhodecode/templates/admin/auth/auth_settings.mako:5
5721 5867 #: rhodecode/templates/admin/auth/plugin_settings.mako:5
5722 5868 msgid "Authentication Settings"
5723 5869 msgstr ""
5724 5870
5725 5871 #: rhodecode/templates/admin/auth/auth_settings.mako:42
5726 5872 msgid "Enabled and Available Plugins"
5727 5873 msgstr ""
5728 5874
5729 5875 #: rhodecode/templates/admin/auth/auth_settings.mako:48
5730 5876 msgid "Ordered Activated Plugins"
5731 5877 msgstr ""
5732 5878
5733 5879 #: rhodecode/templates/admin/auth/auth_settings.mako:53
5734 5880 msgid ""
5735 5881 "List of plugins, separated by commas.\n"
5736 5882 "The order of the plugins is also the order in which RhodeCode Enterprise will try to authenticate a user."
5737 5883 msgstr ""
5738 5884
5739 5885 #: rhodecode/templates/admin/auth/auth_settings.mako:60
5740 5886 msgid "Activate"
5741 5887 msgstr ""
5742 5888
5743 5889 #: rhodecode/templates/admin/auth/auth_settings.mako:61
5744 5890 msgid "Plugin Name"
5745 5891 msgstr ""
5746 5892
5747 5893 #: rhodecode/templates/admin/auth/auth_settings.mako:62
5894 #: rhodecode/templates/base/base.mako:62
5748 5895 msgid "Documentation"
5749 5896 msgstr ""
5750 5897
5751 5898 #: rhodecode/templates/admin/auth/auth_settings.mako:63
5752 5899 msgid "Plugin ID"
5753 5900 msgstr ""
5754 5901
5755 5902 #: rhodecode/templates/admin/auth/auth_settings.mako:85
5756 5903 #: rhodecode/templates/admin/auth/plugin_settings.mako:96
5757 5904 #: rhodecode/templates/admin/defaults/defaults_repositories.mako:63
5758 5905 #: rhodecode/templates/admin/my_account/my_account_bookmarks.mako:109
5759 5906 #: rhodecode/templates/admin/permissions/permissions_application.mako:59
5760 5907 #: rhodecode/templates/admin/permissions/permissions_objects.mako:59
5761 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:216
5908 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:226
5762 5909 #: rhodecode/templates/admin/repo_groups/repo_group_edit_settings.mako:77
5763 5910 #: rhodecode/templates/admin/repos/repo_edit_issuetracker.mako:66
5764 5911 #: rhodecode/templates/admin/repos/repo_edit_issuetracker.mako:84
5765 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:200
5912 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:206
5766 5913 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:250
5767 5914 #: rhodecode/templates/admin/settings/settings_hooks.mako:63
5768 5915 #: rhodecode/templates/admin/settings/settings_issuetracker.mako:15
5769 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:206
5916 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:216
5770 5917 #: rhodecode/templates/admin/user_groups/user_group_edit_settings.mako:106
5771 5918 #: rhodecode/templates/admin/users/user_edit_groups.mako:30
5772 5919 #: rhodecode/templates/admin/users/user_edit_profile.mako:154
5773 #: rhodecode/templates/base/default_perms_box.mako:88
5920 #: rhodecode/templates/base/default_perms_box.mako:101
5774 5921 msgid "Save"
5775 5922 msgstr ""
5776 5923
5777 5924 #: rhodecode/templates/admin/auth/plugin_settings.mako:46
5778 5925 msgid "Plugin"
5779 5926 msgstr ""
5780 5927
5781 5928 #: rhodecode/templates/admin/defaults/defaults.mako:5
5782 5929 #: rhodecode/templates/admin/defaults/defaults.mako:14
5783 5930 msgid "Repositories defaults"
5784 5931 msgstr ""
5785 5932
5786 5933 #: rhodecode/templates/admin/defaults/defaults_repositories.mako:3
5787 5934 msgid "Default Settings For New Repositories"
5788 5935 msgstr ""
5789 5936
5790 5937 #: rhodecode/templates/admin/defaults/defaults_repositories.mako:14
5791 5938 #: rhodecode/templates/admin/gists/gist_index.mako:105
5792 5939 #: rhodecode/templates/admin/integrations/list.mako:73
5793 5940 #: rhodecode/templates/admin/repos/repo_add_base.mako:58
5794 5941 #: rhodecode/templates/admin/repos/repo_edit_fields.mako:12
5795 5942 msgid "Type"
5796 5943 msgstr ""
5797 5944
5798 5945 #: rhodecode/templates/admin/defaults/defaults_repositories.mako:23
5799 5946 #: rhodecode/templates/admin/repos/repo_add_base.mako:113
5800 5947 msgid "Private Repository"
5801 5948 msgstr ""
5802 5949
5803 5950 #: rhodecode/templates/admin/defaults/defaults_repositories.mako:27
5804 5951 #: rhodecode/templates/admin/repos/repo_add_base.mako:117
5805 5952 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:199
5806 5953 #: rhodecode/templates/forks/fork.mako:92
5807 5954 msgid "Private repositories are only visible to people explicitly added as collaborators."
5808 5955 msgstr ""
5809 5956
5810 5957 #: rhodecode/templates/admin/defaults/defaults_repositories.mako:34
5811 5958 msgid "Enable Statistics"
5812 5959 msgstr ""
5813 5960
5814 5961 #: rhodecode/templates/admin/defaults/defaults_repositories.mako:38
5815 5962 msgid "Enable a statistics window on the repository summary page."
5816 5963 msgstr ""
5817 5964
5818 5965 #: rhodecode/templates/admin/defaults/defaults_repositories.mako:44
5819 5966 msgid "Enable Downloads"
5820 5967 msgstr ""
5821 5968
5822 5969 #: rhodecode/templates/admin/defaults/defaults_repositories.mako:48
5823 5970 msgid "Enable the download option on the repository summary page."
5824 5971 msgstr ""
5825 5972
5826 5973 #: rhodecode/templates/admin/defaults/defaults_repositories.mako:54
5827 5974 msgid "Enable Locking"
5828 5975 msgstr ""
5829 5976
5830 5977 #: rhodecode/templates/admin/defaults/defaults_repositories.mako:58
5831 5978 msgid "Enable automatic repository locking. Pulling from a repository will lock it, and it is unlocked by pushing back by the same user."
5832 5979 msgstr ""
5833 5980
5834 5981 #: rhodecode/templates/admin/gists/gist_edit.mako:5
5835 5982 msgid "Edit Gist"
5836 5983 msgstr ""
5837 5984
5838 5985 #: rhodecode/templates/admin/gists/gist_edit.mako:33
5839 5986 #: rhodecode/templates/admin/gists/gist_new.mako:34
5840 5987 msgid "Gist lifetime"
5841 5988 msgstr ""
5842 5989
5843 5990 #: rhodecode/templates/admin/gists/gist_edit.mako:36
5844 5991 msgid "Gist access level"
5845 5992 msgstr ""
5846 5993
5847 5994 #: rhodecode/templates/admin/gists/gist_edit.mako:40
5848 5995 #: rhodecode/templates/admin/gists/gist_new.mako:40
5849 5996 msgid "Gist description ..."
5850 5997 msgstr ""
5851 5998
5852 5999 #: rhodecode/templates/admin/gists/gist_edit.mako:54
5853 6000 #: rhodecode/templates/admin/gists/gist_new.mako:48
5854 #: rhodecode/templates/files/files_add.mako:67
5855 #: rhodecode/templates/files/files_edit.mako:69
6001 #: rhodecode/templates/files/files_add.mako:66
6002 #: rhodecode/templates/files/files_edit.mako:68
5856 6003 msgid "plain"
5857 6004 msgstr ""
5858 6005
5859 6006 #: rhodecode/templates/admin/gists/gist_edit.mako:99
5860 6007 msgid "Update Gist"
5861 6008 msgstr ""
5862 6009
5863 6010 #: rhodecode/templates/admin/gists/gist_edit.mako:100
5864 6011 #: rhodecode/templates/base/issue_tracker_settings.mako:150
5865 #: rhodecode/templates/changeset/changeset_file_comment.mako:395
6012 #: rhodecode/templates/changeset/changeset_file_comment.mako:460
5866 6013 #: rhodecode/templates/codeblocks/diffs.mako:88
5867 6014 #: rhodecode/templates/pullrequests/pullrequest_show.mako:75
5868 6015 msgid "Cancel"
5869 6016 msgstr ""
5870 6017
5871 6018 #: rhodecode/templates/admin/gists/gist_edit.mako:123
5872 6019 #, python-format
5873 6020 msgid "Gist was updated since you started editing. Copy your changes and click %(here)s to reload the new version."
5874 6021 msgstr ""
5875 6022
5876 6023 #: rhodecode/templates/admin/gists/gist_index.mako:6
5877 6024 msgid "Private Gists for user {}"
5878 6025 msgstr ""
5879 6026
5880 6027 #: rhodecode/templates/admin/gists/gist_index.mako:8
5881 6028 msgid "Public Gists for user {}"
5882 6029 msgstr ""
5883 6030
5884 6031 #: rhodecode/templates/admin/gists/gist_index.mako:10
5885 6032 msgid "Public Gists"
5886 6033 msgstr ""
5887 6034
5888 6035 #: rhodecode/templates/admin/gists/gist_index.mako:30
5889 6036 msgid "All gists"
5890 6037 msgstr ""
5891 6038
5892 6039 #: rhodecode/templates/admin/gists/gist_index.mako:32
5893 6040 msgid "All public"
5894 6041 msgstr ""
5895 6042
5896 6043 #: rhodecode/templates/admin/gists/gist_index.mako:34
5897 6044 msgid "My gists"
5898 6045 msgstr ""
5899 6046
5900 6047 #: rhodecode/templates/admin/gists/gist_index.mako:35
5901 6048 msgid "My private"
5902 6049 msgstr ""
5903 6050
5904 6051 #: rhodecode/templates/admin/gists/gist_index.mako:36
5905 6052 msgid "My public"
5906 6053 msgstr ""
5907 6054
5908 6055 #: rhodecode/templates/admin/gists/gist_index.mako:43
5909 6056 msgid "Create New Gist"
5910 6057 msgstr ""
5911 6058
5912 6059 #: rhodecode/templates/admin/gists/gist_index.mako:54
5913 6060 #: rhodecode/templates/admin/my_account/my_account_pullrequests.mako:23
5914 6061 #: rhodecode/templates/admin/my_account/my_account_repos.mako:7
5915 6062 #: rhodecode/templates/admin/my_account/my_account_watched.mako:7
5916 6063 #: rhodecode/templates/admin/permissions/permissions_ssh_keys.mako:11
5917 6064 #: rhodecode/templates/admin/repo_groups/repo_groups.mako:25
5918 6065 #: rhodecode/templates/admin/repos/repos.mako:25
5919 6066 #: rhodecode/templates/admin/user_groups/user_groups.mako:25
5920 6067 #: rhodecode/templates/admin/users/users.mako:26
5921 6068 #: rhodecode/templates/bookmarks/bookmarks.mako:33
5922 6069 #: rhodecode/templates/branches/branches.mako:33
5923 6070 #: rhodecode/templates/journal/journal.mako:12
5924 6071 #: rhodecode/templates/pullrequests/pullrequests.mako:53
5925 6072 #: rhodecode/templates/tags/tags.mako:33
5926 6073 msgid "quick filter..."
5927 6074 msgstr ""
5928 6075
5929 6076 #: rhodecode/templates/admin/gists/gist_index.mako:103
5930 6077 #: rhodecode/templates/admin/my_account/my_account_pullrequests.mako:91
5931 6078 #: rhodecode/templates/bookmarks/bookmarks.mako:61
5932 6079 #: rhodecode/templates/branches/branches.mako:60
5933 6080 #: rhodecode/templates/commits/changelog.mako:119
5934 6081 #: rhodecode/templates/compare/compare_commits.mako:16
5935 #: rhodecode/templates/files/files_browser_tree.mako:17
5936 #: rhodecode/templates/pullrequests/pullrequest_show.mako:559
6082 #: rhodecode/templates/files/files_browser_tree.mako:20
6083 #: rhodecode/templates/pullrequests/pullrequest_show.mako:557
5937 6084 #: rhodecode/templates/pullrequests/pullrequests.mako:98
5938 6085 #: rhodecode/templates/search/search_commit.mako:18
5939 6086 #: rhodecode/templates/summary/summary_commits.mako:11
5940 6087 #: rhodecode/templates/tags/tags.mako:61
5941 6088 msgid "Author"
5942 6089 msgstr ""
5943 6090
5944 6091 #: rhodecode/templates/admin/gists/gist_index.mako:111
5945 6092 #: rhodecode/templates/admin/my_account/my_account_ssh_keys.mako:11
5946 6093 #: rhodecode/templates/admin/permissions/permissions_ssh_keys.mako:51
5947 6094 #: rhodecode/templates/admin/repo_groups/repo_group_edit_advanced.mako:9
5948 6095 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:7
5949 6096 #: rhodecode/templates/admin/user_groups/user_group_edit_advanced.mako:7
5950 6097 #: rhodecode/templates/admin/users/user_edit_advanced.mako:6
5951 6098 #: rhodecode/templates/admin/users/user_edit_ssh_keys.mako:16
5952 6099 #: rhodecode/templates/pullrequests/pullrequest_show.mako:51
5953 6100 msgid "Created on"
5954 6101 msgstr ""
5955 6102
5956 6103 #: rhodecode/templates/admin/gists/gist_index.mako:113
5957 6104 msgid "Expires"
5958 6105 msgstr ""
5959 6106
5960 6107 #: rhodecode/templates/admin/gists/gist_new.mako:5
5961 #: rhodecode/templates/base/base.mako:568
6108 #: rhodecode/templates/base/base.mako:575
5962 6109 msgid "New Gist"
5963 6110 msgstr ""
5964 6111
5965 6112 #: rhodecode/templates/admin/gists/gist_new.mako:31
5966 6113 msgid "Gist id"
5967 6114 msgstr ""
5968 6115
5969 6116 #: rhodecode/templates/admin/gists/gist_new.mako:32
5970 6117 msgid "Auto generated"
5971 6118 msgstr ""
5972 6119
5973 6120 #: rhodecode/templates/admin/gists/gist_new.mako:37
5974 6121 msgid "Private Gist access level"
5975 6122 msgstr ""
5976 6123
5977 6124 #: rhodecode/templates/admin/gists/gist_new.mako:47
5978 6125 msgid "name gist file..."
5979 6126 msgstr ""
5980 6127
5981 6128 #: rhodecode/templates/admin/gists/gist_new.mako:61
5982 6129 msgid "Create Gist"
5983 6130 msgstr ""
5984 6131
5985 6132 #: rhodecode/templates/admin/gists/gist_new.mako:69
5986 6133 #: rhodecode/templates/admin/gists/gist_new.mako:70
5987 6134 #: rhodecode/templates/data_table/_dt_elements.mako:352
5988 6135 msgid "Private Gist"
5989 6136 msgstr ""
5990 6137
5991 6138 #: rhodecode/templates/admin/gists/gist_new.mako:70
5992 6139 msgid "Private Gists are not listed and only accessible through their secret url."
5993 6140 msgstr ""
5994 6141
5995 6142 #: rhodecode/templates/admin/gists/gist_new.mako:73
5996 6143 #: rhodecode/templates/admin/gists/gist_new.mako:74
5997 6144 #: rhodecode/templates/data_table/_dt_elements.mako:350
5998 6145 msgid "Public Gist"
5999 6146 msgstr ""
6000 6147
6001 6148 #: rhodecode/templates/admin/gists/gist_new.mako:74
6002 6149 msgid "Public Gists are accessible to anyone and listed in Gists page."
6003 6150 msgstr ""
6004 6151
6005 6152 #: rhodecode/templates/admin/gists/gist_show.mako:14
6006 6153 #: rhodecode/templates/admin/gists/gist_show.mako:21
6007 6154 msgid "Gist"
6008 6155 msgstr ""
6009 6156
6010 6157 #: rhodecode/templates/admin/gists/gist_show.mako:41
6011 6158 msgid "Copy the url"
6012 6159 msgstr ""
6013 6160
6014 6161 #: rhodecode/templates/admin/gists/gist_show.mako:47
6015 #: rhodecode/templates/files/files_source.mako:106
6162 #: rhodecode/templates/files/files_source.mako:116
6016 6163 msgid "Copy content"
6017 6164 msgstr ""
6018 6165
6019 6166 #: rhodecode/templates/admin/gists/gist_show.mako:52
6020 6167 msgid "Show as Raw"
6021 6168 msgstr ""
6022 6169
6023 6170 #: rhodecode/templates/admin/gists/gist_show.mako:73
6024 6171 msgid "created"
6025 6172 msgstr ""
6026 6173
6027 6174 #: rhodecode/templates/admin/gists/gist_show.mako:74
6028 6175 msgid "expires"
6029 6176 msgstr ""
6030 6177
6031 6178 #: rhodecode/templates/admin/gists/gist_show.mako:95
6032 #: rhodecode/templates/files/files_delete.mako:58
6033 #: rhodecode/templates/files/files_source.mako:128
6179 #: rhodecode/templates/files/files_delete.mako:57
6180 #: rhodecode/templates/files/files_source.mako:138
6034 6181 msgid "Show as raw"
6035 6182 msgstr ""
6036 6183
6037 6184 #: rhodecode/templates/admin/integrations/base.mako:14
6038 6185 msgid "Integrations Settings"
6039 6186 msgstr ""
6040 6187
6041 6188 #: rhodecode/templates/admin/integrations/base.mako:23
6042 6189 #: rhodecode/templates/admin/integrations/form.mako:8
6043 6190 #: rhodecode/templates/admin/integrations/form.mako:21
6044 6191 #: rhodecode/templates/admin/integrations/form.mako:32
6045 6192 #: rhodecode/templates/admin/integrations/global.mako:14
6046 6193 #: rhodecode/templates/admin/integrations/list.mako:21
6047 6194 #: rhodecode/templates/admin/integrations/list.mako:25
6048 6195 #: rhodecode/templates/admin/integrations/list.mako:29
6049 6196 #: rhodecode/templates/admin/integrations/list.mako:36
6050 6197 #: rhodecode/templates/admin/integrations/new.mako:15
6051 6198 #: rhodecode/templates/admin/repo_groups/repo_group_edit.mako:33
6052 6199 #: rhodecode/templates/admin/repos/repo_edit.mako:74
6053 #: rhodecode/templates/base/base.mako:113
6200 #: rhodecode/templates/base/base.mako:118
6054 6201 msgid "Integrations"
6055 6202 msgstr ""
6056 6203
6057 6204 #: rhodecode/templates/admin/integrations/form.mako:30
6058 6205 #: rhodecode/templates/admin/integrations/list.mako:16
6059 6206 #: rhodecode/templates/admin/integrations/new.mako:7
6060 6207 #: rhodecode/templates/admin/integrations/new.mako:9
6061 6208 #: rhodecode/templates/admin/integrations/new.mako:13
6062 6209 #: rhodecode/templates/admin/repo_groups/repo_group_edit.mako:30
6063 6210 #: rhodecode/templates/admin/repos/repo_edit.mako:15
6064 6211 #: rhodecode/templates/admin/repos/repo_edit.mako:42
6065 6212 #: rhodecode/templates/admin/settings/settings.mako:14
6066 6213 #: rhodecode/templates/admin/user_groups/user_group_edit.mako:34
6067 6214 #: rhodecode/templates/admin/user_groups/user_group_edit_settings.mako:9
6068 #: rhodecode/templates/base/base.mako:115
6215 #: rhodecode/templates/base/base.mako:120
6069 6216 msgid "Settings"
6070 6217 msgstr ""
6071 6218
6072 6219 #: rhodecode/templates/admin/integrations/form.mako:60
6073 6220 #, python-format
6074 6221 msgid "Create New %(integration_type)s Integration"
6075 6222 msgstr ""
6076 6223
6077 6224 #: rhodecode/templates/admin/integrations/global.mako:5
6078 6225 msgid "Integrations administration"
6079 6226 msgstr ""
6080 6227
6081 6228 #: rhodecode/templates/admin/integrations/list.mako:44
6082 6229 msgid "Current Integrations for Repository: {repo_name}"
6083 6230 msgstr ""
6084 6231
6085 6232 #: rhodecode/templates/admin/integrations/list.mako:46
6086 6233 msgid "Repository Group Integrations: {}"
6087 6234 msgstr ""
6088 6235
6089 6236 #: rhodecode/templates/admin/integrations/list.mako:48
6090 6237 msgid "Current Integrations"
6091 6238 msgstr ""
6092 6239
6093 6240 #: rhodecode/templates/admin/integrations/list.mako:65
6094 6241 #: rhodecode/templates/admin/integrations/new.mako:18
6095 6242 msgid "Create new integration"
6096 6243 msgstr ""
6097 6244
6098 6245 #: rhodecode/templates/admin/integrations/list.mako:74
6099 6246 msgid "Scope"
6100 6247 msgstr ""
6101 6248
6102 6249 #: rhodecode/templates/admin/integrations/list.mako:75
6103 6250 #: rhodecode/templates/compare/compare_diff.mako:84
6104 6251 msgid "Actions"
6105 6252 msgstr ""
6106 6253
6107 6254 #: rhodecode/templates/admin/integrations/list.mako:85
6108 6255 msgid "No {type} integrations for repo {repo} exist yet."
6109 6256 msgstr ""
6110 6257
6111 6258 #: rhodecode/templates/admin/integrations/list.mako:87
6112 6259 msgid "No {type} integrations for repogroup {repogroup} exist yet."
6113 6260 msgstr ""
6114 6261
6115 6262 #: rhodecode/templates/admin/integrations/list.mako:89
6116 6263 msgid "No {type} integrations exist yet."
6117 6264 msgstr ""
6118 6265
6119 6266 #: rhodecode/templates/admin/integrations/list.mako:103
6120 6267 msgid "Create one"
6121 6268 msgstr ""
6122 6269
6123 6270 #: rhodecode/templates/admin/integrations/list.mako:132
6124 6271 #: rhodecode/templates/hovercards/hovercard_pull_request.mako:19
6125 6272 msgid "repo"
6126 6273 msgstr ""
6127 6274
6128 6275 #: rhodecode/templates/admin/integrations/list.mako:136
6129 6276 msgid "repogroup"
6130 6277 msgstr ""
6131 6278
6132 6279 #: rhodecode/templates/admin/integrations/list.mako:138
6133 6280 msgid "child repos only"
6134 6281 msgstr ""
6135 6282
6136 6283 #: rhodecode/templates/admin/integrations/list.mako:140
6137 6284 msgid "cascade to all"
6138 6285 msgstr ""
6139 6286
6140 6287 #: rhodecode/templates/admin/integrations/list.mako:145
6141 6288 msgid "top level repos only"
6142 6289 msgstr ""
6143 6290
6144 6291 #: rhodecode/templates/admin/integrations/list.mako:147
6145 6292 msgid "global"
6146 6293 msgstr ""
6147 6294
6148 6295 #: rhodecode/templates/admin/integrations/list.mako:153
6149 6296 msgid "unknown integration"
6150 6297 msgstr ""
6151 6298
6152 6299 #: rhodecode/templates/admin/integrations/new.mako:23
6153 6300 msgid "Create New Integration for repository: {repo_name}"
6154 6301 msgstr ""
6155 6302
6156 6303 #: rhodecode/templates/admin/integrations/new.mako:25
6157 6304 msgid "Create New Integration for repository group: {repo_group_name}"
6158 6305 msgstr ""
6159 6306
6160 6307 #: rhodecode/templates/admin/integrations/new.mako:27
6161 6308 msgid "Create New Global Integration"
6162 6309 msgstr ""
6163 6310
6164 6311 #: rhodecode/templates/admin/integrations/new.mako:55
6165 6312 msgid "No description available"
6166 6313 msgstr ""
6167 6314
6168 6315 #: rhodecode/templates/admin/my_account/my_account.mako:5
6169 #: rhodecode/templates/base/base.mako:613
6316 #: rhodecode/templates/base/base.mako:620
6170 6317 msgid "My account"
6171 6318 msgstr ""
6172 6319
6173 6320 #: rhodecode/templates/admin/my_account/my_account.mako:12
6174 6321 msgid "My Account"
6175 6322 msgstr ""
6176 6323
6177 6324 #: rhodecode/templates/admin/my_account/my_account.mako:29
6178 #: rhodecode/templates/email_templates/user_registration.mako:54
6325 #: rhodecode/templates/email_templates/user_registration.mako:55
6179 6326 msgid "Profile"
6180 6327 msgstr ""
6181 6328
6182 6329 #: rhodecode/templates/admin/my_account/my_account.mako:30
6183 6330 #: rhodecode/templates/admin/users/user_edit.mako:45
6184 6331 #: rhodecode/templates/debug_style/index.html:55
6185 6332 msgid "Emails"
6186 6333 msgstr ""
6187 6334
6188 6335 #: rhodecode/templates/admin/my_account/my_account.mako:33
6189 6336 msgid "Auth Tokens"
6190 6337 msgstr ""
6191 6338
6192 6339 #: rhodecode/templates/admin/my_account/my_account.mako:34
6193 6340 #: rhodecode/templates/admin/my_account/my_account_ssh_keys.mako:3
6194 6341 #: rhodecode/templates/admin/permissions/permissions.mako:51
6195 6342 #: rhodecode/templates/admin/permissions/permissions_ssh_keys.mako:4
6196 6343 #: rhodecode/templates/admin/users/user_edit.mako:41
6197 6344 #: rhodecode/templates/admin/users/user_edit_ssh_keys.mako:7
6198 6345 msgid "SSH Keys"
6199 6346 msgstr ""
6200 6347
6201 6348 #: rhodecode/templates/admin/my_account/my_account.mako:35
6202 6349 #: rhodecode/templates/admin/my_account/my_account_user_group_membership.mako:5
6203 6350 msgid "User Group Membership"
6204 6351 msgstr ""
6205 6352
6206 6353 #: rhodecode/templates/admin/my_account/my_account.mako:40
6207 6354 msgid "External Identities"
6208 6355 msgstr ""
6209 6356
6210 6357 #: rhodecode/templates/admin/my_account/my_account.mako:43
6211 6358 msgid "Owned Repositories"
6212 6359 msgstr ""
6213 6360
6214 6361 #: rhodecode/templates/admin/my_account/my_account.mako:44
6215 6362 msgid "Watched Repositories"
6216 6363 msgstr ""
6217 6364
6218 6365 #: rhodecode/templates/admin/my_account/my_account.mako:45
6219 6366 #: rhodecode/templates/admin/notifications/notifications_show_all.mako:42
6220 #: rhodecode/templates/base/base.mako:376
6221 #: rhodecode/templates/base/base.mako:617
6367 #: rhodecode/templates/base/base.mako:383
6368 #: rhodecode/templates/base/base.mako:624
6222 6369 msgid "Pull Requests"
6223 6370 msgstr ""
6224 6371
6225 6372 #: rhodecode/templates/admin/my_account/my_account.mako:46
6226 6373 #: rhodecode/templates/admin/permissions/permissions.mako:14
6227 6374 #: rhodecode/templates/admin/user_groups/user_group_edit.mako:35
6228 #: rhodecode/templates/base/base.mako:111
6375 #: rhodecode/templates/base/base.mako:116
6229 6376 msgid "Permissions"
6230 6377 msgstr ""
6231 6378
6232 6379 #: rhodecode/templates/admin/my_account/my_account.mako:47
6233 6380 msgid "Live Notifications"
6234 6381 msgstr ""
6235 6382
6236 6383 #: rhodecode/templates/admin/my_account/my_account_auth_tokens.mako:9
6237 6384 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:13
6238 6385 msgid "Authentication Tokens"
6239 6386 msgstr ""
6240 6387
6241 6388 #: rhodecode/templates/admin/my_account/my_account_auth_tokens.mako:14
6242 6389 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:19
6243 msgid "Authentication tokens can be used to interact with the API, or VCS-over-http. Each token can have a role. Token with a role can be used only in given context, e.g. VCS tokens can be used together with the authtoken auth plugin for git/hg/svn operations only."
6244 msgstr ""
6245
6246 #: rhodecode/templates/admin/my_account/my_account_auth_tokens.mako:20
6247 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:25
6390 msgid "Available roles"
6391 msgstr ""
6392
6393 #: rhodecode/templates/admin/my_account/my_account_auth_tokens.mako:26
6394 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:31
6248 6395 msgid "Token"
6249 6396 msgstr ""
6250 6397
6251 #: rhodecode/templates/admin/my_account/my_account_auth_tokens.mako:23
6252 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:28
6398 #: rhodecode/templates/admin/my_account/my_account_auth_tokens.mako:29
6399 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:34
6253 6400 msgid "Repository Scope"
6254 6401 msgstr ""
6255 6402
6256 #: rhodecode/templates/admin/my_account/my_account_auth_tokens.mako:24
6257 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:29
6403 #: rhodecode/templates/admin/my_account/my_account_auth_tokens.mako:30
6404 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:35
6258 6405 msgid "Expiration"
6259 6406 msgstr ""
6260 6407
6261 #: rhodecode/templates/admin/my_account/my_account_auth_tokens.mako:66
6262 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:70
6408 #: rhodecode/templates/admin/my_account/my_account_auth_tokens.mako:72
6409 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:76
6263 6410 msgid "No additional auth tokens specified"
6264 6411 msgstr ""
6265 6412
6266 #: rhodecode/templates/admin/my_account/my_account_auth_tokens.mako:78
6267 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:82
6413 #: rhodecode/templates/admin/my_account/my_account_auth_tokens.mako:84
6414 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:88
6268 6415 msgid "New authentication token"
6269 6416 msgstr ""
6270 6417
6271 #: rhodecode/templates/admin/my_account/my_account_auth_tokens.mako:92
6272 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:96
6418 #: rhodecode/templates/admin/my_account/my_account_auth_tokens.mako:98
6419 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:102
6273 6420 msgid "Repository scope works only with tokens with VCS type."
6274 6421 msgstr ""
6275 6422
6276 #: rhodecode/templates/admin/my_account/my_account_auth_tokens.mako:96
6423 #: rhodecode/templates/admin/my_account/my_account_auth_tokens.mako:102
6277 6424 #: rhodecode/templates/admin/my_account/my_account_ssh_keys.mako:72
6278 6425 #: rhodecode/templates/admin/permissions/permissions_ips.mako:63
6279 6426 #: rhodecode/templates/admin/repos/repo_edit_fields.mako:65
6280 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:100
6427 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:106
6281 6428 #: rhodecode/templates/admin/users/user_edit_emails.mako:65
6282 6429 #: rhodecode/templates/admin/users/user_edit_ips.mako:75
6283 6430 #: rhodecode/templates/admin/users/user_edit_ssh_keys.mako:71
6284 6431 msgid "Add"
6285 6432 msgstr ""
6286 6433
6287 #: rhodecode/templates/admin/my_account/my_account_auth_tokens.mako:129
6288 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:134
6434 #: rhodecode/templates/admin/my_account/my_account_auth_tokens.mako:135
6435 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:140
6289 6436 msgid "Select or enter expiration date"
6290 6437 msgstr ""
6291 6438
6292 #: rhodecode/templates/admin/my_account/my_account_auth_tokens.mako:164
6293 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:169
6439 #: rhodecode/templates/admin/my_account/my_account_auth_tokens.mako:170
6440 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:175
6294 6441 msgid "repository scope"
6295 6442 msgstr ""
6296 6443
6297 6444 #: rhodecode/templates/admin/my_account/my_account_bookmarks.mako:7
6298 6445 msgid "Position"
6299 6446 msgstr ""
6300 6447
6301 6448 #: rhodecode/templates/admin/my_account/my_account_bookmarks.mako:17
6302 6449 msgid "Bookmark title (max 30 characters, optional)"
6303 6450 msgstr ""
6304 6451
6305 6452 #: rhodecode/templates/admin/my_account/my_account_bookmarks.mako:24
6306 6453 msgid "Clear"
6307 6454 msgstr ""
6308 6455
6309 6456 #: rhodecode/templates/admin/my_account/my_account_bookmarks.mako:30
6310 6457 msgid "Server URL is available as ${server_url} variable. E.g. Redirect url: ${server_url}/_admin/exception_tracker"
6311 6458 msgstr ""
6312 6459
6313 6460 #: rhodecode/templates/admin/my_account/my_account_bookmarks.mako:34
6314 6461 msgid "Redirect URL"
6315 6462 msgstr ""
6316 6463
6317 6464 #: rhodecode/templates/admin/my_account/my_account_bookmarks.mako:44
6318 6465 msgid "Repository template"
6319 6466 msgstr ""
6320 6467
6321 6468 #: rhodecode/templates/admin/my_account/my_account_bookmarks.mako:50
6322 6469 msgid "Repository group template"
6323 6470 msgstr ""
6324 6471
6325 6472 #: rhodecode/templates/admin/my_account/my_account_bookmarks.mako:56
6326 6473 msgid "Template Repository or Repository group"
6327 6474 msgstr ""
6328 6475
6329 6476 #: rhodecode/templates/admin/my_account/my_account_bookmarks.mako:66
6330 6477 msgid "Available as ${repo_url} e.g. Redirect url: ${repo_url}/changelog"
6331 6478 msgstr ""
6332 6479
6333 6480 #: rhodecode/templates/admin/my_account/my_account_bookmarks.mako:68
6334 6481 msgid "Available as ${repo_group_url} e.g. Redirect url: ${repo_group_url}"
6335 6482 msgstr ""
6336 6483
6337 6484 #: rhodecode/templates/admin/my_account/my_account_bookmarks.mako:70
6338 6485 msgid "Available as full url variables in redirect url. i.e: ${repo_url}, ${repo_group_url}."
6339 6486 msgstr ""
6340 6487
6341 6488 #: rhodecode/templates/admin/my_account/my_account_bookmarks.mako:80
6342 6489 msgid "Your Bookmarks"
6343 6490 msgstr ""
6344 6491
6345 6492 #: rhodecode/templates/admin/my_account/my_account_bookmarks.mako:85
6346 6493 msgid "Store upto 10 bookmark links to favorite repositories, external issue tracker or CI server. "
6347 6494 msgstr ""
6348 6495
6349 6496 #: rhodecode/templates/admin/my_account/my_account_bookmarks.mako:87
6350 6497 msgid "Bookmarks are accessible from your username dropdown or by keyboard shortcut `g 0-9`"
6351 6498 msgstr ""
6352 6499
6353 6500 #: rhodecode/templates/admin/my_account/my_account_bookmarks.mako:141
6354 6501 msgid "repository"
6355 6502 msgstr ""
6356 6503
6357 6504 #: rhodecode/templates/admin/my_account/my_account_bookmarks.mako:192
6358 6505 msgid "repository group"
6359 6506 msgstr ""
6360 6507
6361 6508 #: rhodecode/templates/admin/my_account/my_account_emails.mako:5
6362 6509 msgid "Account Emails"
6363 6510 msgstr ""
6364 6511
6365 6512 #: rhodecode/templates/admin/my_account/my_account_emails.mako:17
6366 6513 #: rhodecode/templates/admin/users/user_edit_emails.mako:19
6367 6514 msgid "Primary"
6368 6515 msgstr ""
6369 6516
6370 6517 #: rhodecode/templates/admin/my_account/my_account_emails.mako:43
6371 6518 #: rhodecode/templates/admin/users/user_edit_emails.mako:44
6372 6519 msgid "No additional emails specified"
6373 6520 msgstr ""
6374 6521
6375 6522 #: rhodecode/templates/admin/my_account/my_account_emails.mako:52
6376 6523 #: rhodecode/templates/admin/my_account/my_account_password.mako:6
6377 6524 msgid "Your user account details are managed by an external source. Details cannot be managed here."
6378 6525 msgstr ""
6379 6526
6380 6527 #: rhodecode/templates/admin/my_account/my_account_emails.mako:53
6381 6528 #: rhodecode/templates/admin/my_account/my_account_password.mako:9
6382 6529 msgid "Source type"
6383 6530 msgstr ""
6384 6531
6385 6532 #: rhodecode/templates/admin/my_account/my_account_notifications.mako:4
6386 6533 msgid "Your Live Notification Settings"
6387 6534 msgstr ""
6388 6535
6389 6536 #: rhodecode/templates/admin/my_account/my_account_notifications.mako:16
6390 6537 msgid "Notifications Status"
6391 6538 msgstr ""
6392 6539
6393 6540 #: rhodecode/templates/admin/my_account/my_account_notifications.mako:40
6394 6541 msgid "Test Notifications"
6395 6542 msgstr ""
6396 6543
6397 6544 #: rhodecode/templates/admin/my_account/my_account_password.mako:3
6398 6545 msgid "Change Your Account Password"
6399 6546 msgstr ""
6400 6547
6401 6548 #: rhodecode/templates/admin/my_account/my_account_password.mako:7
6402 6549 #: rhodecode/templates/admin/my_account/my_account_profile.mako:18
6403 6550 #: rhodecode/templates/admin/my_account/my_account_profile_edit.mako:19
6404 6551 msgid "For VCS access please generate"
6405 6552 msgstr ""
6406 6553
6407 6554 #: rhodecode/templates/admin/my_account/my_account_profile.mako:6
6408 6555 #: rhodecode/templates/admin/my_account/my_account_profile_edit.mako:4
6409 6556 msgid "My Profile"
6410 6557 msgstr ""
6411 6558
6412 6559 #: rhodecode/templates/admin/my_account/my_account_profile.mako:15
6413 6560 #: rhodecode/templates/admin/my_account/my_account_profile_edit.mako:16
6414 6561 #: rhodecode/templates/admin/users/user_edit_profile.mako:19
6415 6562 #, python-format
6416 6563 msgid "This user was created from external source (%s). Editing some of the settings is limited."
6417 6564 msgstr ""
6418 6565
6419 6566 #: rhodecode/templates/admin/my_account/my_account_profile.mako:24
6420 6567 #: rhodecode/templates/admin/my_account/my_account_profile_edit.mako:60
6421 6568 #: rhodecode/templates/admin/users/user_edit_profile.mako:26
6422 6569 #: rhodecode/templates/users/user_profile.mako:15
6423 6570 msgid "Photo"
6424 6571 msgstr ""
6425 6572
6426 6573 #: rhodecode/templates/admin/my_account/my_account_profile.mako:82
6427 6574 #: rhodecode/templates/users/user_profile.mako:73
6428 6575 msgid "Missing email, please update your user email address."
6429 6576 msgstr ""
6430 6577
6431 6578 #: rhodecode/templates/admin/my_account/my_account_profile_edit.mako:65
6432 6579 msgid "Change your avatar at"
6433 6580 msgstr ""
6434 6581
6435 6582 #: rhodecode/templates/admin/my_account/my_account_pullrequests.mako:13
6436 6583 #: rhodecode/templates/admin/notifications/notifications_show_all.mako:40
6437 6584 msgid "All"
6438 6585 msgstr ""
6439 6586
6440 6587 #: rhodecode/templates/admin/my_account/my_account_pullrequests.mako:14
6441 6588 msgid "All + Closed"
6442 6589 msgstr ""
6443 6590
6444 6591 #: rhodecode/templates/admin/my_account/my_account_pullrequests.mako:33
6445 6592 msgid "Pull Requests You Participate In"
6446 6593 msgstr ""
6447 6594
6448 6595 #: rhodecode/templates/admin/my_account/my_account_pullrequests.mako:67
6449 6596 msgid "Target Repo"
6450 6597 msgstr ""
6451 6598
6452 6599 #: rhodecode/templates/admin/my_account/my_account_pullrequests.mako:79
6453 6600 #: rhodecode/templates/pullrequests/pullrequests.mako:94
6454 6601 msgid "Id"
6455 6602 msgstr ""
6456 6603
6457 6604 #: rhodecode/templates/admin/my_account/my_account_pullrequests.mako:85
6458 6605 #: rhodecode/templates/admin/settings/settings_global.mako:9
6459 #: rhodecode/templates/email_templates/pull_request_review.mako:41
6460 #: rhodecode/templates/email_templates/pull_request_update.mako:41
6606 #: rhodecode/templates/email_templates/pull_request_review.mako:43
6607 #: rhodecode/templates/email_templates/pull_request_update.mako:43
6461 6608 #: rhodecode/templates/pullrequests/pullrequest.mako:38
6462 6609 #: rhodecode/templates/pullrequests/pullrequests.mako:96
6463 6610 msgid "Title"
6464 6611 msgstr ""
6465 6612
6466 6613 #: rhodecode/templates/admin/my_account/my_account_pullrequests.mako:103
6467 6614 #: rhodecode/templates/pullrequests/pullrequests.mako:102
6468 6615 msgid "Last Update"
6469 6616 msgstr ""
6470 6617
6471 6618 #: rhodecode/templates/admin/my_account/my_account_repos.mako:3
6472 6619 msgid "Repositories You Own"
6473 6620 msgstr ""
6474 6621
6475 6622 #: rhodecode/templates/admin/my_account/my_account_ssh_keys.mako:9
6476 6623 #: rhodecode/templates/admin/permissions/permissions_ssh_keys.mako:47
6477 6624 #: rhodecode/templates/admin/users/user_edit_ssh_keys.mako:14
6478 6625 msgid "Fingerprint"
6479 6626 msgstr ""
6480 6627
6481 6628 #: rhodecode/templates/admin/my_account/my_account_ssh_keys.mako:12
6482 6629 #: rhodecode/templates/admin/permissions/permissions_ssh_keys.mako:53
6483 6630 #: rhodecode/templates/admin/users/user_edit_ssh_keys.mako:17
6484 6631 msgid "Accessed on"
6485 6632 msgstr ""
6486 6633
6487 6634 #: rhodecode/templates/admin/my_account/my_account_ssh_keys.mako:16
6488 6635 msgid "SSH Keys usage is currently disabled, please ask your administrator to enable them."
6489 6636 msgstr ""
6490 6637
6491 6638 #: rhodecode/templates/admin/my_account/my_account_ssh_keys.mako:41
6492 6639 #: rhodecode/templates/admin/users/user_edit_ssh_keys.mako:42
6493 6640 msgid "No additional ssh keys specified"
6494 6641 msgstr ""
6495 6642
6496 6643 #: rhodecode/templates/admin/my_account/my_account_ssh_keys.mako:55
6497 6644 #: rhodecode/templates/admin/users/user_edit_ssh_keys.mako:54
6498 6645 msgid "New ssh key"
6499 6646 msgstr ""
6500 6647
6501 6648 #: rhodecode/templates/admin/my_account/my_account_ssh_keys.mako:60
6502 6649 #: rhodecode/templates/admin/users/user_edit_ssh_keys.mako:59
6503 6650 msgid "Generate random RSA key"
6504 6651 msgstr ""
6505 6652
6506 6653 #: rhodecode/templates/admin/my_account/my_account_ssh_keys.mako:67
6507 6654 #: rhodecode/templates/admin/users/user_edit_ssh_keys.mako:66
6508 6655 msgid "Public key, begins with 'ssh-rsa', 'ssh-dss', 'ssh-ed25519', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', or 'ecdsa-sha2-nistp521'"
6509 6656 msgstr ""
6510 6657
6511 6658 #: rhodecode/templates/admin/my_account/my_account_ssh_keys.mako:76
6512 6659 msgid "Click add to use this generated SSH key"
6513 6660 msgstr ""
6514 6661
6515 6662 #: rhodecode/templates/admin/my_account/my_account_user_group_membership.mako:49
6516 6663 #: rhodecode/templates/admin/repos/repo_edit_caches.mako:51
6517 6664 #: rhodecode/templates/admin/user_groups/user_group_add.mako:51
6518 6665 #: rhodecode/templates/admin/user_groups/user_group_edit_settings.mako:55
6519 6666 #: rhodecode/templates/admin/user_groups/user_groups.mako:84
6520 6667 #: rhodecode/templates/admin/users/user_add.mako:97
6521 6668 #: rhodecode/templates/admin/users/user_edit_groups.mako:67
6522 6669 #: rhodecode/templates/admin/users/user_edit_profile.mako:110
6523 6670 #: rhodecode/templates/admin/users/users.mako:85
6524 6671 #: rhodecode/templates/user_group/profile.mako:44
6525 6672 msgid "Active"
6526 6673 msgstr ""
6527 6674
6528 6675 #: rhodecode/templates/admin/my_account/my_account_watched.mako:3
6529 6676 msgid "Your Watched Repositories"
6530 6677 msgstr ""
6531 6678
6532 6679 #: rhodecode/templates/admin/notifications/notifications_data.mako:5
6533 6680 msgid "My notifications"
6534 6681 msgstr ""
6535 6682
6536 6683 #: rhodecode/templates/admin/notifications/notifications_data.mako:26
6537 6684 msgid "Mark as read"
6538 6685 msgstr ""
6539 6686
6540 6687 #: rhodecode/templates/admin/notifications/notifications_data.mako:42
6541 6688 msgid "No notifications here yet"
6542 6689 msgstr ""
6543 6690
6544 6691 #: rhodecode/templates/admin/notifications/notifications_show.mako:5
6545 6692 #: rhodecode/templates/admin/notifications/notifications_show.mako:14
6546 6693 #: rhodecode/templates/debug_style/email_plain_rendered.mako:5
6547 6694 #: rhodecode/templates/debug_style/email_plain_rendered.mako:14
6548 6695 msgid "Show notification"
6549 6696 msgstr ""
6550 6697
6551 6698 #: rhodecode/templates/admin/notifications/notifications_show.mako:12
6552 6699 #: rhodecode/templates/admin/notifications/notifications_show_all.mako:5
6553 6700 #: rhodecode/templates/admin/notifications/notifications_show_all.mako:20
6554 6701 #: rhodecode/templates/debug_style/email_plain_rendered.mako:12
6555 6702 msgid "My Notifications"
6556 6703 msgstr ""
6557 6704
6558 6705 #: rhodecode/templates/admin/notifications/notifications_show.mako:42
6559 6706 #: rhodecode/templates/debug_style/email_plain_rendered.mako:38
6560 6707 msgid "Subject"
6561 6708 msgstr ""
6562 6709
6563 6710 #: rhodecode/templates/admin/notifications/notifications_show_all.mako:25
6564 6711 #: rhodecode/templates/admin/notifications/notifications_show_all.mako:29
6565 6712 msgid "Mark all as read"
6566 6713 msgstr ""
6567 6714
6568 6715 #: rhodecode/templates/admin/notifications/notifications_show_all.mako:39
6569 6716 msgid "Unread"
6570 6717 msgstr ""
6571 6718
6572 6719 #: rhodecode/templates/admin/notifications/notifications_show_all.mako:41
6573 6720 #: rhodecode/templates/changeset/changeset.mako:172
6574 #: rhodecode/templates/pullrequests/pullrequest_show.mako:671
6721 #: rhodecode/templates/pullrequests/pullrequest_show.mako:670
6575 6722 msgid "Comments"
6576 6723 msgstr ""
6577 6724
6578 6725 #: rhodecode/templates/admin/permissions/permissions.mako:5
6579 6726 msgid "Permissions Administration"
6580 6727 msgstr ""
6581 6728
6582 6729 #: rhodecode/templates/admin/permissions/permissions.mako:33
6583 6730 msgid "Application"
6584 6731 msgstr ""
6585 6732
6586 6733 #: rhodecode/templates/admin/permissions/permissions.mako:39
6587 6734 msgid "Object"
6588 6735 msgstr ""
6589 6736
6590 6737 #: rhodecode/templates/admin/permissions/permissions.mako:45
6591 6738 msgid "IP Whitelist"
6592 6739 msgstr ""
6593 6740
6594 6741 #: rhodecode/templates/admin/permissions/permissions.mako:48
6595 6742 msgid "AuthToken Access"
6596 6743 msgstr ""
6597 6744
6598 6745 #: rhodecode/templates/admin/permissions/permissions.mako:54
6599 6746 msgid "Overview"
6600 6747 msgstr ""
6601 6748
6602 6749 #: rhodecode/templates/admin/permissions/permissions_application.mako:3
6603 6750 msgid "System Wide Application Permissions"
6604 6751 msgstr ""
6605 6752
6606 6753 #: rhodecode/templates/admin/permissions/permissions_application.mako:12
6607 6754 msgid "Anonymous Access"
6608 6755 msgstr ""
6609 6756
6610 6757 #: rhodecode/templates/admin/permissions/permissions_application.mako:18
6611 6758 #, python-format
6612 6759 msgid "Allow access to RhodeCode Enterprise without requiring users to login. Anonymous users get the %s permission settings."
6613 6760 msgstr ""
6614 6761
6615 6762 #: rhodecode/templates/admin/permissions/permissions_application.mako:24
6616 6763 msgid "Registration"
6617 6764 msgstr ""
6618 6765
6619 6766 #: rhodecode/templates/admin/permissions/permissions_application.mako:33
6620 6767 msgid "Password Reset"
6621 6768 msgstr ""
6622 6769
6623 6770 #: rhodecode/templates/admin/permissions/permissions_application.mako:42
6624 6771 msgid "Registration Page Message"
6625 6772 msgstr ""
6626 6773
6627 6774 #: rhodecode/templates/admin/permissions/permissions_application.mako:46
6628 6775 msgid "Custom message to be displayed on the registration page. HTML syntax is supported."
6629 6776 msgstr ""
6630 6777
6631 6778 #: rhodecode/templates/admin/permissions/permissions_application.mako:52
6632 6779 msgid "External Authentication Account Activation"
6633 6780 msgstr ""
6634 6781
6635 6782 #: rhodecode/templates/admin/permissions/permissions_auth_token_access.mako:5
6636 6783 msgid "View whitelist"
6637 6784 msgstr ""
6638 6785
6639 6786 #: rhodecode/templates/admin/permissions/permissions_auth_token_access.mako:36
6640 6787 msgid "List of views available for usage in whitelist access"
6641 6788 msgstr ""
6642 6789
6643 6790 #: rhodecode/templates/admin/permissions/permissions_branch.mako:3
6644 6791 msgid "Default Permissions for Branches."
6645 6792 msgstr ""
6646 6793
6647 6794 #: rhodecode/templates/admin/permissions/permissions_branch.mako:6
6648 6795 #: rhodecode/templates/admin/repos/repo_edit_automation.mako:6
6649 6796 #: rhodecode/templates/admin/repos/repo_edit_permissions_branch.mako:6
6650 6797 #: rhodecode/templates/admin/repos/repo_edit_remote.mako:67
6651 6798 #: rhodecode/templates/admin/repos/repo_edit_reviewers.mako:6
6652 6799 #: rhodecode/templates/admin/settings/settings_automation.mako:6
6653 6800 #: rhodecode/templates/artifacts/artifact_list.mako:24
6654 6801 msgid "This feature is available in RhodeCode EE edition only. Contact {sales_email} to obtain a trial license."
6655 6802 msgstr ""
6656 6803
6657 6804 #: rhodecode/templates/admin/permissions/permissions_ips.mako:5
6658 6805 msgid "Default IP Whitelist For All Users"
6659 6806 msgstr ""
6660 6807
6661 6808 #: rhodecode/templates/admin/permissions/permissions_ips.mako:9
6662 6809 #: rhodecode/templates/admin/users/user_edit_ips.mako:12
6663 6810 msgid "Current IP address"
6664 6811 msgstr ""
6665 6812
6666 6813 #: rhodecode/templates/admin/permissions/permissions_ips.mako:30
6667 6814 #: rhodecode/templates/admin/users/user_edit_ips.mako:41
6668 6815 #, python-format
6669 6816 msgid "Confirm to delete this ip: %s"
6670 6817 msgstr ""
6671 6818
6672 6819 #: rhodecode/templates/admin/permissions/permissions_ips.mako:37
6673 6820 #: rhodecode/templates/admin/users/user_edit_ips.mako:49
6674 6821 msgid "All IP addresses are allowed"
6675 6822 msgstr ""
6676 6823
6677 6824 #: rhodecode/templates/admin/permissions/permissions_ips.mako:52
6678 6825 #: rhodecode/templates/admin/users/user_edit_ips.mako:65
6679 6826 msgid "New IP Address"
6680 6827 msgstr ""
6681 6828
6682 6829 #: rhodecode/templates/admin/permissions/permissions_ips.mako:56
6683 6830 #: rhodecode/templates/admin/users/user_edit_ips.mako:68
6684 6831 msgid "Description..."
6685 6832 msgstr ""
6686 6833
6687 6834 #: rhodecode/templates/admin/permissions/permissions_ips.mako:57
6688 6835 msgid ""
6689 6836 "Enter a comma separated list of IP Addresses like 127.0.0.1,\n"
6690 6837 "or use an IP Address with a mask 127.0.0.1/24, to create a network range.\n"
6691 6838 "To specify multiple addresses in a range, use the 127.0.0.1-127.0.0.10 syntax"
6692 6839 msgstr ""
6693 6840
6694 6841 #: rhodecode/templates/admin/permissions/permissions_objects.mako:3
6695 6842 msgid "Default Permissions for Repositories, User Groups and Repository Groups."
6696 6843 msgstr ""
6697 6844
6698 6845 #: rhodecode/templates/admin/permissions/permissions_objects.mako:7
6699 6846 msgid "Default access permissions. This defines permissions for the `default` user from which other users inherit permissions."
6700 6847 msgstr ""
6701 6848
6702 6849 #: rhodecode/templates/admin/permissions/permissions_objects.mako:9
6703 6850 msgid "Check the overwrite checkbox to force change all previously defined permissions for `default` user to the new selected value."
6704 6851 msgstr ""
6705 6852
6706 6853 #: rhodecode/templates/admin/permissions/permissions_objects.mako:23
6707 6854 msgid "All default permissions on each repository will be reset to chosen permission, note that all custom default permission on repositories will be lost"
6708 6855 msgstr ""
6709 6856
6710 6857 #: rhodecode/templates/admin/permissions/permissions_objects.mako:24
6711 6858 #: rhodecode/templates/admin/permissions/permissions_objects.mako:38
6712 6859 #: rhodecode/templates/admin/permissions/permissions_objects.mako:52
6713 6860 msgid "Overwrite Existing Settings"
6714 6861 msgstr ""
6715 6862
6716 6863 #: rhodecode/templates/admin/permissions/permissions_objects.mako:37
6717 6864 msgid "All default permissions on each repository group will be reset to chosen permission, note that all custom default permission on repository groups will be lost"
6718 6865 msgstr ""
6719 6866
6720 6867 #: rhodecode/templates/admin/permissions/permissions_objects.mako:45
6721 6868 #: rhodecode/templates/admin/user_groups/user_group_edit.mako:14
6722 6869 msgid "User Groups"
6723 6870 msgstr ""
6724 6871
6725 6872 #: rhodecode/templates/admin/permissions/permissions_objects.mako:51
6726 6873 msgid "All default permissions on each user group will be reset to chosen permission, note that all custom default permission on user groups will be lost"
6727 6874 msgstr ""
6728 6875
6729 6876 #: rhodecode/templates/admin/permissions/permissions_perms.mako:1
6730 6877 msgid "Default User Permissions Overview"
6731 6878 msgstr ""
6732 6879
6733 6880 #: rhodecode/templates/admin/permissions/permissions_ssh_keys.mako:7
6734 6881 msgid "Update SSH keys file"
6735 6882 msgstr ""
6736 6883
6737 6884 #: rhodecode/templates/admin/repo_groups/repo_group_add.mako:5
6738 6885 msgid "Add repository group"
6739 6886 msgstr ""
6740 6887
6741 6888 #: rhodecode/templates/admin/repo_groups/repo_group_add.mako:14
6742 6889 #: rhodecode/templates/admin/users/user_edit_advanced.mako:13
6743 #: rhodecode/templates/base/base.mako:108
6744 #: rhodecode/templates/base/base.mako:129
6890 #: rhodecode/templates/base/base.mako:113
6891 #: rhodecode/templates/base/base.mako:134
6745 6892 msgid "Repository groups"
6746 6893 msgstr ""
6747 6894
6748 6895 #: rhodecode/templates/admin/repo_groups/repo_group_add.mako:35
6749 6896 #: rhodecode/templates/admin/repo_groups/repo_group_edit_settings.mako:15
6750 6897 #: rhodecode/templates/admin/user_groups/user_group_add.mako:34
6751 6898 #: rhodecode/templates/admin/user_groups/user_group_edit_settings.mako:19
6752 6899 msgid "Group name"
6753 6900 msgstr ""
6754 6901
6755 6902 #: rhodecode/templates/admin/repo_groups/repo_group_add.mako:44
6756 6903 #: rhodecode/templates/admin/repo_groups/repo_group_edit_settings.mako:25
6757 6904 #: rhodecode/templates/admin/repos/repo_add_base.mako:43
6758 6905 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:33
6759 #: rhodecode/templates/base/base.mako:662
6906 #: rhodecode/templates/base/base.mako:669
6760 6907 #: rhodecode/templates/data_table/_dt_elements.mako:217
6761 6908 #: rhodecode/templates/forks/fork.mako:41
6762 6909 msgid "Repository group"
6763 6910 msgstr ""
6764 6911
6765 #: rhodecode/templates/admin/repo_groups/repo_group_add.mako:60
6912 #: rhodecode/templates/admin/repo_groups/repo_group_add.mako:50
6913 #: rhodecode/templates/admin/repos/repo_add_base.mako:49
6914 msgid "Select my personal group ({})"
6915 msgstr ""
6916
6917 #: rhodecode/templates/admin/repo_groups/repo_group_add.mako:65
6766 6918 #: rhodecode/templates/admin/repo_groups/repo_group_edit_settings.mako:64
6767 6919 #: rhodecode/templates/admin/repos/repo_add_base.mako:90
6768 6920 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:179
6769 6921 #: rhodecode/templates/admin/users/user_edit_profile.mako:81
6770 6922 #: rhodecode/templates/forks/fork.mako:63
6771 6923 msgid "Plain text format with {metatags} support."
6772 6924 msgstr ""
6773 6925
6774 #: rhodecode/templates/admin/repo_groups/repo_group_add.mako:62
6926 #: rhodecode/templates/admin/repo_groups/repo_group_add.mako:67
6775 6927 #: rhodecode/templates/admin/repo_groups/repo_group_edit_settings.mako:66
6776 6928 #: rhodecode/templates/admin/repos/repo_add_base.mako:92
6777 6929 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:181
6778 6930 #: rhodecode/templates/admin/users/user_edit_profile.mako:83
6779 6931 #: rhodecode/templates/forks/fork.mako:65
6780 6932 msgid "Plain text format."
6781 6933 msgstr ""
6782 6934
6783 #: rhodecode/templates/admin/repo_groups/repo_group_add.mako:74
6935 #: rhodecode/templates/admin/repo_groups/repo_group_add.mako:79
6784 6936 #: rhodecode/templates/admin/repos/repo_add_base.mako:104
6785 6937 msgid "Copy Parent Group Permissions"
6786 6938 msgstr ""
6787 6939
6788 #: rhodecode/templates/admin/repo_groups/repo_group_add.mako:78
6789 #: rhodecode/templates/admin/repos/repo_add_base.mako:108
6790 msgid "Copy permissions from parent repository group."
6791 msgstr ""
6792
6793 6940 #: rhodecode/templates/admin/repo_groups/repo_group_add.mako:83
6941 #: rhodecode/templates/admin/repos/repo_add_base.mako:108
6942 msgid "Copy permissions from parent repository group."
6943 msgstr ""
6944
6945 #: rhodecode/templates/admin/repo_groups/repo_group_add.mako:88
6794 6946 msgid "Create Repository Group"
6795 6947 msgstr ""
6796 6948
6797 6949 #: rhodecode/templates/admin/repo_groups/repo_group_edit.mako:5
6798 6950 #, python-format
6799 6951 msgid "%s repository group settings"
6800 6952 msgstr ""
6801 6953
6802 6954 #: rhodecode/templates/admin/repo_groups/repo_group_edit.mako:31
6803 6955 #: rhodecode/templates/admin/repos/repo_edit.mako:45
6804 6956 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:8
6805 6957 #: rhodecode/templates/admin/users/user_edit_advanced.mako:30
6806 6958 msgid "Access Permissions"
6807 6959 msgstr ""
6808 6960
6809 6961 #: rhodecode/templates/admin/repo_groups/repo_group_edit.mako:32
6810 6962 #: rhodecode/templates/admin/repos/repo_edit.mako:51
6811 6963 #: rhodecode/templates/admin/user_groups/user_group_edit.mako:36
6812 6964 #: rhodecode/templates/admin/user_groups/user_group_edit_advanced.mako:24
6813 6965 #: rhodecode/templates/admin/users/user_edit.mako:42
6814 6966 msgid "Advanced"
6815 6967 msgstr ""
6816 6968
6817 6969 #: rhodecode/templates/admin/repo_groups/repo_group_edit_advanced.mako:7
6818 6970 msgid "Repository Group ID"
6819 6971 msgstr ""
6820 6972
6821 6973 #: rhodecode/templates/admin/repo_groups/repo_group_edit_advanced.mako:10
6822 6974 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:8
6823 6975 msgid "Updated on"
6824 6976 msgstr ""
6825 6977
6826 6978 #: rhodecode/templates/admin/repo_groups/repo_group_edit_advanced.mako:11
6827 6979 msgid "Cached Commit source"
6828 6980 msgstr ""
6829 6981
6830 6982 #: rhodecode/templates/admin/repo_groups/repo_group_edit_advanced.mako:12
6831 6983 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:9
6832 6984 msgid "Cached Commit id"
6833 6985 msgstr ""
6834 6986
6835 6987 #: rhodecode/templates/admin/repo_groups/repo_group_edit_advanced.mako:13
6836 6988 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:10
6837 6989 msgid "Cached Commit date"
6838 6990 msgstr ""
6839 6991
6840 6992 #: rhodecode/templates/admin/repo_groups/repo_group_edit_advanced.mako:15
6841 6993 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:11
6842 6994 msgid "Cached Commit data"
6843 6995 msgstr ""
6844 6996
6845 6997 #: rhodecode/templates/admin/repo_groups/repo_group_edit_advanced.mako:17
6846 6998 msgid "Is Personal Group"
6847 6999 msgstr ""
6848 7000
6849 7001 #: rhodecode/templates/admin/repo_groups/repo_group_edit_advanced.mako:19
6850 7002 msgid "Total repositories"
6851 7003 msgstr ""
6852 7004
6853 7005 #: rhodecode/templates/admin/repo_groups/repo_group_edit_advanced.mako:20
6854 7006 msgid "Top level repositories"
6855 7007 msgstr ""
6856 7008
6857 7009 #: rhodecode/templates/admin/repo_groups/repo_group_edit_advanced.mako:22
6858 7010 msgid "Children groups"
6859 7011 msgstr ""
6860 7012
6861 7013 #: rhodecode/templates/admin/repo_groups/repo_group_edit_advanced.mako:28
6862 7014 msgid "Repository Group Advanced: {}"
6863 7015 msgstr ""
6864 7016
6865 7017 #: rhodecode/templates/admin/repo_groups/repo_group_edit_advanced.mako:38
6866 7018 msgid "Delete repository group"
6867 7019 msgstr ""
6868 7020
6869 7021 #: rhodecode/templates/admin/repo_groups/repo_group_edit_advanced.mako:67
6870 7022 #, python-format
6871 7023 msgid "Confirm to delete this group: %s"
6872 7024 msgstr ""
6873 7025
6874 7026 #: rhodecode/templates/admin/repo_groups/repo_group_edit_advanced.mako:68
6875 7027 msgid "Delete this repository group"
6876 7028 msgstr ""
6877 7029
6878 7030 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:5
6879 7031 msgid "Repository Group Permissions: {}"
6880 7032 msgstr ""
6881 7033
6882 7034 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:15
6883 7035 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:15
6884 7036 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:19
6885 7037 msgid "User/User Group"
6886 7038 msgstr ""
6887 7039
6888 7040 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:32
6889 7041 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:31
6890 7042 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:37
6891 7043 msgid "super-admin"
6892 7044 msgstr ""
6893 7045
6894 7046 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:35
6895 7047 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:34
6896 7048 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:40
6897 7049 msgid "owner"
6898 7050 msgstr ""
6899 7051
6900 7052 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:66
6901 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:114
7053 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:119
6902 7054 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:92
6903 7055 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:72
6904 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:120
7056 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:125
6905 7057 msgid "permission for other logged in and anonymous users"
6906 7058 msgstr ""
6907 7059
6908 7060 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:68
6909 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:116
7061 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:121
6910 7062 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:94
6911 7063 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:74
6912 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:122
7064 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:127
6913 7065 msgid "permission for other logged in users"
6914 7066 msgstr ""
6915 7067
6916 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:73
6917 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:121
6918 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:99
6919 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:79
6920 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:127
7068 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:74
7069 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:127
7070 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:100
7071 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:80
7072 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:133
7073 msgid "This entry is a duplicate, most probably left-over from previously set permission. This user has a higher permission set, so this entry is inactive. Please revoke this permission manually."
7074 msgstr ""
7075
7076 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:74
7077 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:127
7078 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:100
7079 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:80
7080 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:133
6921 7081 msgid "inactive duplicate"
6922 7082 msgstr ""
6923 7083
6924 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:82
6925 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:167
6926 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:115
6927 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:164
7084 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:87
7085 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:177
7086 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:121
7087 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:170
6928 7088 #: rhodecode/templates/admin/repos/repo_edit_strip.mako:46
6929 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:88
6930 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:172
7089 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:93
7090 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:182
6931 7091 msgid "Remove"
6932 7092 msgstr ""
6933 7093
6934 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:124
6935 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:130
7094 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:134
7095 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:140
6936 7096 msgid "delegated admin"
6937 7097 msgstr ""
6938 7098
6939 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:162
6940 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:159
6941 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:167
7099 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:172
7100 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:165
7101 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:177
6942 7102 msgid "members"
6943 7103 msgstr ""
6944 7104
6945 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:194
6946 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:191
6947 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:198
6948 msgid "Add user/user group"
6949 msgstr ""
6950
6951 7105 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:204
7106 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:197
7107 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:208
7108 msgid "Add user/user group"
7109 msgstr ""
7110
7111 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:214
6952 7112 msgid "Apply to children"
6953 7113 msgstr ""
6954 7114
6955 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:210
7115 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:220
6956 7116 msgid "Both"
6957 7117 msgstr ""
6958 7118
6959 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:211
7119 #: rhodecode/templates/admin/repo_groups/repo_group_edit_permissions.mako:221
6960 7120 msgid "Set or revoke permissions to selected types of children of this group, including non-private repositories and other groups if chosen."
6961 7121 msgstr ""
6962 7122
6963 7123 #: rhodecode/templates/admin/repo_groups/repo_group_edit_settings.mako:6
6964 7124 msgid "Repository Group Settings: {}"
6965 7125 msgstr ""
6966 7126
6967 7127 #: rhodecode/templates/admin/repo_groups/repo_group_edit_settings.mako:31
6968 7128 msgid "Optional select a parent group to move this repository group into."
6969 7129 msgstr ""
6970 7130
6971 7131 #: rhodecode/templates/admin/repo_groups/repo_group_edit_settings.mako:49
6972 7132 msgid "Change owner of this repository group."
6973 7133 msgstr ""
6974 7134
6975 7135 #: rhodecode/templates/admin/repo_groups/repo_groups.mako:5
6976 7136 msgid "Repository groups administration"
6977 7137 msgstr ""
6978 7138
6979 7139 #: rhodecode/templates/admin/repo_groups/repo_groups.mako:82
6980 7140 msgid "Number of top level repositories"
6981 7141 msgstr ""
6982 7142
6983 7143 #: rhodecode/templates/admin/repos/repo_add.mako:5
6984 7144 msgid "Add repository"
6985 7145 msgstr ""
6986 7146
6987 7147 #: rhodecode/templates/admin/repos/repo_add_base.mako:9
6988 7148 msgid "Repository name"
6989 7149 msgstr ""
6990 7150
6991 7151 #: rhodecode/templates/admin/repos/repo_add_base.mako:14
6992 7152 msgid "Import Existing Repository ?"
6993 7153 msgstr ""
6994 7154
6995 7155 #: rhodecode/templates/admin/repos/repo_add_base.mako:23
6996 #: rhodecode/templates/base/base.mako:323
7156 #: rhodecode/templates/base/base.mako:330
6997 7157 msgid "Clone from"
6998 7158 msgstr ""
6999 7159
7000 #: rhodecode/templates/admin/repos/repo_add_base.mako:49
7001 #: rhodecode/templates/forks/fork.mako:47
7002 #, python-format
7003 msgid "Select my personal group (%(repo_group_name)s)"
7004 msgstr ""
7005
7006 7160 #: rhodecode/templates/admin/repos/repo_add_base.mako:52
7007 7161 #: rhodecode/templates/forks/fork.mako:50
7008 7162 msgid "Optionally select a group to put this repository into."
7009 7163 msgstr ""
7010 7164
7011 7165 #: rhodecode/templates/admin/repos/repo_add_base.mako:78
7012 7166 msgid "Set the type of repository to create."
7013 7167 msgstr ""
7014 7168
7015 7169 #: rhodecode/templates/admin/repos/repo_add_base.mako:94
7016 7170 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:183
7017 7171 #: rhodecode/templates/forks/fork.mako:67
7018 7172 msgid "Add a README file for longer descriptions"
7019 7173 msgstr ""
7020 7174
7021 7175 #: rhodecode/templates/admin/repos/repo_add_base.mako:121
7022 7176 msgid "Create Repository"
7023 7177 msgstr ""
7024 7178
7025 7179 #: rhodecode/templates/admin/repos/repo_creating.mako:5
7026 7180 msgid "{} Creating repository"
7027 7181 msgstr ""
7028 7182
7029 7183 #: rhodecode/templates/admin/repos/repo_creating.mako:12
7030 7184 msgid "Creating repository"
7031 7185 msgstr ""
7032 7186
7033 7187 #: rhodecode/templates/admin/repos/repo_creating.mako:26
7034 7188 #, python-format
7035 7189 msgid "Repository \"%(repo_name)s\" is being created, you will be redirected when this process is finished.repo_name"
7036 7190 msgstr ""
7037 7191
7038 7192 #: rhodecode/templates/admin/repos/repo_edit.mako:8
7039 7193 msgid "{} repository settings"
7040 7194 msgstr ""
7041 7195
7042 7196 #: rhodecode/templates/admin/repos/repo_edit.mako:48
7043 7197 msgid "Branch Permissions"
7044 7198 msgstr ""
7045 7199
7046 7200 #: rhodecode/templates/admin/repos/repo_edit.mako:54
7047 7201 msgid "VCS"
7048 7202 msgstr ""
7049 7203
7050 7204 #: rhodecode/templates/admin/repos/repo_edit.mako:57
7051 7205 msgid "Extra Fields"
7052 7206 msgstr ""
7053 7207
7054 7208 #: rhodecode/templates/admin/repos/repo_edit.mako:60
7055 7209 msgid "Issue Tracker"
7056 7210 msgstr ""
7057 7211
7058 7212 #: rhodecode/templates/admin/repos/repo_edit.mako:63
7059 7213 #: rhodecode/templates/admin/users/user_edit.mako:49
7060 7214 #: rhodecode/templates/admin/users/user_edit_caches.mako:7
7061 7215 msgid "Caches"
7062 7216 msgstr ""
7063 7217
7064 7218 #: rhodecode/templates/admin/repos/repo_edit.mako:67
7065 7219 msgid "Remote sync"
7066 7220 msgstr ""
7067 7221
7068 7222 #: rhodecode/templates/admin/repos/repo_edit.mako:71
7069 7223 msgid "Statistics"
7070 7224 msgstr ""
7071 7225
7072 7226 #: rhodecode/templates/admin/repos/repo_edit.mako:78
7073 7227 msgid "Reviewer Rules"
7074 7228 msgstr ""
7075 7229
7076 7230 #: rhodecode/templates/admin/repos/repo_edit.mako:82
7077 7231 msgid "Automation"
7078 7232 msgstr ""
7079 7233
7080 7234 #: rhodecode/templates/admin/repos/repo_edit.mako:85
7081 7235 #: rhodecode/templates/admin/repos/repo_edit_maintenance.mako:3
7082 7236 msgid "Maintenance"
7083 7237 msgstr ""
7084 7238
7085 7239 #: rhodecode/templates/admin/repos/repo_edit.mako:88
7086 7240 msgid "Strip"
7087 7241 msgstr ""
7088 7242
7089 7243 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:5
7090 7244 msgid "Repository ID"
7091 7245 msgstr ""
7092 7246
7093 7247 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:12
7094 7248 msgid "Attached scoped tokens"
7095 7249 msgstr ""
7096 7250
7097 7251 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:13
7098 7252 msgid "Pull requests source"
7099 7253 msgstr ""
7100 7254
7101 7255 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:14
7102 7256 msgid "Pull requests target"
7103 7257 msgstr ""
7104 7258
7105 7259 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:15
7106 7260 msgid "Attached Artifacts"
7107 7261 msgstr ""
7108 7262
7109 7263 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:21
7110 7264 #, python-format
7111 7265 msgid "Repository: %s"
7112 7266 msgstr ""
7113 7267
7114 7268 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:31
7115 7269 msgid "Fork Reference"
7116 7270 msgstr ""
7117 7271
7118 7272 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:37
7119 7273 #, python-format
7120 7274 msgid "This repository is a fork of %(repo_link)s"
7121 7275 msgstr ""
7122 7276
7123 7277 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:43
7124 7278 msgid "Set"
7125 7279 msgstr ""
7126 7280
7127 7281 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:46
7128 7282 msgid "Manually set this repository as a fork of another from the list"
7129 7283 msgstr ""
7130 7284
7131 7285 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:55
7132 7286 msgid "Public Journal Visibility"
7133 7287 msgstr ""
7134 7288
7135 7289 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:62
7136 7290 msgid "Remove from Public Journal"
7137 7291 msgstr ""
7138 7292
7139 7293 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:66
7140 7294 msgid "Add to Public Journal"
7141 7295 msgstr ""
7142 7296
7143 7297 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:71
7144 7298 msgid "All actions made on this repository will be visible to everyone following the public journal."
7145 7299 msgstr ""
7146 7300
7147 7301 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:80
7148 7302 msgid "Locking state"
7149 7303 msgstr ""
7150 7304
7151 7305 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:89
7152 7306 msgid "This Repository is not currently locked."
7153 7307 msgstr ""
7154 7308
7155 7309 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:99
7156 7310 msgid "Unlock repository"
7157 7311 msgstr ""
7158 7312
7159 7313 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:107
7160 7314 msgid "Lock repository"
7161 7315 msgstr ""
7162 7316
7163 7317 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:113
7164 7318 msgid "Force repository locking. This only works when anonymous access is disabled. Pulling from the repository locks the repository to that user until the same user pushes to that repository again."
7165 7319 msgstr ""
7166 7320
7167 7321 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:123
7168 7322 msgid "Hooks"
7169 7323 msgstr ""
7170 7324
7171 7325 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:127
7172 7326 msgid "Hook type"
7173 7327 msgstr ""
7174 7328
7175 7329 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:128
7176 7330 msgid "Hook version"
7177 7331 msgstr ""
7178 7332
7179 7333 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:129
7180 7334 msgid "Current version"
7181 7335 msgstr ""
7182 7336
7183 7337 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:132
7184 7338 msgid "PRE HOOK"
7185 7339 msgstr ""
7186 7340
7187 7341 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:137
7188 7342 msgid "POST HOOK"
7189 7343 msgstr ""
7190 7344
7191 7345 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:143
7192 7346 msgid "Unable to read hook information from VCS Server"
7193 7347 msgstr ""
7194 7348
7195 7349 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:149
7196 7350 msgid "Confirm to reinstall hooks for this repository."
7197 7351 msgstr ""
7198 7352
7199 7353 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:150
7200 7354 msgid "Update Hooks"
7201 7355 msgstr ""
7202 7356
7203 7357 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:154
7204 7358 msgid "Outdated hooks detected, please update hooks using `Update Hooks` action."
7205 7359 msgstr ""
7206 7360
7207 7361 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:162
7208 7362 msgid "Archive repository"
7209 7363 msgstr ""
7210 7364
7211 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:173
7365 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:176
7212 7366 msgid "Archive this repository"
7213 7367 msgstr ""
7214 7368
7215 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:178
7369 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:183
7216 7370 msgid "Archiving the repository will make it entirely read-only. The repository cannot be committed to.It is hidden from the search results and dashboard. "
7217 7371 msgstr ""
7218 7372
7219 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:190
7373 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:195
7220 7374 msgid "Delete repository"
7221 7375 msgstr ""
7222 7376
7223 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:201
7224 msgid "Detach forks"
7225 msgstr ""
7226
7227 7377 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:206
7378 msgid "Detach forks"
7379 msgstr ""
7380
7381 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:211
7228 7382 msgid "Delete forks"
7229 7383 msgstr ""
7230 7384
7231 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:216
7385 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:221
7232 7386 msgid "Consider to archive this repository instead."
7233 7387 msgstr ""
7234 7388
7235 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:229
7236 msgid "Delete this repository"
7237 msgstr ""
7238
7239 7389 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:234
7390 msgid "Delete this repository"
7391 msgstr ""
7392
7393 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:239
7240 7394 msgid "This repository will be renamed in a special way in order to make it inaccessible to RhodeCode Enterprise and its VCS systems. If you need to fully delete it from the file system, please do it manually, or with rhodecode-cleanup-repos command available in rhodecode-tools."
7241 7395 msgstr ""
7242 7396
7243 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:268
7397 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:273
7244 7398 msgid "Change repository"
7245 7399 msgstr ""
7246 7400
7247 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:268
7401 #: rhodecode/templates/admin/repos/repo_edit_advanced.mako:273
7248 7402 msgid "Pick repository"
7249 7403 msgstr ""
7250 7404
7251 7405 #: rhodecode/templates/admin/repos/repo_edit_audit.mako:7
7252 7406 msgid "Repository Audit Logs"
7253 7407 msgstr ""
7254 7408
7255 7409 #: rhodecode/templates/admin/repos/repo_edit_audit.mako:14
7256 7410 #: rhodecode/templates/admin/users/user_edit_audit.mako:17
7257 7411 msgid "audit filter..."
7258 7412 msgstr ""
7259 7413
7260 7414 #: rhodecode/templates/admin/repos/repo_edit_automation.mako:3
7261 7415 msgid "Repo Automation"
7262 7416 msgstr ""
7263 7417
7264 7418 #: rhodecode/templates/admin/repos/repo_edit_caches.mako:3
7265 7419 msgid "Invalidate Cache for Repository"
7266 7420 msgstr ""
7267 7421
7268 7422 #: rhodecode/templates/admin/repos/repo_edit_caches.mako:7
7269 7423 msgid "Manually invalidate the repository cache. On the next access a repository cache will be recreated."
7270 7424 msgstr ""
7271 7425
7272 7426 #: rhodecode/templates/admin/repos/repo_edit_caches.mako:10
7273 7427 msgid "Cache purge can be automated by such api call. Can be called periodically in crontab etc."
7274 7428 msgstr ""
7275 7429
7276 7430 #: rhodecode/templates/admin/repos/repo_edit_caches.mako:23
7277 7431 msgid "Invalidate repository cache"
7278 7432 msgstr ""
7279 7433
7280 7434 #: rhodecode/templates/admin/repos/repo_edit_caches.mako:36
7281 7435 msgid "Invalidation keys"
7282 7436 msgstr ""
7283 7437
7284 7438 #: rhodecode/templates/admin/repos/repo_edit_caches.mako:44
7285 7439 #: rhodecode/templates/admin/repos/repo_edit_caches.mako:88
7286 7440 #: rhodecode/templates/admin/users/user_edit_caches.mako:22
7287 7441 msgid "Show all"
7288 7442 msgstr ""
7289 7443
7290 7444 #: rhodecode/templates/admin/repos/repo_edit_caches.mako:48
7291 7445 #: rhodecode/templates/admin/repos/repo_edit_caches.mako:92
7292 7446 #: rhodecode/templates/admin/repos/repo_edit_fields.mako:11
7293 7447 msgid "Key"
7294 7448 msgstr ""
7295 7449
7296 7450 #: rhodecode/templates/admin/repos/repo_edit_caches.mako:49
7297 7451 msgid "State UID"
7298 7452 msgstr ""
7299 7453
7300 7454 #: rhodecode/templates/admin/repos/repo_edit_caches.mako:50
7301 7455 msgid "Namespace"
7302 7456 msgstr ""
7303 7457
7304 7458 #: rhodecode/templates/admin/repos/repo_edit_caches.mako:69
7305 7459 msgid "Cache keys"
7306 7460 msgstr ""
7307 7461
7308 7462 #: rhodecode/templates/admin/repos/repo_edit_caches.mako:93
7309 7463 msgid "Region"
7310 7464 msgstr ""
7311 7465
7312 7466 #: rhodecode/templates/admin/repos/repo_edit_caches.mako:110
7313 7467 msgid "Shadow Repositories"
7314 7468 msgstr ""
7315 7469
7316 7470 #: rhodecode/templates/admin/repos/repo_edit_caches.mako:122
7317 7471 msgid "No Shadow repositories exist for this repository."
7318 7472 msgstr ""
7319 7473
7320 7474 #: rhodecode/templates/admin/repos/repo_edit_caches.mako:133
7321 7475 msgid "Diff Caches"
7322 7476 msgstr ""
7323 7477
7324 7478 #: rhodecode/templates/admin/repos/repo_edit_caches.mako:141
7325 7479 msgid "Cached diff name"
7326 7480 msgstr ""
7327 7481
7328 7482 #: rhodecode/templates/admin/repos/repo_edit_caches.mako:149
7329 7483 msgid "Cached diff files"
7330 7484 msgstr ""
7331 7485
7332 7486 #: rhodecode/templates/admin/repos/repo_edit_caches.mako:153
7333 7487 msgid "Cached diff size"
7334 7488 msgstr ""
7335 7489
7336 7490 #: rhodecode/templates/admin/repos/repo_edit_fields.mako:3
7337 7491 msgid "Custom extra fields for this repository"
7338 7492 msgstr ""
7339 7493
7340 7494 #: rhodecode/templates/admin/repos/repo_edit_fields.mako:10
7341 7495 msgid "Label"
7342 7496 msgstr ""
7343 7497
7344 7498 #: rhodecode/templates/admin/repos/repo_edit_fields.mako:24
7345 7499 #, python-format
7346 7500 msgid "Confirm to delete this field: %s"
7347 7501 msgstr ""
7348 7502
7349 7503 #: rhodecode/templates/admin/repos/repo_edit_fields.mako:40
7350 7504 msgid "New Field Key"
7351 7505 msgstr ""
7352 7506
7353 7507 #: rhodecode/templates/admin/repos/repo_edit_fields.mako:48
7354 7508 msgid "New Field Label"
7355 7509 msgstr ""
7356 7510
7357 7511 #: rhodecode/templates/admin/repos/repo_edit_fields.mako:51
7358 7512 msgid "Enter short label"
7359 7513 msgstr ""
7360 7514
7361 7515 #: rhodecode/templates/admin/repos/repo_edit_fields.mako:57
7362 7516 msgid "New Field Description"
7363 7517 msgstr ""
7364 7518
7365 7519 #: rhodecode/templates/admin/repos/repo_edit_fields.mako:60
7366 7520 msgid "Enter a full description for the field"
7367 7521 msgstr ""
7368 7522
7369 7523 #: rhodecode/templates/admin/repos/repo_edit_fields.mako:73
7370 7524 msgid "Extra fields are disabled. You can enable them from the Admin/Settings/Visual page."
7371 7525 msgstr ""
7372 7526
7373 7527 #: rhodecode/templates/admin/repos/repo_edit_issuetracker.mako:9
7374 7528 #: rhodecode/templates/admin/repos/repo_edit_vcs.mako:9
7375 7529 msgid "Inherit from global settings"
7376 7530 msgstr ""
7377 7531
7378 7532 #: rhodecode/templates/admin/repos/repo_edit_issuetracker.mako:14
7379 7533 msgid "Select to inherit global patterns for issue tracker."
7380 7534 msgstr ""
7381 7535
7382 7536 #: rhodecode/templates/admin/repos/repo_edit_issuetracker.mako:24
7383 7537 msgid "Inherited Issue Tracker Patterns"
7384 7538 msgstr ""
7385 7539
7386 7540 #: rhodecode/templates/admin/repos/repo_edit_issuetracker.mako:31
7387 7541 #: rhodecode/templates/base/issue_tracker_settings.mako:79
7388 #: rhodecode/templates/base/perms_summary.mako:169
7542 #: rhodecode/templates/base/perms_summary.mako:174
7389 7543 msgid "Pattern"
7390 7544 msgstr ""
7391 7545
7392 7546 #: rhodecode/templates/admin/repos/repo_edit_issuetracker.mako:32
7393 7547 #: rhodecode/templates/base/issue_tracker_settings.mako:80
7394 7548 msgid "Url"
7395 7549 msgstr ""
7396 7550
7397 7551 #: rhodecode/templates/admin/repos/repo_edit_issuetracker.mako:33
7398 7552 msgid "Prefix"
7399 7553 msgstr ""
7400 7554
7401 7555 #: rhodecode/templates/admin/repos/repo_edit_issuetracker.mako:75
7402 7556 #: rhodecode/templates/admin/settings/settings_issuetracker.mako:5
7403 7557 msgid "Issue Tracker / Wiki Patterns"
7404 7558 msgstr ""
7405 7559
7406 7560 #: rhodecode/templates/admin/repos/repo_edit_issuetracker.mako:95
7407 7561 #: rhodecode/templates/admin/settings/settings_issuetracker.mako:24
7408 7562 msgid "Test Patterns"
7409 7563 msgstr ""
7410 7564
7411 7565 #: rhodecode/templates/admin/repos/repo_edit_maintenance.mako:8
7412 7566 msgid "Perform maintenance tasks for this repo"
7413 7567 msgstr ""
7414 7568
7415 7569 #: rhodecode/templates/admin/repos/repo_edit_maintenance.mako:10
7416 7570 msgid "Following tasks will be performed"
7417 7571 msgstr ""
7418 7572
7419 7573 #: rhodecode/templates/admin/repos/repo_edit_maintenance.mako:17
7420 7574 msgid "Maintenance can be automated by such api call. Can be called periodically in crontab etc."
7421 7575 msgstr ""
7422 7576
7423 7577 #: rhodecode/templates/admin/repos/repo_edit_maintenance.mako:25
7424 7578 msgid "No maintenance tasks for this repo available"
7425 7579 msgstr ""
7426 7580
7427 7581 #: rhodecode/templates/admin/repos/repo_edit_maintenance.mako:34
7428 7582 msgid "Run Maintenance"
7429 7583 msgstr ""
7430 7584
7431 7585 #: rhodecode/templates/admin/repos/repo_edit_maintenance.mako:49
7432 7586 msgid "Performing Maintenance"
7433 7587 msgstr ""
7434 7588
7435 7589 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:5
7436 7590 msgid "Repository Access Permissions"
7437 7591 msgstr ""
7438 7592
7439 7593 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:55
7440 7594 msgid "private repository"
7441 7595 msgstr ""
7442 7596
7443 7597 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:60
7444 7598 msgid "only users/user groups explicitly added here will have access"
7445 7599 msgstr ""
7446 7600
7447 7601 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:62
7448 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:118
7602 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:124
7449 7603 msgid "Private repositories are only visible to people explicitly added as collaborators. Default permissions wont apply"
7450 7604 msgstr ""
7451 7605
7452 7606 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:63
7453 7607 msgid "un-set private mode"
7454 7608 msgstr ""
7455 7609
7456 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:103
7610 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:109
7457 7611 msgid "used by {} branch rule, requires write+ permissions"
7458 7612 msgstr ""
7459 7613
7460 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:105
7614 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:111
7461 7615 msgid "used by {} branch rules, requires write+ permissions"
7462 7616 msgstr ""
7463 7617
7464 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:119
7618 #: rhodecode/templates/admin/repos/repo_edit_permissions.mako:125
7465 7619 msgid "set private mode"
7466 7620 msgstr ""
7467 7621
7468 7622 #: rhodecode/templates/admin/repos/repo_edit_permissions_branch.mako:3
7469 7623 msgid "Repository Branch Permissions."
7470 7624 msgstr ""
7471 7625
7472 7626 #: rhodecode/templates/admin/repos/repo_edit_remote.mako:3
7473 7627 msgid "Remote Sync"
7474 7628 msgstr ""
7475 7629
7476 7630 #: rhodecode/templates/admin/repos/repo_edit_remote.mako:7
7477 7631 msgid "Manually pull/push changes from/to external URLs."
7478 7632 msgstr ""
7479 7633
7480 7634 #: rhodecode/templates/admin/repos/repo_edit_remote.mako:11
7481 7635 msgid "Pull url"
7482 7636 msgstr ""
7483 7637
7484 7638 #: rhodecode/templates/admin/repos/repo_edit_remote.mako:16
7485 7639 msgid "This repository does not have any pull url set."
7486 7640 msgstr ""
7487 7641
7488 7642 #: rhodecode/templates/admin/repos/repo_edit_remote.mako:17
7489 7643 #: rhodecode/templates/admin/repos/repo_edit_remote.mako:60
7490 7644 msgid "Set remote url."
7491 7645 msgstr ""
7492 7646
7493 7647 #: rhodecode/templates/admin/repos/repo_edit_remote.mako:26
7494 7648 msgid "Pull can be automated by such api call. Can be called periodically in crontab etc."
7495 7649 msgstr ""
7496 7650
7497 7651 #: rhodecode/templates/admin/repos/repo_edit_remote.mako:44
7498 7652 msgid "Pull changes from remote location"
7499 7653 msgstr ""
7500 7654
7501 7655 #: rhodecode/templates/admin/repos/repo_edit_remote.mako:54
7502 7656 msgid "Push url"
7503 7657 msgstr ""
7504 7658
7505 7659 #: rhodecode/templates/admin/repos/repo_edit_remote.mako:59
7506 7660 msgid "This repository does not have any push url set."
7507 7661 msgstr ""
7508 7662
7509 7663 #: rhodecode/templates/admin/repos/repo_edit_reviewers.mako:3
7510 7664 msgid "Default Reviewer Rules"
7511 7665 msgstr ""
7512 7666
7513 7667 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:6
7514 7668 #, python-format
7515 7669 msgid "Settings for Repository: %s"
7516 7670 msgstr ""
7517 7671
7518 7672 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:22
7519 7673 msgid "permalink id"
7520 7674 msgstr ""
7521 7675
7522 7676 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:22
7523 7677 msgid "what is that ?"
7524 7678 msgstr ""
7525 7679
7526 7680 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:24
7527 7681 msgid "URL by id"
7528 7682 msgstr ""
7529 7683
7530 7684 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:25
7531 7685 msgid ""
7532 7686 "In case this repository is renamed or moved into another group the repository url changes.\n"
7533 7687 " Using above url guarantees that this repository will always be accessible under such url.\n"
7534 7688 " Useful for CI systems, or any other cases that you need to hardcode the url into 3rd party service."
7535 7689 msgstr ""
7536 7690
7537 7691 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:41
7538 7692 #, python-format
7539 7693 msgid "Select my personal group (`%(repo_group_name)s`)"
7540 7694 msgstr ""
7541 7695
7542 7696 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:44
7543 7697 msgid "Optional select a group to put this repository into."
7544 7698 msgstr ""
7545 7699
7546 7700 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:52
7547 7701 msgid "Remote pull uri"
7548 7702 msgstr ""
7549 7703
7550 7704 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:60
7551 7705 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:102
7552 #: rhodecode/templates/base/perms_summary.mako:111
7553 #: rhodecode/templates/base/perms_summary.mako:228
7554 #: rhodecode/templates/base/perms_summary.mako:306
7555 #: rhodecode/templates/base/perms_summary.mako:308
7706 #: rhodecode/templates/base/perms_summary.mako:116
7707 #: rhodecode/templates/base/perms_summary.mako:233
7708 #: rhodecode/templates/base/perms_summary.mako:311
7709 #: rhodecode/templates/base/perms_summary.mako:313
7556 7710 #: rhodecode/templates/debug_style/form-elements.html:45
7557 7711 msgid "edit"
7558 7712 msgstr ""
7559 7713
7560 7714 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:66
7561 7715 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:108
7562 7716 msgid "enter new value, or leave empty to remove"
7563 7717 msgstr ""
7564 7718
7565 7719 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:76
7566 7720 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:118
7567 7721 msgid "cancel"
7568 7722 msgstr ""
7569 7723
7570 7724 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:87
7571 7725 msgid "http[s] url where from repository was imported. This field can used for doing {sync_link}."
7572 7726 msgstr ""
7573 7727
7574 7728 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:88
7575 7729 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:130
7576 7730 msgid "This field is stored encrypted inside Database, a format of http://user:password@server.com/repo_name can be used and will be hidden from display."
7577 7731 msgstr ""
7578 7732
7579 7733 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:94
7580 7734 msgid "Remote push uri"
7581 7735 msgstr ""
7582 7736
7583 7737 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:129
7584 7738 msgid "http[s] url to sync data back. This field can used for doing {sync_link}."
7585 7739 msgstr ""
7586 7740
7587 7741 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:141
7588 7742 msgid "Landing commit"
7589 7743 msgstr ""
7590 7744
7591 7745 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:146
7592 7746 msgid "The default commit for file pages, downloads, full text search index, and README generation."
7593 7747 msgstr ""
7594 7748
7595 7749 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:164
7596 7750 msgid "Change owner of this repository."
7597 7751 msgstr ""
7598 7752
7599 7753 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:194
7600 7754 #: rhodecode/templates/data_table/_dt_elements.mako:104
7601 7755 msgid "Private repository"
7602 7756 msgstr ""
7603 7757
7604 7758 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:204
7605 #: rhodecode/templates/summary/components.mako:238
7759 #: rhodecode/templates/summary/components.mako:263
7606 7760 msgid "Enable statistics"
7607 7761 msgstr ""
7608 7762
7609 7763 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:209
7610 7764 msgid "Enable statistics window on summary page."
7611 7765 msgstr ""
7612 7766
7613 7767 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:214
7614 7768 #: rhodecode/templates/summary/components.mako:184
7615 7769 msgid "Enable downloads"
7616 7770 msgstr ""
7617 7771
7618 7772 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:219
7619 7773 msgid "Enable download menu on summary page."
7620 7774 msgstr ""
7621 7775
7622 7776 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:224
7623 7777 msgid "Enable automatic locking"
7624 7778 msgstr ""
7625 7779
7626 7780 #: rhodecode/templates/admin/repos/repo_edit_settings.mako:229
7627 7781 msgid "Enable automatic locking on repository. Pulling from this repository creates a lock that can be released by pushing back by the same user"
7628 7782 msgstr ""
7629 7783
7630 7784 #: rhodecode/templates/admin/repos/repo_edit_statistics.mako:3
7631 7785 msgid "Repository statistics"
7632 7786 msgstr ""
7633 7787
7634 7788 #: rhodecode/templates/admin/repos/repo_edit_statistics.mako:11
7635 7789 msgid "Processed commits"
7636 7790 msgstr ""
7637 7791
7638 7792 #: rhodecode/templates/admin/repos/repo_edit_statistics.mako:12
7639 7793 msgid "Processed progress"
7640 7794 msgstr ""
7641 7795
7642 7796 #: rhodecode/templates/admin/repos/repo_edit_statistics.mako:15
7643 7797 msgid "Reset statistics"
7644 7798 msgstr ""
7645 7799
7646 7800 #: rhodecode/templates/admin/repos/repo_edit_statistics.mako:15
7647 7801 msgid "Confirm to remove current statistics"
7648 7802 msgstr ""
7649 7803
7650 7804 #: rhodecode/templates/admin/repos/repo_edit_strip.mako:3
7651 7805 msgid "Strip commits from repository"
7652 7806 msgstr ""
7653 7807
7654 7808 #: rhodecode/templates/admin/repos/repo_edit_strip.mako:7
7655 7809 #, python-format
7656 7810 msgid "Please provide up to %d commits commits to strip"
7657 7811 msgstr ""
7658 7812
7659 7813 #: rhodecode/templates/admin/repos/repo_edit_strip.mako:9
7660 7814 msgid "In the first step commits will be verified for existance in the repository"
7661 7815 msgstr ""
7662 7816
7663 7817 #: rhodecode/templates/admin/repos/repo_edit_strip.mako:10
7664 7818 msgid "In the second step, correct commits will be available for stripping"
7665 7819 msgstr ""
7666 7820
7667 7821 #: rhodecode/templates/admin/repos/repo_edit_strip.mako:16
7668 7822 #: rhodecode/templates/admin/repos/repo_edit_strip.mako:52
7669 7823 msgid "Enter full 40 character commit sha"
7670 7824 msgstr ""
7671 7825
7672 7826 #: rhodecode/templates/admin/repos/repo_edit_strip.mako:18
7673 7827 #: rhodecode/templates/admin/repos/repo_edit_strip.mako:54
7674 7828 #: rhodecode/templates/admin/repos/repo_edit_strip.mako:95
7675 7829 msgid "Add another commit"
7676 7830 msgstr ""
7677 7831
7678 7832 #: rhodecode/templates/admin/repos/repo_edit_strip.mako:27
7679 7833 msgid "Check commits"
7680 7834 msgstr ""
7681 7835
7682 7836 #: rhodecode/templates/admin/repos/repo_edit_strip.mako:33
7683 7837 msgid "Sorry this functionality is not available for SVN repository"
7684 7838 msgstr ""
7685 7839
7686 7840 #: rhodecode/templates/admin/repos/repo_edit_strip.mako:114
7687 7841 msgid "Checking commits"
7688 7842 msgstr ""
7689 7843
7690 7844 #: rhodecode/templates/admin/repos/repo_edit_strip.mako:142
7691 7845 msgid " commit verified positive"
7692 7846 msgstr ""
7693 7847
7694 7848 #: rhodecode/templates/admin/repos/repo_edit_strip.mako:154
7695 7849 msgid " commit verified negative"
7696 7850 msgstr ""
7697 7851
7698 7852 #: rhodecode/templates/admin/repos/repo_edit_strip.mako:179
7699 7853 msgid " commit striped successfully"
7700 7854 msgstr ""
7701 7855
7702 7856 #: rhodecode/templates/admin/repos/repo_edit_strip.mako:182
7703 7857 msgid " commit strip failed"
7704 7858 msgstr ""
7705 7859
7706 7860 #: rhodecode/templates/admin/repos/repo_edit_vcs.mako:13
7707 7861 msgid "Select to inherit global vcs settings."
7708 7862 msgstr ""
7709 7863
7710 7864 #: rhodecode/templates/admin/repos/repo_edit_vcs.mako:43
7711 7865 #: rhodecode/templates/admin/settings/settings_global.mako:140
7712 7866 #: rhodecode/templates/admin/settings/settings_labs.mako:48
7713 7867 #: rhodecode/templates/admin/settings/settings_vcs.mako:13
7714 7868 #: rhodecode/templates/admin/settings/settings_visual.mako:214
7715 7869 msgid "Save settings"
7716 7870 msgstr ""
7717 7871
7718 7872 #: rhodecode/templates/admin/repos/repos.mako:5
7719 7873 msgid "Repositories administration"
7720 7874 msgstr ""
7721 7875
7722 7876 #: rhodecode/templates/admin/repos/repos.mako:110
7723 7877 msgid "State"
7724 7878 msgstr ""
7725 7879
7726 7880 #: rhodecode/templates/admin/settings/settings_automation.mako:3
7727 7881 msgid "Admin Automation"
7728 7882 msgstr ""
7729 7883
7730 7884 #: rhodecode/templates/admin/settings/settings_email.mako:3
7731 7885 msgid "Email Configuration"
7732 7886 msgstr ""
7733 7887
7734 7888 #: rhodecode/templates/admin/settings/settings_email.mako:8
7735 7889 msgid "Email prefix"
7736 7890 msgstr ""
7737 7891
7738 7892 #: rhodecode/templates/admin/settings/settings_email.mako:9
7739 7893 msgid "Email from"
7740 7894 msgstr ""
7741 7895
7742 7896 #: rhodecode/templates/admin/settings/settings_email.mako:11
7743 7897 msgid "SMTP server"
7744 7898 msgstr ""
7745 7899
7746 7900 #: rhodecode/templates/admin/settings/settings_email.mako:12
7747 7901 msgid "SMTP username"
7748 7902 msgstr ""
7749 7903
7750 7904 #: rhodecode/templates/admin/settings/settings_email.mako:13
7751 7905 msgid "SMTP password"
7752 7906 msgstr ""
7753 7907
7754 7908 #: rhodecode/templates/admin/settings/settings_email.mako:14
7755 7909 msgid "SMTP port"
7756 7910 msgstr ""
7757 7911
7758 7912 #: rhodecode/templates/admin/settings/settings_email.mako:16
7759 7913 msgid "SMTP use TLS"
7760 7914 msgstr ""
7761 7915
7762 7916 #: rhodecode/templates/admin/settings/settings_email.mako:17
7763 7917 msgid "SMTP use SSL"
7764 7918 msgstr ""
7765 7919
7766 7920 #: rhodecode/templates/admin/settings/settings_email.mako:28
7767 7921 msgid "You can adjust those settings in [DEFAULT] section of .ini file located at"
7768 7922 msgstr ""
7769 7923
7770 7924 #: rhodecode/templates/admin/settings/settings_email.mako:36
7771 7925 msgid "Test Email"
7772 7926 msgstr ""
7773 7927
7774 7928 #: rhodecode/templates/admin/settings/settings_email.mako:42
7775 7929 msgid "enter valid email"
7776 7930 msgstr ""
7777 7931
7778 7932 #: rhodecode/templates/admin/settings/settings_email.mako:46
7779 7933 msgid "Send an auto-generated email from this server to above email..."
7780 7934 msgstr ""
7781 7935
7782 7936 #: rhodecode/templates/admin/settings/settings_exceptions.mako:3
7783 7937 msgid "Exceptions Tracker - Exception ID"
7784 7938 msgstr ""
7785 7939
7786 7940 #: rhodecode/templates/admin/settings/settings_exceptions.mako:8
7787 7941 #: rhodecode/templates/email_templates/exception_tracker.mako:14
7788 7942 msgid "Exception `{}` generated on UTC date: {}"
7789 7943 msgstr ""
7790 7944
7791 7945 #: rhodecode/templates/admin/settings/settings_exceptions.mako:21
7792 7946 msgid "Unable to Read Exception. It might be removed or non-existing."
7793 7947 msgstr ""
7794 7948
7795 7949 #: rhodecode/templates/admin/settings/settings_exceptions.mako:30
7796 7950 msgid "Delete this Exception"
7797 7951 msgstr ""
7798 7952
7799 7953 #: rhodecode/templates/admin/settings/settings_exceptions.mako:40
7800 7954 msgid "Delete This Exception"
7801 7955 msgstr ""
7802 7956
7803 7957 #: rhodecode/templates/admin/settings/settings_exceptions_browse.mako:3
7804 7958 msgid "Exceptions Tracker "
7805 7959 msgstr ""
7806 7960
7807 7961 #: rhodecode/templates/admin/settings/settings_exceptions_browse.mako:7
7808 7962 msgid "There is {} stored exception."
7809 7963 msgstr ""
7810 7964
7811 7965 #: rhodecode/templates/admin/settings/settings_exceptions_browse.mako:9
7812 7966 msgid "There are total {} stored exceptions."
7813 7967 msgstr ""
7814 7968
7815 7969 #: rhodecode/templates/admin/settings/settings_exceptions_browse.mako:12
7816 7970 msgid "Store directory"
7817 7971 msgstr ""
7818 7972
7819 7973 #: rhodecode/templates/admin/settings/settings_exceptions_browse.mako:23
7820 7974 msgid "Delete All `{}`"
7821 7975 msgstr ""
7822 7976
7823 7977 #: rhodecode/templates/admin/settings/settings_exceptions_browse.mako:25
7824 7978 msgid "Delete All"
7825 7979 msgstr ""
7826 7980
7827 7981 #: rhodecode/templates/admin/settings/settings_exceptions_browse.mako:39
7828 7982 msgid "Exceptions Tracker - Showing the last {} Exceptions"
7829 7983 msgstr ""
7830 7984
7831 7985 #: rhodecode/templates/admin/settings/settings_global.mako:5
7832 7986 msgid "Branding"
7833 7987 msgstr ""
7834 7988
7835 7989 #: rhodecode/templates/admin/settings/settings_global.mako:16
7836 7990 msgid "Set a custom title for your RhodeCode instance (limited to 40 characters)."
7837 7991 msgstr ""
7838 7992
7839 7993 #: rhodecode/templates/admin/settings/settings_global.mako:20
7840 7994 msgid "HTTP[S] authentication realm"
7841 7995 msgstr ""
7842 7996
7843 7997 #: rhodecode/templates/admin/settings/settings_global.mako:27
7844 7998 msgid "Set a custom text that is shown as authentication message to clients trying to connect."
7845 7999 msgstr ""
7846 8000
7847 8001 #: rhodecode/templates/admin/settings/settings_global.mako:36
7848 8002 #: rhodecode/templates/admin/users/user_edit_advanced.mako:83
7849 8003 msgid "Personal Repository Group"
7850 8004 msgstr ""
7851 8005
7852 8006 #: rhodecode/templates/admin/settings/settings_global.mako:41
7853 8007 msgid "Create Personal Repository Group"
7854 8008 msgstr ""
7855 8009
7856 8010 #: rhodecode/templates/admin/settings/settings_global.mako:44
7857 8011 msgid "Always create Personal Repository Groups for new users."
7858 8012 msgstr ""
7859 8013
7860 8014 #: rhodecode/templates/admin/settings/settings_global.mako:45
7861 8015 msgid "When creating new users from add user form or API you can still turn this off via a checkbox or flag"
7862 8016 msgstr ""
7863 8017
7864 8018 #: rhodecode/templates/admin/settings/settings_global.mako:49
7865 8019 msgid "Personal Repo Group Pattern"
7866 8020 msgstr ""
7867 8021
7868 8022 #: rhodecode/templates/admin/settings/settings_global.mako:55
7869 8023 msgid "Pattern used to create Personal Repository Groups. Prefix can be other existing repository group path[s], eg. /u/${username}"
7870 8024 msgstr ""
7871 8025
7872 8026 #: rhodecode/templates/admin/settings/settings_global.mako:56
7873 8027 msgid "Available variables are currently ${username} and ${user_id}"
7874 8028 msgstr ""
7875 8029
7876 8030 #: rhodecode/templates/admin/settings/settings_global.mako:64
7877 8031 msgid "Registration Captcha"
7878 8032 msgstr ""
7879 8033
7880 8034 #: rhodecode/templates/admin/settings/settings_global.mako:68
7881 8035 msgid "Google reCaptcha v2 site key."
7882 8036 msgstr ""
7883 8037
7884 8038 #: rhodecode/templates/admin/settings/settings_global.mako:75
7885 8039 msgid "Site key for reCaptcha v2 system."
7886 8040 msgstr ""
7887 8041
7888 8042 #: rhodecode/templates/admin/settings/settings_global.mako:80
7889 8043 msgid "Google reCaptcha v2 secret key."
7890 8044 msgstr ""
7891 8045
7892 8046 #: rhodecode/templates/admin/settings/settings_global.mako:87
7893 8047 msgid "Secret key for reCaptcha v2 system. Setting this value will enable captcha on registration and password reset forms."
7894 8048 msgstr ""
7895 8049
7896 8050 #: rhodecode/templates/admin/settings/settings_global.mako:95
7897 8051 msgid "Custom Header Code"
7898 8052 msgstr ""
7899 8053
7900 8054 #: rhodecode/templates/admin/settings/settings_global.mako:100
7901 8055 #: rhodecode/templates/admin/settings/settings_global.mako:124
7902 8056 #: rhodecode/templates/debug_style/form-elements-small.html:59
7903 8057 #: rhodecode/templates/debug_style/form-elements.html:57
7904 8058 #: rhodecode/templates/debug_style/form-elements.html:82
7905 8059 #: rhodecode/templates/debug_style/form-elements.html:225
7906 8060 #: rhodecode/templates/debug_style/form-elements.html:381
7907 8061 #: rhodecode/templates/debug_style/form-elements.html:407
7908 8062 #: rhodecode/templates/debug_style/form-elements.html:515
7909 8063 #: rhodecode/templates/debug_style/form-elements.html:519
7910 8064 #: rhodecode/templates/debug_style/form-elements.html:537
7911 8065 #: rhodecode/templates/debug_style/form-elements.html:581
7912 8066 #: rhodecode/templates/debug_style/form-inline.html:38
7913 8067 #: rhodecode/templates/debug_style/form-inline.html:139
7914 8068 #: rhodecode/templates/debug_style/form-inline.html:147
7915 8069 #: rhodecode/templates/debug_style/form-vertical.html:60
7916 8070 #: rhodecode/templates/debug_style/forms.html:37
7917 8071 #: rhodecode/templates/debug_style/forms.html:60
7918 8072 #: rhodecode/templates/debug_style/forms.html:78
7919 8073 #: rhodecode/templates/debug_style/forms.html:96
7920 8074 #: rhodecode/templates/debug_style/layout-form-sidebar.html:44
7921 8075 msgid "Templates..."
7922 8076 msgstr ""
7923 8077
7924 8078 #: rhodecode/templates/admin/settings/settings_global.mako:103
7925 8079 #: rhodecode/templates/admin/settings/settings_global.mako:127
7926 8080 #: rhodecode/templates/debug_style/form-elements-small.html:62
7927 8081 #: rhodecode/templates/debug_style/form-elements.html:60
7928 8082 #: rhodecode/templates/debug_style/form-elements.html:85
7929 8083 #: rhodecode/templates/debug_style/form-elements.html:228
7930 8084 #: rhodecode/templates/debug_style/form-elements.html:384
7931 8085 #: rhodecode/templates/debug_style/form-elements.html:410
7932 8086 #: rhodecode/templates/debug_style/form-elements.html:518
7933 8087 #: rhodecode/templates/debug_style/form-elements.html:522
7934 8088 #: rhodecode/templates/debug_style/form-elements.html:540
7935 8089 #: rhodecode/templates/debug_style/form-elements.html:584
7936 8090 #: rhodecode/templates/debug_style/form-inline.html:41
7937 8091 #: rhodecode/templates/debug_style/form-inline.html:142
7938 8092 #: rhodecode/templates/debug_style/form-inline.html:150
7939 8093 #: rhodecode/templates/debug_style/form-vertical.html:63
7940 8094 #: rhodecode/templates/debug_style/forms.html:40
7941 8095 #: rhodecode/templates/debug_style/forms.html:63
7942 8096 #: rhodecode/templates/debug_style/forms.html:81
7943 8097 #: rhodecode/templates/debug_style/forms.html:99
7944 8098 #: rhodecode/templates/debug_style/layout-form-sidebar.html:47
7945 8099 msgid "Server Announcement"
7946 8100 msgstr ""
7947 8101
7948 8102 #: rhodecode/templates/admin/settings/settings_global.mako:104
7949 8103 msgid "Flash message filtering"
7950 8104 msgstr ""
7951 8105
7952 8106 #: rhodecode/templates/admin/settings/settings_global.mako:105
7953 8107 msgid "Custom logos"
7954 8108 msgstr ""
7955 8109
7956 8110 #: rhodecode/templates/admin/settings/settings_global.mako:111
7957 8111 msgid "Custom js/css code added at the end of the <head/> tag."
7958 8112 msgstr ""
7959 8113
7960 8114 #: rhodecode/templates/admin/settings/settings_global.mako:112
7961 8115 msgid "Use <script/> or <style/> tags to define custom scripting or styling."
7962 8116 msgstr ""
7963 8117
7964 8118 #: rhodecode/templates/admin/settings/settings_global.mako:119
7965 8119 msgid "Custom Footer Code"
7966 8120 msgstr ""
7967 8121
7968 8122 #: rhodecode/templates/admin/settings/settings_global.mako:133
7969 8123 msgid "Custom js/css code added at the end of the <body> tag."
7970 8124 msgstr ""
7971 8125
7972 8126 #: rhodecode/templates/admin/settings/settings_global.mako:134
7973 8127 msgid "Use <script> or <style> tags to define custom scripting or styling."
7974 8128 msgstr ""
7975 8129
7976 8130 #: rhodecode/templates/admin/settings/settings_hooks.mako:3
7977 8131 msgid "Built in Mercurial hooks - read only"
7978 8132 msgstr ""
7979 8133
7980 8134 #: rhodecode/templates/admin/settings/settings_hooks.mako:19
7981 8135 msgid "Hooks can be used to trigger actions on certain events such as push / pull. They can trigger Python functions or external applications."
7982 8136 msgstr ""
7983 8137
7984 8138 #: rhodecode/templates/admin/settings/settings_hooks.mako:27
7985 8139 msgid "Custom hooks"
7986 8140 msgstr ""
7987 8141
7988 8142 #: rhodecode/templates/admin/settings/settings_labs.mako:3
7989 8143 msgid "Labs Settings"
7990 8144 msgstr ""
7991 8145
7992 8146 #: rhodecode/templates/admin/settings/settings_labs.mako:10
7993 8147 msgid "There are no Labs settings currently"
7994 8148 msgstr ""
7995 8149
7996 8150 #: rhodecode/templates/admin/settings/settings_mapping.mako:5
7997 8151 msgid "Import New Groups or Repositories"
7998 8152 msgstr ""
7999 8153
8000 8154 #: rhodecode/templates/admin/settings/settings_mapping.mako:10
8001 8155 msgid "Destroy old data"
8002 8156 msgstr ""
8003 8157
8004 8158 #: rhodecode/templates/admin/settings/settings_mapping.mako:12
8005 8159 msgid "In case a repository or a group was deleted from the filesystem and it still exists in the database, check this option to remove obsolete data from the database."
8006 8160 msgstr ""
8007 8161
8008 8162 #: rhodecode/templates/admin/settings/settings_mapping.mako:16
8009 8163 msgid "Invalidate cache for all repositories"
8010 8164 msgstr ""
8011 8165
8012 8166 #: rhodecode/templates/admin/settings/settings_mapping.mako:18
8013 8167 msgid "Each cache data for repositories will be cleaned with this option selected. Use this to reload data and clear cache keys."
8014 8168 msgstr ""
8015 8169
8016 8170 #: rhodecode/templates/admin/settings/settings_mapping.mako:21
8017 8171 msgid "Rescan Filesystem"
8018 8172 msgstr ""
8019 8173
8020 8174 #: rhodecode/templates/admin/settings/settings_open_source.mako:11
8021 8175 msgid "Licenses of Third Party Packages"
8022 8176 msgstr ""
8023 8177
8024 8178 #: rhodecode/templates/admin/settings/settings_process_management.mako:3
8025 8179 #: rhodecode/templates/admin/settings/settings_system.mako:3
8026 8180 msgid "Checking for updates..."
8027 8181 msgstr ""
8028 8182
8029 8183 #: rhodecode/templates/admin/settings/settings_process_management.mako:9
8030 8184 msgid "Gunicorn process management"
8031 8185 msgstr ""
8032 8186
8033 8187 #: rhodecode/templates/admin/settings/settings_process_management.mako:11
8034 8188 msgid "start auto refresh"
8035 8189 msgstr ""
8036 8190
8037 8191 #: rhodecode/templates/admin/settings/settings_process_management.mako:12
8038 8192 msgid "stop auto refresh"
8039 8193 msgstr ""
8040 8194
8041 8195 #: rhodecode/templates/admin/settings/settings_search.mako:3
8042 8196 msgid "RhodeCode Full Text Search"
8043 8197 msgstr ""
8044 8198
8045 8199 #: rhodecode/templates/admin/settings/settings_sessions.mako:3
8046 8200 msgid "User Sessions Configuration"
8047 8201 msgstr ""
8048 8202
8049 8203 #: rhodecode/templates/admin/settings/settings_sessions.mako:8
8050 8204 msgid "Session type"
8051 8205 msgstr ""
8052 8206
8053 8207 #: rhodecode/templates/admin/settings/settings_sessions.mako:9
8054 8208 msgid "Session expiration period"
8055 8209 msgstr ""
8056 8210
8057 8211 #: rhodecode/templates/admin/settings/settings_sessions.mako:11
8058 8212 msgid "Total sessions"
8059 8213 msgstr ""
8060 8214
8061 8215 #: rhodecode/templates/admin/settings/settings_sessions.mako:12
8062 8216 msgid "Expired sessions ({} days)"
8063 8217 msgstr ""
8064 8218
8065 8219 #: rhodecode/templates/admin/settings/settings_sessions.mako:28
8066 8220 msgid "Cleanup Old Sessions"
8067 8221 msgstr ""
8068 8222
8069 8223 #: rhodecode/templates/admin/settings/settings_sessions.mako:34
8070 8224 msgid "Cleanup user sessions that were not active during chosen time frame."
8071 8225 msgstr ""
8072 8226
8073 8227 #: rhodecode/templates/admin/settings/settings_sessions.mako:35
8074 8228 msgid "After performing this action users whose session will be removed will be required to log in again."
8075 8229 msgstr ""
8076 8230
8077 8231 #: rhodecode/templates/admin/settings/settings_sessions.mako:36
8078 8232 msgid "Picking `All` will log-out you, and all users in the system."
8079 8233 msgstr ""
8080 8234
8081 8235 #: rhodecode/templates/admin/settings/settings_sessions.mako:55
8082 8236 msgid "Confirm to cleanup user sessions"
8083 8237 msgstr ""
8084 8238
8085 8239 #: rhodecode/templates/admin/settings/settings_sessions.mako:56
8086 8240 msgid "Cleanup sessions"
8087 8241 msgstr ""
8088 8242
8089 8243 #: rhodecode/templates/admin/settings/settings_system.mako:9
8090 8244 msgid "System Info"
8091 8245 msgstr ""
8092 8246
8093 8247 #: rhodecode/templates/admin/settings/settings_system.mako:11
8094 8248 msgid "create summary snapshot"
8095 8249 msgstr ""
8096 8250
8097 8251 #: rhodecode/templates/admin/settings/settings_system.mako:46
8098 8252 msgid "Python Packages"
8099 8253 msgstr ""
8100 8254
8101 8255 #: rhodecode/templates/admin/settings/settings_visual.mako:5
8102 8256 #: rhodecode/templates/base/vcs_settings.mako:10
8103 8257 msgid "General"
8104 8258 msgstr ""
8105 8259
8106 8260 #: rhodecode/templates/admin/settings/settings_visual.mako:10
8107 8261 msgid "Use repository extra fields"
8108 8262 msgstr ""
8109 8263
8110 8264 #: rhodecode/templates/admin/settings/settings_visual.mako:12
8111 8265 msgid "Allows storing additional customized fields per repository."
8112 8266 msgstr ""
8113 8267
8114 8268 #: rhodecode/templates/admin/settings/settings_visual.mako:17
8115 8269 msgid "Show RhodeCode version"
8116 8270 msgstr ""
8117 8271
8118 8272 #: rhodecode/templates/admin/settings/settings_visual.mako:19
8119 8273 msgid "Shows or hides a version number of RhodeCode displayed in the footer."
8120 8274 msgstr ""
8121 8275
8122 8276 #: rhodecode/templates/admin/settings/settings_visual.mako:26
8123 8277 msgid "Gravatars"
8124 8278 msgstr ""
8125 8279
8126 8280 #: rhodecode/templates/admin/settings/settings_visual.mako:31
8127 8281 msgid "Use Gravatars based avatars"
8128 8282 msgstr ""
8129 8283
8130 8284 #: rhodecode/templates/admin/settings/settings_visual.mako:33
8131 8285 msgid "Use gravatar.com as avatar system for RhodeCode accounts. If this is disabled avatars are generated based on initials and email."
8132 8286 msgstr ""
8133 8287
8134 8288 #: rhodecode/templates/admin/settings/settings_visual.mako:36
8135 8289 msgid "Gravatar URL"
8136 8290 msgstr ""
8137 8291
8138 8292 #: rhodecode/templates/admin/settings/settings_visual.mako:44
8139 8293 msgid ""
8140 8294 "Gravatar url allows you to use other avatar server application.\n"
8141 8295 " Following variables of the URL will be replaced accordingly.\n"
8142 8296 " {scheme} 'http' or 'https' sent from running RhodeCode server,\n"
8143 8297 " {email} user email,\n"
8144 8298 " {md5email} md5 hash of the user email (like at gravatar.com),\n"
8145 8299 " {size} size of the image that is expected from the server application,\n"
8146 8300 " {netloc} network location/server host of running RhodeCode server"
8147 8301 msgstr ""
8148 8302
8149 8303 #: rhodecode/templates/admin/settings/settings_visual.mako:59
8150 8304 msgid "Meta-Tagging"
8151 8305 msgstr ""
8152 8306
8153 8307 #: rhodecode/templates/admin/settings/settings_visual.mako:64
8154 8308 msgid "Stylify recognised meta tags"
8155 8309 msgstr ""
8156 8310
8157 8311 #: rhodecode/templates/admin/settings/settings_visual.mako:66
8158 8312 msgid "Parses meta tags from repository or repository group description fields and turns them into colored tags."
8159 8313 msgstr ""
8160 8314
8161 8315 #: rhodecode/templates/admin/settings/settings_visual.mako:77
8162 8316 msgid "Dashboard Items"
8163 8317 msgstr ""
8164 8318
8165 8319 #: rhodecode/templates/admin/settings/settings_visual.mako:81
8166 8320 msgid "Main page dashboard items"
8167 8321 msgstr ""
8168 8322
8169 8323 #: rhodecode/templates/admin/settings/settings_visual.mako:87
8170 8324 msgid "Number of items displayed in the main page dashboard before pagination is shown."
8171 8325 msgstr ""
8172 8326
8173 8327 #: rhodecode/templates/admin/settings/settings_visual.mako:91
8174 8328 msgid "Admin pages items"
8175 8329 msgstr ""
8176 8330
8177 8331 #: rhodecode/templates/admin/settings/settings_visual.mako:97
8178 8332 msgid "Number of items displayed in the admin pages grids before pagination is shown."
8179 8333 msgstr ""
8180 8334
8181 8335 #: rhodecode/templates/admin/settings/settings_visual.mako:106
8182 8336 msgid "Commit ID Style"
8183 8337 msgstr ""
8184 8338
8185 8339 #: rhodecode/templates/admin/settings/settings_visual.mako:110
8186 8340 msgid "Commit sha length"
8187 8341 msgstr ""
8188 8342
8189 8343 #: rhodecode/templates/admin/settings/settings_visual.mako:117
8190 8344 msgid ""
8191 8345 "Number of chars to show in commit sha displayed in web interface.\n"
8192 8346 " By default it's shown as r123:9043a6a4c226 this value defines the\n"
8193 8347 " length of the sha after the `r123:` part."
8194 8348 msgstr ""
8195 8349
8196 8350 #: rhodecode/templates/admin/settings/settings_visual.mako:125
8197 8351 msgid "Show commit ID numeric reference"
8198 8352 msgstr ""
8199 8353
8200 8354 #: rhodecode/templates/admin/settings/settings_visual.mako:125
8201 8355 msgid "Commit show revision number"
8202 8356 msgstr ""
8203 8357
8204 8358 #: rhodecode/templates/admin/settings/settings_visual.mako:127
8205 8359 msgid ""
8206 8360 "Show revision number in commit sha displayed in web interface.\n"
8207 8361 " By default it's shown as r123:9043a6a4c226 this value defines the\n"
8208 8362 " if the `r123:` part is shown."
8209 8363 msgstr ""
8210 8364
8211 8365 #: rhodecode/templates/admin/settings/settings_visual.mako:136
8212 8366 #: rhodecode/templates/debug_style/index.html:64
8213 8367 msgid "Icons"
8214 8368 msgstr ""
8215 8369
8216 8370 #: rhodecode/templates/admin/settings/settings_visual.mako:141
8217 8371 msgid "Show public repo icon on repositories"
8218 8372 msgstr ""
8219 8373
8220 8374 #: rhodecode/templates/admin/settings/settings_visual.mako:147
8221 8375 msgid "Show private repo icon on repositories"
8222 8376 msgstr ""
8223 8377
8224 8378 #: rhodecode/templates/admin/settings/settings_visual.mako:149
8225 8379 msgid "Show public/private icons next to repositories names."
8226 8380 msgstr ""
8227 8381
8228 8382 #: rhodecode/templates/admin/settings/settings_visual.mako:156
8229 8383 msgid "Markup Renderer"
8230 8384 msgstr ""
8231 8385
8232 8386 #: rhodecode/templates/admin/settings/settings_visual.mako:163
8233 8387 msgid "Default renderer used to render comments, pull request descriptions and other description elements. After change old entries will still work correctly."
8234 8388 msgstr ""
8235 8389
8236 8390 #: rhodecode/templates/admin/settings/settings_visual.mako:170
8237 8391 msgid "Clone URL templates"
8238 8392 msgstr ""
8239 8393
8240 8394 #: rhodecode/templates/admin/settings/settings_visual.mako:181
8241 8395 msgid ""
8242 8396 "Schema of clone url construction eg. '{scheme}://{user}@{netloc}/{repo}', available vars:\n"
8243 8397 " {scheme} 'http' or 'https' sent from running RhodeCode server,\n"
8244 8398 " {user} current user username,\n"
8245 8399 " {sys_user} current system user running this process, Useful for ssh,\n"
8246 8400 " {hostname} hostname of this server running RhodeCode,\n"
8247 8401 " {netloc} network location/server host of running RhodeCode server,\n"
8248 8402 " {repo} full repository name,\n"
8249 8403 " {repoid} ID of repository, can be used to contruct clone-by-id"
8250 8404 msgstr ""
8251 8405
8252 8406 #: rhodecode/templates/admin/settings/settings_visual.mako:196
8253 8407 msgid "Custom Support Link"
8254 8408 msgstr ""
8255 8409
8256 8410 #: rhodecode/templates/admin/settings/settings_visual.mako:204
8257 8411 #, python-format
8258 8412 msgid ""
8259 8413 "Custom url for the support link located at the bottom.\n"
8260 8414 " The default is set to %(default_url)s. In case there's a need\n"
8261 8415 " to change the support link to internal issue tracker, it should be done here.\n"
8262 8416 " "
8263 8417 msgstr ""
8264 8418
8265 8419 #: rhodecode/templates/admin/user_groups/user_group_add.mako:5
8266 8420 msgid "Add user group"
8267 8421 msgstr ""
8268 8422
8269 8423 #: rhodecode/templates/admin/user_groups/user_group_add.mako:13
8270 8424 #: rhodecode/templates/admin/users/user_edit_advanced.mako:14
8271 #: rhodecode/templates/base/base.mako:110
8272 #: rhodecode/templates/base/base.mako:132
8425 #: rhodecode/templates/base/base.mako:115
8426 #: rhodecode/templates/base/base.mako:137
8273 8427 msgid "User groups"
8274 8428 msgstr ""
8275 8429
8276 8430 #: rhodecode/templates/admin/user_groups/user_group_add.mako:46
8277 8431 #: rhodecode/templates/admin/user_groups/user_group_edit_settings.mako:50
8278 8432 msgid "Short, optional description for this user group."
8279 8433 msgstr ""
8280 8434
8281 8435 #: rhodecode/templates/admin/user_groups/user_group_add.mako:59
8282 8436 msgid "Create User Group"
8283 8437 msgstr ""
8284 8438
8285 8439 #: rhodecode/templates/admin/user_groups/user_group_edit.mako:5
8286 8440 msgid "{} user group settings"
8287 8441 msgstr ""
8288 8442
8289 8443 #: rhodecode/templates/admin/user_groups/user_group_edit.mako:37
8290 8444 #: rhodecode/templates/admin/users/user_edit.mako:43
8291 8445 msgid "Global permissions"
8292 8446 msgstr ""
8293 8447
8294 8448 #: rhodecode/templates/admin/user_groups/user_group_edit.mako:38
8295 8449 #: rhodecode/templates/admin/users/user_edit.mako:44
8296 8450 msgid "Permissions summary"
8297 8451 msgstr ""
8298 8452
8299 8453 #: rhodecode/templates/admin/user_groups/user_group_edit_advanced.mako:5
8300 8454 msgid "User Group ID"
8301 8455 msgstr ""
8302 8456
8303 8457 #: rhodecode/templates/admin/user_groups/user_group_edit_advanced.mako:9
8304 8458 #: rhodecode/templates/admin/user_groups/user_groups.mako:80
8305 8459 #: rhodecode/templates/debug_style/form-elements.html:509
8306 8460 #: rhodecode/templates/user_group/profile.mako:55
8307 8461 msgid "Members"
8308 8462 msgstr ""
8309 8463
8310 8464 #: rhodecode/templates/admin/user_groups/user_group_edit_advanced.mako:10
8311 8465 msgid "Automatic member sync"
8312 8466 msgstr ""
8313 8467
8314 8468 #: rhodecode/templates/admin/user_groups/user_group_edit_advanced.mako:12
8315 8469 msgid "Assigned to repositories"
8316 8470 msgstr ""
8317 8471
8318 8472 #: rhodecode/templates/admin/user_groups/user_group_edit_advanced.mako:13
8319 8473 msgid "Assigned to repo groups"
8320 8474 msgstr ""
8321 8475
8322 8476 #: rhodecode/templates/admin/user_groups/user_group_edit_advanced.mako:15
8323 8477 #: rhodecode/templates/admin/users/user_edit_advanced.mako:19
8324 8478 msgid "Assigned to review rules"
8325 8479 msgstr ""
8326 8480
8327 8481 #: rhodecode/templates/admin/user_groups/user_group_edit_advanced.mako:22
8328 8482 #: rhodecode/templates/admin/user_groups/user_group_edit_perms.mako:6
8329 8483 #: rhodecode/templates/admin/user_groups/user_group_edit_settings.mako:7
8330 8484 #: rhodecode/templates/data_table/_dt_elements.mako:305
8331 8485 #: rhodecode/templates/user_group/user_group.mako:4
8332 8486 msgid "User group"
8333 8487 msgstr ""
8334 8488
8335 8489 #: rhodecode/templates/admin/user_groups/user_group_edit_advanced.mako:35
8336 8490 msgid "Group members sync"
8337 8491 msgstr ""
8338 8492
8339 8493 #: rhodecode/templates/admin/user_groups/user_group_edit_advanced.mako:42
8340 8494 msgid "This group is set to be automatically synchronised."
8341 8495 msgstr ""
8342 8496
8343 8497 #: rhodecode/templates/admin/user_groups/user_group_edit_advanced.mako:43
8344 8498 msgid "This group synchronization was set by"
8345 8499 msgstr ""
8346 8500
8347 8501 #: rhodecode/templates/admin/user_groups/user_group_edit_advanced.mako:47
8348 8502 msgid "This group is not set to be automatically synchronised"
8349 8503 msgstr ""
8350 8504
8351 8505 #: rhodecode/templates/admin/user_groups/user_group_edit_advanced.mako:56
8352 8506 msgid "Disable synchronization"
8353 8507 msgstr ""
8354 8508
8355 8509 #: rhodecode/templates/admin/user_groups/user_group_edit_advanced.mako:58
8356 8510 msgid "Enable synchronization"
8357 8511 msgstr ""
8358 8512
8359 8513 #: rhodecode/templates/admin/user_groups/user_group_edit_advanced.mako:64
8360 8514 msgid "Users will be added or removed from this group when they authenticate with RhodeCode system, based on LDAP group membership. This requires `LDAP+User group` authentication plugin to be configured and enabled. (EE only feature)"
8361 8515 msgstr ""
8362 8516
8363 8517 #: rhodecode/templates/admin/user_groups/user_group_edit_advanced.mako:77
8364 8518 msgid "Delete User Group"
8365 8519 msgstr ""
8366 8520
8367 8521 #: rhodecode/templates/admin/user_groups/user_group_edit_advanced.mako:83
8368 8522 #, python-format
8369 8523 msgid "Confirm to delete user group `%(ugroup)s` with all permission assignments"
8370 8524 msgstr ""
8371 8525
8372 8526 #: rhodecode/templates/admin/user_groups/user_group_edit_advanced.mako:85
8373 8527 msgid "Delete This User Group"
8374 8528 msgstr ""
8375 8529
8376 8530 #: rhodecode/templates/admin/user_groups/user_group_edit_settings.mako:40
8377 8531 msgid "Change owner of this user group."
8378 8532 msgstr ""
8379 8533
8380 8534 #: rhodecode/templates/admin/user_groups/user_group_edit_settings.mako:64
8381 8535 msgid "Add members"
8382 8536 msgstr ""
8383 8537
8384 8538 #: rhodecode/templates/admin/user_groups/user_group_edit_settings.mako:100
8385 8539 #: rhodecode/templates/user_group/profile.mako:78
8386 8540 msgid "No members yet"
8387 8541 msgstr ""
8388 8542
8389 8543 #: rhodecode/templates/admin/user_groups/user_groups.mako:5
8390 8544 #: rhodecode/templates/admin/users/user_edit_groups.mako:8
8391 8545 msgid "User groups administration"
8392 8546 msgstr ""
8393 8547
8394 8548 #: rhodecode/templates/admin/user_groups/user_groups.mako:82
8395 8549 msgid "Sync"
8396 8550 msgstr ""
8397 8551
8398 8552 #: rhodecode/templates/admin/users/user_add.mako:5
8399 8553 msgid "Add user"
8400 8554 msgstr ""
8401 8555
8402 8556 #: rhodecode/templates/admin/users/user_add.mako:13
8403 8557 #: rhodecode/templates/admin/users/user_edit.mako:14
8404 #: rhodecode/templates/base/base.mako:109
8558 #: rhodecode/templates/base/base.mako:114
8405 8559 msgid "Users"
8406 8560 msgstr ""
8407 8561
8408 8562 #: rhodecode/templates/admin/users/user_add.mako:15
8409 8563 #: rhodecode/templates/admin/users/users.mako:31
8410 8564 msgid "Add User"
8411 8565 msgstr ""
8412 8566
8413 8567 #: rhodecode/templates/admin/users/user_add.mako:53
8414 8568 msgid "Password confirmation"
8415 8569 msgstr ""
8416 8570
8417 8571 #: rhodecode/templates/admin/users/user_add.mako:59
8418 8572 msgid "Generate password"
8419 8573 msgstr ""
8420 8574
8421 8575 #: rhodecode/templates/admin/users/user_add.mako:106
8422 8576 msgid "Password change"
8423 8577 msgstr ""
8424 8578
8425 8579 #: rhodecode/templates/admin/users/user_add.mako:110
8426 8580 msgid "Force user to change his password on the next login"
8427 8581 msgstr ""
8428 8582
8429 8583 #: rhodecode/templates/admin/users/user_add.mako:116
8430 8584 msgid "Add personal repository group"
8431 8585 msgstr ""
8432 8586
8433 8587 #: rhodecode/templates/admin/users/user_add.mako:121
8434 8588 msgid "New group will be created at: `/{path}`"
8435 8589 msgstr ""
8436 8590
8437 8591 #: rhodecode/templates/admin/users/user_add.mako:122
8438 8592 msgid "User will be automatically set as this group owner."
8439 8593 msgstr ""
8440 8594
8441 8595 #: rhodecode/templates/admin/users/user_add.mako:128
8442 8596 msgid "Create User"
8443 8597 msgstr ""
8444 8598
8445 8599 #: rhodecode/templates/admin/users/user_add.mako:139
8446 8600 msgid "generated password:"
8447 8601 msgstr ""
8448 8602
8449 8603 #: rhodecode/templates/admin/users/user_edit.mako:5
8450 8604 msgid "{} user settings"
8451 8605 msgstr ""
8452 8606
8453 8607 #: rhodecode/templates/admin/users/user_edit.mako:31
8454 msgid "This user is set as disabled"
8608 msgid "This user is set as non-active and disabled."
8455 8609 msgstr ""
8456 8610
8457 8611 #: rhodecode/templates/admin/users/user_edit.mako:39
8458 8612 #: rhodecode/templates/admin/users/user_edit_profile.mako:7
8459 8613 #: rhodecode/templates/users/user_profile.mako:6
8460 8614 msgid "User Profile"
8461 8615 msgstr ""
8462 8616
8463 8617 #: rhodecode/templates/admin/users/user_edit.mako:40
8464 8618 msgid "Auth tokens"
8465 8619 msgstr ""
8466 8620
8467 8621 #: rhodecode/templates/admin/users/user_edit.mako:46
8468 8622 msgid "Ip Whitelist"
8469 8623 msgstr ""
8470 8624
8471 8625 #: rhodecode/templates/admin/users/user_edit.mako:47
8472 8626 msgid "User Groups Management"
8473 8627 msgstr ""
8474 8628
8475 8629 #: rhodecode/templates/admin/users/user_edit_advanced.mako:5
8476 8630 msgid "User ID"
8477 8631 msgstr ""
8478 8632
8479 8633 #: rhodecode/templates/admin/users/user_edit_advanced.mako:7
8480 8634 msgid "Source of Record"
8481 8635 msgstr ""
8482 8636
8483 8637 #: rhodecode/templates/admin/users/user_edit_advanced.mako:9
8484 8638 msgid "Last login"
8485 8639 msgstr ""
8486 8640
8487 8641 #: rhodecode/templates/admin/users/user_edit_advanced.mako:10
8488 8642 #: rhodecode/templates/admin/users/users.mako:83
8489 8643 #: rhodecode/templates/forks/forks.mako:67
8490 8644 msgid "Last activity"
8491 8645 msgstr ""
8492 8646
8493 8647 #: rhodecode/templates/admin/users/user_edit_advanced.mako:16
8494 8648 msgid "Owned Artifacts"
8495 8649 msgstr ""
8496 8650
8497 8651 #: rhodecode/templates/admin/users/user_edit_advanced.mako:18
8498 8652 msgid "Reviewer of pull requests"
8499 8653 msgstr ""
8500 8654
8501 8655 #: rhodecode/templates/admin/users/user_edit_advanced.mako:21
8502 8656 msgid "Member of User groups"
8503 8657 msgstr ""
8504 8658
8505 8659 #: rhodecode/templates/admin/users/user_edit_advanced.mako:22
8506 8660 msgid "Force password change"
8507 8661 msgstr ""
8508 8662
8509 8663 #: rhodecode/templates/admin/users/user_edit_advanced.mako:49
8510 8664 msgid "Force Password Reset"
8511 8665 msgstr ""
8512 8666
8513 8667 #: rhodecode/templates/admin/users/user_edit_advanced.mako:55
8514 8668 msgid "Disable forced password reset"
8515 8669 msgstr ""
8516 8670
8517 8671 #: rhodecode/templates/admin/users/user_edit_advanced.mako:60
8518 8672 msgid "Clear the forced password change flag."
8519 8673 msgstr ""
8520 8674
8521 8675 #: rhodecode/templates/admin/users/user_edit_advanced.mako:67
8522 8676 msgid "Confirm to enable forced password change"
8523 8677 msgstr ""
8524 8678
8525 8679 #: rhodecode/templates/admin/users/user_edit_advanced.mako:68
8526 8680 msgid "Enable forced password reset"
8527 8681 msgstr ""
8528 8682
8529 8683 #: rhodecode/templates/admin/users/user_edit_advanced.mako:73
8530 8684 msgid "When this is enabled user will have to change they password when they next use RhodeCode system. This will also forbid vcs operations until someone makes a password change in the web interface"
8531 8685 msgstr ""
8532 8686
8533 8687 #: rhodecode/templates/admin/users/user_edit_advanced.mako:89
8534 8688 msgid "Users personal repository group"
8535 8689 msgstr ""
8536 8690
8537 8691 #: rhodecode/templates/admin/users/user_edit_advanced.mako:92
8538 8692 msgid "This user currently does not have a personal repository group"
8539 8693 msgstr ""
8540 8694
8541 8695 #: rhodecode/templates/admin/users/user_edit_advanced.mako:94
8542 8696 #, python-format
8543 8697 msgid "New group will be created at: `/%(path)s`"
8544 8698 msgstr ""
8545 8699
8546 8700 #: rhodecode/templates/admin/users/user_edit_advanced.mako:99
8547 8701 msgid "Create personal repository group"
8548 8702 msgstr ""
8549 8703
8550 8704 #: rhodecode/templates/admin/users/user_edit_advanced.mako:108
8551 8705 msgid "Delete User"
8552 8706 msgstr ""
8553 8707
8554 8708 #: rhodecode/templates/admin/users/user_edit_advanced.mako:119
8555 8709 msgid "Detach repositories"
8556 8710 msgstr ""
8557 8711
8558 8712 #: rhodecode/templates/admin/users/user_edit_advanced.mako:122
8559 8713 #: rhodecode/templates/admin/users/user_edit_advanced.mako:134
8560 8714 #: rhodecode/templates/admin/users/user_edit_advanced.mako:146
8561 8715 msgid "Delete repositories"
8562 8716 msgstr ""
8563 8717
8564 8718 #: rhodecode/templates/admin/users/user_edit_advanced.mako:131
8565 8719 msgid "Detach repository groups"
8566 8720 msgstr ""
8567 8721
8568 8722 #: rhodecode/templates/admin/users/user_edit_advanced.mako:143
8569 8723 msgid "Detach user groups"
8570 8724 msgstr ""
8571 8725
8572 8726 #: rhodecode/templates/admin/users/user_edit_advanced.mako:155
8573 8727 msgid "Detach pull requests"
8574 8728 msgstr ""
8575 8729
8576 8730 #: rhodecode/templates/admin/users/user_edit_advanced.mako:158
8577 8731 msgid "Delete pull requests"
8578 8732 msgstr ""
8579 8733
8580 8734 #: rhodecode/templates/admin/users/user_edit_advanced.mako:167
8581 8735 msgid "Detach Artifacts"
8582 8736 msgstr ""
8583 8737
8584 8738 #: rhodecode/templates/admin/users/user_edit_advanced.mako:170
8585 8739 msgid "Delete Artifacts"
8586 8740 msgstr ""
8587 8741
8588 8742 #: rhodecode/templates/admin/users/user_edit_advanced.mako:180
8589 8743 msgid "New owner for detached objects"
8590 8744 msgstr ""
8591 8745
8592 8746 #: rhodecode/templates/admin/users/user_edit_advanced.mako:188
8593 8747 msgid "When selecting the detach option, the depending objects owned by this user will be assigned to the above user."
8594 8748 msgstr ""
8595 8749
8596 8750 #: rhodecode/templates/admin/users/user_edit_advanced.mako:190
8597 8751 msgid "The delete option will delete the user and all his owned objects!"
8598 8752 msgstr ""
8599 8753
8600 8754 #: rhodecode/templates/admin/users/user_edit_advanced.mako:205
8601 8755 msgid "Delete this user"
8602 8756 msgstr ""
8603 8757
8604 8758 #: rhodecode/templates/admin/users/user_edit_audit.mako:9
8605 8759 msgid "Audit Logs"
8606 8760 msgstr ""
8607 8761
8608 8762 #: rhodecode/templates/admin/users/user_edit_audit.mako:12
8609 8763 msgid "Download as JSON"
8610 8764 msgstr ""
8611 8765
8612 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:62
8766 #: rhodecode/templates/admin/users/user_edit_auth_tokens.mako:68
8613 8767 #, python-format
8614 8768 msgid "Confirm to remove this auth token: %s"
8615 8769 msgstr ""
8616 8770
8617 8771 #: rhodecode/templates/admin/users/user_edit_caches.mako:36
8618 8772 msgid "Invalidate user cache"
8619 8773 msgstr ""
8620 8774
8621 8775 #: rhodecode/templates/admin/users/user_edit_caches.mako:36
8622 8776 msgid "Confirm to invalidate user cache"
8623 8777 msgstr ""
8624 8778
8625 8779 #: rhodecode/templates/admin/users/user_edit_emails.mako:7
8626 8780 msgid "Additional Email Addresses"
8627 8781 msgstr ""
8628 8782
8629 8783 #: rhodecode/templates/admin/users/user_edit_emails.mako:33
8630 8784 #, python-format
8631 8785 msgid "Confirm to delete this email: %s"
8632 8786 msgstr ""
8633 8787
8634 8788 #: rhodecode/templates/admin/users/user_edit_emails.mako:58
8635 8789 msgid "New email address"
8636 8790 msgstr ""
8637 8791
8638 8792 #: rhodecode/templates/admin/users/user_edit_groups.mako:15
8639 8793 #, python-format
8640 8794 msgid "Add `%s` to user group"
8641 8795 msgstr ""
8642 8796
8643 8797 #: rhodecode/templates/admin/users/user_edit_ips.mako:7
8644 8798 msgid "Custom IP Whitelist"
8645 8799 msgstr ""
8646 8800
8647 8801 #: rhodecode/templates/admin/users/user_edit_ips.mako:15
8648 8802 msgid "IP Address"
8649 8803 msgstr ""
8650 8804
8651 8805 #: rhodecode/templates/admin/users/user_edit_ips.mako:16
8652 8806 msgid "IP Range"
8653 8807 msgstr ""
8654 8808
8655 8809 #: rhodecode/templates/admin/users/user_edit_ips.mako:25
8656 8810 #, python-format
8657 8811 msgid "Inherited from %s"
8658 8812 msgstr ""
8659 8813
8660 8814 #: rhodecode/templates/admin/users/user_edit_ips.mako:69
8661 8815 msgid ""
8662 8816 "Enter comma separated list of ip addresses like 10.0.0.1,10.0.0.2.\n"
8663 8817 "Use a ip address with a mask 127.0.0.1/24, to create a network match pattern.\n"
8664 8818 "To specify multiple entries on an address range use 127.0.0.1-127.0.0.10 syntax"
8665 8819 msgstr ""
8666 8820
8667 8821 #: rhodecode/templates/admin/users/user_edit_profile.mako:31
8668 8822 msgid "Change the avatar at"
8669 8823 msgstr ""
8670 8824
8671 8825 #: rhodecode/templates/admin/users/user_edit_profile.mako:94
8672 8826 msgid "New Password"
8673 8827 msgstr ""
8674 8828
8675 8829 #: rhodecode/templates/admin/users/user_edit_profile.mako:102
8676 8830 msgid "New Password Confirmation"
8677 8831 msgstr ""
8678 8832
8679 8833 #: rhodecode/templates/admin/users/user_edit_profile.mako:118
8680 8834 #: rhodecode/templates/admin/users/users.mako:87
8681 #: rhodecode/templates/base/perms_summary.mako:145
8835 #: rhodecode/templates/base/perms_summary.mako:150
8682 8836 msgid "Super-admin"
8683 8837 msgstr ""
8684 8838
8685 8839 #: rhodecode/templates/admin/users/user_edit_profile.mako:126
8686 8840 msgid "Authentication type"
8687 8841 msgstr ""
8688 8842
8689 8843 #: rhodecode/templates/admin/users/user_edit_profile.mako:130
8690 8844 msgid "When user was created using an external source. He is bound to authentication using this method."
8691 8845 msgstr ""
8692 8846
8693 8847 #: rhodecode/templates/admin/users/user_edit_profile.mako:135
8694 8848 msgid "Name in Source of Record"
8695 8849 msgstr ""
8696 8850
8697 8851 #: rhodecode/templates/admin/users/user_edit_profile.mako:144
8698 8852 msgid "Language"
8699 8853 msgstr ""
8700 8854
8701 8855 #: rhodecode/templates/admin/users/user_edit_profile.mako:150
8702 8856 #, python-format
8703 8857 msgid "User interface language. Help translate %(rc_link)s into your language."
8704 8858 msgstr ""
8705 8859
8706 8860 #: rhodecode/templates/admin/users/user_edit_ssh_keys.mako:34
8707 8861 #, python-format
8708 8862 msgid "Confirm to remove ssh key %s"
8709 8863 msgstr ""
8710 8864
8711 8865 #: rhodecode/templates/admin/users/user_edit_ssh_keys.mako:75
8712 8866 msgid "Click add to use this generate SSH key"
8713 8867 msgstr ""
8714 8868
8715 8869 #: rhodecode/templates/admin/users/user_edit_ssh_keys_generate.mako:7
8716 8870 msgid "New SSH Key generation"
8717 8871 msgstr ""
8718 8872
8719 8873 #: rhodecode/templates/admin/users/user_edit_ssh_keys_generate.mako:13
8720 8874 msgid "Below is a 2048 bit generated SSH RSA key."
8721 8875 msgstr ""
8722 8876
8723 8877 #: rhodecode/templates/admin/users/user_edit_ssh_keys_generate.mako:13
8724 8878 msgid "If you use older systems please try to generate a"
8725 8879 msgstr ""
8726 8880
8727 8881 #: rhodecode/templates/admin/users/user_edit_ssh_keys_generate.mako:13
8728 8882 msgid "legacy format"
8729 8883 msgstr ""
8730 8884
8731 8885 #: rhodecode/templates/admin/users/user_edit_ssh_keys_generate.mako:14
8732 8886 msgid "If You wish to use it to access RhodeCode via the SSH please save the private key and click `Use this generated key` at the bottom."
8733 8887 msgstr ""
8734 8888
8735 8889 #: rhodecode/templates/admin/users/user_edit_ssh_keys_generate.mako:16
8736 8890 msgid "Private key"
8737 8891 msgstr ""
8738 8892
8739 8893 #: rhodecode/templates/admin/users/user_edit_ssh_keys_generate.mako:32
8740 8894 msgid "Public key"
8741 8895 msgstr ""
8742 8896
8743 8897 #: rhodecode/templates/admin/users/user_edit_ssh_keys_generate.mako:43
8744 8898 #: rhodecode/templates/admin/users/user_edit_ssh_keys_generate.mako:45
8745 8899 msgid "Use this generated key"
8746 8900 msgstr ""
8747 8901
8748 8902 #: rhodecode/templates/admin/users/user_edit_ssh_keys_generate.mako:47
8749 8903 msgid "Confirmation required on the next screen"
8750 8904 msgstr ""
8751 8905
8752 8906 #: rhodecode/templates/admin/users/user_edit_ssh_keys_generate.mako:51
8753 8907 msgid "SSH key generator has been disabled."
8754 8908 msgstr ""
8755 8909
8756 8910 #: rhodecode/templates/admin/users/users.mako:5
8757 8911 msgid "Users administration"
8758 8912 msgstr ""
8759 8913
8760 8914 #: rhodecode/templates/admin/users/users.mako:89
8761 8915 msgid "Auth type"
8762 8916 msgstr ""
8763 8917
8764 8918 #: rhodecode/templates/artifacts/artifact_list.mako:5
8765 8919 msgid "{} Artifacts"
8766 8920 msgstr ""
8767 8921
8768 #: rhodecode/templates/base/base.mako:66
8922 #: rhodecode/templates/base/base.mako:71
8769 8923 msgid "RhodeCode instance id: {}"
8770 8924 msgstr ""
8771 8925
8772 #: rhodecode/templates/base/base.mako:94
8926 #: rhodecode/templates/base/base.mako:99
8773 8927 msgid "Super-admin Panel"
8774 8928 msgstr ""
8775 8929
8776 #: rhodecode/templates/base/base.mako:96
8930 #: rhodecode/templates/base/base.mako:101
8777 8931 msgid "Delegated Admin Panel"
8778 8932 msgstr ""
8779 8933
8780 #: rhodecode/templates/base/base.mako:112
8934 #: rhodecode/templates/base/base.mako:117
8781 8935 msgid "Authentication"
8782 8936 msgstr ""
8783 8937
8784 #: rhodecode/templates/base/base.mako:114
8938 #: rhodecode/templates/base/base.mako:119
8785 8939 msgid "Defaults"
8786 8940 msgstr ""
8787 8941
8788 #: rhodecode/templates/base/base.mako:154
8789 #: rhodecode/templates/base/base.mako:194
8942 #: rhodecode/templates/base/base.mako:159
8943 #: rhodecode/templates/base/base.mako:199
8790 8944 #: rhodecode/templates/changeset/changeset.mako:154
8791 8945 #: rhodecode/templates/files/files_source_header.mako:57
8792 8946 #: rhodecode/templates/files/files_tree_header.mako:44
8793 #: rhodecode/templates/summary/components.mako:250
8947 #: rhodecode/templates/summary/components.mako:275
8794 8948 msgid "Show More"
8795 8949 msgstr ""
8796 8950
8797 #: rhodecode/templates/base/base.mako:295
8798 #: rhodecode/templates/base/base.mako:306
8951 #: rhodecode/templates/base/base.mako:302
8952 #: rhodecode/templates/base/base.mako:313
8799 8953 msgid "RSS Feed"
8800 8954 msgstr ""
8801 8955
8802 #: rhodecode/templates/base/base.mako:297
8956 #: rhodecode/templates/base/base.mako:304
8803 8957 msgid "Watch this Repository and actions on it in your personalized journal"
8804 8958 msgstr ""
8805 8959
8806 #: rhodecode/templates/base/base.mako:315
8960 #: rhodecode/templates/base/base.mako:322
8807 8961 msgid "Fork of"
8808 8962 msgstr ""
8809 8963
8810 #: rhodecode/templates/base/base.mako:332
8964 #: rhodecode/templates/base/base.mako:339
8811 8965 #, python-format
8812 8966 msgid "Repository locked by %(user)s"
8813 8967 msgstr ""
8814 8968
8815 #: rhodecode/templates/base/base.mako:337
8969 #: rhodecode/templates/base/base.mako:344
8816 8970 msgid "Repository not locked. Pull repository to lock it."
8817 8971 msgstr ""
8818 8972
8819 #: rhodecode/templates/base/base.mako:353
8973 #: rhodecode/templates/base/base.mako:360
8820 8974 msgid "This repository has been archived. It is now read-only."
8821 8975 msgstr ""
8822 8976
8823 #: rhodecode/templates/base/base.mako:366
8977 #: rhodecode/templates/base/base.mako:373
8824 8978 #: rhodecode/templates/data_table/_dt_elements.mako:58
8825 8979 #: rhodecode/templates/data_table/_dt_elements.mako:59
8826 8980 #: rhodecode/templates/data_table/_dt_elements.mako:207
8827 8981 msgid "Summary"
8828 8982 msgstr ""
8829 8983
8830 #: rhodecode/templates/base/base.mako:367
8984 #: rhodecode/templates/base/base.mako:374
8831 8985 #: rhodecode/templates/data_table/_dt_elements.mako:63
8832 8986 #: rhodecode/templates/data_table/_dt_elements.mako:64
8833 8987 #: rhodecode/templates/files/file_authors_box.mako:30
8834 8988 #: rhodecode/templates/search/search.mako:99
8835 8989 #: rhodecode/templates/summary/components.mako:119
8836 8990 #: rhodecode/templates/summary/components.mako:127
8837 8991 msgid "Commits"
8838 8992 msgstr ""
8839 8993
8840 #: rhodecode/templates/base/base.mako:368
8994 #: rhodecode/templates/base/base.mako:375
8841 8995 #: rhodecode/templates/data_table/_dt_elements.mako:68
8842 8996 #: rhodecode/templates/data_table/_dt_elements.mako:69
8843 8997 #: rhodecode/templates/files/files.mako:15
8844 8998 #: rhodecode/templates/search/search.mako:99
8845 8999 msgid "Files"
8846 9000 msgstr ""
8847 9001
8848 #: rhodecode/templates/base/base.mako:369
9002 #: rhodecode/templates/base/base.mako:376
8849 9003 #: rhodecode/templates/bookmarks/bookmarks.mako:66
8850 9004 #: rhodecode/templates/branches/branches.mako:65
8851 9005 #: rhodecode/templates/tags/tags.mako:66
8852 9006 msgid "Compare"
8853 9007 msgstr ""
8854 9008
8855 #: rhodecode/templates/base/base.mako:374
9009 #: rhodecode/templates/base/base.mako:381
8856 9010 #, python-format
8857 9011 msgid "Show Pull Requests for %s"
8858 9012 msgstr ""
8859 9013
8860 #: rhodecode/templates/base/base.mako:385
9014 #: rhodecode/templates/base/base.mako:392
8861 9015 msgid "Artifacts"
8862 9016 msgstr ""
8863 9017
8864 #: rhodecode/templates/base/base.mako:391
9018 #: rhodecode/templates/base/base.mako:398
8865 9019 msgid "Repository Settings"
8866 9020 msgstr ""
8867 9021
8868 #: rhodecode/templates/base/base.mako:397
8869 msgid "Options"
8870 msgstr ""
8871
8872 #: rhodecode/templates/base/base.mako:402
8873 msgid "Unlock Repository"
8874 msgstr ""
8875
8876 9022 #: rhodecode/templates/base/base.mako:404
9023 msgid "Options"
9024 msgstr ""
9025
9026 #: rhodecode/templates/base/base.mako:409
9027 msgid "Unlock Repository"
9028 msgstr ""
9029
9030 #: rhodecode/templates/base/base.mako:411
8877 9031 msgid "Lock Repository"
8878 9032 msgstr ""
8879 9033
8880 #: rhodecode/templates/base/base.mako:457
9034 #: rhodecode/templates/base/base.mako:464
8881 9035 msgid "Group Home"
8882 9036 msgstr ""
8883 9037
8884 #: rhodecode/templates/base/base.mako:461
9038 #: rhodecode/templates/base/base.mako:468
8885 9039 msgid "You have admin right to this group, and can edit it"
8886 9040 msgstr ""
8887 9041
8888 #: rhodecode/templates/base/base.mako:461
9042 #: rhodecode/templates/base/base.mako:468
8889 9043 msgid "Group Settings"
8890 9044 msgstr ""
8891 9045
8892 #: rhodecode/templates/base/base.mako:504
8893 msgid "Create"
8894 msgstr ""
8895
8896 #: rhodecode/templates/base/base.mako:512
9046 #: rhodecode/templates/base/base.mako:519
8897 9047 msgid "This Repository"
8898 9048 msgstr ""
8899 9049
8900 #: rhodecode/templates/base/base.mako:514
9050 #: rhodecode/templates/base/base.mako:521
8901 9051 msgid "Create Pull Request"
8902 9052 msgstr ""
8903 9053
8904 #: rhodecode/templates/base/base.mako:518
8905 msgid "Fork this repository"
8906 msgstr ""
8907
8908 9054 #: rhodecode/templates/base/base.mako:525
9055 msgid "Fork this repository"
9056 msgstr ""
9057
9058 #: rhodecode/templates/base/base.mako:532
8909 9059 msgid "This Repository Group"
8910 9060 msgstr ""
8911 9061
8912 #: rhodecode/templates/base/base.mako:529
8913 #: rhodecode/templates/base/base.mako:545
8914 #: rhodecode/templates/base/base.mako:557
9062 #: rhodecode/templates/base/base.mako:536
9063 #: rhodecode/templates/base/base.mako:552
9064 #: rhodecode/templates/base/base.mako:564
8915 9065 msgid "New Repository"
8916 9066 msgstr ""
8917 9067
8918 #: rhodecode/templates/base/base.mako:535
8919 #: rhodecode/templates/base/base.mako:549
8920 #: rhodecode/templates/base/base.mako:563
9068 #: rhodecode/templates/base/base.mako:542
9069 #: rhodecode/templates/base/base.mako:556
9070 #: rhodecode/templates/base/base.mako:570
8921 9071 msgid "New Repository Group"
8922 9072 msgstr ""
8923 9073
8924 #: rhodecode/templates/base/base.mako:590
9074 #: rhodecode/templates/base/base.mako:597
8925 9075 msgid "Sign in"
8926 9076 msgstr ""
8927 9077
8928 #: rhodecode/templates/base/base.mako:615
9078 #: rhodecode/templates/base/base.mako:622
8929 9079 msgid "My personal group"
8930 9080 msgstr ""
8931 9081
8932 #: rhodecode/templates/base/base.mako:621
9082 #: rhodecode/templates/base/base.mako:628
8933 9083 #: rhodecode/templates/debug_style/alerts.html:5
8934 9084 #: rhodecode/templates/debug_style/buttons.html:5
8935 9085 #: rhodecode/templates/debug_style/code-block.html:6
8936 9086 #: rhodecode/templates/debug_style/collapsable-content.html:5
8937 9087 #: rhodecode/templates/debug_style/emails.html:5
8938 9088 #: rhodecode/templates/debug_style/form-elements-small.html:5
8939 9089 #: rhodecode/templates/debug_style/form-elements.html:5
8940 9090 #: rhodecode/templates/debug_style/form-inline.html:5
8941 9091 #: rhodecode/templates/debug_style/form-vertical.html:5
8942 9092 #: rhodecode/templates/debug_style/forms.html:5
8943 9093 #: rhodecode/templates/debug_style/icons.html:5
8944 9094 #: rhodecode/templates/debug_style/index.html:12
8945 9095 #: rhodecode/templates/debug_style/labels.html:5
8946 9096 #: rhodecode/templates/debug_style/layout-form-sidebar.html:5
8947 9097 #: rhodecode/templates/debug_style/login.html:6
8948 9098 #: rhodecode/templates/debug_style/panels.html:5
8949 9099 #: rhodecode/templates/debug_style/tables-wide.html:5
8950 9100 #: rhodecode/templates/debug_style/tables.html:5
8951 9101 #: rhodecode/templates/debug_style/typography.html:5
8952 9102 msgid "Style"
8953 9103 msgstr ""
8954 9104
8955 #: rhodecode/templates/base/base.mako:622
9105 #: rhodecode/templates/base/base.mako:629
8956 9106 msgid "[Style]"
8957 9107 msgstr ""
8958 9108
8959 #: rhodecode/templates/base/base.mako:639
9109 #: rhodecode/templates/base/base.mako:646
8960 9110 msgid "No Bookmarks yet."
8961 9111 msgstr ""
8962 9112
8963 #: rhodecode/templates/base/base.mako:677
9113 #: rhodecode/templates/base/base.mako:684
8964 9114 msgid "Sign Out"
8965 9115 msgstr ""
8966 9116
8967 #: rhodecode/templates/base/base.mako:725
9117 #: rhodecode/templates/base/base.mako:732
8968 9118 msgid "dismiss"
8969 9119 msgstr ""
8970 9120
8971 #: rhodecode/templates/base/base.mako:766
9121 #: rhodecode/templates/base/base.mako:773
8972 9122 msgid "search / go to..."
8973 9123 msgstr ""
8974 9124
8975 #: rhodecode/templates/base/base.mako:811
9125 #: rhodecode/templates/base/base.mako:818
8976 9126 msgid "Show activity journal"
8977 9127 msgstr ""
8978 9128
8979 #: rhodecode/templates/base/base.mako:812
9129 #: rhodecode/templates/base/base.mako:819
8980 9130 #: rhodecode/templates/journal/journal.mako:4
8981 9131 #: rhodecode/templates/journal/journal.mako:14
8982 9132 msgid "Journal"
8983 9133 msgstr ""
8984 9134
8985 #: rhodecode/templates/base/base.mako:817
9135 #: rhodecode/templates/base/base.mako:824
8986 9136 msgid "Show Public activity journal"
8987 9137 msgstr ""
8988 9138
8989 #: rhodecode/templates/base/base.mako:818
8990 msgid "Public journal"
8991 msgstr ""
8992
8993 #: rhodecode/templates/base/base.mako:824
8994 msgid "Show Gists"
8995 msgstr ""
8996
8997 9139 #: rhodecode/templates/base/base.mako:825
8998 msgid "Gists"
9140 msgid "Public journal"
8999 9141 msgstr ""
9000 9142
9001 9143 #: rhodecode/templates/base/base.mako:831
9144 msgid "Show Gists"
9145 msgstr ""
9146
9147 #: rhodecode/templates/base/base.mako:832
9148 msgid "Gists"
9149 msgstr ""
9150
9151 #: rhodecode/templates/base/base.mako:838
9002 9152 msgid "Admin settings"
9003 9153 msgstr ""
9004 9154
9005 #: rhodecode/templates/base/base.mako:1135
9155 #: rhodecode/templates/base/base.mako:1155
9006 9156 msgid "Keyboard shortcuts"
9007 9157 msgstr ""
9008 9158
9009 #: rhodecode/templates/base/base.mako:1143
9159 #: rhodecode/templates/base/base.mako:1163
9010 9160 msgid "Site-wide shortcuts"
9011 9161 msgstr ""
9012 9162
9013 #: rhodecode/templates/base/default_perms_box.mako:14
9163 #: rhodecode/templates/base/default_perms_box.mako:19
9014 9164 msgid "Inherited Permissions"
9015 9165 msgstr ""
9016 9166
9017 #: rhodecode/templates/base/default_perms_box.mako:15
9167 #: rhodecode/templates/base/default_perms_box.mako:25
9018 9168 msgid "Custom Permissions"
9019 9169 msgstr ""
9020 9170
9021 #: rhodecode/templates/base/default_perms_box.mako:17
9171 #: rhodecode/templates/base/default_perms_box.mako:29
9022 9172 msgid "Default Global Permissions"
9023 9173 msgstr ""
9024 9174
9025 #: rhodecode/templates/base/default_perms_box.mako:23
9175 #: rhodecode/templates/base/default_perms_box.mako:36
9026 9176 msgid "The following options configure the default permissions each user or group will inherit. You can override these permissions for each individual user or user group using individual permissions settings."
9027 9177 msgstr ""
9028 9178
9029 #: rhodecode/templates/base/default_perms_box.mako:27
9179 #: rhodecode/templates/base/default_perms_box.mako:40
9030 9180 msgid "Repository Creation"
9031 9181 msgstr ""
9032 9182
9033 #: rhodecode/templates/base/default_perms_box.mako:32
9183 #: rhodecode/templates/base/default_perms_box.mako:45
9034 9184 msgid "Permission to create root level repositories. When disabled, users can still create repositories inside their own repository groups."
9035 9185 msgstr ""
9036 9186
9037 #: rhodecode/templates/base/default_perms_box.mako:37
9187 #: rhodecode/templates/base/default_perms_box.mako:50
9038 9188 msgid "Repository Creation With Group Write Access"
9039 9189 msgstr ""
9040 9190
9041 #: rhodecode/templates/base/default_perms_box.mako:42
9191 #: rhodecode/templates/base/default_perms_box.mako:55
9042 9192 msgid "Write permission given on a repository group will allow creating repositories inside that group."
9043 9193 msgstr ""
9044 9194
9045 #: rhodecode/templates/base/default_perms_box.mako:47
9195 #: rhodecode/templates/base/default_perms_box.mako:60
9046 9196 msgid "Repository Forking"
9047 9197 msgstr ""
9048 9198
9049 #: rhodecode/templates/base/default_perms_box.mako:52
9199 #: rhodecode/templates/base/default_perms_box.mako:65
9050 9200 msgid "Permission to create root level repository forks. When disabled, users can still fork repositories inside their own repository groups."
9051 9201 msgstr ""
9052 9202
9053 #: rhodecode/templates/base/default_perms_box.mako:57
9203 #: rhodecode/templates/base/default_perms_box.mako:70
9054 9204 msgid "Repository Group Creation"
9055 9205 msgstr ""
9056 9206
9057 #: rhodecode/templates/base/default_perms_box.mako:62
9207 #: rhodecode/templates/base/default_perms_box.mako:75
9058 9208 msgid "Permission to create root level repository groups. When disabled, repository group admins can still create repository subgroups within their repository groups."
9059 9209 msgstr ""
9060 9210
9061 #: rhodecode/templates/base/default_perms_box.mako:67
9211 #: rhodecode/templates/base/default_perms_box.mako:80
9062 9212 msgid "User Group Creation"
9063 9213 msgstr ""
9064 9214
9065 #: rhodecode/templates/base/default_perms_box.mako:72
9215 #: rhodecode/templates/base/default_perms_box.mako:85
9066 9216 msgid "Permission to allow user group creation."
9067 9217 msgstr ""
9068 9218
9069 #: rhodecode/templates/base/default_perms_box.mako:78
9219 #: rhodecode/templates/base/default_perms_box.mako:91
9070 9220 msgid "Inherit Permissions From The Default User"
9071 9221 msgstr ""
9072 9222
9073 #: rhodecode/templates/base/default_perms_box.mako:83
9223 #: rhodecode/templates/base/default_perms_box.mako:96
9074 9224 msgid "Inherit default permissions from the default user. Turn off this option to force explicit permissions for users, even if they are more restrictive than the default user permissions."
9075 9225 msgstr ""
9076 9226
9077 #: rhodecode/templates/base/default_perms_box.mako:102
9227 #: rhodecode/templates/base/default_perms_box.mako:115
9078 9228 msgid "Inherit from default settings"
9079 9229 msgstr ""
9080 9230
9081 #: rhodecode/templates/base/default_perms_box.mako:107
9231 #: rhodecode/templates/base/default_perms_box.mako:120
9082 9232 #, python-format
9083 9233 msgid ""
9084 9234 "Select to inherit permissions from %s permissions settings, including default IP address whitelist and inheritance of \n"
9085 9235 "permission by members of user groups."
9086 9236 msgstr ""
9087 9237
9088 9238 #: rhodecode/templates/base/issue_tracker_settings.mako:81
9089 9239 msgid "Extra Prefix"
9090 9240 msgstr ""
9091 9241
9092 9242 #: rhodecode/templates/base/issue_tracker_settings.mako:92
9093 9243 msgid "show examples"
9094 9244 msgstr ""
9095 9245
9096 9246 #: rhodecode/templates/base/issue_tracker_settings.mako:160
9097 9247 msgid "Add new"
9098 9248 msgstr ""
9099 9249
9100 9250 #: rhodecode/templates/base/issue_tracker_settings.mako:168
9101 9251 msgid "New Entry"
9102 9252 msgstr ""
9103 9253
9104 9254 #: rhodecode/templates/base/issue_tracker_settings.mako:172
9105 9255 msgid "Confirm to remove this pattern:"
9106 9256 msgstr ""
9107 9257
9108 9258 #: rhodecode/templates/base/issue_tracker_settings.mako:293
9109 #: rhodecode/templates/changeset/changeset_file_comment.mako:275
9110 #: rhodecode/templates/changeset/changeset_file_comment.mako:326
9259 #: rhodecode/templates/changeset/changeset_file_comment.mako:340
9260 #: rhodecode/templates/changeset/changeset_file_comment.mako:391
9111 9261 #: rhodecode/templates/data_table/_dt_elements.mako:453
9112 #: rhodecode/templates/files/files_add.mako:60
9113 #: rhodecode/templates/files/files_edit.mako:62
9262 #: rhodecode/templates/files/files_add.mako:59
9263 #: rhodecode/templates/files/files_edit.mako:61
9114 9264 msgid "Preview"
9115 9265 msgstr ""
9116 9266
9117 9267 #: rhodecode/templates/base/issue_tracker_settings.mako:294
9118 9268 msgid "Test Pattern Preview"
9119 9269 msgstr ""
9120 9270
9121 #: rhodecode/templates/base/perms_summary.mako:26
9271 #: rhodecode/templates/base/perms_summary.mako:31
9122 9272 msgid "in JSON format"
9123 9273 msgstr ""
9124 9274
9125 #: rhodecode/templates/base/perms_summary.mako:35
9126 #: rhodecode/templates/base/perms_summary.mako:43
9275 #: rhodecode/templates/base/perms_summary.mako:40
9276 #: rhodecode/templates/base/perms_summary.mako:48
9127 9277 msgid "show"
9128 9278 msgstr ""
9129 9279
9130 #: rhodecode/templates/base/perms_summary.mako:36
9131 #: rhodecode/templates/base/perms_summary.mako:44
9280 #: rhodecode/templates/base/perms_summary.mako:41
9281 #: rhodecode/templates/base/perms_summary.mako:49
9132 9282 msgid "none"
9133 9283 msgstr ""
9134 9284
9135 #: rhodecode/templates/base/perms_summary.mako:37
9285 #: rhodecode/templates/base/perms_summary.mako:42
9136 9286 #: rhodecode/templates/commits/changelog_elements.mako:102
9137 9287 #: rhodecode/templates/files/base.mako:26
9138 9288 msgid "merge"
9139 9289 msgstr ""
9140 9290
9141 #: rhodecode/templates/base/perms_summary.mako:38
9291 #: rhodecode/templates/base/perms_summary.mako:43
9142 9292 msgid "push"
9143 9293 msgstr ""
9144 9294
9145 #: rhodecode/templates/base/perms_summary.mako:39
9295 #: rhodecode/templates/base/perms_summary.mako:44
9146 9296 msgid "push force"
9147 9297 msgstr ""
9148 9298
9149 #: rhodecode/templates/base/perms_summary.mako:45
9299 #: rhodecode/templates/base/perms_summary.mako:50
9150 9300 msgid "read"
9151 9301 msgstr ""
9152 9302
9153 #: rhodecode/templates/base/perms_summary.mako:46
9303 #: rhodecode/templates/base/perms_summary.mako:51
9154 9304 msgid "write"
9155 9305 msgstr ""
9156 9306
9157 #: rhodecode/templates/base/perms_summary.mako:47
9307 #: rhodecode/templates/base/perms_summary.mako:52
9158 9308 msgid "admin"
9159 9309 msgstr ""
9160 9310
9161 #: rhodecode/templates/base/perms_summary.mako:55
9311 #: rhodecode/templates/base/perms_summary.mako:60
9162 9312 msgid "No permissions defined"
9163 9313 msgstr ""
9164 9314
9165 #: rhodecode/templates/base/perms_summary.mako:63
9166 #: rhodecode/templates/base/perms_summary.mako:170
9167 #: rhodecode/templates/base/perms_summary.mako:243
9315 #: rhodecode/templates/base/perms_summary.mako:68
9316 #: rhodecode/templates/base/perms_summary.mako:175
9317 #: rhodecode/templates/base/perms_summary.mako:248
9168 9318 msgid "Permission"
9169 9319 msgstr ""
9170 9320
9171 #: rhodecode/templates/base/perms_summary.mako:65
9172 #: rhodecode/templates/base/perms_summary.mako:245
9321 #: rhodecode/templates/base/perms_summary.mako:70
9322 #: rhodecode/templates/base/perms_summary.mako:250
9173 9323 msgid "Edit Permission"
9174 9324 msgstr ""
9175 9325
9176 #: rhodecode/templates/base/perms_summary.mako:119
9177 #: rhodecode/templates/base/perms_summary.mako:128
9326 #: rhodecode/templates/base/perms_summary.mako:124
9327 #: rhodecode/templates/base/perms_summary.mako:133
9178 9328 msgid "edit global"
9179 9329 msgstr ""
9180 9330
9181 #: rhodecode/templates/base/perms_summary.mako:136
9331 #: rhodecode/templates/base/perms_summary.mako:141
9182 9332 msgid "Repository default permission"
9183 9333 msgstr ""
9184 9334
9185 #: rhodecode/templates/base/perms_summary.mako:139
9335 #: rhodecode/templates/base/perms_summary.mako:144
9186 9336 msgid "Repository group default permission"
9187 9337 msgstr ""
9188 9338
9189 #: rhodecode/templates/base/perms_summary.mako:142
9339 #: rhodecode/templates/base/perms_summary.mako:147
9190 9340 msgid "User group default permission"
9191 9341 msgstr ""
9192 9342
9193 #: rhodecode/templates/base/perms_summary.mako:148
9343 #: rhodecode/templates/base/perms_summary.mako:153
9194 9344 msgid "Inherit permissions"
9195 9345 msgstr ""
9196 9346
9197 #: rhodecode/templates/base/perms_summary.mako:151
9347 #: rhodecode/templates/base/perms_summary.mako:156
9198 9348 msgid "Create repositories"
9199 9349 msgstr ""
9200 9350
9201 #: rhodecode/templates/base/perms_summary.mako:154
9351 #: rhodecode/templates/base/perms_summary.mako:159
9202 9352 msgid "Fork repositories"
9203 9353 msgstr ""
9204 9354
9205 #: rhodecode/templates/base/perms_summary.mako:157
9355 #: rhodecode/templates/base/perms_summary.mako:162
9206 9356 msgid "Create repository groups"
9207 9357 msgstr ""
9208 9358
9209 #: rhodecode/templates/base/perms_summary.mako:160
9359 #: rhodecode/templates/base/perms_summary.mako:165
9210 9360 msgid "Create user groups"
9211 9361 msgstr ""
9212 9362
9213 #: rhodecode/templates/base/perms_summary.mako:172
9363 #: rhodecode/templates/base/perms_summary.mako:177
9214 9364 msgid "Edit Branch Permission"
9215 9365 msgstr ""
9216 9366
9217 #: rhodecode/templates/base/perms_summary.mako:286
9367 #: rhodecode/templates/base/perms_summary.mako:291
9218 9368 msgid "overridden by"
9219 9369 msgstr ""
9220 9370
9221 #: rhodecode/templates/base/perms_summary.mako:321
9371 #: rhodecode/templates/base/perms_summary.mako:326
9222 9372 msgid "No matching permission defined"
9223 9373 msgstr ""
9224 9374
9225 9375 #: rhodecode/templates/base/root.mako:156
9226 9376 msgid "Please enable JavaScript to use RhodeCode Enterprise"
9227 9377 msgstr ""
9228 9378
9229 9379 #: rhodecode/templates/base/vcs_settings.mako:16
9230 9380 msgid "Require SSL for vcs operations"
9231 9381 msgstr ""
9232 9382
9233 9383 #: rhodecode/templates/base/vcs_settings.mako:19
9234 9384 msgid "Activate to set RhodeCode to require SSL for pushing or pulling. If SSL certificate is missing it will return a HTTP Error 406: Not Acceptable."
9235 9385 msgstr ""
9236 9386
9237 9387 #: rhodecode/templates/base/vcs_settings.mako:29
9238 9388 msgid "Main Storage Location"
9239 9389 msgstr ""
9240 9390
9241 9391 #: rhodecode/templates/base/vcs_settings.mako:37
9242 9392 msgid "Click to unlock. You must restart RhodeCode in order to make this setting take effect."
9243 9393 msgstr ""
9244 9394
9245 9395 #: rhodecode/templates/base/vcs_settings.mako:41
9246 9396 msgid "Repository location change is disabled. You can enable this by changing the `allow_repo_location_change` inside .ini file."
9247 9397 msgstr ""
9248 9398
9249 9399 #: rhodecode/templates/base/vcs_settings.mako:48
9250 9400 msgid "Filesystem location where repositories should be stored. After changing this value a restart and rescan of the repository folder are required."
9251 9401 msgstr ""
9252 9402
9253 9403 #: rhodecode/templates/base/vcs_settings.mako:57
9254 9404 msgid "Internal Hooks"
9255 9405 msgstr ""
9256 9406
9257 9407 #: rhodecode/templates/base/vcs_settings.mako:63
9258 9408 msgid "Show repository size after push"
9259 9409 msgstr ""
9260 9410
9261 9411 #: rhodecode/templates/base/vcs_settings.mako:67
9262 9412 msgid "Trigger a hook that calculates repository size after each push."
9263 9413 msgstr ""
9264 9414
9265 9415 #: rhodecode/templates/base/vcs_settings.mako:71
9266 9416 msgid "Execute pre/post push hooks"
9267 9417 msgstr ""
9268 9418
9269 9419 #: rhodecode/templates/base/vcs_settings.mako:74
9270 9420 msgid "Execute Built in pre/post push hooks. This also executes rcextensions hooks."
9271 9421 msgstr ""
9272 9422
9273 9423 #: rhodecode/templates/base/vcs_settings.mako:78
9274 9424 msgid "Execute pre/post pull hooks"
9275 9425 msgstr ""
9276 9426
9277 9427 #: rhodecode/templates/base/vcs_settings.mako:81
9278 9428 msgid "Execute Built in pre/post pull hooks. This also executes rcextensions hooks."
9279 9429 msgstr ""
9280 9430
9281 9431 #: rhodecode/templates/base/vcs_settings.mako:91
9282 9432 msgid "Mercurial Settings"
9283 9433 msgstr ""
9284 9434
9285 9435 #: rhodecode/templates/base/vcs_settings.mako:96
9286 9436 msgid "Enable largefiles extension"
9287 9437 msgstr ""
9288 9438
9289 9439 #: rhodecode/templates/base/vcs_settings.mako:100
9290 9440 msgid "Enable Largefiles extensions for all repositories."
9291 9441 msgstr ""
9292 9442
9293 9443 #: rhodecode/templates/base/vcs_settings.mako:102
9294 9444 msgid "Enable Largefiles extensions for this repository."
9295 9445 msgstr ""
9296 9446
9297 9447 #: rhodecode/templates/base/vcs_settings.mako:113
9298 9448 msgid "Filesystem location where Mercurial largefile objects should be stored."
9299 9449 msgstr ""
9300 9450
9301 9451 #: rhodecode/templates/base/vcs_settings.mako:119
9302 9452 msgid "Set repositories as publishing"
9303 9453 msgstr ""
9304 9454
9305 9455 #: rhodecode/templates/base/vcs_settings.mako:119
9306 9456 msgid "Set repository as publishing"
9307 9457 msgstr ""
9308 9458
9309 9459 #: rhodecode/templates/base/vcs_settings.mako:122
9310 9460 msgid "When this is enabled all commits in the repository are seen as public commits by clients."
9311 9461 msgstr ""
9312 9462
9313 9463 #: rhodecode/templates/base/vcs_settings.mako:127
9314 9464 msgid "Enable hgsubversion extension"
9315 9465 msgstr ""
9316 9466
9317 9467 #: rhodecode/templates/base/vcs_settings.mako:130
9318 9468 msgid "Requires hgsubversion library to be installed. Allows cloning remote SVN repositories and migrates them to Mercurial type."
9319 9469 msgstr ""
9320 9470
9321 9471 #: rhodecode/templates/base/vcs_settings.mako:136
9322 9472 msgid "Enable Evolve and Topic extension"
9323 9473 msgstr ""
9324 9474
9325 9475 #: rhodecode/templates/base/vcs_settings.mako:140
9326 9476 msgid "Enable Evolve and Topic extensions for all repositories."
9327 9477 msgstr ""
9328 9478
9329 9479 #: rhodecode/templates/base/vcs_settings.mako:142
9330 9480 msgid "Enable Evolve and Topic extensions for this repository."
9331 9481 msgstr ""
9332 9482
9333 9483 #: rhodecode/templates/base/vcs_settings.mako:153
9334 9484 msgid "Git Settings"
9335 9485 msgstr ""
9336 9486
9337 9487 #: rhodecode/templates/base/vcs_settings.mako:158
9338 9488 msgid "Enable lfs extension"
9339 9489 msgstr ""
9340 9490
9341 9491 #: rhodecode/templates/base/vcs_settings.mako:162
9342 9492 msgid "Enable lfs extensions for all repositories."
9343 9493 msgstr ""
9344 9494
9345 9495 #: rhodecode/templates/base/vcs_settings.mako:164
9346 9496 msgid "Enable lfs extensions for this repository."
9347 9497 msgstr ""
9348 9498
9349 9499 #: rhodecode/templates/base/vcs_settings.mako:175
9350 9500 msgid "Filesystem location where Git lfs objects should be stored."
9351 9501 msgstr ""
9352 9502
9353 9503 #: rhodecode/templates/base/vcs_settings.mako:186
9354 9504 msgid "Global Subversion Settings"
9355 9505 msgstr ""
9356 9506
9357 9507 #: rhodecode/templates/base/vcs_settings.mako:192
9358 9508 msgid "Proxy subversion HTTP requests"
9359 9509 msgstr ""
9360 9510
9361 9511 #: rhodecode/templates/base/vcs_settings.mako:196
9362 9512 msgid "Subversion HTTP Support. Enables communication with SVN over HTTP protocol."
9363 9513 msgstr ""
9364 9514
9365 9515 #: rhodecode/templates/base/vcs_settings.mako:197
9366 9516 msgid "SVN Protocol setup Documentation"
9367 9517 msgstr ""
9368 9518
9369 9519 #: rhodecode/templates/base/vcs_settings.mako:203
9370 9520 msgid "Subversion HTTP Server URL"
9371 9521 msgstr ""
9372 9522
9373 9523 #: rhodecode/templates/base/vcs_settings.mako:209
9374 9524 msgid "Generate Apache Config"
9375 9525 msgstr ""
9376 9526
9377 9527 #: rhodecode/templates/base/vcs_settings.mako:221
9378 9528 msgid "Subversion Settings"
9379 9529 msgstr ""
9380 9530
9381 9531 #: rhodecode/templates/base/vcs_settings.mako:226
9382 9532 msgid "Repository patterns"
9383 9533 msgstr ""
9384 9534
9385 9535 #: rhodecode/templates/base/vcs_settings.mako:230
9386 9536 msgid "Patterns for identifying SVN branches and tags. For recursive search, use \"*\". Eg.: \"/branches/*\""
9387 9537 msgstr ""
9388 9538
9389 9539 #: rhodecode/templates/base/vcs_settings.mako:294
9390 9540 msgid "Pull Request Settings"
9391 9541 msgstr ""
9392 9542
9393 9543 #: rhodecode/templates/base/vcs_settings.mako:299
9394 9544 msgid "Enable server-side merge for pull requests"
9395 9545 msgstr ""
9396 9546
9397 9547 #: rhodecode/templates/base/vcs_settings.mako:302
9398 9548 msgid "Note: when this feature is enabled, it only runs hooks defined in the rcextension package. Custom hooks added on the Admin -> Settings -> Hooks page will not be run when pull requests are automatically merged from the web interface."
9399 9549 msgstr ""
9400 9550
9401 9551 #: rhodecode/templates/base/vcs_settings.mako:306
9402 9552 msgid "Invalidate and relocate inline comments during update"
9403 9553 msgstr ""
9404 9554
9405 9555 #: rhodecode/templates/base/vcs_settings.mako:309
9406 9556 msgid "During the update of a pull request, the position of inline comments will be updated and outdated inline comments will be hidden."
9407 9557 msgstr ""
9408 9558
9409 9559 #: rhodecode/templates/base/vcs_settings.mako:318
9410 9560 msgid "Diff cache"
9411 9561 msgstr ""
9412 9562
9413 9563 #: rhodecode/templates/base/vcs_settings.mako:323
9414 9564 msgid "Enable caching diffs for pull requests cache and commits"
9415 9565 msgstr ""
9416 9566
9417 9567 #: rhodecode/templates/base/vcs_settings.mako:332
9418 9568 msgid "Mercurial Pull Request Settings"
9419 9569 msgstr ""
9420 9570
9421 9571 #: rhodecode/templates/base/vcs_settings.mako:338
9422 9572 msgid "Use rebase as merge strategy"
9423 9573 msgstr ""
9424 9574
9425 9575 #: rhodecode/templates/base/vcs_settings.mako:341
9426 9576 msgid "Use rebase instead of creating a merge commit when merging via web interface."
9427 9577 msgstr ""
9428 9578
9429 9579 #: rhodecode/templates/base/vcs_settings.mako:346
9430 9580 msgid "Close branch before merging it"
9431 9581 msgstr ""
9432 9582
9433 9583 #: rhodecode/templates/base/vcs_settings.mako:349
9434 9584 msgid "Close branch before merging it into destination branch. No effect when rebase strategy is use."
9435 9585 msgstr ""
9436 9586
9437 9587 #: rhodecode/templates/bookmarks/bookmarks.mako:5
9438 9588 #, python-format
9439 9589 msgid "%s Bookmarks"
9440 9590 msgstr ""
9441 9591
9442 9592 #: rhodecode/templates/bookmarks/bookmarks.mako:28
9443 9593 msgid "Compare Selected Bookmarks"
9444 9594 msgstr ""
9445 9595
9446 9596 #: rhodecode/templates/bookmarks/bookmarks.mako:34
9447 9597 msgid "bookmarks"
9448 9598 msgstr ""
9449 9599
9450 9600 #: rhodecode/templates/branches/branches.mako:5
9451 9601 #, python-format
9452 9602 msgid "%s Branches"
9453 9603 msgstr ""
9454 9604
9455 9605 #: rhodecode/templates/branches/branches.mako:28
9456 9606 msgid "Compare Selected Branches"
9457 9607 msgstr ""
9458 9608
9459 9609 #: rhodecode/templates/branches/branches.mako:34
9460 9610 msgid "branches"
9461 9611 msgstr ""
9462 9612
9463 9613 #: rhodecode/templates/changeset/changeset.mako:9
9464 9614 msgid "{} Commit"
9465 9615 msgstr ""
9466 9616
9467 9617 #: rhodecode/templates/changeset/changeset.mako:78
9468 9618 #: rhodecode/templates/commits/changelog_elements.mako:56
9469 9619 #: rhodecode/templates/files/files_source_header.mako:48
9470 9620 #: rhodecode/templates/files/files_tree_header.mako:35
9471 9621 #: rhodecode/templates/summary/summary_commits.mako:43
9472 9622 msgid "Copy the full commit id"
9473 9623 msgstr ""
9474 9624
9475 9625 #: rhodecode/templates/changeset/changeset.mako:83
9476 9626 msgid "Commit phase"
9477 9627 msgstr ""
9478 9628
9479 9629 #: rhodecode/templates/changeset/changeset.mako:90
9480 9630 #: rhodecode/templates/changeset/changeset.mako:97
9481 9631 msgid "Evolve State"
9482 9632 msgstr ""
9483 9633
9484 9634 #: rhodecode/templates/changeset/changeset.mako:91
9485 9635 msgid "obsolete"
9486 9636 msgstr ""
9487 9637
9488 9638 #: rhodecode/templates/changeset/changeset.mako:98
9489 9639 msgid "hidden"
9490 9640 msgstr ""
9491 9641
9492 9642 #: rhodecode/templates/changeset/changeset.mako:117
9493 9643 msgid "Commit navigation"
9494 9644 msgstr ""
9495 9645
9496 9646 #: rhodecode/templates/changeset/changeset.mako:120
9497 9647 msgid "Parent Commit"
9498 9648 msgstr ""
9499 9649
9500 9650 #: rhodecode/templates/changeset/changeset.mako:120
9501 9651 msgid "parent"
9502 9652 msgstr ""
9503 9653
9504 9654 #: rhodecode/templates/changeset/changeset.mako:124
9505 9655 msgid "Child Commit"
9506 9656 msgstr ""
9507 9657
9508 9658 #: rhodecode/templates/changeset/changeset.mako:124
9509 9659 msgid "child"
9510 9660 msgstr ""
9511 9661
9512 9662 #: rhodecode/templates/changeset/changeset.mako:132
9513 9663 msgid "Diff options"
9514 9664 msgstr ""
9515 9665
9516 9666 #: rhodecode/templates/changeset/changeset.mako:136
9517 9667 msgid "Raw Diff"
9518 9668 msgstr ""
9519 9669
9520 9670 #: rhodecode/templates/changeset/changeset.mako:140
9521 9671 msgid "Patch Diff"
9522 9672 msgstr ""
9523 9673
9524 9674 #: rhodecode/templates/changeset/changeset.mako:144
9525 9675 msgid "Download Diff"
9526 9676 msgstr ""
9527 9677
9528 9678 #: rhodecode/templates/changeset/changeset.mako:224
9529 9679 msgid "No Child Commits"
9530 9680 msgstr ""
9531 9681
9532 9682 #: rhodecode/templates/changeset/changeset.mako:263
9533 9683 msgid "No Parent Commits"
9534 9684 msgstr ""
9535 9685
9536 #: rhodecode/templates/changeset/changeset_file_comment.mako:33
9686 #: rhodecode/templates/changeset/changeset_file_comment.mako:41
9537 9687 #: rhodecode/templates/pullrequests/pullrequest_show.mako:401
9538 9688 msgid "Resolved by comment #{}"
9539 9689 msgstr ""
9540 9690
9541 #: rhodecode/templates/changeset/changeset_file_comment.mako:40
9542 msgid "Click to resolve this comment"
9543 msgstr ""
9544
9545 #: rhodecode/templates/changeset/changeset_file_comment.mako:70
9546 #: rhodecode/templates/changeset/changeset_file_comment.mako:72
9547 msgid "pull request !{}"
9548 msgstr ""
9549
9550 #: rhodecode/templates/changeset/changeset_file_comment.mako:77
9551 msgid "Status change on commit"
9552 msgstr ""
9553
9554 #: rhodecode/templates/changeset/changeset_file_comment.mako:85
9555 #: rhodecode/templates/compare/compare_diff.mako:139
9556 #: rhodecode/templates/email_templates/commit_comment.mako:53
9557 msgid "Commit status"
9558 msgstr ""
9559
9560 #: rhodecode/templates/changeset/changeset_file_comment.mako:94
9561 msgid "Pull request author"
9562 msgstr ""
9563
9564 #: rhodecode/templates/changeset/changeset_file_comment.mako:95
9565 msgid "author"
9566 msgstr ""
9567
9568 #: rhodecode/templates/changeset/changeset_file_comment.mako:103
9569 #: rhodecode/templates/changeset/changeset_file_comment.mako:119
9570 msgid "Outdated comment from pull request version v{0}, latest v{1}"
9691 #: rhodecode/templates/changeset/changeset_file_comment.mako:49
9692 msgid "Click to create resolution comment."
9693 msgstr ""
9694
9695 #: rhodecode/templates/changeset/changeset_file_comment.mako:58
9696 msgid "This comment resolves TODO #{}"
9697 msgstr ""
9698
9699 #: rhodecode/templates/changeset/changeset_file_comment.mako:90
9700 msgid "Status from pull request."
9571 9701 msgstr ""
9572 9702
9573 9703 #: rhodecode/templates/changeset/changeset_file_comment.mako:107
9574 #: rhodecode/templates/changeset/changeset_file_comment.mako:122
9704 msgid "Pull request author"
9705 msgstr ""
9706
9707 #: rhodecode/templates/changeset/changeset_file_comment.mako:108
9708 msgid "author"
9709 msgstr ""
9710
9711 #: rhodecode/templates/changeset/changeset_file_comment.mako:163
9712 #: rhodecode/templates/changeset/changeset_file_comment.mako:179
9713 msgid "Outdated comment from pull request version v{0}, latest v{1}"
9714 msgstr ""
9715
9716 #: rhodecode/templates/changeset/changeset_file_comment.mako:167
9717 #: rhodecode/templates/changeset/changeset_file_comment.mako:183
9575 9718 msgid "Comment from pull request version v{0}, latest v{1}"
9576 9719 msgstr ""
9577 9720
9578 #: rhodecode/templates/changeset/changeset_file_comment.mako:149
9579 #: rhodecode/templates/changeset/changeset_file_comment.mako:152
9580 msgid "Prev"
9581 msgstr ""
9582
9583 #: rhodecode/templates/changeset/changeset_file_comment.mako:150
9584 #: rhodecode/templates/changeset/changeset_file_comment.mako:153
9585 msgid "Next"
9586 msgstr ""
9587
9588 #: rhodecode/templates/changeset/changeset_file_comment.mako:192
9721 #: rhodecode/templates/changeset/changeset_file_comment.mako:205
9722 #: rhodecode/templates/changeset/changeset_file_comment.mako:206
9723 #: rhodecode/templates/changeset/changeset_file_comment.mako:209
9724 #: rhodecode/templates/changeset/changeset_file_comment.mako:210
9725 msgid "Action unavailable"
9726 msgstr ""
9727
9728 #: rhodecode/templates/changeset/changeset_file_comment.mako:214
9729 msgid "Jump to the previous outdated comment"
9730 msgstr ""
9731
9732 #: rhodecode/templates/changeset/changeset_file_comment.mako:215
9733 msgid "Jump to the next outdated comment"
9734 msgstr ""
9735
9736 #: rhodecode/templates/changeset/changeset_file_comment.mako:217
9737 msgid "Jump to the previous comment"
9738 msgstr ""
9739
9740 #: rhodecode/templates/changeset/changeset_file_comment.mako:218
9741 msgid "Jump to the next comment"
9742 msgstr ""
9743
9744 #: rhodecode/templates/changeset/changeset_file_comment.mako:257
9589 9745 msgid "Leave a comment on this Pull Request."
9590 9746 msgstr ""
9591 9747
9592 #: rhodecode/templates/changeset/changeset_file_comment.mako:194
9748 #: rhodecode/templates/changeset/changeset_file_comment.mako:259
9593 9749 msgid "Leave a comment on {} commits in this range."
9594 9750 msgstr ""
9595 9751
9596 #: rhodecode/templates/changeset/changeset_file_comment.mako:196
9752 #: rhodecode/templates/changeset/changeset_file_comment.mako:261
9597 9753 msgid "Leave a comment on this Commit."
9598 9754 msgstr ""
9599 9755
9600 #: rhodecode/templates/changeset/changeset_file_comment.mako:283
9756 #: rhodecode/templates/changeset/changeset_file_comment.mako:348
9601 9757 #: rhodecode/templates/codeblocks/diffs.mako:83
9602 9758 msgid "You need to be logged in to leave comments."
9603 9759 msgstr ""
9604 9760
9605 #: rhodecode/templates/changeset/changeset_file_comment.mako:284
9761 #: rhodecode/templates/changeset/changeset_file_comment.mako:349
9606 9762 #: rhodecode/templates/codeblocks/diffs.mako:83
9607 9763 msgid "Login now"
9608 9764 msgstr ""
9609 9765
9610 #: rhodecode/templates/changeset/changeset_file_comment.mako:331
9766 #: rhodecode/templates/changeset/changeset_file_comment.mako:396
9611 9767 msgid "Mark as"
9612 9768 msgstr ""
9613 9769
9614 #: rhodecode/templates/changeset/changeset_file_comment.mako:354
9770 #: rhodecode/templates/changeset/changeset_file_comment.mako:419
9615 9771 #: rhodecode/templates/files/files_upload.mako:86
9616 9772 msgid "Drag'n Drop files here or"
9617 9773 msgstr ""
9618 9774
9619 #: rhodecode/templates/changeset/changeset_file_comment.mako:354
9775 #: rhodecode/templates/changeset/changeset_file_comment.mako:419
9620 9776 #: rhodecode/templates/files/files_upload.mako:86
9621 9777 msgid "Choose your files"
9622 9778 msgstr ""
9623 9779
9624 #: rhodecode/templates/changeset/changeset_file_comment.mako:357
9780 #: rhodecode/templates/changeset/changeset_file_comment.mako:422
9625 9781 msgid "uploading..."
9626 9782 msgstr ""
9627 9783
9628 #: rhodecode/templates/changeset/changeset_file_comment.mako:388
9784 #: rhodecode/templates/changeset/changeset_file_comment.mako:453
9629 9785 #: rhodecode/templates/compare/compare_diff.mako:108
9630 9786 #: rhodecode/templates/compare/compare_diff.mako:116
9631 9787 #: rhodecode/templates/compare/compare_diff.mako:124
9632 9788 #: rhodecode/templates/compare/compare_diff.mako:126
9633 9789 msgid "Comment"
9634 9790 msgstr ""
9635 9791
9636 #: rhodecode/templates/changeset/changeset_file_comment.mako:407
9792 #: rhodecode/templates/changeset/changeset_file_comment.mako:472
9637 9793 #: rhodecode/templates/pullrequests/pullrequest_show.mako:39
9638 9794 #: rhodecode/templates/pullrequests/pullrequest_show.mako:103
9639 9795 #: rhodecode/templates/pullrequests/pullrequests.mako:31
9640 9796 msgid "Closed"
9641 9797 msgstr ""
9642 9798
9643 #: rhodecode/templates/changeset/changeset_file_comment.mako:416
9799 #: rhodecode/templates/changeset/changeset_file_comment.mako:481
9644 9800 msgid "Comments parsed using {} syntax."
9645 9801 msgstr ""
9646 9802
9647 #: rhodecode/templates/changeset/changeset_file_comment.mako:417
9803 #: rhodecode/templates/changeset/changeset_file_comment.mako:482
9648 9804 msgid "Use @username inside this text to send notification to this RhodeCode user"
9649 9805 msgstr ""
9650 9806
9651 #: rhodecode/templates/changeset/changeset_file_comment.mako:418
9807 #: rhodecode/templates/changeset/changeset_file_comment.mako:483
9652 9808 msgid "and"
9653 9809 msgstr ""
9654 9810
9655 #: rhodecode/templates/changeset/changeset_file_comment.mako:419
9811 #: rhodecode/templates/changeset/changeset_file_comment.mako:484
9656 9812 msgid "Start typing with / for certain actions to be triggered via text box."
9657 9813 msgstr ""
9658 9814
9659 #: rhodecode/templates/changeset/changeset_file_comment.mako:420
9815 #: rhodecode/templates/changeset/changeset_file_comment.mako:485
9660 9816 msgid "actions supported."
9661 9817 msgstr ""
9662 9818
9663 9819 #: rhodecode/templates/changeset/changeset_range.mako:5
9664 9820 #, python-format
9665 9821 msgid "%s Commits"
9666 9822 msgstr ""
9667 9823
9668 9824 #: rhodecode/templates/changeset/changeset_range.mako:33
9669 9825 msgid "Commit Range"
9670 9826 msgstr ""
9671 9827
9672 9828 #: rhodecode/templates/changeset/changeset_range.mako:42
9673 9829 msgid "Range"
9674 9830 msgstr ""
9675 9831
9676 9832 #: rhodecode/templates/changeset/changeset_range.mako:60
9677 9833 msgid "Diff Option"
9678 9834 msgstr ""
9679 9835
9680 9836 #: rhodecode/templates/changeset/changeset_range.mako:71
9681 9837 msgid "Show combined diff"
9682 9838 msgstr ""
9683 9839
9684 9840 #: rhodecode/templates/changeset/diff_block.mako:7
9685 9841 msgid "The requested commit is too big and content was truncated."
9686 9842 msgstr ""
9687 9843
9688 9844 #: rhodecode/templates/changeset/diff_block.mako:7
9689 9845 #: rhodecode/templates/changeset/diff_block.mako:10
9690 9846 #: rhodecode/templates/changeset/diff_block.mako:25
9691 9847 #: rhodecode/templates/changeset/diff_block.mako:46
9692 9848 #: rhodecode/templates/codeblocks/diffs.mako:208
9693 #: rhodecode/templates/codeblocks/diffs.mako:272
9849 #: rhodecode/templates/codeblocks/diffs.mako:283
9694 9850 msgid "Showing a big diff might take some time and resources, continue?"
9695 9851 msgstr ""
9696 9852
9697 9853 #: rhodecode/templates/changeset/diff_block.mako:7
9698 9854 #: rhodecode/templates/changeset/diff_block.mako:10
9699 9855 #: rhodecode/templates/changeset/diff_block.mako:25
9700 9856 #: rhodecode/templates/changeset/diff_block.mako:46
9701 9857 #: rhodecode/templates/codeblocks/diffs.mako:208
9702 #: rhodecode/templates/codeblocks/diffs.mako:272
9858 #: rhodecode/templates/codeblocks/diffs.mako:283
9703 9859 msgid "Show full diff"
9704 9860 msgstr ""
9705 9861
9706 9862 #: rhodecode/templates/changeset/diff_block.mako:10
9707 9863 msgid "The requested file is too big and its content is not shown."
9708 9864 msgstr ""
9709 9865
9710 9866 #: rhodecode/templates/changeset/diff_block.mako:25
9711 9867 #: rhodecode/templates/changeset/diff_block.mako:46
9712 9868 msgid "Diff was truncated. File content available only in full diff."
9713 9869 msgstr ""
9714 9870
9715 9871 #: rhodecode/templates/codeblocks/diffs.mako:141
9716 9872 msgid "not available in this view"
9717 9873 msgstr ""
9718 9874
9719 9875 #: rhodecode/templates/codeblocks/diffs.mako:150
9720 9876 msgid "{} unresolved"
9721 9877 msgstr ""
9722 9878
9723 9879 #: rhodecode/templates/codeblocks/diffs.mako:153
9724 9880 msgid "0 unresolved"
9725 9881 msgstr ""
9726 9882
9727 9883 #: rhodecode/templates/codeblocks/diffs.mako:156
9728 9884 msgid "{} Resolved"
9729 9885 msgstr ""
9730 9886
9731 9887 #: rhodecode/templates/codeblocks/diffs.mako:170
9732 9888 msgid "0 General"
9733 9889 msgstr ""
9734 9890
9735 9891 #: rhodecode/templates/codeblocks/diffs.mako:178
9736 9892 msgid "0 Inline"
9737 9893 msgstr ""
9738 9894
9739 9895 #: rhodecode/templates/codeblocks/diffs.mako:189
9740 9896 #: rhodecode/templates/codeblocks/diffs.mako:194
9741 9897 msgid "{} Outdated"
9742 9898 msgstr ""
9743 9899
9744 9900 #: rhodecode/templates/codeblocks/diffs.mako:191
9745 9901 msgid "show outdated"
9746 9902 msgstr ""
9747 9903
9748 9904 #: rhodecode/templates/codeblocks/diffs.mako:192
9749 9905 msgid "hide outdated"
9750 9906 msgstr ""
9751 9907
9752 9908 #: rhodecode/templates/codeblocks/diffs.mako:207
9753 9909 msgid "The requested changes are too big and content was truncated."
9754 9910 msgstr ""
9755 9911
9756 9912 #: rhodecode/templates/codeblocks/diffs.mako:231
9757 9913 msgid "Some changes may be hidden"
9758 9914 msgstr ""
9759 9915
9760 9916 #: rhodecode/templates/codeblocks/diffs.mako:233
9761 9917 msgid "No files"
9762 9918 msgstr ""
9763 9919
9764 #: rhodecode/templates/codeblocks/diffs.mako:272
9920 #: rhodecode/templates/codeblocks/diffs.mako:283
9765 9921 msgid "The requested commit or file is too big and content was truncated."
9766 9922 msgstr ""
9767 9923
9768 #: rhodecode/templates/codeblocks/diffs.mako:279
9924 #: rhodecode/templates/codeblocks/diffs.mako:290
9769 9925 #, python-format
9770 9926 msgid "This diff has been collapsed as it changes many lines, (%i lines changed)"
9771 9927 msgstr ""
9772 9928
9773 #: rhodecode/templates/codeblocks/diffs.mako:281
9929 #: rhodecode/templates/codeblocks/diffs.mako:292
9774 9930 msgid "Show them"
9775 9931 msgstr ""
9776 9932
9777 #: rhodecode/templates/codeblocks/diffs.mako:284
9933 #: rhodecode/templates/codeblocks/diffs.mako:295
9778 9934 msgid "Hide them"
9779 9935 msgstr ""
9780 9936
9781 #: rhodecode/templates/codeblocks/diffs.mako:320
9782 #: rhodecode/templates/codeblocks/diffs.mako:339
9937 #: rhodecode/templates/codeblocks/diffs.mako:332
9938 #: rhodecode/templates/codeblocks/diffs.mako:351
9783 9939 msgid "Unmatched/outdated inline comments below"
9784 9940 msgstr ""
9785 9941
9786 #: rhodecode/templates/codeblocks/diffs.mako:345
9942 #: rhodecode/templates/codeblocks/diffs.mako:357
9787 9943 msgid "Unmatched/outdated comments below"
9788 9944 msgstr ""
9789 9945
9790 #: rhodecode/templates/codeblocks/diffs.mako:419
9946 #: rhodecode/templates/codeblocks/diffs.mako:431
9791 9947 msgid "This file was removed from diff during updates to this pull-request."
9792 9948 msgstr ""
9793 9949
9794 #: rhodecode/templates/codeblocks/diffs.mako:420
9950 #: rhodecode/templates/codeblocks/diffs.mako:432
9795 9951 msgid "There are still outdated/unresolved comments attached to it."
9796 9952 msgstr ""
9797 9953
9798 #: rhodecode/templates/codeblocks/diffs.mako:487
9954 #: rhodecode/templates/codeblocks/diffs.mako:499
9799 9955 msgid "Copy file path"
9800 9956 msgstr ""
9801 9957
9802 #: rhodecode/templates/codeblocks/diffs.mako:554
9803 #: rhodecode/templates/codeblocks/diffs.mako:572
9958 #: rhodecode/templates/codeblocks/diffs.mako:566
9959 #: rhodecode/templates/codeblocks/diffs.mako:584
9804 9960 #, python-format
9805 9961 msgid "Show file at commit: %(commit_id)s"
9806 9962 msgstr ""
9807 9963
9808 #: rhodecode/templates/codeblocks/diffs.mako:556
9809 #: rhodecode/templates/codeblocks/diffs.mako:563
9964 #: rhodecode/templates/codeblocks/diffs.mako:568
9965 #: rhodecode/templates/codeblocks/diffs.mako:575
9810 9966 msgid "Show file before"
9811 9967 msgstr ""
9812 9968
9813 #: rhodecode/templates/codeblocks/diffs.mako:561
9814 #: rhodecode/templates/codeblocks/diffs.mako:579
9969 #: rhodecode/templates/codeblocks/diffs.mako:573
9970 #: rhodecode/templates/codeblocks/diffs.mako:591
9815 9971 #, python-format
9816 9972 msgid "File not present at commit: %(commit_id)s"
9817 9973 msgstr ""
9818 9974
9819 #: rhodecode/templates/codeblocks/diffs.mako:574
9820 #: rhodecode/templates/codeblocks/diffs.mako:581
9975 #: rhodecode/templates/codeblocks/diffs.mako:586
9976 #: rhodecode/templates/codeblocks/diffs.mako:593
9821 9977 msgid "Show file after"
9822 9978 msgstr ""
9823 9979
9824 #: rhodecode/templates/codeblocks/diffs.mako:588
9980 #: rhodecode/templates/codeblocks/diffs.mako:600
9825 9981 msgid "Show comments"
9826 9982 msgstr ""
9827 9983
9828 #: rhodecode/templates/codeblocks/diffs.mako:588
9984 #: rhodecode/templates/codeblocks/diffs.mako:600
9829 9985 msgid "Hide comments"
9830 9986 msgstr ""
9831 9987
9832 #: rhodecode/templates/codeblocks/diffs.mako:658
9833 #: rhodecode/templates/codeblocks/diffs.mako:701
9834 #: rhodecode/templates/codeblocks/diffs.mako:757
9835 msgid "comments including outdated"
9836 msgstr ""
9837
9838 #: rhodecode/templates/codeblocks/diffs.mako:660
9839 #: rhodecode/templates/codeblocks/diffs.mako:703
9840 #: rhodecode/templates/codeblocks/diffs.mako:759
9841 msgid "comments"
9842 msgstr ""
9843
9844 #: rhodecode/templates/codeblocks/diffs.mako:828
9988 #: rhodecode/templates/codeblocks/diffs.mako:691
9989 #: rhodecode/templates/codeblocks/diffs.mako:734
9990 #: rhodecode/templates/codeblocks/diffs.mako:796
9991 msgid "comments including outdated: {}. Click here to display them."
9992 msgstr ""
9993
9994 #: rhodecode/templates/codeblocks/diffs.mako:693
9995 #: rhodecode/templates/codeblocks/diffs.mako:736
9996 #: rhodecode/templates/codeblocks/diffs.mako:798
9997 msgid "comments: {}. Click to toggle them."
9998 msgstr ""
9999
10000 #: rhodecode/templates/codeblocks/diffs.mako:867
9845 10001 msgid "Toggle wide diff"
9846 10002 msgstr ""
9847 10003
9848 #: rhodecode/templates/codeblocks/diffs.mako:836
10004 #: rhodecode/templates/codeblocks/diffs.mako:875
9849 10005 msgid "View diff as side by side"
9850 10006 msgstr ""
9851 10007
9852 #: rhodecode/templates/codeblocks/diffs.mako:838
10008 #: rhodecode/templates/codeblocks/diffs.mako:877
9853 10009 msgid "Side by Side"
9854 10010 msgstr ""
9855 10011
9856 #: rhodecode/templates/codeblocks/diffs.mako:843
10012 #: rhodecode/templates/codeblocks/diffs.mako:882
9857 10013 msgid "View diff as unified"
9858 10014 msgstr ""
9859 10015
9860 #: rhodecode/templates/codeblocks/diffs.mako:844
10016 #: rhodecode/templates/codeblocks/diffs.mako:883
9861 10017 msgid "Unified"
9862 10018 msgstr ""
9863 10019
9864 #: rhodecode/templates/codeblocks/diffs.mako:849
10020 #: rhodecode/templates/codeblocks/diffs.mako:888
9865 10021 msgid "Turn off: Show the diff as commit range"
9866 10022 msgstr ""
9867 10023
9868 #: rhodecode/templates/codeblocks/diffs.mako:852
9869 #: rhodecode/templates/codeblocks/diffs.mako:859
10024 #: rhodecode/templates/codeblocks/diffs.mako:891
10025 #: rhodecode/templates/codeblocks/diffs.mako:898
9870 10026 msgid "Range Diff"
9871 10027 msgstr ""
9872 10028
9873 #: rhodecode/templates/codeblocks/diffs.mako:856
10029 #: rhodecode/templates/codeblocks/diffs.mako:895
9874 10030 msgid "Show the diff as commit range"
9875 10031 msgstr ""
9876 10032
9877 #: rhodecode/templates/codeblocks/diffs.mako:900
10033 #: rhodecode/templates/codeblocks/diffs.mako:960
9878 10034 msgid "Disabled on range diff"
9879 10035 msgstr ""
9880 10036
9881 #: rhodecode/templates/codeblocks/diffs.mako:1131
10037 #: rhodecode/templates/codeblocks/diffs.mako:1267
9882 10038 msgid "..."
9883 10039 msgstr ""
9884 10040
9885 10041 #: rhodecode/templates/codeblocks/source.mako:22
9886 10042 msgid "view annotation from before this change"
9887 10043 msgstr ""
9888 10044
9889 10045 #: rhodecode/templates/commits/changelog.mako:6
9890 10046 #, python-format
9891 10047 msgid "%s Changelog"
9892 10048 msgstr ""
9893 10049
9894 10050 #: rhodecode/templates/commits/changelog.mako:38
9895 10051 msgid "Clear filter"
9896 10052 msgstr ""
9897 10053
9898 10054 #: rhodecode/templates/commits/changelog.mako:45
9899 10055 msgid "Hide obsolete/hidden"
9900 10056 msgstr ""
9901 10057
9902 10058 #: rhodecode/templates/commits/changelog.mako:47
9903 10059 msgid "Show obsolete/hidden"
9904 10060 msgstr ""
9905 10061
9906 10062 #: rhodecode/templates/commits/changelog.mako:50
9907 10063 msgid "Show hidden"
9908 10064 msgstr ""
9909 10065
9910 10066 #: rhodecode/templates/commits/changelog.mako:59
9911 10067 #: rhodecode/templates/compare/compare_diff.mako:93
9912 10068 #, python-format
9913 10069 msgid "Compare fork with %s"
9914 10070 msgstr ""
9915 10071
9916 10072 #: rhodecode/templates/commits/changelog.mako:69
9917 10073 #, python-format
9918 10074 msgid "Compare fork with Parent (%s)"
9919 10075 msgstr ""
9920 10076
9921 10077 #: rhodecode/templates/commits/changelog.mako:107
9922 10078 msgid "Clear selection"
9923 10079 msgstr ""
9924 10080
9925 10081 #: rhodecode/templates/commits/changelog.mako:110
9926 10082 msgid "Select second commit"
9927 10083 msgstr ""
9928 10084
9929 10085 #: rhodecode/templates/commits/changelog.mako:116
9930 10086 msgid "Commit Message"
9931 10087 msgstr ""
9932 10088
9933 10089 #: rhodecode/templates/commits/changelog.mako:118
9934 10090 #: rhodecode/templates/summary/summary_commits.mako:10
9935 10091 msgid "Age"
9936 10092 msgstr ""
9937 10093
9938 10094 #: rhodecode/templates/commits/changelog.mako:121
9939 10095 #: rhodecode/templates/summary/summary_commits.mako:12
9940 10096 msgid "Refs"
9941 10097 msgstr ""
9942 10098
9943 10099 #: rhodecode/templates/commits/changelog.mako:262
9944 10100 msgid "Branch filter"
9945 10101 msgstr ""
9946 10102
9947 10103 #: rhodecode/templates/commits/changelog.mako:323
9948 10104 msgid "There are no changes yet"
9949 10105 msgstr ""
9950 10106
9951 10107 #: rhodecode/templates/commits/changelog_elements.mako:8
9952 10108 msgid "load previous"
9953 10109 msgstr ""
9954 10110
9955 10111 #: rhodecode/templates/commits/changelog_elements.mako:35
9956 10112 #: rhodecode/templates/summary/summary_commits.mako:27
9957 10113 #, python-format
9958 10114 msgid ""
9959 10115 "Commit status: %s\n"
9960 10116 "Click to open associated pull request #%s"
9961 10117 msgstr ""
9962 10118
9963 10119 #: rhodecode/templates/commits/changelog_elements.mako:39
9964 10120 #: rhodecode/templates/summary/summary_commits.mako:31
9965 10121 msgid "Commit status: {}"
9966 10122 msgstr ""
9967 10123
9968 10124 #: rhodecode/templates/commits/changelog_elements.mako:45
9969 10125 #: rhodecode/templates/summary/summary_commits.mako:37
9970 10126 msgid "Commit status: Not Reviewed"
9971 10127 msgstr ""
9972 10128
9973 10129 #: rhodecode/templates/commits/changelog_elements.mako:63
9974 10130 msgid "{} commit phase"
9975 10131 msgstr ""
9976 10132
9977 10133 #: rhodecode/templates/commits/changelog_elements.mako:69
9978 10134 msgid "Obsolete Evolve State"
9979 10135 msgstr ""
9980 10136
9981 10137 #: rhodecode/templates/commits/changelog_elements.mako:74
9982 10138 msgid "Hidden Evolve State"
9983 10139 msgstr ""
9984 10140
9985 10141 #: rhodecode/templates/commits/changelog_elements.mako:80
9986 10142 #: rhodecode/templates/compare/compare_commits.mako:46
9987 #: rhodecode/templates/pullrequests/pullrequest_show.mako:597
10143 #: rhodecode/templates/pullrequests/pullrequest_show.mako:595
9988 10144 #: rhodecode/templates/search/search_commit.mako:34
9989 10145 msgid "Expand commit message"
9990 10146 msgstr ""
9991 10147
9992 10148 #: rhodecode/templates/commits/changelog_elements.mako:108
9993 10149 #: rhodecode/templates/files/base.mako:51
9994 10150 #: rhodecode/templates/summary/summary_commits.mako:78
9995 10151 #, python-format
9996 10152 msgid "Branch %s"
9997 10153 msgstr ""
9998 10154
9999 10155 #: rhodecode/templates/commits/changelog_elements.mako:116
10000 10156 #: rhodecode/templates/files/base.mako:32
10001 10157 #: rhodecode/templates/summary/summary_commits.mako:64
10002 10158 #, python-format
10003 10159 msgid "Bookmark %s"
10004 10160 msgstr ""
10005 10161
10006 10162 #: rhodecode/templates/commits/changelog_elements.mako:124
10007 10163 #: rhodecode/templates/files/base.mako:42
10008 10164 #: rhodecode/templates/summary/summary_commits.mako:71
10009 10165 #, python-format
10010 10166 msgid "Tag %s"
10011 10167 msgstr ""
10012 10168
10013 10169 #: rhodecode/templates/commits/changelog_elements.mako:135
10014 10170 #: rhodecode/templates/summary/summary_commits.mako:87
10015 10171 msgid "Commit has comments"
10016 10172 msgstr ""
10017 10173
10018 10174 #: rhodecode/templates/commits/changelog_elements.mako:150
10019 10175 msgid "load next"
10020 10176 msgstr ""
10021 10177
10022 10178 #: rhodecode/templates/commits/changelog_file_history.mako:33
10023 10179 msgid "Show File"
10024 10180 msgstr ""
10025 10181
10026 10182 #: rhodecode/templates/commits/changelog_file_history.mako:38
10027 10183 msgid "Diff File"
10028 10184 msgstr ""
10029 10185
10030 10186 #: rhodecode/templates/commits/changelog_file_history.mako:46
10031 10187 msgid "Show Full History"
10032 10188 msgstr ""
10033 10189
10034 10190 #: rhodecode/templates/compare/compare_commits.mako:5
10035 10191 msgid "Compare was calculated based on this common ancestor commit"
10036 10192 msgstr ""
10037 10193
10038 10194 #: rhodecode/templates/compare/compare_commits.mako:15
10039 #: rhodecode/templates/pullrequests/pullrequest_show.mako:558
10195 #: rhodecode/templates/pullrequests/pullrequest_show.mako:556
10040 10196 msgid "Time"
10041 10197 msgstr ""
10042 10198
10043 10199 #: rhodecode/templates/compare/compare_commits.mako:64
10044 10200 msgid "No commits in this compare"
10045 10201 msgstr ""
10046 10202
10047 10203 #: rhodecode/templates/compare/compare_diff.mako:7
10048 10204 #: rhodecode/templates/compare/compare_diff.mako:9
10049 10205 #, python-format
10050 10206 msgid "%s Compare"
10051 10207 msgstr ""
10052 10208
10053 10209 #: rhodecode/templates/compare/compare_diff.mako:38
10054 10210 #: rhodecode/templates/compare/compare_diff.mako:90
10055 10211 #: rhodecode/templates/compare/compare_diff.mako:114
10056 10212 #: rhodecode/templates/compare/compare_diff.mako:119
10057 10213 msgid "Compare Commits"
10058 10214 msgstr ""
10059 10215
10060 10216 #: rhodecode/templates/compare/compare_diff.mako:40
10061 10217 msgid "for file"
10062 10218 msgstr ""
10063 10219
10064 10220 #: rhodecode/templates/compare/compare_diff.mako:56
10065 10221 msgid "Target"
10066 10222 msgstr ""
10067 10223
10068 10224 #: rhodecode/templates/compare/compare_diff.mako:70
10069 #: rhodecode/templates/files/files_source.mako:100
10225 #: rhodecode/templates/files/files_source.mako:110
10070 10226 msgid "Source"
10071 10227 msgstr ""
10072 10228
10073 10229 #: rhodecode/templates/compare/compare_diff.mako:102
10074 10230 msgid "Compare with origin"
10075 10231 msgstr ""
10076 10232
10077 10233 #: rhodecode/templates/compare/compare_diff.mako:107
10078 10234 #: rhodecode/templates/compare/compare_diff.mako:108
10079 10235 #: rhodecode/templates/compare/compare_diff.mako:114
10080 10236 #: rhodecode/templates/compare/compare_diff.mako:115
10081 10237 #: rhodecode/templates/compare/compare_diff.mako:116
10082 10238 #: rhodecode/templates/compare/compare_diff.mako:126
10083 10239 msgid "Action unavailable in current view"
10084 10240 msgstr ""
10085 10241
10086 10242 #: rhodecode/templates/compare/compare_diff.mako:107
10087 10243 #: rhodecode/templates/compare/compare_diff.mako:115
10088 10244 #: rhodecode/templates/compare/compare_diff.mako:120
10089 10245 msgid "Swap"
10090 10246 msgstr ""
10091 10247
10092 10248 #: rhodecode/templates/compare/compare_diff.mako:110
10093 10249 msgid "Compare commits, branches, bookmarks or tags."
10094 10250 msgstr ""
10095 10251
10252 #: rhodecode/templates/compare/compare_diff.mako:139
10253 #: rhodecode/templates/email_templates/commit_comment.mako:57
10254 msgid "Commit status"
10255 msgstr ""
10256
10096 10257 #: rhodecode/templates/data_table/_dt_elements.mako:73
10097 10258 #: rhodecode/templates/data_table/_dt_elements.mako:74
10098 10259 msgid "Fork"
10099 10260 msgstr ""
10100 10261
10101 10262 #: rhodecode/templates/data_table/_dt_elements.mako:95
10102 10263 msgid "Mercurial repository"
10103 10264 msgstr ""
10104 10265
10105 10266 #: rhodecode/templates/data_table/_dt_elements.mako:97
10106 10267 msgid "Git repository"
10107 10268 msgstr ""
10108 10269
10109 10270 #: rhodecode/templates/data_table/_dt_elements.mako:99
10110 10271 msgid "Subversion repository"
10111 10272 msgstr ""
10112 10273
10113 10274 #: rhodecode/templates/data_table/_dt_elements.mako:106
10114 10275 msgid "Public repository"
10115 10276 msgstr ""
10116 10277
10117 10278 #: rhodecode/templates/data_table/_dt_elements.mako:116
10118 10279 msgid "This repository is being created in a background task"
10119 10280 msgstr ""
10120 10281
10121 10282 #: rhodecode/templates/data_table/_dt_elements.mako:117
10122 10283 msgid "creating..."
10123 10284 msgstr ""
10124 10285
10125 10286 #: rhodecode/templates/data_table/_dt_elements.mako:149
10126 10287 msgid "No commits yet"
10127 10288 msgstr ""
10128 10289
10129 10290 #: rhodecode/templates/data_table/_dt_elements.mako:156
10130 10291 #: rhodecode/templates/data_table/_dt_elements.mako:158
10131 10292 #, python-format
10132 10293 msgid "Subscribe to %s rss feed"
10133 10294 msgstr ""
10134 10295
10135 10296 #: rhodecode/templates/data_table/_dt_elements.mako:164
10136 10297 #: rhodecode/templates/data_table/_dt_elements.mako:166
10137 10298 #, python-format
10138 10299 msgid "Subscribe to %s atom feed"
10139 10300 msgstr ""
10140 10301
10141 10302 #: rhodecode/templates/data_table/_dt_elements.mako:191
10142 10303 msgid "Creating"
10143 10304 msgstr ""
10144 10305
10145 10306 #: rhodecode/templates/data_table/_dt_elements.mako:193
10146 10307 #: rhodecode/templates/hovercards/hovercard_pull_request.mako:10
10147 10308 msgid "Created"
10148 10309 msgstr ""
10149 10310
10150 10311 #: rhodecode/templates/data_table/_dt_elements.mako:236
10151 10312 msgid "personal"
10152 10313 msgstr ""
10153 10314
10154 10315 #: rhodecode/templates/data_table/_dt_elements.mako:387
10155 10316 #: rhodecode/templates/pullrequests/pullrequest_show.mako:50
10156 10317 msgid "Pull request !{}"
10157 10318 msgstr ""
10158 10319
10159 10320 #: rhodecode/templates/data_table/_dt_elements.mako:395
10160 10321 msgid "Work in progress"
10161 10322 msgstr ""
10162 10323
10163 10324 #: rhodecode/templates/data_table/_dt_elements.mako:429
10164 10325 msgid "Info"
10165 10326 msgstr ""
10166 10327
10167 10328 #: rhodecode/templates/data_table/_dt_elements.mako:470
10168 10329 #, python-format
10169 10330 msgid "Parsed using %s syntax"
10170 10331 msgstr ""
10171 10332
10172 10333 #: rhodecode/templates/debug_style/buttons.html:131
10173 10334 msgid "Confirm to remove this field: Field"
10174 10335 msgstr ""
10175 10336
10176 10337 #: rhodecode/templates/debug_style/form-elements.html:107
10177 10338 msgid "Default"
10178 10339 msgstr ""
10179 10340
10180 10341 #: rhodecode/templates/debug_style/form-elements.html:513
10181 10342 #: rhodecode/templates/debug_style/form-elements.html:565
10182 10343 #: rhodecode/templates/debug_style/forms.html:236
10183 10344 msgid "Chosen group members"
10184 10345 msgstr ""
10185 10346
10186 10347 #: rhodecode/templates/debug_style/form-elements.html:525
10187 10348 #: rhodecode/templates/debug_style/form-elements.html:569
10188 10349 #: rhodecode/templates/debug_style/forms.html:240
10189 10350 msgid "Remove all elements"
10190 10351 msgstr ""
10191 10352
10192 10353 #: rhodecode/templates/debug_style/form-elements.html:535
10193 10354 #: rhodecode/templates/debug_style/form-elements.html:579
10194 10355 #: rhodecode/templates/debug_style/forms.html:250
10195 10356 msgid "Available members"
10196 10357 msgstr ""
10197 10358
10198 10359 #: rhodecode/templates/debug_style/form-elements.html:543
10199 10360 #: rhodecode/templates/debug_style/form-elements.html:587
10200 10361 #: rhodecode/templates/debug_style/forms.html:258
10201 10362 msgid "Add all elements"
10202 10363 msgstr ""
10203 10364
10204 10365 #: rhodecode/templates/debug_style/forms.html:119
10205 10366 msgid "Some text..."
10206 10367 msgstr ""
10207 10368
10208 10369 #: rhodecode/templates/debug_style/forms.html:122
10209 10370 #: rhodecode/templates/debug_style/forms.html:255
10210 10371 msgid "Variable Item"
10211 10372 msgstr ""
10212 10373
10213 10374 #: rhodecode/templates/debug_style/forms.html:252
10214 10375 msgid "Some example text..."
10215 10376 msgstr ""
10216 10377
10217 10378 #: rhodecode/templates/debug_style/index.html:5
10218 10379 msgid "Debug Style"
10219 10380 msgstr ""
10220 10381
10221 10382 #: rhodecode/templates/debug_style/index.html:54
10222 10383 msgid "Index"
10223 10384 msgstr ""
10224 10385
10225 10386 #: rhodecode/templates/debug_style/index.html:56
10226 10387 msgid "Typography"
10227 10388 msgstr ""
10228 10389
10229 10390 #: rhodecode/templates/debug_style/index.html:57
10230 10391 msgid "Forms"
10231 10392 msgstr ""
10232 10393
10233 10394 #: rhodecode/templates/debug_style/index.html:58
10234 10395 msgid "Buttons"
10235 10396 msgstr ""
10236 10397
10237 10398 #: rhodecode/templates/debug_style/index.html:59
10238 10399 msgid "Labels"
10239 10400 msgstr ""
10240 10401
10241 10402 #: rhodecode/templates/debug_style/index.html:60
10242 10403 msgid "Alerts"
10243 10404 msgstr ""
10244 10405
10245 10406 #: rhodecode/templates/debug_style/index.html:61
10246 10407 msgid "Tables"
10247 10408 msgstr ""
10248 10409
10249 10410 #: rhodecode/templates/debug_style/index.html:62
10250 10411 msgid "Tables wide"
10251 10412 msgstr ""
10252 10413
10253 10414 #: rhodecode/templates/debug_style/index.html:63
10254 10415 msgid "Collapsable Content"
10255 10416 msgstr ""
10256 10417
10257 10418 #: rhodecode/templates/debug_style/index.html:65
10258 10419 msgid "Layout form with sidebar"
10259 10420 msgstr ""
10260 10421
10261 10422 #: rhodecode/templates/debug_style/index.html:66
10262 10423 msgid "Login"
10263 10424 msgstr ""
10264 10425
10265 10426 #: rhodecode/templates/debug_style/index.html:67
10266 10427 msgid "Login 2"
10267 10428 msgstr ""
10268 10429
10269 10430 #: rhodecode/templates/debug_style/index.html:68
10270 10431 msgid "Code blocks"
10271 10432 msgstr ""
10272 10433
10273 10434 #: rhodecode/templates/debug_style/index.html:71
10274 10435 msgid "Panels"
10275 10436 msgstr ""
10276 10437
10277 10438 #: rhodecode/templates/debug_style/index.html:74
10278 10439 msgid "Form elements"
10279 10440 msgstr ""
10280 10441
10281 10442 #: rhodecode/templates/debug_style/index.html:75
10282 10443 msgid "Form elements small"
10283 10444 msgstr ""
10284 10445
10285 10446 #: rhodecode/templates/debug_style/index.html:76
10286 10447 msgid "Form inline elements"
10287 10448 msgstr ""
10288 10449
10289 10450 #: rhodecode/templates/debug_style/index.html:77
10290 10451 msgid "Form vertical"
10291 10452 msgstr ""
10292 10453
10293 10454 #: rhodecode/templates/debug_style/login.html:28
10294 10455 msgid "Sign in to your account"
10295 10456 msgstr ""
10296 10457
10297 10458 #: rhodecode/templates/debug_style/login.html:46
10298 10459 msgid "(Forgot password?)"
10299 10460 msgstr ""
10300 10461
10301 10462 #: rhodecode/templates/debug_style/login.html:56
10302 10463 msgid "Don't have an account ?"
10303 10464 msgstr ""
10304 10465
10305 #: rhodecode/templates/email_templates/base.mako:75
10306 #: rhodecode/templates/email_templates/base.mako:597
10466 #: rhodecode/templates/email_templates/base.mako:72
10467 #: rhodecode/templates/email_templates/base.mako:633
10307 10468 msgid "This is a notification from RhodeCode."
10308 10469 msgstr ""
10309 10470
10310 #: rhodecode/templates/email_templates/base.mako:577
10471 #: rhodecode/templates/email_templates/base.mako:613
10311 10472 msgid "RhodeCode"
10312 10473 msgstr ""
10313 10474
10314 #: rhodecode/templates/email_templates/commit_comment.mako:23
10315 #: rhodecode/templates/email_templates/commit_comment.mako:26
10316 #: rhodecode/templates/email_templates/commit_comment.mako:28
10317 #: rhodecode/templates/email_templates/pull_request_comment.mako:24
10318 #: rhodecode/templates/email_templates/pull_request_comment.mako:27
10319 #: rhodecode/templates/email_templates/pull_request_comment.mako:29
10320 msgid "[mention]"
10321 msgstr ""
10322
10323 #: rhodecode/templates/email_templates/commit_comment.mako:23
10324 msgid "{user} left a {comment_type} on file `{comment_file}` in commit `{commit_id}`"
10325 msgstr ""
10326
10327 #: rhodecode/templates/email_templates/commit_comment.mako:23
10328 #: rhodecode/templates/email_templates/commit_comment.mako:26
10329 #: rhodecode/templates/email_templates/commit_comment.mako:28
10330 msgid "in the `{repo_name}` repository"
10331 msgstr ""
10332
10333 #: rhodecode/templates/email_templates/commit_comment.mako:26
10334 msgid "[status: {status}] {user} left a {comment_type} on commit `{commit_id}`"
10475 #: rhodecode/templates/email_templates/commit_comment.mako:24
10476 msgid "{mention_prefix}{user} left a {comment_type} on file `{comment_file}` in commit `{commit_id}` in the `{repo_name}` repository"
10335 10477 msgstr ""
10336 10478
10337 10479 #: rhodecode/templates/email_templates/commit_comment.mako:28
10338 msgid "{user} left a {comment_type} on commit `{commit_id}`"
10339 msgstr ""
10340
10341 #: rhodecode/templates/email_templates/commit_comment.mako:50
10342 #: rhodecode/templates/email_templates/pull_request_comment.mako:60
10480 msgid "{mention_prefix}[status: {status}] {user} left a {comment_type} on commit `{commit_id}` in the `{repo_name}` repository"
10481 msgstr ""
10482
10483 #: rhodecode/templates/email_templates/commit_comment.mako:31
10484 msgid "{mention_prefix}{user} left a {comment_type} on commit `{commit_id}` in the `{repo_name}` repository"
10485 msgstr ""
10486
10487 #: rhodecode/templates/email_templates/commit_comment.mako:54
10488 #: rhodecode/templates/email_templates/pull_request_comment.mako:63
10343 10489 msgid "Comment link"
10344 10490 msgstr ""
10345 10491
10346 #: rhodecode/templates/email_templates/commit_comment.mako:53
10347 #: rhodecode/templates/email_templates/commit_comment.mako:129
10492 #: rhodecode/templates/email_templates/commit_comment.mako:57
10493 #: rhodecode/templates/email_templates/commit_comment.mako:135
10348 10494 msgid "Status was changed to"
10349 10495 msgstr ""
10350 10496
10351 #: rhodecode/templates/email_templates/commit_comment.mako:58
10352 #: rhodecode/templates/email_templates/commit_comment.mako:141
10497 #: rhodecode/templates/email_templates/commit_comment.mako:62
10498 #: rhodecode/templates/email_templates/commit_comment.mako:147
10353 10499 #: rhodecode/templates/search/search_commit.mako:12
10354 10500 #: rhodecode/templates/summary/summary_commits.mako:9
10355 10501 msgid "Commit message"
10356 10502 msgstr ""
10357 10503
10358 #: rhodecode/templates/email_templates/commit_comment.mako:61
10359 #: rhodecode/templates/email_templates/pull_request_comment.mako:74
10504 #: rhodecode/templates/email_templates/commit_comment.mako:65
10505 #: rhodecode/templates/email_templates/pull_request_comment.mako:77
10360 10506 msgid "File: {comment_file} on line {comment_line}"
10361 10507 msgstr ""
10362 10508
10363 #: rhodecode/templates/email_templates/commit_comment.mako:65
10364 #: rhodecode/templates/email_templates/commit_comment.mako:155
10365 #: rhodecode/templates/email_templates/pull_request_comment.mako:78
10366 #: rhodecode/templates/email_templates/pull_request_comment.mako:186
10509 #: rhodecode/templates/email_templates/commit_comment.mako:69
10510 #: rhodecode/templates/email_templates/commit_comment.mako:161
10511 #: rhodecode/templates/email_templates/pull_request_comment.mako:81
10512 #: rhodecode/templates/email_templates/pull_request_comment.mako:191
10367 10513 msgid "`TODO` number"
10368 10514 msgstr ""
10369 10515
10370 #: rhodecode/templates/email_templates/commit_comment.mako:67
10371 #: rhodecode/templates/email_templates/commit_comment.mako:157
10372 #: rhodecode/templates/email_templates/pull_request_comment.mako:80
10373 #: rhodecode/templates/email_templates/pull_request_comment.mako:188
10516 #: rhodecode/templates/email_templates/commit_comment.mako:71
10517 #: rhodecode/templates/email_templates/commit_comment.mako:163
10518 #: rhodecode/templates/email_templates/pull_request_comment.mako:83
10519 #: rhodecode/templates/email_templates/pull_request_comment.mako:193
10374 10520 msgid "`Note` number"
10375 10521 msgstr ""
10376 10522
10377 #: rhodecode/templates/email_templates/commit_comment.mako:99
10378 #: rhodecode/templates/email_templates/pull_request_comment.mako:120
10379 msgid "left a"
10380 msgstr ""
10381
10382 #: rhodecode/templates/email_templates/commit_comment.mako:102
10383 msgid "{comment_type} on file `{comment_file}` in commit."
10384 msgstr ""
10385
10386 10523 #: rhodecode/templates/email_templates/commit_comment.mako:104
10387 msgid "{comment_type} on commit."
10524 #: rhodecode/templates/email_templates/pull_request_comment.mako:124
10525 msgid "left a"
10526 msgstr ""
10527
10528 #: rhodecode/templates/email_templates/commit_comment.mako:107
10529 msgid "{comment_type} on file `{comment_file}` in commit."
10388 10530 msgstr ""
10389 10531
10390 10532 #: rhodecode/templates/email_templates/commit_comment.mako:109
10533 msgid "{comment_type} on commit."
10534 msgstr ""
10535
10536 #: rhodecode/templates/email_templates/commit_comment.mako:114
10391 10537 msgid "of repository"
10392 10538 msgstr ""
10393 10539
10394 #: rhodecode/templates/email_templates/commit_comment.mako:127
10540 #: rhodecode/templates/email_templates/commit_comment.mako:133
10395 10541 msgid "Commit Status"
10396 10542 msgstr ""
10397 10543
10398 #: rhodecode/templates/email_templates/commit_comment.mako:147
10399 #: rhodecode/templates/email_templates/pull_request_comment.mako:178
10544 #: rhodecode/templates/email_templates/commit_comment.mako:153
10545 #: rhodecode/templates/email_templates/pull_request_comment.mako:183
10400 10546 #: rhodecode/templates/search/search_path.mako:9
10401 10547 msgid "File"
10402 10548 msgstr ""
10403 10549
10404 #: rhodecode/templates/email_templates/commit_comment.mako:148
10405 #: rhodecode/templates/email_templates/pull_request_comment.mako:179
10550 #: rhodecode/templates/email_templates/commit_comment.mako:154
10551 #: rhodecode/templates/email_templates/pull_request_comment.mako:184
10406 10552 msgid "`{comment_file}` on line {comment_line}"
10407 10553 msgstr ""
10408 10554
10409 #: rhodecode/templates/email_templates/commit_comment.mako:167
10410 #: rhodecode/templates/email_templates/pull_request_comment.mako:198
10555 #: rhodecode/templates/email_templates/commit_comment.mako:173
10556 #: rhodecode/templates/email_templates/pull_request_comment.mako:203
10411 10557 msgid "Reply"
10412 10558 msgstr ""
10413 10559
10414 10560 #: rhodecode/templates/email_templates/pull_request_comment.mako:24
10415 msgid "{user} left a {comment_type} on file `{comment_file}` in pull request !{pr_id}: \"{pr_title}\""
10416 msgstr ""
10417
10418 #: rhodecode/templates/email_templates/pull_request_comment.mako:27
10419 msgid "[status: {status}] {user} left a {comment_type} on pull request !{pr_id}: \"{pr_title}\""
10420 msgstr ""
10421
10422 #: rhodecode/templates/email_templates/pull_request_comment.mako:29
10423 msgid "{user} left a {comment_type} on pull request !{pr_id}: \"{pr_title}\""
10424 msgstr ""
10425
10426 #: rhodecode/templates/email_templates/pull_request_comment.mako:62
10561 msgid "{mention_prefix}{user} left a {comment_type} on file `{comment_file}` in pull request !{pr_id}: \"{pr_title}\""
10562 msgstr ""
10563
10564 #: rhodecode/templates/email_templates/pull_request_comment.mako:28
10565 msgid "{mention_prefix}[status: {status}] {user} left a {comment_type} on pull request !{pr_id}: \"{pr_title}\""
10566 msgstr ""
10567
10568 #: rhodecode/templates/email_templates/pull_request_comment.mako:31
10569 msgid "{mention_prefix}{user} left a {comment_type} on pull request !{pr_id}: \"{pr_title}\""
10570 msgstr ""
10571
10572 #: rhodecode/templates/email_templates/pull_request_comment.mako:65
10427 10573 #: rhodecode/templates/hovercards/hovercard_pull_request.mako:24
10428 10574 msgid "Pull Request"
10429 10575 msgstr ""
10430 10576
10431 #: rhodecode/templates/email_templates/pull_request_comment.mako:64
10432 #: rhodecode/templates/email_templates/pull_request_review.mako:39
10433 #: rhodecode/templates/email_templates/pull_request_update.mako:39
10434 msgid "Commit flow: {source_ref_type}:{source_ref_name} of {source_repo_url} into {target_ref_type}:{target_ref_name} of {target_repo_url}"
10435 msgstr ""
10436
10437 10577 #: rhodecode/templates/email_templates/pull_request_comment.mako:67
10438 msgid "{user} submitted pull request !{pr_id} status: *{status}*"
10578 #: rhodecode/templates/email_templates/pull_request_review.mako:41
10579 #: rhodecode/templates/email_templates/pull_request_update.mako:41
10580 msgid "Commit flow: {source_ref_type}:{source_ref_name} of {source_repo_url} into {target_ref_type}:{target_ref_name} of {target_repo_url}"
10439 10581 msgstr ""
10440 10582
10441 10583 #: rhodecode/templates/email_templates/pull_request_comment.mako:70
10584 msgid "{user} submitted pull request !{pr_id} status: *{status}*"
10585 msgstr ""
10586
10587 #: rhodecode/templates/email_templates/pull_request_comment.mako:73
10442 10588 msgid "{user} submitted pull request !{pr_id} status: *{status} and closed*"
10443 10589 msgstr ""
10444 10590
10445 #: rhodecode/templates/email_templates/pull_request_comment.mako:123
10591 #: rhodecode/templates/email_templates/pull_request_comment.mako:127
10446 10592 msgid "{comment_type} on file `{comment_file}` in pull request."
10447 10593 msgstr ""
10448 10594
10449 #: rhodecode/templates/email_templates/pull_request_comment.mako:125
10595 #: rhodecode/templates/email_templates/pull_request_comment.mako:129
10450 10596 msgid "{comment_type} on pull request."
10451 10597 msgstr ""
10452 10598
10453 #: rhodecode/templates/email_templates/pull_request_comment.mako:130
10454 #: rhodecode/templates/email_templates/pull_request_comment.mako:159
10455 #: rhodecode/templates/email_templates/pull_request_review.mako:89
10456 #: rhodecode/templates/email_templates/pull_request_review.mako:105
10457 #: rhodecode/templates/email_templates/pull_request_update.mako:101
10458 #: rhodecode/templates/email_templates/pull_request_update.mako:117
10599 #: rhodecode/templates/email_templates/pull_request_comment.mako:134
10600 #: rhodecode/templates/email_templates/pull_request_comment.mako:164
10601 #: rhodecode/templates/email_templates/pull_request_review.mako:91
10602 #: rhodecode/templates/email_templates/pull_request_review.mako:108
10603 #: rhodecode/templates/email_templates/pull_request_update.mako:104
10604 #: rhodecode/templates/email_templates/pull_request_update.mako:121
10459 10605 msgid "Pull request"
10460 10606 msgstr ""
10461 10607
10462 #: rhodecode/templates/email_templates/pull_request_comment.mako:148
10463 msgid "Review Status"
10464 msgstr ""
10465
10466 #: rhodecode/templates/email_templates/pull_request_comment.mako:151
10467 msgid "Closed pull request with status"
10468 msgstr ""
10469
10470 10608 #: rhodecode/templates/email_templates/pull_request_comment.mako:153
10609 msgid "Review Status"
10610 msgstr ""
10611
10612 #: rhodecode/templates/email_templates/pull_request_comment.mako:156
10613 msgid "Closed pull request with status"
10614 msgstr ""
10615
10616 #: rhodecode/templates/email_templates/pull_request_comment.mako:158
10471 10617 msgid "Submitted review status"
10472 10618 msgstr ""
10473 10619
10474 #: rhodecode/templates/email_templates/pull_request_comment.mako:168
10475 #: rhodecode/templates/email_templates/pull_request_review.mako:114
10476 #: rhodecode/templates/email_templates/pull_request_update.mako:126
10620 #: rhodecode/templates/email_templates/pull_request_comment.mako:173
10621 #: rhodecode/templates/email_templates/pull_request_review.mako:117
10622 #: rhodecode/templates/email_templates/pull_request_update.mako:130
10477 10623 msgid "Commit Flow"
10478 10624 msgstr ""
10479 10625
10480 #: rhodecode/templates/email_templates/pull_request_comment.mako:170
10481 #: rhodecode/templates/email_templates/pull_request_comment.mako:172
10482 #: rhodecode/templates/email_templates/pull_request_review.mako:116
10483 #: rhodecode/templates/email_templates/pull_request_review.mako:118
10484 #: rhodecode/templates/email_templates/pull_request_update.mako:128
10485 #: rhodecode/templates/email_templates/pull_request_update.mako:130
10626 #: rhodecode/templates/email_templates/pull_request_comment.mako:175
10627 #: rhodecode/templates/email_templates/pull_request_comment.mako:177
10628 #: rhodecode/templates/email_templates/pull_request_review.mako:119
10629 #: rhodecode/templates/email_templates/pull_request_review.mako:121
10630 #: rhodecode/templates/email_templates/pull_request_update.mako:132
10631 #: rhodecode/templates/email_templates/pull_request_update.mako:134
10486 10632 #: rhodecode/templates/pullrequests/pullrequest_show.mako:128
10487 10633 #: rhodecode/templates/pullrequests/pullrequest_show.mako:137
10488 10634 msgid "of"
10489 10635 msgstr ""
10490 10636
10491 #: rhodecode/templates/email_templates/pull_request_review.mako:15
10637 #: rhodecode/templates/email_templates/pull_request_review.mako:14
10492 10638 msgid "{user} requested a pull request review. !{pr_id}: \"{pr_title}\""
10493 10639 msgstr ""
10494 10640
10495 #: rhodecode/templates/email_templates/pull_request_review.mako:37
10496 #: rhodecode/templates/email_templates/pull_request_update.mako:37
10641 #: rhodecode/templates/email_templates/pull_request_review.mako:39
10642 #: rhodecode/templates/email_templates/pull_request_update.mako:39
10497 10643 msgid "Pull Request link"
10498 10644 msgstr ""
10499 10645
10500 #: rhodecode/templates/email_templates/pull_request_review.mako:83
10501 msgid "requested a"
10502 msgstr ""
10503
10504 10646 #: rhodecode/templates/email_templates/pull_request_review.mako:85
10647 msgid "requested a"
10648 msgstr ""
10649
10650 #: rhodecode/templates/email_templates/pull_request_review.mako:87
10505 10651 msgid "pull request review."
10506 10652 msgstr ""
10507 10653
10508 #: rhodecode/templates/email_templates/pull_request_update.mako:15
10654 #: rhodecode/templates/email_templates/pull_request_update.mako:14
10509 10655 msgid "{updating_user} updated pull request. !{pr_id}: \"{pr_title}\""
10510 10656 msgstr ""
10511 10657
10512 #: rhodecode/templates/email_templates/pull_request_update.mako:95
10658 #: rhodecode/templates/email_templates/pull_request_update.mako:98
10513 10659 msgid "updated"
10514 10660 msgstr ""
10515 10661
10516 #: rhodecode/templates/email_templates/pull_request_update.mako:97
10662 #: rhodecode/templates/email_templates/pull_request_update.mako:100
10517 10663 msgid "pull request."
10518 10664 msgstr ""
10519 10665
10520 #: rhodecode/templates/email_templates/pull_request_update.mako:139
10666 #: rhodecode/templates/email_templates/pull_request_update.mako:143
10521 10667 msgid "Changes"
10522 10668 msgstr ""
10523 10669
10524 10670 #: rhodecode/templates/email_templates/test.mako:5
10525 10671 msgid "hello \"world\""
10526 10672 msgstr ""
10527 10673
10528 #: rhodecode/templates/email_templates/test.mako:22
10674 #: rhodecode/templates/email_templates/test.mako:18
10529 10675 msgid "Translation String"
10530 10676 msgstr ""
10531 10677
10532 10678 #: rhodecode/templates/email_templates/user_registration.mako:28
10533 10679 msgid "New user {user} has registered on {date}"
10534 10680 msgstr ""
10535 10681
10536 #: rhodecode/templates/email_templates/user_registration.mako:46
10682 #: rhodecode/templates/email_templates/user_registration.mako:47
10537 10683 msgid "Full Name"
10538 10684 msgstr ""
10539 10685
10540 10686 #: rhodecode/templates/errors/error_document.mako:48
10541 10687 #, python-format
10542 10688 msgid "You will be redirected to %s in %s seconds"
10543 10689 msgstr ""
10544 10690
10545 10691 #: rhodecode/templates/errors/error_document.mako:66
10546 10692 msgid "Support Page"
10547 10693 msgstr ""
10548 10694
10549 10695 #: rhodecode/templates/feed/atom_feed_entry.mako:3
10550 10696 #, python-format
10551 10697 msgid "%(user)s commited on %(date)s UTC"
10552 10698 msgstr ""
10553 10699
10554 10700 #: rhodecode/templates/feed/atom_feed_entry.mako:30
10555 10701 msgid "Commit was too big and was cut off..."
10556 10702 msgstr ""
10557 10703
10558 10704 #: rhodecode/templates/files/file_authors_box.mako:18
10559 10705 msgid "Load All Authors"
10560 10706 msgstr ""
10561 10707
10562 10708 #: rhodecode/templates/files/file_authors_box.mako:20
10563 10709 msgid "last author"
10564 10710 msgstr ""
10565 10711
10566 10712 #: rhodecode/templates/files/files.mako:4
10567 10713 #: rhodecode/templates/files/files_pjax.mako:2
10568 10714 msgid "{} Files"
10569 10715 msgstr ""
10570 10716
10571 10717 #: rhodecode/templates/files/files_add.mako:4
10572 10718 msgid "{} Files Add"
10573 10719 msgstr ""
10574 10720
10575 10721 #: rhodecode/templates/files/files_add.mako:25
10576 10722 msgid "Add new file"
10577 10723 msgstr ""
10578 10724
10579 #: rhodecode/templates/files/files_add.mako:44
10580 #: rhodecode/templates/files/files_edit.mako:45
10725 #: rhodecode/templates/files/files_add.mako:43
10726 #: rhodecode/templates/files/files_edit.mako:44
10581 10727 msgid "Filename e.g example.py, or docs/readme.md"
10582 10728 msgstr ""
10583 10729
10584 #: rhodecode/templates/files/files_add.mako:64
10585 #: rhodecode/templates/files/files_edit.mako:66
10730 #: rhodecode/templates/files/files_add.mako:63
10731 #: rhodecode/templates/files/files_edit.mako:65
10586 10732 msgid "Line wraps on"
10587 10733 msgstr ""
10588 10734
10589 #: rhodecode/templates/files/files_add.mako:64
10590 #: rhodecode/templates/files/files_edit.mako:66
10735 #: rhodecode/templates/files/files_add.mako:63
10736 #: rhodecode/templates/files/files_edit.mako:65
10591 10737 msgid "line wraps off"
10592 10738 msgstr ""
10593 10739
10594 #: rhodecode/templates/files/files_add.mako:87
10595 #: rhodecode/templates/files/files_delete.mako:72
10596 #: rhodecode/templates/files/files_edit.mako:89
10740 #: rhodecode/templates/files/files_add.mako:86
10741 #: rhodecode/templates/files/files_delete.mako:71
10742 #: rhodecode/templates/files/files_edit.mako:88
10597 10743 #: rhodecode/templates/files/files_upload.mako:102
10598 10744 msgid "Commit changes"
10599 10745 msgstr ""
10600 10746
10601 10747 #: rhodecode/templates/files/files_browser.mako:9
10602 10748 msgid "Previous commit"
10603 10749 msgstr ""
10604 10750
10605 10751 #: rhodecode/templates/files/files_browser.mako:15
10606 10752 msgid "Next commit"
10607 10753 msgstr ""
10608 10754
10609 #: rhodecode/templates/files/files_browser.mako:22
10610 msgid "Upload File"
10611 msgstr ""
10612
10613 #: rhodecode/templates/files/files_browser.mako:25
10755 #: rhodecode/templates/files/files_browser.mako:24
10614 10756 msgid "Add File"
10615 10757 msgstr ""
10616 10758
10617 #: rhodecode/templates/files/files_browser.mako:35
10759 #: rhodecode/templates/files/files_browser.mako:27
10760 msgid "more options"
10761 msgstr ""
10762
10763 #: rhodecode/templates/files/files_browser.mako:36
10764 msgid "Upload File"
10765 msgstr ""
10766
10767 #: rhodecode/templates/files/files_browser.mako:51
10618 10768 msgid "Download full tree ZIP"
10619 10769 msgstr ""
10620 10770
10621 #: rhodecode/templates/files/files_browser.mako:39
10771 #: rhodecode/templates/files/files_browser.mako:55
10622 10772 msgid "Download this tree ZIP"
10623 10773 msgstr ""
10624 10774
10625 #: rhodecode/templates/files/files_browser.mako:67
10775 #: rhodecode/templates/files/files_browser.mako:83
10626 10776 #: rhodecode/templates/summary/summary.mako:37
10627 10777 #, python-format
10628 10778 msgid "Readme file from commit %s:%s"
10629 10779 msgstr ""
10630 10780
10631 #: rhodecode/templates/files/files_browser_tree.mako:14
10781 #: rhodecode/templates/files/files_browser_tree.mako:17
10632 10782 #: rhodecode/templates/search/search_path.mako:12
10633 10783 msgid "Size"
10634 10784 msgstr ""
10635 10785
10636 #: rhodecode/templates/files/files_browser_tree.mako:15
10786 #: rhodecode/templates/files/files_browser_tree.mako:18
10637 10787 msgid "Modified"
10638 10788 msgstr ""
10639 10789
10640 #: rhodecode/templates/files/files_browser_tree.mako:16
10790 #: rhodecode/templates/files/files_browser_tree.mako:19
10641 10791 msgid "Last Commit"
10642 10792 msgstr ""
10643 10793
10644 10794 #: rhodecode/templates/files/files_delete.mako:4
10645 10795 msgid "{} Files Delete"
10646 10796 msgstr ""
10647 10797
10648 10798 #: rhodecode/templates/files/files_delete.mako:25
10649 10799 msgid "Delete file"
10650 10800 msgstr ""
10651 10801
10652 #: rhodecode/templates/files/files_delete.mako:53
10802 #: rhodecode/templates/files/files_delete.mako:52
10653 10803 #, python-format
10654 10804 msgid "Binary file (%s)"
10655 10805 msgstr ""
10656 10806
10657 #: rhodecode/templates/files/files_delete.mako:58
10658 #: rhodecode/templates/files/files_source.mako:128
10807 #: rhodecode/templates/files/files_delete.mako:57
10808 #: rhodecode/templates/files/files_source.mako:138
10659 10809 msgid "File size {} is bigger then allowed limit {}. "
10660 10810 msgstr ""
10661 10811
10662 10812 #: rhodecode/templates/files/files_edit.mako:4
10663 10813 msgid "{} Files Edit"
10664 10814 msgstr ""
10665 10815
10666 10816 #: rhodecode/templates/files/files_edit.mako:25
10667 10817 msgid "Edit file"
10668 10818 msgstr ""
10669 10819
10670 #: rhodecode/templates/files/files_source.mako:16
10820 #: rhodecode/templates/files/files_source.mako:26
10671 10821 msgid "Download largefile"
10672 10822 msgstr ""
10673 10823
10674 #: rhodecode/templates/files/files_source.mako:20
10824 #: rhodecode/templates/files/files_source.mako:30
10675 10825 msgid "Download file"
10676 10826 msgstr ""
10677 10827
10678 #: rhodecode/templates/files/files_source.mako:29
10828 #: rhodecode/templates/files/files_source.mako:39
10679 10829 msgid "Editing binary files not allowed"
10680 10830 msgstr ""
10681 10831
10682 #: rhodecode/templates/files/files_source.mako:33
10683 msgid "Edit on branch: "
10684 msgstr ""
10685
10686 #: rhodecode/templates/files/files_source.mako:42
10687 msgid "Editing files allowed only when on branch head commit"
10688 msgstr ""
10689
10690 10832 #: rhodecode/templates/files/files_source.mako:43
10833 msgid "Edit on branch: "
10834 msgstr ""
10835
10836 #: rhodecode/templates/files/files_source.mako:52
10837 msgid "Editing files allowed only when on branch head commit"
10838 msgstr ""
10839
10840 #: rhodecode/templates/files/files_source.mako:53
10691 10841 msgid "Deleting files allowed only when on branch head commit"
10692 10842 msgstr ""
10693 10843
10694 #: rhodecode/templates/files/files_source.mako:65
10844 #: rhodecode/templates/files/files_source.mako:75
10695 10845 msgid "lines"
10696 10846 msgstr ""
10697 10847
10698 #: rhodecode/templates/files/files_source.mako:73
10848 #: rhodecode/templates/files/files_source.mako:83
10699 10849 msgid "This file is a pointer to large binary file"
10700 10850 msgstr ""
10701 10851
10702 #: rhodecode/templates/files/files_source.mako:73
10852 #: rhodecode/templates/files/files_source.mako:83
10703 10853 msgid "LargeFile"
10704 10854 msgstr ""
10705 10855
10706 #: rhodecode/templates/files/files_source.mako:96
10856 #: rhodecode/templates/files/files_source.mako:106
10707 10857 msgid "History"
10708 10858 msgstr ""
10709 10859
10710 #: rhodecode/templates/files/files_source.mako:102
10860 #: rhodecode/templates/files/files_source.mako:112
10711 10861 msgid "Annotation"
10712 10862 msgstr ""
10713 10863
10714 #: rhodecode/templates/files/files_source.mako:104
10864 #: rhodecode/templates/files/files_source.mako:114
10715 10865 msgid "Raw"
10716 10866 msgstr ""
10717 10867
10718 #: rhodecode/templates/files/files_source.mako:107
10868 #: rhodecode/templates/files/files_source.mako:117
10719 10869 msgid "Copy permalink"
10720 10870 msgstr ""
10721 10871
10722 #: rhodecode/templates/files/files_source.mako:123
10872 #: rhodecode/templates/files/files_source.mako:133
10723 10873 msgid "Binary file ({})"
10724 10874 msgstr ""
10725 10875
10726 10876 #: rhodecode/templates/files/files_source_header.mako:33
10727 10877 msgid "File last commit"
10728 10878 msgstr ""
10729 10879
10730 10880 #: rhodecode/templates/files/files_upload.mako:4
10731 10881 msgid "{} Files Upload"
10732 10882 msgstr ""
10733 10883
10734 10884 #: rhodecode/templates/files/files_upload.mako:36
10735 10885 msgid "Uploading..."
10736 10886 msgstr ""
10737 10887
10738 10888 #: rhodecode/templates/files/files_upload.mako:38
10739 10889 msgid "Uploaded"
10740 10890 msgstr ""
10741 10891
10742 10892 #: rhodecode/templates/files/files_upload.mako:52
10743 10893 msgid "Upload new file"
10744 10894 msgstr ""
10745 10895
10746 10896 #: rhodecode/templates/files/files_upload.mako:109
10747 10897 msgid "Committing..."
10748 10898 msgstr ""
10749 10899
10750 10900 #: rhodecode/templates/files/files_upload.mako:110
10751 10901 msgid "Please wait while the files are being uploaded"
10752 10902 msgstr ""
10753 10903
10754 10904 #: rhodecode/templates/forks/fork.mako:5
10755 10905 #, python-format
10756 10906 msgid "Fork repository %s"
10757 10907 msgstr ""
10758 10908
10759 10909 #: rhodecode/templates/forks/fork.mako:30
10760 10910 #: rhodecode/templates/forks/forks.mako:60
10761 10911 msgid "Fork name"
10762 10912 msgstr ""
10763 10913
10914 #: rhodecode/templates/forks/fork.mako:47
10915 #, python-format
10916 msgid "Select my personal group (%(repo_group_name)s)"
10917 msgstr ""
10918
10764 10919 #: rhodecode/templates/forks/fork.mako:78
10765 10920 msgid "Copy permissions"
10766 10921 msgstr ""
10767 10922
10768 10923 #: rhodecode/templates/forks/fork.mako:82
10769 10924 msgid "Copy permissions from parent repository."
10770 10925 msgstr ""
10771 10926
10772 10927 #: rhodecode/templates/forks/fork.mako:88
10773 10928 msgid "Private"
10774 10929 msgstr ""
10775 10930
10776 10931 #: rhodecode/templates/forks/fork.mako:97
10777 10932 msgid "Fork this Repository"
10778 10933 msgstr ""
10779 10934
10780 10935 #: rhodecode/templates/forks/forks.mako:5
10781 10936 #, python-format
10782 10937 msgid "%s Forks"
10783 10938 msgstr ""
10784 10939
10785 10940 #: rhodecode/templates/forks/forks.mako:28
10786 10941 msgid "Create new fork"
10787 10942 msgstr ""
10788 10943
10789 10944 #: rhodecode/templates/forks/forks.mako:64
10790 10945 msgid "Forked"
10791 10946 msgstr ""
10792 10947
10793 10948 #: rhodecode/templates/journal/journal.mako:25
10794 10949 msgid "ATOM journal feed"
10795 10950 msgstr ""
10796 10951
10797 10952 #: rhodecode/templates/journal/journal.mako:26
10798 10953 msgid "RSS journal feed"
10799 10954 msgstr ""
10800 10955
10801 10956 #: rhodecode/templates/journal/journal_data.mako:45
10802 10957 msgid "No entries yet"
10803 10958 msgstr ""
10804 10959
10805 10960 #: rhodecode/templates/journal/public_journal.mako:4
10806 10961 #: rhodecode/templates/journal/public_journal.mako:12
10807 10962 msgid "Public Journal"
10808 10963 msgstr ""
10809 10964
10810 10965 #: rhodecode/templates/journal/public_journal.mako:21
10811 10966 msgid "ATOM public journal feed"
10812 10967 msgstr ""
10813 10968
10814 10969 #: rhodecode/templates/journal/public_journal.mako:22
10815 10970 msgid "RSS public journal feed"
10816 10971 msgstr ""
10817 10972
10818 10973 #: rhodecode/templates/pullrequests/pullrequest.mako:5
10819 10974 #: rhodecode/templates/pullrequests/pullrequest.mako:28
10820 10975 msgid "New pull request"
10821 10976 msgstr ""
10822 10977
10823 10978 #: rhodecode/templates/pullrequests/pullrequest.mako:60
10824 10979 #: rhodecode/templates/pullrequests/pullrequest_show.mako:118
10825 10980 msgid "Commit flow"
10826 10981 msgstr ""
10827 10982
10828 10983 #: rhodecode/templates/pullrequests/pullrequest.mako:68
10829 10984 msgid "Source repository"
10830 10985 msgstr ""
10831 10986
10832 10987 #: rhodecode/templates/pullrequests/pullrequest.mako:86
10833 10988 msgid "Loading refs..."
10834 10989 msgstr ""
10835 10990
10836 10991 #: rhodecode/templates/pullrequests/pullrequest.mako:97
10837 10992 msgid "Submit Pull Request"
10838 10993 msgstr ""
10839 10994
10840 10995 #: rhodecode/templates/pullrequests/pullrequest.mako:111
10841 10996 msgid "Author of this pull request"
10842 10997 msgstr ""
10843 10998
10844 10999 #: rhodecode/templates/pullrequests/pullrequest.mako:125
10845 11000 #: rhodecode/templates/pullrequests/pullrequest_show.mako:286
10846 11001 msgid "Reviewer rules"
10847 11002 msgstr ""
10848 11003
10849 11004 #: rhodecode/templates/pullrequests/pullrequest.mako:135
10850 11005 #: rhodecode/templates/pullrequests/pullrequest_show.mako:300
10851 11006 msgid "Pull request reviewers"
10852 11007 msgstr ""
10853 11008
10854 11009 #: rhodecode/templates/pullrequests/pullrequest.mako:146
10855 11010 #: rhodecode/templates/pullrequests/pullrequest_show.mako:344
10856 11011 msgid "Add reviewer or reviewer group"
10857 11012 msgstr ""
10858 11013
10859 11014 #: rhodecode/templates/pullrequests/pullrequest.mako:317
10860 11015 msgid "Show detailed compare."
10861 11016 msgstr ""
10862 11017
10863 11018 #: rhodecode/templates/pullrequests/pullrequest.mako:324
10864 11019 msgid "There are no commits to merge."
10865 11020 msgstr ""
10866 11021
10867 11022 #: rhodecode/templates/pullrequests/pullrequest.mako:418
10868 11023 #: rhodecode/templates/pullrequests/pullrequest.mako:444
10869 11024 msgid "Select commit reference"
10870 11025 msgstr ""
10871 11026
10872 11027 #: rhodecode/templates/pullrequests/pullrequest.mako:434
10873 11028 msgid "Target repository"
10874 11029 msgstr ""
10875 11030
10876 11031 #: rhodecode/templates/pullrequests/pullrequest.mako:513
10877 11032 msgid "Please select source and target"
10878 11033 msgstr ""
10879 11034
10880 11035 #: rhodecode/templates/pullrequests/pullrequest_merge_checks.mako:7
10881 11036 msgid "This pull request can be merged automatically."
10882 11037 msgstr ""
10883 11038
10884 11039 #: rhodecode/templates/pullrequests/pullrequest_merge_checks.mako:12
10885 11040 msgid "Merge is not currently possible because of below failed checks."
10886 11041 msgstr ""
10887 11042
10888 11043 #: rhodecode/templates/pullrequests/pullrequest_merge_checks.mako:57
10889 11044 #: rhodecode/templates/pullrequests/pullrequest_merge_checks.mako:61
10890 11045 msgid "Close with status {}"
10891 11046 msgstr ""
10892 11047
10893 11048 #: rhodecode/templates/pullrequests/pullrequest_merge_checks.mako:66
10894 11049 #: rhodecode/templates/pullrequests/pullrequest_merge_checks.mako:76
10895 11050 msgid "Merge and close Pull Request"
10896 11051 msgstr ""
10897 11052
10898 11053 #: rhodecode/templates/pullrequests/pullrequest_merge_checks.mako:70
10899 11054 #: rhodecode/templates/pullrequests/pullrequest_merge_checks.mako:75
10900 11055 msgid "refresh checks"
10901 11056 msgstr ""
10902 11057
10903 11058 #: rhodecode/templates/pullrequests/pullrequest_merge_checks.mako:76
10904 11059 msgid "You are not allowed to merge this pull request."
10905 11060 msgstr ""
10906 11061
10907 11062 #: rhodecode/templates/pullrequests/pullrequest_merge_checks.mako:78
10908 11063 msgid "Login to Merge this Pull Request"
10909 11064 msgstr ""
10910 11065
10911 11066 #: rhodecode/templates/pullrequests/pullrequest_show.mako:6
10912 11067 msgid "{} Pull Request !{}"
10913 11068 msgstr ""
10914 11069
10915 11070 #: rhodecode/templates/pullrequests/pullrequest_show.mako:52
10916 11071 msgid "Last updated on"
10917 11072 msgstr ""
10918 11073
10919 11074 #: rhodecode/templates/pullrequests/pullrequest_show.mako:53
10920 11075 msgid "by"
10921 11076 msgstr ""
10922 11077
10923 11078 #: rhodecode/templates/pullrequests/pullrequest_show.mako:62
10924 11079 msgid "Update title & description"
10925 11080 msgstr ""
10926 11081
10927 11082 #: rhodecode/templates/pullrequests/pullrequest_show.mako:68
10928 11083 #: rhodecode/templates/pullrequests/pullrequest_show.mako:71
10929 11084 msgid "Delete pull request"
10930 11085 msgstr ""
10931 11086
10932 11087 #: rhodecode/templates/pullrequests/pullrequest_show.mako:71
10933 11088 msgid "Not allowed to delete this pull request"
10934 11089 msgstr ""
10935 11090
10936 11091 #: rhodecode/templates/pullrequests/pullrequest_show.mako:81
10937 11092 msgid "Rendered using {} renderer"
10938 11093 msgstr ""
10939 11094
10940 11095 #: rhodecode/templates/pullrequests/pullrequest_show.mako:95
10941 11096 msgid "Review status"
10942 11097 msgstr ""
10943 11098
10944 11099 #: rhodecode/templates/pullrequests/pullrequest_show.mako:151
10945 11100 msgid "Common ancestor"
10946 11101 msgstr ""
10947 11102
10948 11103 #: rhodecode/templates/pullrequests/pullrequest_show.mako:155
10949 11104 msgid "not available"
10950 11105 msgstr ""
10951 11106
10952 11107 #: rhodecode/templates/pullrequests/pullrequest_show.mako:167
10953 11108 msgid "Pull changes from source"
10954 11109 msgstr ""
10955 11110
10956 11111 #: rhodecode/templates/pullrequests/pullrequest_show.mako:168
10957 11112 msgid "Copy the pull url"
10958 11113 msgstr ""
10959 11114
10960 11115 #: rhodecode/templates/pullrequests/pullrequest_show.mako:180
10961 11116 msgid "Clone repository in its merged state using shadow repository"
10962 11117 msgstr ""
10963 11118
10964 11119 #: rhodecode/templates/pullrequests/pullrequest_show.mako:180
10965 11120 msgid "Clone from shadow repository"
10966 11121 msgstr ""
10967 11122
10968 11123 #: rhodecode/templates/pullrequests/pullrequest_show.mako:181
10969 11124 #: rhodecode/templates/summary/components.mako:78
10970 11125 msgid "Copy the clone url"
10971 11126 msgstr ""
10972 11127
10973 11128 #: rhodecode/templates/pullrequests/pullrequest_show.mako:185
10974 11129 msgid "Shadow repository data not available"
10975 11130 msgstr ""
10976 11131
10977 11132 #: rhodecode/templates/pullrequests/pullrequest_show.mako:201
10978 11133 msgid "Versions"
10979 11134 msgstr ""
10980 11135
10981 11136 #: rhodecode/templates/pullrequests/pullrequest_show.mako:213
10982 11137 #: rhodecode/templates/pullrequests/pullrequest_show.mako:215
10983 11138 msgid "show versions"
10984 11139 msgstr ""
10985 11140
10986 11141 #: rhodecode/templates/pullrequests/pullrequest_show.mako:214
10987 11142 msgid "hide versions"
10988 11143 msgstr ""
10989 11144
10990 11145 #: rhodecode/templates/pullrequests/pullrequest_show.mako:239
10991 11146 msgid "Your review status at this version"
10992 11147 msgstr ""
10993 11148
10994 11149 #: rhodecode/templates/pullrequests/pullrequest_show.mako:244
10995 11150 msgid "Comments from pull request version v{0}"
10996 11151 msgstr ""
10997 11152
10998 11153 #: rhodecode/templates/pullrequests/pullrequest_show.mako:262
10999 11154 #: rhodecode/templates/pullrequests/pullrequest_show.mako:266
11000 11155 msgid "select versions to show changes"
11001 11156 msgstr ""
11002 11157
11003 11158 #: rhodecode/templates/pullrequests/pullrequest_show.mako:263
11004 11159 msgid "show changes between versions"
11005 11160 msgstr ""
11006 11161
11007 11162 #: rhodecode/templates/pullrequests/pullrequest_show.mako:264
11008 11163 msgid "show pull request for this version"
11009 11164 msgstr ""
11010 11165
11011 11166 #: rhodecode/templates/pullrequests/pullrequest_show.mako:273
11012 11167 msgid "Pull request versions not available"
11013 11168 msgstr ""
11014 11169
11015 11170 #: rhodecode/templates/pullrequests/pullrequest_show.mako:349
11016 11171 msgid "Save Changes"
11017 11172 msgstr ""
11018 11173
11019 11174 #: rhodecode/templates/pullrequests/pullrequest_show.mako:386
11020 11175 msgid "unresolved TODOs unavailable in this view"
11021 11176 msgstr ""
11022 11177
11023 11178 #: rhodecode/templates/pullrequests/pullrequest_show.mako:422
11024 11179 msgid "No unresolved TODOs"
11025 11180 msgstr ""
11026 11181
11027 11182 #: rhodecode/templates/pullrequests/pullrequest_show.mako:440
11028 11183 msgid "Cannot show diff when pull request state is changing. Current progress state"
11029 11184 msgstr ""
11030 11185
11031 11186 #: rhodecode/templates/pullrequests/pullrequest_show.mako:458
11032 11187 msgid "Missing requirements:"
11033 11188 msgstr ""
11034 11189
11035 11190 #: rhodecode/templates/pullrequests/pullrequest_show.mako:459
11036 11191 msgid "These commits cannot be displayed, because this repository uses the Mercurial largefiles extension, which was not enabled."
11037 11192 msgstr ""
11038 11193
11039 11194 #: rhodecode/templates/pullrequests/pullrequest_show.mako:467
11040 11195 msgid "Missing commits"
11041 11196 msgstr ""
11042 11197
11043 11198 #: rhodecode/templates/pullrequests/pullrequest_show.mako:468
11044 11199 msgid "This pull request cannot be displayed, because one or more commits no longer exist in the source repository."
11045 11200 msgstr ""
11046 11201
11047 11202 #: rhodecode/templates/pullrequests/pullrequest_show.mako:469
11048 11203 msgid "Please update this pull request, push the commits back into the source repository, or consider closing this pull request."
11049 11204 msgstr ""
11050 11205
11051 11206 #: rhodecode/templates/pullrequests/pullrequest_show.mako:470
11052 msgid "Consider doing a {force_refresh_url} in case you think this is an error."
11053 msgstr ""
11054
11055 #: rhodecode/templates/pullrequests/pullrequest_show.mako:479
11056 msgid "There are new changes for {}:{} in source repository, please consider updating this pull request."
11057 msgstr ""
11058
11059 #: rhodecode/templates/pullrequests/pullrequest_show.mako:491
11207 msgid "Consider doing a `force update commits` in case you think this is an error."
11208 msgstr ""
11209
11210 #: rhodecode/templates/pullrequests/pullrequest_show.mako:478
11211 msgid "There are new changes for `{}:{}` in source repository, please consider updating this pull request."
11212 msgstr ""
11213
11214 #: rhodecode/templates/pullrequests/pullrequest_show.mako:489
11060 11215 #, python-format
11061 11216 msgid "Showing changes at v%d, commenting is disabled."
11062 11217 msgstr ""
11063 11218
11064 #: rhodecode/templates/pullrequests/pullrequest_show.mako:514
11065 #: rhodecode/templates/pullrequests/pullrequest_show.mako:536
11219 #: rhodecode/templates/pullrequests/pullrequest_show.mako:512
11220 #: rhodecode/templates/pullrequests/pullrequest_show.mako:534
11066 11221 msgid "Update commits"
11067 11222 msgstr ""
11068 11223
11069 #: rhodecode/templates/pullrequests/pullrequest_show.mako:517
11224 #: rhodecode/templates/pullrequests/pullrequest_show.mako:515
11070 11225 msgid "more update options"
11071 11226 msgstr ""
11072 11227
11073 #: rhodecode/templates/pullrequests/pullrequest_show.mako:525
11228 #: rhodecode/templates/pullrequests/pullrequest_show.mako:523
11074 11229 msgid "Force update commits"
11075 11230 msgstr ""
11076 11231
11077 #: rhodecode/templates/pullrequests/pullrequest_show.mako:528
11232 #: rhodecode/templates/pullrequests/pullrequest_show.mako:526
11078 11233 msgid "Update commits and force refresh this pull request."
11079 11234 msgstr ""
11080 11235
11081 #: rhodecode/templates/pullrequests/pullrequest_show.mako:536
11236 #: rhodecode/templates/pullrequests/pullrequest_show.mako:534
11082 11237 msgid "Update is disabled for current view"
11083 11238 msgstr ""
11084 11239
11085 #: rhodecode/templates/pullrequests/pullrequest_show.mako:547
11240 #: rhodecode/templates/pullrequests/pullrequest_show.mako:545
11086 11241 msgid "Commits and changes between v{ver_from} and {ver_to} of this pull request, commenting is disabled"
11087 11242 msgstr ""
11088 11243
11089 #: rhodecode/templates/pullrequests/pullrequest_show.mako:551
11244 #: rhodecode/templates/pullrequests/pullrequest_show.mako:549
11090 11245 msgid "commits added: {}, removed: {}"
11091 11246 msgstr ""
11092 11247
11248 #: rhodecode/templates/pullrequests/pullrequest_show.mako:567
11249 msgid "Commit added in displayed changes"
11250 msgstr ""
11251
11093 11252 #: rhodecode/templates/pullrequests/pullrequest_show.mako:569
11094 msgid "Commit added in displayed changes"
11095 msgstr ""
11096
11097 #: rhodecode/templates/pullrequests/pullrequest_show.mako:571
11098 11253 msgid "Commit removed in displayed changes"
11099 11254 msgstr ""
11100 11255
11256 #: rhodecode/templates/pullrequests/pullrequest_show.mako:678
11257 msgid "there is {num} general comment from older versions"
11258 msgstr ""
11259
11101 11260 #: rhodecode/templates/pullrequests/pullrequest_show.mako:679
11102 msgid "there is {num} general comment from older versions"
11103 msgstr ""
11104
11105 #: rhodecode/templates/pullrequests/pullrequest_show.mako:680
11106 11261 msgid "show it"
11107 11262 msgstr ""
11108 11263
11264 #: rhodecode/templates/pullrequests/pullrequest_show.mako:681
11265 msgid "there are {num} general comments from older versions"
11266 msgstr ""
11267
11109 11268 #: rhodecode/templates/pullrequests/pullrequest_show.mako:682
11110 msgid "there are {num} general comments from older versions"
11111 msgstr ""
11112
11113 #: rhodecode/templates/pullrequests/pullrequest_show.mako:683
11114 11269 msgid "show them"
11115 11270 msgstr ""
11116 11271
11117 11272 #: rhodecode/templates/pullrequests/pullrequests.mako:4
11118 11273 msgid "{} Pull Requests"
11119 11274 msgstr ""
11120 11275
11121 11276 #: rhodecode/templates/pullrequests/pullrequests.mako:27
11122 11277 msgid "Opened"
11123 11278 msgstr ""
11124 11279
11125 11280 #: rhodecode/templates/pullrequests/pullrequests.mako:28
11126 11281 msgid "Opened by me"
11127 11282 msgstr ""
11128 11283
11129 11284 #: rhodecode/templates/pullrequests/pullrequests.mako:29
11130 11285 msgid "Awaiting review"
11131 11286 msgstr ""
11132 11287
11133 11288 #: rhodecode/templates/pullrequests/pullrequests.mako:30
11134 11289 msgid "Awaiting my review"
11135 11290 msgstr ""
11136 11291
11137 11292 #: rhodecode/templates/pullrequests/pullrequests.mako:32
11138 11293 msgid "From this repo"
11139 11294 msgstr ""
11140 11295
11141 11296 #: rhodecode/templates/pullrequests/pullrequests.mako:40
11142 11297 msgid "Open new Pull Request"
11143 11298 msgstr ""
11144 11299
11145 11300 #: rhodecode/templates/search/search.mako:6
11146 11301 #: rhodecode/templates/search/search.mako:19
11147 11302 msgid "Search inside repository {repo_name}"
11148 11303 msgstr ""
11149 11304
11150 11305 #: rhodecode/templates/search/search.mako:8
11151 11306 #: rhodecode/templates/search/search.mako:21
11152 11307 msgid "Search inside repository group {repo_group_name}"
11153 11308 msgstr ""
11154 11309
11155 11310 #: rhodecode/templates/search/search.mako:10
11156 11311 #: rhodecode/templates/search/search.mako:23
11157 11312 msgid "Search inside all accessible repositories"
11158 11313 msgstr ""
11159 11314
11160 11315 #: rhodecode/templates/search/search.mako:99
11161 11316 msgid "File path"
11162 11317 msgstr ""
11163 11318
11164 11319 #: rhodecode/templates/search/search.mako:102
11165 11320 msgid "Search"
11166 11321 msgstr ""
11167 11322
11168 11323 #: rhodecode/templates/search/search.mako:108
11169 11324 #: rhodecode/templates/search/search.mako:110
11170 11325 #: rhodecode/templates/search/search.mako:112
11171 11326 msgid "Global Search"
11172 11327 msgstr ""
11173 11328
11174 11329 #: rhodecode/templates/search/search.mako:138
11175 11330 msgid "sort"
11176 11331 msgstr ""
11177 11332
11178 11333 #: rhodecode/templates/search/search.mako:157
11179 11334 msgid "Query Language examples"
11180 11335 msgstr ""
11181 11336
11182 11337 #: rhodecode/templates/search/search_commit.mako:15
11183 11338 msgid "Commit date"
11184 11339 msgstr ""
11185 11340
11186 11341 #: rhodecode/templates/search/search_content.mako:7
11187 11342 msgid "No content matched"
11188 11343 msgstr ""
11189 11344
11190 11345 #: rhodecode/templates/search/search_content.mako:12
11191 11346 msgid "more matches in this file"
11192 11347 msgstr ""
11193 11348
11194 11349 #: rhodecode/templates/search/search_content.mako:112
11195 11350 msgid "Narrow to this repository group"
11196 11351 msgstr ""
11197 11352
11198 11353 #: rhodecode/templates/search/search_content.mako:119
11199 11354 msgid "Narrow to this repository"
11200 11355 msgstr ""
11201 11356
11202 11357 #: rhodecode/templates/search/search_path.mako:15
11203 11358 msgid "Lines"
11204 11359 msgstr ""
11205 11360
11206 11361 #: rhodecode/templates/summary/components.mako:20
11207 11362 msgid "Closed Branch"
11208 11363 msgstr ""
11209 11364
11210 11365 #: rhodecode/templates/summary/components.mako:83
11211 11366 msgid "Copy the clone by id url"
11212 11367 msgstr ""
11213 11368
11214 11369 #: rhodecode/templates/summary/components.mako:88
11215 11370 msgid "Copy the clone by ssh url"
11216 11371 msgstr ""
11217 11372
11218 11373 #: rhodecode/templates/summary/components.mako:92
11219 11374 msgid "SVN Protocol is disabled. To enable it, see the"
11220 11375 msgstr ""
11221 11376
11222 11377 #: rhodecode/templates/summary/components.mako:92
11223 11378 msgid "documentation here"
11224 11379 msgstr ""
11225 11380
11226 11381 #: rhodecode/templates/summary/components.mako:135
11227 11382 msgid "Number of Repository Forks"
11228 11383 msgstr ""
11229 11384
11230 11385 #: rhodecode/templates/summary/components.mako:172
11231 11386 msgid "Downloads"
11232 11387 msgstr ""
11233 11388
11234 11389 #: rhodecode/templates/summary/components.mako:177
11235 11390 msgid "There are no downloads yet"
11236 11391 msgstr ""
11237 11392
11238 11393 #: rhodecode/templates/summary/components.mako:181
11239 11394 msgid "Downloads are disabled for this repository"
11240 11395 msgstr ""
11241 11396
11242 #: rhodecode/templates/summary/components.mako:203
11397 #: rhodecode/templates/summary/components.mako:196
11398 msgid "more download options"
11399 msgstr ""
11400
11401 #: rhodecode/templates/summary/components.mako:228
11243 11402 msgid "Repository size"
11244 11403 msgstr ""
11245 11404
11246 #: rhodecode/templates/summary/components.mako:215
11405 #: rhodecode/templates/summary/components.mako:240
11247 11406 msgid "Calculating Repository Size..."
11248 11407 msgstr ""
11249 11408
11250 #: rhodecode/templates/summary/components.mako:226
11409 #: rhodecode/templates/summary/components.mako:251
11251 11410 msgid "Code Statistics"
11252 11411 msgstr ""
11253 11412
11254 #: rhodecode/templates/summary/components.mako:235
11413 #: rhodecode/templates/summary/components.mako:260
11255 11414 msgid "Statistics are disabled for this repository"
11256 11415 msgstr ""
11257 11416
11258 11417 #: rhodecode/templates/summary/summary.mako:21
11259 11418 msgid "Quick start"
11260 11419 msgstr ""
11261 11420
11262 11421 #: rhodecode/templates/summary/summary_base.mako:5
11263 11422 msgid "{} Summary"
11264 11423 msgstr ""
11265 11424
11266 11425 #: rhodecode/templates/summary/summary_base.mako:13
11267 11426 #, python-format
11268 11427 msgid "%s ATOM feed"
11269 11428 msgstr ""
11270 11429
11271 11430 #: rhodecode/templates/summary/summary_base.mako:14
11272 11431 #, python-format
11273 11432 msgid "%s RSS feed"
11274 11433 msgstr ""
11275 11434
11276 11435 #: rhodecode/templates/summary/summary_commits.mako:117
11277 11436 msgid "Add or upload files directly via RhodeCode:"
11278 11437 msgstr ""
11279 11438
11280 11439 #: rhodecode/templates/summary/summary_commits.mako:119
11281 11440 msgid "Add New File"
11282 11441 msgstr ""
11283 11442
11284 11443 #: rhodecode/templates/summary/summary_commits.mako:122
11285 11444 msgid "Upload New File"
11286 11445 msgstr ""
11287 11446
11288 11447 #: rhodecode/templates/summary/summary_commits.mako:128
11289 11448 msgid "Push new repo:"
11290 11449 msgstr ""
11291 11450
11292 11451 #: rhodecode/templates/summary/summary_commits.mako:151
11293 11452 msgid "Existing repository?"
11294 11453 msgstr ""
11295 11454
11296 11455 #: rhodecode/templates/tags/tags.mako:5
11297 11456 #, python-format
11298 11457 msgid "%s Tags"
11299 11458 msgstr ""
11300 11459
11301 11460 #: rhodecode/templates/tags/tags.mako:28
11302 11461 msgid "Compare Selected Tags"
11303 11462 msgstr ""
11304 11463
11305 11464 #: rhodecode/templates/tags/tags.mako:34
11306 11465 msgid "tags"
11307 11466 msgstr ""
11308 11467
11309 11468 #: rhodecode/templates/user_group/profile.mako:6
11310 11469 msgid "User Group Profile"
11311 11470 msgstr ""
11312 11471
11313 11472 #: rhodecode/templates/user_group/profile.mako:15
11314 11473 msgid "Group Name"
11315 11474 msgstr ""
11316 11475
11317 11476 #: rhodecode/templates/users/user_profile.mako:39
11318 11477 msgid "First name"
11319 11478 msgstr ""
11320 11479
11321 11480 #: rhodecode/templates/users/user_profile.mako:49
11322 11481 msgid "Last name"
11323 11482 msgstr ""
11324 11483
11325 11484 #: rhodecode/tests/lib/test_ext_json.py:162
11326 11485 msgid "hello"
11327 11486 msgstr ""
11328 11487
@@ -1,800 +1,800 b''
1 1 # -*- coding: utf-8 -*-
2 2
3 3 # Copyright (C) 2010-2020 RhodeCode GmbH
4 4 #
5 5 # This program is free software: you can redistribute it and/or modify
6 6 # it under the terms of the GNU Affero General Public License, version 3
7 7 # (only), as published by the Free Software Foundation.
8 8 #
9 9 # This program is distributed in the hope that it will be useful,
10 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 12 # GNU General Public License for more details.
13 13 #
14 14 # You should have received a copy of the GNU Affero General Public License
15 15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
16 16 #
17 17 # This program is dual-licensed. If you wish to learn more about the
18 18 # RhodeCode Enterprise Edition, including its added features, Support services,
19 19 # and proprietary license terms, please see https://rhodecode.com/licenses/
20 20
21 21 """
22 22 Utilities library for RhodeCode
23 23 """
24 24
25 25 import datetime
26 26 import decorator
27 27 import json
28 28 import logging
29 29 import os
30 30 import re
31 31 import sys
32 32 import shutil
33 33 import socket
34 34 import tempfile
35 35 import traceback
36 36 import tarfile
37 37 import warnings
38 38 import hashlib
39 39 from os.path import join as jn
40 40
41 41 import paste
42 42 import pkg_resources
43 43 from webhelpers2.text import collapse, remove_formatting
44 44 from mako import exceptions
45 45 from pyramid.threadlocal import get_current_registry
46 46 from rhodecode.lib.request import Request
47 47
48 48 from rhodecode.lib.vcs.backends.base import Config
49 49 from rhodecode.lib.vcs.exceptions import VCSError
50 50 from rhodecode.lib.vcs.utils.helpers import get_scm, get_scm_backend
51 51 from rhodecode.lib.utils2 import (
52 52 safe_str, safe_unicode, get_current_rhodecode_user, md5, sha1)
53 53 from rhodecode.model import meta
54 54 from rhodecode.model.db import (
55 55 Repository, User, RhodeCodeUi, UserLog, RepoGroup, UserGroup)
56 56 from rhodecode.model.meta import Session
57 57
58 58
59 59 log = logging.getLogger(__name__)
60 60
61 61 REMOVED_REPO_PAT = re.compile(r'rm__\d{8}_\d{6}_\d{6}__.*')
62 62
63 63 # String which contains characters that are not allowed in slug names for
64 64 # repositories or repository groups. It is properly escaped to use it in
65 65 # regular expressions.
66 66 SLUG_BAD_CHARS = re.escape('`?=[]\;\'"<>,/~!@#$%^&*()+{}|:')
67 67
68 68 # Regex that matches forbidden characters in repo/group slugs.
69 69 SLUG_BAD_CHAR_RE = re.compile('[{}]'.format(SLUG_BAD_CHARS))
70 70
71 71 # Regex that matches allowed characters in repo/group slugs.
72 72 SLUG_GOOD_CHAR_RE = re.compile('[^{}]'.format(SLUG_BAD_CHARS))
73 73
74 74 # Regex that matches whole repo/group slugs.
75 75 SLUG_RE = re.compile('[^{}]+'.format(SLUG_BAD_CHARS))
76 76
77 77 _license_cache = None
78 78
79 79
80 80 def repo_name_slug(value):
81 81 """
82 82 Return slug of name of repository
83 83 This function is called on each creation/modification
84 84 of repository to prevent bad names in repo
85 85 """
86 86 replacement_char = '-'
87 87
88 88 slug = remove_formatting(value)
89 89 slug = SLUG_BAD_CHAR_RE.sub('', slug)
90 90 slug = re.sub('[\s]+', '-', slug)
91 91 slug = collapse(slug, replacement_char)
92 92 return slug
93 93
94 94
95 95 #==============================================================================
96 96 # PERM DECORATOR HELPERS FOR EXTRACTING NAMES FOR PERM CHECKS
97 97 #==============================================================================
98 98 def get_repo_slug(request):
99 99 _repo = ''
100 100
101 101 if hasattr(request, 'db_repo'):
102 102 # if our requests has set db reference use it for name, this
103 103 # translates the example.com/_<id> into proper repo names
104 104 _repo = request.db_repo.repo_name
105 105 elif getattr(request, 'matchdict', None):
106 106 # pyramid
107 107 _repo = request.matchdict.get('repo_name')
108 108
109 109 if _repo:
110 110 _repo = _repo.rstrip('/')
111 111 return _repo
112 112
113 113
114 114 def get_repo_group_slug(request):
115 115 _group = ''
116 116 if hasattr(request, 'db_repo_group'):
117 117 # if our requests has set db reference use it for name, this
118 118 # translates the example.com/_<id> into proper repo group names
119 119 _group = request.db_repo_group.group_name
120 120 elif getattr(request, 'matchdict', None):
121 121 # pyramid
122 122 _group = request.matchdict.get('repo_group_name')
123 123
124 124 if _group:
125 125 _group = _group.rstrip('/')
126 126 return _group
127 127
128 128
129 129 def get_user_group_slug(request):
130 130 _user_group = ''
131 131
132 132 if hasattr(request, 'db_user_group'):
133 133 _user_group = request.db_user_group.users_group_name
134 134 elif getattr(request, 'matchdict', None):
135 135 # pyramid
136 136 _user_group = request.matchdict.get('user_group_id')
137 137 _user_group_name = request.matchdict.get('user_group_name')
138 138 try:
139 139 if _user_group:
140 140 _user_group = UserGroup.get(_user_group)
141 141 elif _user_group_name:
142 142 _user_group = UserGroup.get_by_group_name(_user_group_name)
143 143
144 144 if _user_group:
145 145 _user_group = _user_group.users_group_name
146 146 except Exception:
147 147 log.exception('Failed to get user group by id and name')
148 148 # catch all failures here
149 149 return None
150 150
151 151 return _user_group
152 152
153 153
154 154 def get_filesystem_repos(path, recursive=False, skip_removed_repos=True):
155 155 """
156 156 Scans given path for repos and return (name,(type,path)) tuple
157 157
158 158 :param path: path to scan for repositories
159 159 :param recursive: recursive search and return names with subdirs in front
160 160 """
161 161
162 162 # remove ending slash for better results
163 163 path = path.rstrip(os.sep)
164 164 log.debug('now scanning in %s location recursive:%s...', path, recursive)
165 165
166 166 def _get_repos(p):
167 167 dirpaths = _get_dirpaths(p)
168 168 if not _is_dir_writable(p):
169 169 log.warning('repo path without write access: %s', p)
170 170
171 171 for dirpath in dirpaths:
172 172 if os.path.isfile(os.path.join(p, dirpath)):
173 173 continue
174 174 cur_path = os.path.join(p, dirpath)
175 175
176 176 # skip removed repos
177 177 if skip_removed_repos and REMOVED_REPO_PAT.match(dirpath):
178 178 continue
179 179
180 180 #skip .<somethin> dirs
181 181 if dirpath.startswith('.'):
182 182 continue
183 183
184 184 try:
185 185 scm_info = get_scm(cur_path)
186 186 yield scm_info[1].split(path, 1)[-1].lstrip(os.sep), scm_info
187 187 except VCSError:
188 188 if not recursive:
189 189 continue
190 190 #check if this dir containts other repos for recursive scan
191 191 rec_path = os.path.join(p, dirpath)
192 192 if os.path.isdir(rec_path):
193 193 for inner_scm in _get_repos(rec_path):
194 194 yield inner_scm
195 195
196 196 return _get_repos(path)
197 197
198 198
199 199 def _get_dirpaths(p):
200 200 try:
201 201 # OS-independable way of checking if we have at least read-only
202 202 # access or not.
203 203 dirpaths = os.listdir(p)
204 204 except OSError:
205 205 log.warning('ignoring repo path without read access: %s', p)
206 206 return []
207 207
208 208 # os.listpath has a tweak: If a unicode is passed into it, then it tries to
209 209 # decode paths and suddenly returns unicode objects itself. The items it
210 210 # cannot decode are returned as strings and cause issues.
211 211 #
212 212 # Those paths are ignored here until a solid solution for path handling has
213 213 # been built.
214 214 expected_type = type(p)
215 215
216 216 def _has_correct_type(item):
217 217 if type(item) is not expected_type:
218 218 log.error(
219 219 u"Ignoring path %s since it cannot be decoded into unicode.",
220 220 # Using "repr" to make sure that we see the byte value in case
221 221 # of support.
222 222 repr(item))
223 223 return False
224 224 return True
225 225
226 226 dirpaths = [item for item in dirpaths if _has_correct_type(item)]
227 227
228 228 return dirpaths
229 229
230 230
231 231 def _is_dir_writable(path):
232 232 """
233 233 Probe if `path` is writable.
234 234
235 235 Due to trouble on Cygwin / Windows, this is actually probing if it is
236 236 possible to create a file inside of `path`, stat does not produce reliable
237 237 results in this case.
238 238 """
239 239 try:
240 240 with tempfile.TemporaryFile(dir=path):
241 241 pass
242 242 except OSError:
243 243 return False
244 244 return True
245 245
246 246
247 247 def is_valid_repo(repo_name, base_path, expect_scm=None, explicit_scm=None, config=None):
248 248 """
249 249 Returns True if given path is a valid repository False otherwise.
250 250 If expect_scm param is given also, compare if given scm is the same
251 251 as expected from scm parameter. If explicit_scm is given don't try to
252 252 detect the scm, just use the given one to check if repo is valid
253 253
254 254 :param repo_name:
255 255 :param base_path:
256 256 :param expect_scm:
257 257 :param explicit_scm:
258 258 :param config:
259 259
260 260 :return True: if given path is a valid repository
261 261 """
262 262 full_path = os.path.join(safe_str(base_path), safe_str(repo_name))
263 263 log.debug('Checking if `%s` is a valid path for repository. '
264 264 'Explicit type: %s', repo_name, explicit_scm)
265 265
266 266 try:
267 267 if explicit_scm:
268 268 detected_scms = [get_scm_backend(explicit_scm)(
269 269 full_path, config=config).alias]
270 270 else:
271 271 detected_scms = get_scm(full_path)
272 272
273 273 if expect_scm:
274 274 return detected_scms[0] == expect_scm
275 275 log.debug('path: %s is an vcs object:%s', full_path, detected_scms)
276 276 return True
277 277 except VCSError:
278 278 log.debug('path: %s is not a valid repo !', full_path)
279 279 return False
280 280
281 281
282 282 def is_valid_repo_group(repo_group_name, base_path, skip_path_check=False):
283 283 """
284 284 Returns True if given path is a repository group, False otherwise
285 285
286 286 :param repo_name:
287 287 :param base_path:
288 288 """
289 289 full_path = os.path.join(safe_str(base_path), safe_str(repo_group_name))
290 290 log.debug('Checking if `%s` is a valid path for repository group',
291 291 repo_group_name)
292 292
293 293 # check if it's not a repo
294 294 if is_valid_repo(repo_group_name, base_path):
295 295 log.debug('Repo called %s exist, it is not a valid repo group', repo_group_name)
296 296 return False
297 297
298 298 try:
299 299 # we need to check bare git repos at higher level
300 300 # since we might match branches/hooks/info/objects or possible
301 301 # other things inside bare git repo
302 302 maybe_repo = os.path.dirname(full_path)
303 303 if maybe_repo == base_path:
304 304 # skip root level repo check, we know root location CANNOT BE a repo group
305 305 return False
306 306
307 307 scm_ = get_scm(maybe_repo)
308 308 log.debug('path: %s is a vcs object:%s, not valid repo group', full_path, scm_)
309 309 return False
310 310 except VCSError:
311 311 pass
312 312
313 313 # check if it's a valid path
314 314 if skip_path_check or os.path.isdir(full_path):
315 315 log.debug('path: %s is a valid repo group !', full_path)
316 316 return True
317 317
318 318 log.debug('path: %s is not a valid repo group !', full_path)
319 319 return False
320 320
321 321
322 322 def ask_ok(prompt, retries=4, complaint='[y]es or [n]o please!'):
323 323 while True:
324 324 ok = raw_input(prompt)
325 325 if ok.lower() in ('y', 'ye', 'yes'):
326 326 return True
327 327 if ok.lower() in ('n', 'no', 'nop', 'nope'):
328 328 return False
329 329 retries = retries - 1
330 330 if retries < 0:
331 331 raise IOError
332 332 print(complaint)
333 333
334 334 # propagated from mercurial documentation
335 335 ui_sections = [
336 336 'alias', 'auth',
337 337 'decode/encode', 'defaults',
338 338 'diff', 'email',
339 339 'extensions', 'format',
340 340 'merge-patterns', 'merge-tools',
341 341 'hooks', 'http_proxy',
342 342 'smtp', 'patch',
343 343 'paths', 'profiling',
344 344 'server', 'trusted',
345 345 'ui', 'web', ]
346 346
347 347
348 348 def config_data_from_db(clear_session=True, repo=None):
349 349 """
350 350 Read the configuration data from the database and return configuration
351 351 tuples.
352 352 """
353 353 from rhodecode.model.settings import VcsSettingsModel
354 354
355 355 config = []
356 356
357 357 sa = meta.Session()
358 358 settings_model = VcsSettingsModel(repo=repo, sa=sa)
359 359
360 360 ui_settings = settings_model.get_ui_settings()
361 361
362 362 ui_data = []
363 363 for setting in ui_settings:
364 364 if setting.active:
365 365 ui_data.append((setting.section, setting.key, setting.value))
366 366 config.append((
367 367 safe_str(setting.section), safe_str(setting.key),
368 368 safe_str(setting.value)))
369 369 if setting.key == 'push_ssl':
370 370 # force set push_ssl requirement to False, rhodecode
371 371 # handles that
372 372 config.append((
373 373 safe_str(setting.section), safe_str(setting.key), False))
374 374 log.debug(
375 375 'settings ui from db@repo[%s]: %s',
376 376 repo,
377 377 ','.join(map(lambda s: '[{}] {}={}'.format(*s), ui_data)))
378 378 if clear_session:
379 379 meta.Session.remove()
380 380
381 381 # TODO: mikhail: probably it makes no sense to re-read hooks information.
382 382 # It's already there and activated/deactivated
383 383 skip_entries = []
384 384 enabled_hook_classes = get_enabled_hook_classes(ui_settings)
385 385 if 'pull' not in enabled_hook_classes:
386 386 skip_entries.append(('hooks', RhodeCodeUi.HOOK_PRE_PULL))
387 387 if 'push' not in enabled_hook_classes:
388 388 skip_entries.append(('hooks', RhodeCodeUi.HOOK_PRE_PUSH))
389 389 skip_entries.append(('hooks', RhodeCodeUi.HOOK_PRETX_PUSH))
390 390 skip_entries.append(('hooks', RhodeCodeUi.HOOK_PUSH_KEY))
391 391
392 392 config = [entry for entry in config if entry[:2] not in skip_entries]
393 393
394 394 return config
395 395
396 396
397 397 def make_db_config(clear_session=True, repo=None):
398 398 """
399 399 Create a :class:`Config` instance based on the values in the database.
400 400 """
401 401 config = Config()
402 402 config_data = config_data_from_db(clear_session=clear_session, repo=repo)
403 403 for section, option, value in config_data:
404 404 config.set(section, option, value)
405 405 return config
406 406
407 407
408 408 def get_enabled_hook_classes(ui_settings):
409 409 """
410 410 Return the enabled hook classes.
411 411
412 412 :param ui_settings: List of ui_settings as returned
413 413 by :meth:`VcsSettingsModel.get_ui_settings`
414 414
415 415 :return: a list with the enabled hook classes. The order is not guaranteed.
416 416 :rtype: list
417 417 """
418 418 enabled_hooks = []
419 419 active_hook_keys = [
420 420 key for section, key, value, active in ui_settings
421 421 if section == 'hooks' and active]
422 422
423 423 hook_names = {
424 424 RhodeCodeUi.HOOK_PUSH: 'push',
425 425 RhodeCodeUi.HOOK_PULL: 'pull',
426 426 RhodeCodeUi.HOOK_REPO_SIZE: 'repo_size'
427 427 }
428 428
429 429 for key in active_hook_keys:
430 430 hook = hook_names.get(key)
431 431 if hook:
432 432 enabled_hooks.append(hook)
433 433
434 434 return enabled_hooks
435 435
436 436
437 437 def set_rhodecode_config(config):
438 438 """
439 439 Updates pyramid config with new settings from database
440 440
441 441 :param config:
442 442 """
443 443 from rhodecode.model.settings import SettingsModel
444 444 app_settings = SettingsModel().get_all_settings()
445 445
446 446 for k, v in app_settings.items():
447 447 config[k] = v
448 448
449 449
450 450 def get_rhodecode_realm():
451 451 """
452 452 Return the rhodecode realm from database.
453 453 """
454 454 from rhodecode.model.settings import SettingsModel
455 455 realm = SettingsModel().get_setting_by_name('realm')
456 456 return safe_str(realm.app_settings_value)
457 457
458 458
459 459 def get_rhodecode_base_path():
460 460 """
461 461 Returns the base path. The base path is the filesystem path which points
462 462 to the repository store.
463 463 """
464 464 from rhodecode.model.settings import SettingsModel
465 465 paths_ui = SettingsModel().get_ui_by_section_and_key('paths', '/')
466 466 return safe_str(paths_ui.ui_value)
467 467
468 468
469 469 def map_groups(path):
470 470 """
471 471 Given a full path to a repository, create all nested groups that this
472 472 repo is inside. This function creates parent-child relationships between
473 473 groups and creates default perms for all new groups.
474 474
475 475 :param paths: full path to repository
476 476 """
477 477 from rhodecode.model.repo_group import RepoGroupModel
478 478 sa = meta.Session()
479 479 groups = path.split(Repository.NAME_SEP)
480 480 parent = None
481 481 group = None
482 482
483 483 # last element is repo in nested groups structure
484 484 groups = groups[:-1]
485 485 rgm = RepoGroupModel(sa)
486 486 owner = User.get_first_super_admin()
487 487 for lvl, group_name in enumerate(groups):
488 488 group_name = '/'.join(groups[:lvl] + [group_name])
489 489 group = RepoGroup.get_by_group_name(group_name)
490 490 desc = '%s group' % group_name
491 491
492 492 # skip folders that are now removed repos
493 493 if REMOVED_REPO_PAT.match(group_name):
494 494 break
495 495
496 496 if group is None:
497 497 log.debug('creating group level: %s group_name: %s',
498 498 lvl, group_name)
499 499 group = RepoGroup(group_name, parent)
500 500 group.group_description = desc
501 501 group.user = owner
502 502 sa.add(group)
503 503 perm_obj = rgm._create_default_perms(group)
504 504 sa.add(perm_obj)
505 505 sa.flush()
506 506
507 507 parent = group
508 508 return group
509 509
510 510
511 511 def repo2db_mapper(initial_repo_list, remove_obsolete=False):
512 512 """
513 513 maps all repos given in initial_repo_list, non existing repositories
514 514 are created, if remove_obsolete is True it also checks for db entries
515 515 that are not in initial_repo_list and removes them.
516 516
517 517 :param initial_repo_list: list of repositories found by scanning methods
518 518 :param remove_obsolete: check for obsolete entries in database
519 519 """
520 520 from rhodecode.model.repo import RepoModel
521 521 from rhodecode.model.repo_group import RepoGroupModel
522 522 from rhodecode.model.settings import SettingsModel
523 523
524 524 sa = meta.Session()
525 525 repo_model = RepoModel()
526 526 user = User.get_first_super_admin()
527 527 added = []
528 528
529 529 # creation defaults
530 530 defs = SettingsModel().get_default_repo_settings(strip_prefix=True)
531 531 enable_statistics = defs.get('repo_enable_statistics')
532 532 enable_locking = defs.get('repo_enable_locking')
533 533 enable_downloads = defs.get('repo_enable_downloads')
534 534 private = defs.get('repo_private')
535 535
536 536 for name, repo in initial_repo_list.items():
537 537 group = map_groups(name)
538 538 unicode_name = safe_unicode(name)
539 539 db_repo = repo_model.get_by_repo_name(unicode_name)
540 540 # found repo that is on filesystem not in RhodeCode database
541 541 if not db_repo:
542 542 log.info('repository %s not found, creating now', name)
543 543 added.append(name)
544 544 desc = (repo.description
545 545 if repo.description != 'unknown'
546 546 else '%s repository' % name)
547 547
548 548 db_repo = repo_model._create_repo(
549 549 repo_name=name,
550 550 repo_type=repo.alias,
551 551 description=desc,
552 552 repo_group=getattr(group, 'group_id', None),
553 553 owner=user,
554 554 enable_locking=enable_locking,
555 555 enable_downloads=enable_downloads,
556 556 enable_statistics=enable_statistics,
557 557 private=private,
558 558 state=Repository.STATE_CREATED
559 559 )
560 560 sa.commit()
561 561 # we added that repo just now, and make sure we updated server info
562 562 if db_repo.repo_type == 'git':
563 563 git_repo = db_repo.scm_instance()
564 564 # update repository server-info
565 565 log.debug('Running update server info')
566 566 git_repo._update_server_info()
567 567
568 568 db_repo.update_commit_cache()
569 569
570 570 config = db_repo._config
571 571 config.set('extensions', 'largefiles', '')
572 572 repo = db_repo.scm_instance(config=config)
573 573 repo.install_hooks()
574 574
575 575 removed = []
576 576 if remove_obsolete:
577 577 # remove from database those repositories that are not in the filesystem
578 578 for repo in sa.query(Repository).all():
579 579 if repo.repo_name not in initial_repo_list.keys():
580 580 log.debug("Removing non-existing repository found in db `%s`",
581 581 repo.repo_name)
582 582 try:
583 583 RepoModel(sa).delete(repo, forks='detach', fs_remove=False)
584 584 sa.commit()
585 585 removed.append(repo.repo_name)
586 586 except Exception:
587 587 # don't hold further removals on error
588 588 log.error(traceback.format_exc())
589 589 sa.rollback()
590 590
591 591 def splitter(full_repo_name):
592 592 _parts = full_repo_name.rsplit(RepoGroup.url_sep(), 1)
593 593 gr_name = None
594 594 if len(_parts) == 2:
595 595 gr_name = _parts[0]
596 596 return gr_name
597 597
598 598 initial_repo_group_list = [splitter(x) for x in
599 599 initial_repo_list.keys() if splitter(x)]
600 600
601 601 # remove from database those repository groups that are not in the
602 602 # filesystem due to parent child relationships we need to delete them
603 603 # in a specific order of most nested first
604 604 all_groups = [x.group_name for x in sa.query(RepoGroup).all()]
605 605 nested_sort = lambda gr: len(gr.split('/'))
606 606 for group_name in sorted(all_groups, key=nested_sort, reverse=True):
607 607 if group_name not in initial_repo_group_list:
608 608 repo_group = RepoGroup.get_by_group_name(group_name)
609 609 if (repo_group.children.all() or
610 610 not RepoGroupModel().check_exist_filesystem(
611 611 group_name=group_name, exc_on_failure=False)):
612 612 continue
613 613
614 614 log.info(
615 615 'Removing non-existing repository group found in db `%s`',
616 616 group_name)
617 617 try:
618 618 RepoGroupModel(sa).delete(group_name, fs_remove=False)
619 619 sa.commit()
620 620 removed.append(group_name)
621 621 except Exception:
622 622 # don't hold further removals on error
623 623 log.exception(
624 624 'Unable to remove repository group `%s`',
625 625 group_name)
626 626 sa.rollback()
627 627 raise
628 628
629 629 return added, removed
630 630
631 631
632 632 def load_rcextensions(root_path):
633 633 import rhodecode
634 634 from rhodecode.config import conf
635 635
636 636 path = os.path.join(root_path)
637 637 sys.path.append(path)
638 638
639 639 try:
640 640 rcextensions = __import__('rcextensions')
641 641 except ImportError:
642 642 if os.path.isdir(os.path.join(path, 'rcextensions')):
643 643 log.warn('Unable to load rcextensions from %s', path)
644 644 rcextensions = None
645 645
646 646 if rcextensions:
647 log.debug('Found rcextensions module loaded %s...', rcextensions)
647 log.info('Loaded rcextensions from %s...', rcextensions)
648 648 rhodecode.EXTENSIONS = rcextensions
649 649
650 650 # Additional mappings that are not present in the pygments lexers
651 651 conf.LANGUAGES_EXTENSIONS_MAP.update(
652 652 getattr(rhodecode.EXTENSIONS, 'EXTRA_MAPPINGS', {}))
653 653
654 654
655 655 def get_custom_lexer(extension):
656 656 """
657 657 returns a custom lexer if it is defined in rcextensions module, or None
658 658 if there's no custom lexer defined
659 659 """
660 660 import rhodecode
661 661 from pygments import lexers
662 662
663 663 # custom override made by RhodeCode
664 664 if extension in ['mako']:
665 665 return lexers.get_lexer_by_name('html+mako')
666 666
667 667 # check if we didn't define this extension as other lexer
668 668 extensions = rhodecode.EXTENSIONS and getattr(rhodecode.EXTENSIONS, 'EXTRA_LEXERS', None)
669 669 if extensions and extension in rhodecode.EXTENSIONS.EXTRA_LEXERS:
670 670 _lexer_name = rhodecode.EXTENSIONS.EXTRA_LEXERS[extension]
671 671 return lexers.get_lexer_by_name(_lexer_name)
672 672
673 673
674 674 #==============================================================================
675 675 # TEST FUNCTIONS AND CREATORS
676 676 #==============================================================================
677 677 def create_test_index(repo_location, config):
678 678 """
679 679 Makes default test index.
680 680 """
681 681 import rc_testdata
682 682
683 683 rc_testdata.extract_search_index(
684 684 'vcs_search_index', os.path.dirname(config['search.location']))
685 685
686 686
687 687 def create_test_directory(test_path):
688 688 """
689 689 Create test directory if it doesn't exist.
690 690 """
691 691 if not os.path.isdir(test_path):
692 692 log.debug('Creating testdir %s', test_path)
693 693 os.makedirs(test_path)
694 694
695 695
696 696 def create_test_database(test_path, config):
697 697 """
698 698 Makes a fresh database.
699 699 """
700 700 from rhodecode.lib.db_manage import DbManage
701 701
702 702 # PART ONE create db
703 703 dbconf = config['sqlalchemy.db1.url']
704 704 log.debug('making test db %s', dbconf)
705 705
706 706 dbmanage = DbManage(log_sql=False, dbconf=dbconf, root=config['here'],
707 707 tests=True, cli_args={'force_ask': True})
708 708 dbmanage.create_tables(override=True)
709 709 dbmanage.set_db_version()
710 710 # for tests dynamically set new root paths based on generated content
711 711 dbmanage.create_settings(dbmanage.config_prompt(test_path))
712 712 dbmanage.create_default_user()
713 713 dbmanage.create_test_admin_and_users()
714 714 dbmanage.create_permissions()
715 715 dbmanage.populate_default_permissions()
716 716 Session().commit()
717 717
718 718
719 719 def create_test_repositories(test_path, config):
720 720 """
721 721 Creates test repositories in the temporary directory. Repositories are
722 722 extracted from archives within the rc_testdata package.
723 723 """
724 724 import rc_testdata
725 725 from rhodecode.tests import HG_REPO, GIT_REPO, SVN_REPO
726 726
727 727 log.debug('making test vcs repositories')
728 728
729 729 idx_path = config['search.location']
730 730 data_path = config['cache_dir']
731 731
732 732 # clean index and data
733 733 if idx_path and os.path.exists(idx_path):
734 734 log.debug('remove %s', idx_path)
735 735 shutil.rmtree(idx_path)
736 736
737 737 if data_path and os.path.exists(data_path):
738 738 log.debug('remove %s', data_path)
739 739 shutil.rmtree(data_path)
740 740
741 741 rc_testdata.extract_hg_dump('vcs_test_hg', jn(test_path, HG_REPO))
742 742 rc_testdata.extract_git_dump('vcs_test_git', jn(test_path, GIT_REPO))
743 743
744 744 # Note: Subversion is in the process of being integrated with the system,
745 745 # until we have a properly packed version of the test svn repository, this
746 746 # tries to copy over the repo from a package "rc_testdata"
747 747 svn_repo_path = rc_testdata.get_svn_repo_archive()
748 748 with tarfile.open(svn_repo_path) as tar:
749 749 tar.extractall(jn(test_path, SVN_REPO))
750 750
751 751
752 752 def password_changed(auth_user, session):
753 753 # Never report password change in case of default user or anonymous user.
754 754 if auth_user.username == User.DEFAULT_USER or auth_user.user_id is None:
755 755 return False
756 756
757 757 password_hash = md5(auth_user.password) if auth_user.password else None
758 758 rhodecode_user = session.get('rhodecode_user', {})
759 759 session_password_hash = rhodecode_user.get('password', '')
760 760 return password_hash != session_password_hash
761 761
762 762
763 763 def read_opensource_licenses():
764 764 global _license_cache
765 765
766 766 if not _license_cache:
767 767 licenses = pkg_resources.resource_string(
768 768 'rhodecode', 'config/licenses.json')
769 769 _license_cache = json.loads(licenses)
770 770
771 771 return _license_cache
772 772
773 773
774 774 def generate_platform_uuid():
775 775 """
776 776 Generates platform UUID based on it's name
777 777 """
778 778 import platform
779 779
780 780 try:
781 781 uuid_list = [platform.platform()]
782 782 return hashlib.sha256(':'.join(uuid_list)).hexdigest()
783 783 except Exception as e:
784 784 log.error('Failed to generate host uuid: %s', e)
785 785 return 'UNDEFINED'
786 786
787 787
788 788 def send_test_email(recipients, email_body='TEST EMAIL'):
789 789 """
790 790 Simple code for generating test emails.
791 791 Usage::
792 792
793 793 from rhodecode.lib import utils
794 794 utils.send_test_email()
795 795 """
796 796 from rhodecode.lib.celerylib import tasks, run_task
797 797
798 798 email_body = email_body_plaintext = email_body
799 799 subject = 'SUBJECT FROM: {}'.format(socket.gethostname())
800 800 tasks.send_email(recipients, subject, email_body_plaintext, email_body)
@@ -1,1104 +1,1070 b''
1 1 # -*- coding: utf-8 -*-
2 2
3 3 # Copyright (C) 2011-2020 RhodeCode GmbH
4 4 #
5 5 # This program is free software: you can redistribute it and/or modify
6 6 # it under the terms of the GNU Affero General Public License, version 3
7 7 # (only), as published by the Free Software Foundation.
8 8 #
9 9 # This program is distributed in the hope that it will be useful,
10 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 12 # GNU General Public License for more details.
13 13 #
14 14 # You should have received a copy of the GNU Affero General Public License
15 15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
16 16 #
17 17 # This program is dual-licensed. If you wish to learn more about the
18 18 # RhodeCode Enterprise Edition, including its added features, Support services,
19 19 # and proprietary license terms, please see https://rhodecode.com/licenses/
20 20
21 21
22 22 """
23 23 Some simple helper functions
24 24 """
25 25
26 26 import collections
27 27 import datetime
28 28 import dateutil.relativedelta
29 29 import hashlib
30 30 import logging
31 31 import re
32 32 import sys
33 33 import time
34 34 import urllib
35 35 import urlobject
36 36 import uuid
37 37 import getpass
38 38 from functools import update_wrapper, partial
39 39
40 40 import pygments.lexers
41 41 import sqlalchemy
42 42 import sqlalchemy.engine.url
43 43 import sqlalchemy.exc
44 44 import sqlalchemy.sql
45 45 import webob
46 46 import pyramid.threadlocal
47 47 from pyramid import compat
48 48 from pyramid.settings import asbool
49 49
50 50 import rhodecode
51 51 from rhodecode.translation import _, _pluralize
52 52
53 53
54 54 def md5(s):
55 55 return hashlib.md5(s).hexdigest()
56 56
57 57
58 58 def md5_safe(s):
59 59 return md5(safe_str(s))
60 60
61 61
62 62 def sha1(s):
63 63 return hashlib.sha1(s).hexdigest()
64 64
65 65
66 66 def sha1_safe(s):
67 67 return sha1(safe_str(s))
68 68
69 69
70 70 def __get_lem(extra_mapping=None):
71 71 """
72 72 Get language extension map based on what's inside pygments lexers
73 73 """
74 74 d = collections.defaultdict(lambda: [])
75 75
76 76 def __clean(s):
77 77 s = s.lstrip('*')
78 78 s = s.lstrip('.')
79 79
80 80 if s.find('[') != -1:
81 81 exts = []
82 82 start, stop = s.find('['), s.find(']')
83 83
84 84 for suffix in s[start + 1:stop]:
85 85 exts.append(s[:s.find('[')] + suffix)
86 86 return [e.lower() for e in exts]
87 87 else:
88 88 return [s.lower()]
89 89
90 90 for lx, t in sorted(pygments.lexers.LEXERS.items()):
91 91 m = map(__clean, t[-2])
92 92 if m:
93 93 m = reduce(lambda x, y: x + y, m)
94 94 for ext in m:
95 95 desc = lx.replace('Lexer', '')
96 96 d[ext].append(desc)
97 97
98 98 data = dict(d)
99 99
100 100 extra_mapping = extra_mapping or {}
101 101 if extra_mapping:
102 102 for k, v in extra_mapping.items():
103 103 if k not in data:
104 104 # register new mapping2lexer
105 105 data[k] = [v]
106 106
107 107 return data
108 108
109 109
110 110 def str2bool(_str):
111 111 """
112 112 returns True/False value from given string, it tries to translate the
113 113 string into boolean
114 114
115 115 :param _str: string value to translate into boolean
116 116 :rtype: boolean
117 117 :returns: boolean from given string
118 118 """
119 119 if _str is None:
120 120 return False
121 121 if _str in (True, False):
122 122 return _str
123 123 _str = str(_str).strip().lower()
124 124 return _str in ('t', 'true', 'y', 'yes', 'on', '1')
125 125
126 126
127 127 def aslist(obj, sep=None, strip=True):
128 128 """
129 129 Returns given string separated by sep as list
130 130
131 131 :param obj:
132 132 :param sep:
133 133 :param strip:
134 134 """
135 135 if isinstance(obj, (basestring,)):
136 136 lst = obj.split(sep)
137 137 if strip:
138 138 lst = [v.strip() for v in lst]
139 139 return lst
140 140 elif isinstance(obj, (list, tuple)):
141 141 return obj
142 142 elif obj is None:
143 143 return []
144 144 else:
145 145 return [obj]
146 146
147 147
148 148 def convert_line_endings(line, mode):
149 149 """
150 150 Converts a given line "line end" accordingly to given mode
151 151
152 152 Available modes are::
153 153 0 - Unix
154 154 1 - Mac
155 155 2 - DOS
156 156
157 157 :param line: given line to convert
158 158 :param mode: mode to convert to
159 159 :rtype: str
160 160 :return: converted line according to mode
161 161 """
162 162 if mode == 0:
163 163 line = line.replace('\r\n', '\n')
164 164 line = line.replace('\r', '\n')
165 165 elif mode == 1:
166 166 line = line.replace('\r\n', '\r')
167 167 line = line.replace('\n', '\r')
168 168 elif mode == 2:
169 169 line = re.sub('\r(?!\n)|(?<!\r)\n', '\r\n', line)
170 170 return line
171 171
172 172
173 173 def detect_mode(line, default):
174 174 """
175 175 Detects line break for given line, if line break couldn't be found
176 176 given default value is returned
177 177
178 178 :param line: str line
179 179 :param default: default
180 180 :rtype: int
181 181 :return: value of line end on of 0 - Unix, 1 - Mac, 2 - DOS
182 182 """
183 183 if line.endswith('\r\n'):
184 184 return 2
185 185 elif line.endswith('\n'):
186 186 return 0
187 187 elif line.endswith('\r'):
188 188 return 1
189 189 else:
190 190 return default
191 191
192 192
193 193 def safe_int(val, default=None):
194 194 """
195 195 Returns int() of val if val is not convertable to int use default
196 196 instead
197 197
198 198 :param val:
199 199 :param default:
200 200 """
201 201
202 202 try:
203 203 val = int(val)
204 204 except (ValueError, TypeError):
205 205 val = default
206 206
207 207 return val
208 208
209 209
210 210 def safe_unicode(str_, from_encoding=None, use_chardet=False):
211 211 """
212 212 safe unicode function. Does few trick to turn str_ into unicode
213 213
214 214 In case of UnicodeDecode error, we try to return it with encoding detected
215 215 by chardet library if it fails fallback to unicode with errors replaced
216 216
217 217 :param str_: string to decode
218 218 :rtype: unicode
219 219 :returns: unicode object
220 220 """
221 221 if isinstance(str_, unicode):
222 222 return str_
223 223
224 224 if not from_encoding:
225 225 DEFAULT_ENCODINGS = aslist(rhodecode.CONFIG.get('default_encoding',
226 226 'utf8'), sep=',')
227 227 from_encoding = DEFAULT_ENCODINGS
228 228
229 229 if not isinstance(from_encoding, (list, tuple)):
230 230 from_encoding = [from_encoding]
231 231
232 232 try:
233 233 return unicode(str_)
234 234 except UnicodeDecodeError:
235 235 pass
236 236
237 237 for enc in from_encoding:
238 238 try:
239 239 return unicode(str_, enc)
240 240 except UnicodeDecodeError:
241 241 pass
242 242
243 243 if use_chardet:
244 244 try:
245 245 import chardet
246 246 encoding = chardet.detect(str_)['encoding']
247 247 if encoding is None:
248 248 raise Exception()
249 249 return str_.decode(encoding)
250 250 except (ImportError, UnicodeDecodeError, Exception):
251 251 return unicode(str_, from_encoding[0], 'replace')
252 252 else:
253 253 return unicode(str_, from_encoding[0], 'replace')
254 254
255 255 def safe_str(unicode_, to_encoding=None, use_chardet=False):
256 256 """
257 257 safe str function. Does few trick to turn unicode_ into string
258 258
259 259 In case of UnicodeEncodeError, we try to return it with encoding detected
260 260 by chardet library if it fails fallback to string with errors replaced
261 261
262 262 :param unicode_: unicode to encode
263 263 :rtype: str
264 264 :returns: str object
265 265 """
266 266
267 267 # if it's not basestr cast to str
268 268 if not isinstance(unicode_, compat.string_types):
269 269 return str(unicode_)
270 270
271 271 if isinstance(unicode_, str):
272 272 return unicode_
273 273
274 274 if not to_encoding:
275 275 DEFAULT_ENCODINGS = aslist(rhodecode.CONFIG.get('default_encoding',
276 276 'utf8'), sep=',')
277 277 to_encoding = DEFAULT_ENCODINGS
278 278
279 279 if not isinstance(to_encoding, (list, tuple)):
280 280 to_encoding = [to_encoding]
281 281
282 282 for enc in to_encoding:
283 283 try:
284 284 return unicode_.encode(enc)
285 285 except UnicodeEncodeError:
286 286 pass
287 287
288 288 if use_chardet:
289 289 try:
290 290 import chardet
291 291 encoding = chardet.detect(unicode_)['encoding']
292 292 if encoding is None:
293 293 raise UnicodeEncodeError()
294 294
295 295 return unicode_.encode(encoding)
296 296 except (ImportError, UnicodeEncodeError):
297 297 return unicode_.encode(to_encoding[0], 'replace')
298 298 else:
299 299 return unicode_.encode(to_encoding[0], 'replace')
300 300
301 301
302 302 def remove_suffix(s, suffix):
303 303 if s.endswith(suffix):
304 304 s = s[:-1 * len(suffix)]
305 305 return s
306 306
307 307
308 308 def remove_prefix(s, prefix):
309 309 if s.startswith(prefix):
310 310 s = s[len(prefix):]
311 311 return s
312 312
313 313
314 314 def find_calling_context(ignore_modules=None):
315 315 """
316 316 Look through the calling stack and return the frame which called
317 317 this function and is part of core module ( ie. rhodecode.* )
318 318
319 319 :param ignore_modules: list of modules to ignore eg. ['rhodecode.lib']
320 320 """
321 321
322 322 ignore_modules = ignore_modules or []
323 323
324 324 f = sys._getframe(2)
325 325 while f.f_back is not None:
326 326 name = f.f_globals.get('__name__')
327 327 if name and name.startswith(__name__.split('.')[0]):
328 328 if name not in ignore_modules:
329 329 return f
330 330 f = f.f_back
331 331 return None
332 332
333 333
334 334 def ping_connection(connection, branch):
335 335 if branch:
336 336 # "branch" refers to a sub-connection of a connection,
337 337 # we don't want to bother pinging on these.
338 338 return
339 339
340 340 # turn off "close with result". This flag is only used with
341 341 # "connectionless" execution, otherwise will be False in any case
342 342 save_should_close_with_result = connection.should_close_with_result
343 343 connection.should_close_with_result = False
344 344
345 345 try:
346 346 # run a SELECT 1. use a core select() so that
347 347 # the SELECT of a scalar value without a table is
348 348 # appropriately formatted for the backend
349 349 connection.scalar(sqlalchemy.sql.select([1]))
350 350 except sqlalchemy.exc.DBAPIError as err:
351 351 # catch SQLAlchemy's DBAPIError, which is a wrapper
352 352 # for the DBAPI's exception. It includes a .connection_invalidated
353 353 # attribute which specifies if this connection is a "disconnect"
354 354 # condition, which is based on inspection of the original exception
355 355 # by the dialect in use.
356 356 if err.connection_invalidated:
357 357 # run the same SELECT again - the connection will re-validate
358 358 # itself and establish a new connection. The disconnect detection
359 359 # here also causes the whole connection pool to be invalidated
360 360 # so that all stale connections are discarded.
361 361 connection.scalar(sqlalchemy.sql.select([1]))
362 362 else:
363 363 raise
364 364 finally:
365 365 # restore "close with result"
366 366 connection.should_close_with_result = save_should_close_with_result
367 367
368 368
369 369 def engine_from_config(configuration, prefix='sqlalchemy.', **kwargs):
370 370 """Custom engine_from_config functions."""
371 371 log = logging.getLogger('sqlalchemy.engine')
372 372 use_ping_connection = asbool(configuration.pop('sqlalchemy.db1.ping_connection', None))
373 373 debug = asbool(configuration.pop('sqlalchemy.db1.debug_query', None))
374 374
375 375 engine = sqlalchemy.engine_from_config(configuration, prefix, **kwargs)
376 376
377 377 def color_sql(sql):
378 378 color_seq = '\033[1;33m' # This is yellow: code 33
379 379 normal = '\x1b[0m'
380 380 return ''.join([color_seq, sql, normal])
381 381
382 382 if use_ping_connection:
383 383 log.debug('Adding ping_connection on the engine config.')
384 384 sqlalchemy.event.listen(engine, "engine_connect", ping_connection)
385 385
386 386 if debug:
387 387 # attach events only for debug configuration
388 388 def before_cursor_execute(conn, cursor, statement,
389 389 parameters, context, executemany):
390 390 setattr(conn, 'query_start_time', time.time())
391 391 log.info(color_sql(">>>>> STARTING QUERY >>>>>"))
392 392 calling_context = find_calling_context(ignore_modules=[
393 393 'rhodecode.lib.caching_query',
394 394 'rhodecode.model.settings',
395 395 ])
396 396 if calling_context:
397 397 log.info(color_sql('call context %s:%s' % (
398 398 calling_context.f_code.co_filename,
399 399 calling_context.f_lineno,
400 400 )))
401 401
402 402 def after_cursor_execute(conn, cursor, statement,
403 403 parameters, context, executemany):
404 404 delattr(conn, 'query_start_time')
405 405
406 406 sqlalchemy.event.listen(engine, "before_cursor_execute", before_cursor_execute)
407 407 sqlalchemy.event.listen(engine, "after_cursor_execute", after_cursor_execute)
408 408
409 409 return engine
410 410
411 411
412 412 def get_encryption_key(config):
413 413 secret = config.get('rhodecode.encrypted_values.secret')
414 414 default = config['beaker.session.secret']
415 415 return secret or default
416 416
417 417
418 418 def age(prevdate, now=None, show_short_version=False, show_suffix=True,
419 419 short_format=False):
420 420 """
421 421 Turns a datetime into an age string.
422 422 If show_short_version is True, this generates a shorter string with
423 423 an approximate age; ex. '1 day ago', rather than '1 day and 23 hours ago'.
424 424
425 425 * IMPORTANT*
426 426 Code of this function is written in special way so it's easier to
427 427 backport it to javascript. If you mean to update it, please also update
428 428 `jquery.timeago-extension.js` file
429 429
430 430 :param prevdate: datetime object
431 431 :param now: get current time, if not define we use
432 432 `datetime.datetime.now()`
433 433 :param show_short_version: if it should approximate the date and
434 434 return a shorter string
435 435 :param show_suffix:
436 436 :param short_format: show short format, eg 2D instead of 2 days
437 437 :rtype: unicode
438 438 :returns: unicode words describing age
439 439 """
440 440
441 441 def _get_relative_delta(now, prevdate):
442 442 base = dateutil.relativedelta.relativedelta(now, prevdate)
443 443 return {
444 444 'year': base.years,
445 445 'month': base.months,
446 446 'day': base.days,
447 447 'hour': base.hours,
448 448 'minute': base.minutes,
449 449 'second': base.seconds,
450 450 }
451 451
452 452 def _is_leap_year(year):
453 453 return year % 4 == 0 and (year % 100 != 0 or year % 400 == 0)
454 454
455 455 def get_month(prevdate):
456 456 return prevdate.month
457 457
458 458 def get_year(prevdate):
459 459 return prevdate.year
460 460
461 461 now = now or datetime.datetime.now()
462 462 order = ['year', 'month', 'day', 'hour', 'minute', 'second']
463 463 deltas = {}
464 464 future = False
465 465
466 466 if prevdate > now:
467 467 now_old = now
468 468 now = prevdate
469 469 prevdate = now_old
470 470 future = True
471 471 if future:
472 472 prevdate = prevdate.replace(microsecond=0)
473 473 # Get date parts deltas
474 474 for part in order:
475 475 rel_delta = _get_relative_delta(now, prevdate)
476 476 deltas[part] = rel_delta[part]
477 477
478 478 # Fix negative offsets (there is 1 second between 10:59:59 and 11:00:00,
479 479 # not 1 hour, -59 minutes and -59 seconds)
480 480 offsets = [[5, 60], [4, 60], [3, 24]]
481 481 for element in offsets: # seconds, minutes, hours
482 482 num = element[0]
483 483 length = element[1]
484 484
485 485 part = order[num]
486 486 carry_part = order[num - 1]
487 487
488 488 if deltas[part] < 0:
489 489 deltas[part] += length
490 490 deltas[carry_part] -= 1
491 491
492 492 # Same thing for days except that the increment depends on the (variable)
493 493 # number of days in the month
494 494 month_lengths = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
495 495 if deltas['day'] < 0:
496 496 if get_month(prevdate) == 2 and _is_leap_year(get_year(prevdate)):
497 497 deltas['day'] += 29
498 498 else:
499 499 deltas['day'] += month_lengths[get_month(prevdate) - 1]
500 500
501 501 deltas['month'] -= 1
502 502
503 503 if deltas['month'] < 0:
504 504 deltas['month'] += 12
505 505 deltas['year'] -= 1
506 506
507 507 # Format the result
508 508 if short_format:
509 509 fmt_funcs = {
510 510 'year': lambda d: u'%dy' % d,
511 511 'month': lambda d: u'%dm' % d,
512 512 'day': lambda d: u'%dd' % d,
513 513 'hour': lambda d: u'%dh' % d,
514 514 'minute': lambda d: u'%dmin' % d,
515 515 'second': lambda d: u'%dsec' % d,
516 516 }
517 517 else:
518 518 fmt_funcs = {
519 519 'year': lambda d: _pluralize(u'${num} year', u'${num} years', d, mapping={'num': d}).interpolate(),
520 520 'month': lambda d: _pluralize(u'${num} month', u'${num} months', d, mapping={'num': d}).interpolate(),
521 521 'day': lambda d: _pluralize(u'${num} day', u'${num} days', d, mapping={'num': d}).interpolate(),
522 522 'hour': lambda d: _pluralize(u'${num} hour', u'${num} hours', d, mapping={'num': d}).interpolate(),
523 523 'minute': lambda d: _pluralize(u'${num} minute', u'${num} minutes', d, mapping={'num': d}).interpolate(),
524 524 'second': lambda d: _pluralize(u'${num} second', u'${num} seconds', d, mapping={'num': d}).interpolate(),
525 525 }
526 526
527 527 i = 0
528 528 for part in order:
529 529 value = deltas[part]
530 530 if value != 0:
531 531
532 532 if i < 5:
533 533 sub_part = order[i + 1]
534 534 sub_value = deltas[sub_part]
535 535 else:
536 536 sub_value = 0
537 537
538 538 if sub_value == 0 or show_short_version:
539 539 _val = fmt_funcs[part](value)
540 540 if future:
541 541 if show_suffix:
542 542 return _(u'in ${ago}', mapping={'ago': _val})
543 543 else:
544 544 return _(_val)
545 545
546 546 else:
547 547 if show_suffix:
548 548 return _(u'${ago} ago', mapping={'ago': _val})
549 549 else:
550 550 return _(_val)
551 551
552 552 val = fmt_funcs[part](value)
553 553 val_detail = fmt_funcs[sub_part](sub_value)
554 554 mapping = {'val': val, 'detail': val_detail}
555 555
556 556 if short_format:
557 557 datetime_tmpl = _(u'${val}, ${detail}', mapping=mapping)
558 558 if show_suffix:
559 559 datetime_tmpl = _(u'${val}, ${detail} ago', mapping=mapping)
560 560 if future:
561 561 datetime_tmpl = _(u'in ${val}, ${detail}', mapping=mapping)
562 562 else:
563 563 datetime_tmpl = _(u'${val} and ${detail}', mapping=mapping)
564 564 if show_suffix:
565 565 datetime_tmpl = _(u'${val} and ${detail} ago', mapping=mapping)
566 566 if future:
567 567 datetime_tmpl = _(u'in ${val} and ${detail}', mapping=mapping)
568 568
569 569 return datetime_tmpl
570 570 i += 1
571 571 return _(u'just now')
572 572
573 573
574 574 def age_from_seconds(seconds):
575 575 seconds = safe_int(seconds) or 0
576 576 prevdate = time_to_datetime(time.time() + seconds)
577 577 return age(prevdate, show_suffix=False, show_short_version=True)
578 578
579 579
580 580 def cleaned_uri(uri):
581 581 """
582 582 Quotes '[' and ']' from uri if there is only one of them.
583 583 according to RFC3986 we cannot use such chars in uri
584 584 :param uri:
585 585 :return: uri without this chars
586 586 """
587 587 return urllib.quote(uri, safe='@$:/')
588 588
589 589
590 def uri_filter(uri):
591 """
592 Removes user:password from given url string
593
594 :param uri:
595 :rtype: unicode
596 :returns: filtered list of strings
597 """
598 if not uri:
599 return ''
600
601 proto = ''
602
603 for pat in ('https://', 'http://'):
604 if uri.startswith(pat):
605 uri = uri[len(pat):]
606 proto = pat
607 break
608
609 # remove passwords and username
610 uri = uri[uri.find('@') + 1:]
611
612 # get the port
613 cred_pos = uri.find(':')
614 if cred_pos == -1:
615 host, port = uri, None
616 else:
617 host, port = uri[:cred_pos], uri[cred_pos + 1:]
618
619 return filter(None, [proto, host, port])
620
621
622 590 def credentials_filter(uri):
623 591 """
624 592 Returns a url with removed credentials
625 593
626 594 :param uri:
627 595 """
596 import urlobject
597 url_obj = urlobject.URLObject(cleaned_uri(uri))
598 url_obj = url_obj.without_password().without_username()
628 599
629 uri = uri_filter(uri)
630 # check if we have port
631 if len(uri) > 2 and uri[2]:
632 uri[2] = ':' + uri[2]
633
634 return ''.join(uri)
600 return url_obj
635 601
636 602
637 603 def get_host_info(request):
638 604 """
639 605 Generate host info, to obtain full url e.g https://server.com
640 606 use this
641 607 `{scheme}://{netloc}`
642 608 """
643 609 if not request:
644 610 return {}
645 611
646 612 qualified_home_url = request.route_url('home')
647 613 parsed_url = urlobject.URLObject(qualified_home_url)
648 614 decoded_path = safe_unicode(urllib.unquote(parsed_url.path.rstrip('/')))
649 615
650 616 return {
651 617 'scheme': parsed_url.scheme,
652 618 'netloc': parsed_url.netloc+decoded_path,
653 619 'hostname': parsed_url.hostname,
654 620 }
655 621
656 622
657 623 def get_clone_url(request, uri_tmpl, repo_name, repo_id, repo_type, **override):
658 624 qualified_home_url = request.route_url('home')
659 625 parsed_url = urlobject.URLObject(qualified_home_url)
660 626 decoded_path = safe_unicode(urllib.unquote(parsed_url.path.rstrip('/')))
661 627
662 628 args = {
663 629 'scheme': parsed_url.scheme,
664 630 'user': '',
665 631 'sys_user': getpass.getuser(),
666 632 # path if we use proxy-prefix
667 633 'netloc': parsed_url.netloc+decoded_path,
668 634 'hostname': parsed_url.hostname,
669 635 'prefix': decoded_path,
670 636 'repo': repo_name,
671 637 'repoid': str(repo_id),
672 638 'repo_type': repo_type
673 639 }
674 640 args.update(override)
675 641 args['user'] = urllib.quote(safe_str(args['user']))
676 642
677 643 for k, v in args.items():
678 644 uri_tmpl = uri_tmpl.replace('{%s}' % k, v)
679 645
680 646 # special case for SVN clone url
681 647 if repo_type == 'svn':
682 648 uri_tmpl = uri_tmpl.replace('ssh://', 'svn+ssh://')
683 649
684 650 # remove leading @ sign if it's present. Case of empty user
685 651 url_obj = urlobject.URLObject(uri_tmpl)
686 652 url = url_obj.with_netloc(url_obj.netloc.lstrip('@'))
687 653
688 654 return safe_unicode(url)
689 655
690 656
691 657 def get_commit_safe(repo, commit_id=None, commit_idx=None, pre_load=None,
692 658 maybe_unreachable=False):
693 659 """
694 660 Safe version of get_commit if this commit doesn't exists for a
695 661 repository it returns a Dummy one instead
696 662
697 663 :param repo: repository instance
698 664 :param commit_id: commit id as str
699 665 :param commit_idx: numeric commit index
700 666 :param pre_load: optional list of commit attributes to load
701 667 :param maybe_unreachable: translate unreachable commits on git repos
702 668 """
703 669 # TODO(skreft): remove these circular imports
704 670 from rhodecode.lib.vcs.backends.base import BaseRepository, EmptyCommit
705 671 from rhodecode.lib.vcs.exceptions import RepositoryError
706 672 if not isinstance(repo, BaseRepository):
707 673 raise Exception('You must pass an Repository '
708 674 'object as first argument got %s', type(repo))
709 675
710 676 try:
711 677 commit = repo.get_commit(
712 678 commit_id=commit_id, commit_idx=commit_idx, pre_load=pre_load,
713 679 maybe_unreachable=maybe_unreachable)
714 680 except (RepositoryError, LookupError):
715 681 commit = EmptyCommit()
716 682 return commit
717 683
718 684
719 685 def datetime_to_time(dt):
720 686 if dt:
721 687 return time.mktime(dt.timetuple())
722 688
723 689
724 690 def time_to_datetime(tm):
725 691 if tm:
726 692 if isinstance(tm, compat.string_types):
727 693 try:
728 694 tm = float(tm)
729 695 except ValueError:
730 696 return
731 697 return datetime.datetime.fromtimestamp(tm)
732 698
733 699
734 700 def time_to_utcdatetime(tm):
735 701 if tm:
736 702 if isinstance(tm, compat.string_types):
737 703 try:
738 704 tm = float(tm)
739 705 except ValueError:
740 706 return
741 707 return datetime.datetime.utcfromtimestamp(tm)
742 708
743 709
744 710 MENTIONS_REGEX = re.compile(
745 711 # ^@ or @ without any special chars in front
746 712 r'(?:^@|[^a-zA-Z0-9\-\_\.]@)'
747 713 # main body starts with letter, then can be . - _
748 714 r'([a-zA-Z0-9]{1}[a-zA-Z0-9\-\_\.]+)',
749 715 re.VERBOSE | re.MULTILINE)
750 716
751 717
752 718 def extract_mentioned_users(s):
753 719 """
754 720 Returns unique usernames from given string s that have @mention
755 721
756 722 :param s: string to get mentions
757 723 """
758 724 usrs = set()
759 725 for username in MENTIONS_REGEX.findall(s):
760 726 usrs.add(username)
761 727
762 728 return sorted(list(usrs), key=lambda k: k.lower())
763 729
764 730
765 731 class AttributeDictBase(dict):
766 732 def __getstate__(self):
767 733 odict = self.__dict__ # get attribute dictionary
768 734 return odict
769 735
770 736 def __setstate__(self, dict):
771 737 self.__dict__ = dict
772 738
773 739 __setattr__ = dict.__setitem__
774 740 __delattr__ = dict.__delitem__
775 741
776 742
777 743 class StrictAttributeDict(AttributeDictBase):
778 744 """
779 745 Strict Version of Attribute dict which raises an Attribute error when
780 746 requested attribute is not set
781 747 """
782 748 def __getattr__(self, attr):
783 749 try:
784 750 return self[attr]
785 751 except KeyError:
786 752 raise AttributeError('%s object has no attribute %s' % (
787 753 self.__class__, attr))
788 754
789 755
790 756 class AttributeDict(AttributeDictBase):
791 757 def __getattr__(self, attr):
792 758 return self.get(attr, None)
793 759
794 760
795 761
796 762 class OrderedDefaultDict(collections.OrderedDict, collections.defaultdict):
797 763 def __init__(self, default_factory=None, *args, **kwargs):
798 764 # in python3 you can omit the args to super
799 765 super(OrderedDefaultDict, self).__init__(*args, **kwargs)
800 766 self.default_factory = default_factory
801 767
802 768
803 769 def fix_PATH(os_=None):
804 770 """
805 771 Get current active python path, and append it to PATH variable to fix
806 772 issues of subprocess calls and different python versions
807 773 """
808 774 if os_ is None:
809 775 import os
810 776 else:
811 777 os = os_
812 778
813 779 cur_path = os.path.split(sys.executable)[0]
814 780 if not os.environ['PATH'].startswith(cur_path):
815 781 os.environ['PATH'] = '%s:%s' % (cur_path, os.environ['PATH'])
816 782
817 783
818 784 def obfuscate_url_pw(engine):
819 785 _url = engine or ''
820 786 try:
821 787 _url = sqlalchemy.engine.url.make_url(engine)
822 788 if _url.password:
823 789 _url.password = 'XXXXX'
824 790 except Exception:
825 791 pass
826 792 return unicode(_url)
827 793
828 794
829 795 def get_server_url(environ):
830 796 req = webob.Request(environ)
831 797 return req.host_url + req.script_name
832 798
833 799
834 800 def unique_id(hexlen=32):
835 801 alphabet = "23456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghjklmnpqrstuvwxyz"
836 802 return suuid(truncate_to=hexlen, alphabet=alphabet)
837 803
838 804
839 805 def suuid(url=None, truncate_to=22, alphabet=None):
840 806 """
841 807 Generate and return a short URL safe UUID.
842 808
843 809 If the url parameter is provided, set the namespace to the provided
844 810 URL and generate a UUID.
845 811
846 812 :param url to get the uuid for
847 813 :truncate_to: truncate the basic 22 UUID to shorter version
848 814
849 815 The IDs won't be universally unique any longer, but the probability of
850 816 a collision will still be very low.
851 817 """
852 818 # Define our alphabet.
853 819 _ALPHABET = alphabet or "23456789ABCDEFGHJKLMNPQRSTUVWXYZ"
854 820
855 821 # If no URL is given, generate a random UUID.
856 822 if url is None:
857 823 unique_id = uuid.uuid4().int
858 824 else:
859 825 unique_id = uuid.uuid3(uuid.NAMESPACE_URL, url).int
860 826
861 827 alphabet_length = len(_ALPHABET)
862 828 output = []
863 829 while unique_id > 0:
864 830 digit = unique_id % alphabet_length
865 831 output.append(_ALPHABET[digit])
866 832 unique_id = int(unique_id / alphabet_length)
867 833 return "".join(output)[:truncate_to]
868 834
869 835
870 836 def get_current_rhodecode_user(request=None):
871 837 """
872 838 Gets rhodecode user from request
873 839 """
874 840 pyramid_request = request or pyramid.threadlocal.get_current_request()
875 841
876 842 # web case
877 843 if pyramid_request and hasattr(pyramid_request, 'user'):
878 844 return pyramid_request.user
879 845
880 846 # api case
881 847 if pyramid_request and hasattr(pyramid_request, 'rpc_user'):
882 848 return pyramid_request.rpc_user
883 849
884 850 return None
885 851
886 852
887 853 def action_logger_generic(action, namespace=''):
888 854 """
889 855 A generic logger for actions useful to the system overview, tries to find
890 856 an acting user for the context of the call otherwise reports unknown user
891 857
892 858 :param action: logging message eg 'comment 5 deleted'
893 859 :param type: string
894 860
895 861 :param namespace: namespace of the logging message eg. 'repo.comments'
896 862 :param type: string
897 863
898 864 """
899 865
900 866 logger_name = 'rhodecode.actions'
901 867
902 868 if namespace:
903 869 logger_name += '.' + namespace
904 870
905 871 log = logging.getLogger(logger_name)
906 872
907 873 # get a user if we can
908 874 user = get_current_rhodecode_user()
909 875
910 876 logfunc = log.info
911 877
912 878 if not user:
913 879 user = '<unknown user>'
914 880 logfunc = log.warning
915 881
916 882 logfunc('Logging action by {}: {}'.format(user, action))
917 883
918 884
919 885 def escape_split(text, sep=',', maxsplit=-1):
920 886 r"""
921 887 Allows for escaping of the separator: e.g. arg='foo\, bar'
922 888
923 889 It should be noted that the way bash et. al. do command line parsing, those
924 890 single quotes are required.
925 891 """
926 892 escaped_sep = r'\%s' % sep
927 893
928 894 if escaped_sep not in text:
929 895 return text.split(sep, maxsplit)
930 896
931 897 before, _mid, after = text.partition(escaped_sep)
932 898 startlist = before.split(sep, maxsplit) # a regular split is fine here
933 899 unfinished = startlist[-1]
934 900 startlist = startlist[:-1]
935 901
936 902 # recurse because there may be more escaped separators
937 903 endlist = escape_split(after, sep, maxsplit)
938 904
939 905 # finish building the escaped value. we use endlist[0] becaue the first
940 906 # part of the string sent in recursion is the rest of the escaped value.
941 907 unfinished += sep + endlist[0]
942 908
943 909 return startlist + [unfinished] + endlist[1:] # put together all the parts
944 910
945 911
946 912 class OptionalAttr(object):
947 913 """
948 914 Special Optional Option that defines other attribute. Example::
949 915
950 916 def test(apiuser, userid=Optional(OAttr('apiuser')):
951 917 user = Optional.extract(userid)
952 918 # calls
953 919
954 920 """
955 921
956 922 def __init__(self, attr_name):
957 923 self.attr_name = attr_name
958 924
959 925 def __repr__(self):
960 926 return '<OptionalAttr:%s>' % self.attr_name
961 927
962 928 def __call__(self):
963 929 return self
964 930
965 931
966 932 # alias
967 933 OAttr = OptionalAttr
968 934
969 935
970 936 class Optional(object):
971 937 """
972 938 Defines an optional parameter::
973 939
974 940 param = param.getval() if isinstance(param, Optional) else param
975 941 param = param() if isinstance(param, Optional) else param
976 942
977 943 is equivalent of::
978 944
979 945 param = Optional.extract(param)
980 946
981 947 """
982 948
983 949 def __init__(self, type_):
984 950 self.type_ = type_
985 951
986 952 def __repr__(self):
987 953 return '<Optional:%s>' % self.type_.__repr__()
988 954
989 955 def __call__(self):
990 956 return self.getval()
991 957
992 958 def getval(self):
993 959 """
994 960 returns value from this Optional instance
995 961 """
996 962 if isinstance(self.type_, OAttr):
997 963 # use params name
998 964 return self.type_.attr_name
999 965 return self.type_
1000 966
1001 967 @classmethod
1002 968 def extract(cls, val):
1003 969 """
1004 970 Extracts value from Optional() instance
1005 971
1006 972 :param val:
1007 973 :return: original value if it's not Optional instance else
1008 974 value of instance
1009 975 """
1010 976 if isinstance(val, cls):
1011 977 return val.getval()
1012 978 return val
1013 979
1014 980
1015 981 def glob2re(pat):
1016 982 """
1017 983 Translate a shell PATTERN to a regular expression.
1018 984
1019 985 There is no way to quote meta-characters.
1020 986 """
1021 987
1022 988 i, n = 0, len(pat)
1023 989 res = ''
1024 990 while i < n:
1025 991 c = pat[i]
1026 992 i = i+1
1027 993 if c == '*':
1028 994 #res = res + '.*'
1029 995 res = res + '[^/]*'
1030 996 elif c == '?':
1031 997 #res = res + '.'
1032 998 res = res + '[^/]'
1033 999 elif c == '[':
1034 1000 j = i
1035 1001 if j < n and pat[j] == '!':
1036 1002 j = j+1
1037 1003 if j < n and pat[j] == ']':
1038 1004 j = j+1
1039 1005 while j < n and pat[j] != ']':
1040 1006 j = j+1
1041 1007 if j >= n:
1042 1008 res = res + '\\['
1043 1009 else:
1044 1010 stuff = pat[i:j].replace('\\','\\\\')
1045 1011 i = j+1
1046 1012 if stuff[0] == '!':
1047 1013 stuff = '^' + stuff[1:]
1048 1014 elif stuff[0] == '^':
1049 1015 stuff = '\\' + stuff
1050 1016 res = '%s[%s]' % (res, stuff)
1051 1017 else:
1052 1018 res = res + re.escape(c)
1053 1019 return res + '\Z(?ms)'
1054 1020
1055 1021
1056 1022 def parse_byte_string(size_str):
1057 1023 match = re.match(r'(\d+)(MB|KB)', size_str, re.IGNORECASE)
1058 1024 if not match:
1059 1025 raise ValueError('Given size:%s is invalid, please make sure '
1060 1026 'to use format of <num>(MB|KB)' % size_str)
1061 1027
1062 1028 _parts = match.groups()
1063 1029 num, type_ = _parts
1064 1030 return long(num) * {'mb': 1024*1024, 'kb': 1024}[type_.lower()]
1065 1031
1066 1032
1067 1033 class CachedProperty(object):
1068 1034 """
1069 1035 Lazy Attributes. With option to invalidate the cache by running a method
1070 1036
1071 1037 class Foo():
1072 1038
1073 1039 @CachedProperty
1074 1040 def heavy_func():
1075 1041 return 'super-calculation'
1076 1042
1077 1043 foo = Foo()
1078 1044 foo.heavy_func() # first computions
1079 1045 foo.heavy_func() # fetch from cache
1080 1046 foo._invalidate_prop_cache('heavy_func')
1081 1047 # at this point calling foo.heavy_func() will be re-computed
1082 1048 """
1083 1049
1084 1050 def __init__(self, func, func_name=None):
1085 1051
1086 1052 if func_name is None:
1087 1053 func_name = func.__name__
1088 1054 self.data = (func, func_name)
1089 1055 update_wrapper(self, func)
1090 1056
1091 1057 def __get__(self, inst, class_):
1092 1058 if inst is None:
1093 1059 return self
1094 1060
1095 1061 func, func_name = self.data
1096 1062 value = func(inst)
1097 1063 inst.__dict__[func_name] = value
1098 1064 if '_invalidate_prop_cache' not in inst.__dict__:
1099 1065 inst.__dict__['_invalidate_prop_cache'] = partial(
1100 1066 self._invalidate_prop_cache, inst)
1101 1067 return value
1102 1068
1103 1069 def _invalidate_prop_cache(self, inst, name):
1104 1070 inst.__dict__.pop(name, None)
@@ -1,427 +1,435 b''
1 1 # -*- coding: utf-8 -*-
2 2
3 3 # Copyright (C) 2011-2020 RhodeCode GmbH
4 4 #
5 5 # This program is free software: you can redistribute it and/or modify
6 6 # it under the terms of the GNU Affero General Public License, version 3
7 7 # (only), as published by the Free Software Foundation.
8 8 #
9 9 # This program is distributed in the hope that it will be useful,
10 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 12 # GNU General Public License for more details.
13 13 #
14 14 # You should have received a copy of the GNU Affero General Public License
15 15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
16 16 #
17 17 # This program is dual-licensed. If you wish to learn more about the
18 18 # RhodeCode Enterprise Edition, including its added features, Support services,
19 19 # and proprietary license terms, please see https://rhodecode.com/licenses/
20 20
21 21
22 22 """
23 23 Model for notifications
24 24 """
25 25
26 26 import logging
27 27 import traceback
28 28
29 29 import premailer
30 30 from pyramid.threadlocal import get_current_request
31 31 from sqlalchemy.sql.expression import false, true
32 32
33 33 import rhodecode
34 34 from rhodecode.lib import helpers as h
35 35 from rhodecode.model import BaseModel
36 36 from rhodecode.model.db import Notification, User, UserNotification
37 37 from rhodecode.model.meta import Session
38 38 from rhodecode.translation import TranslationString
39 39
40 40 log = logging.getLogger(__name__)
41 41
42 42
43 43 class NotificationModel(BaseModel):
44 44
45 45 cls = Notification
46 46
47 47 def __get_notification(self, notification):
48 48 if isinstance(notification, Notification):
49 49 return notification
50 50 elif isinstance(notification, (int, long)):
51 51 return Notification.get(notification)
52 52 else:
53 53 if notification:
54 54 raise Exception('notification must be int, long or Instance'
55 55 ' of Notification got %s' % type(notification))
56 56
57 57 def create(
58 58 self, created_by, notification_subject, notification_body,
59 59 notification_type=Notification.TYPE_MESSAGE, recipients=None,
60 60 mention_recipients=None, with_email=True, email_kwargs=None):
61 61 """
62 62
63 63 Creates notification of given type
64 64
65 65 :param created_by: int, str or User instance. User who created this
66 66 notification
67 67 :param notification_subject: subject of notification itself
68 68 :param notification_body: body of notification text
69 69 :param notification_type: type of notification, based on that we
70 70 pick templates
71 71
72 72 :param recipients: list of int, str or User objects, when None
73 73 is given send to all admins
74 74 :param mention_recipients: list of int, str or User objects,
75 75 that were mentioned
76 76 :param with_email: send email with this notification
77 77 :param email_kwargs: dict with arguments to generate email
78 78 """
79 79
80 80 from rhodecode.lib.celerylib import tasks, run_task
81 81
82 82 if recipients and not getattr(recipients, '__iter__', False):
83 83 raise Exception('recipients must be an iterable object')
84 84
85 85 created_by_obj = self._get_user(created_by)
86 86 # default MAIN body if not given
87 87 email_kwargs = email_kwargs or {'body': notification_body}
88 88 mention_recipients = mention_recipients or set()
89 89
90 90 if not created_by_obj:
91 91 raise Exception('unknown user %s' % created_by)
92 92
93 93 if recipients is None:
94 94 # recipients is None means to all admins
95 95 recipients_objs = User.query().filter(User.admin == true()).all()
96 96 log.debug('sending notifications %s to admins: %s',
97 97 notification_type, recipients_objs)
98 98 else:
99 99 recipients_objs = set()
100 100 for u in recipients:
101 101 obj = self._get_user(u)
102 102 if obj:
103 103 recipients_objs.add(obj)
104 104 else: # we didn't find this user, log the error and carry on
105 105 log.error('cannot notify unknown user %r', u)
106 106
107 107 if not recipients_objs:
108 108 raise Exception('no valid recipients specified')
109 109
110 110 log.debug('sending notifications %s to %s',
111 111 notification_type, recipients_objs)
112 112
113 113 # add mentioned users into recipients
114 114 final_recipients = set(recipients_objs).union(mention_recipients)
115 115
116 116 notification = Notification.create(
117 117 created_by=created_by_obj, subject=notification_subject,
118 118 body=notification_body, recipients=final_recipients,
119 119 type_=notification_type
120 120 )
121 121
122 122 if not with_email: # skip sending email, and just create notification
123 123 return notification
124 124
125 125 # don't send email to person who created this comment
126 126 rec_objs = set(recipients_objs).difference({created_by_obj})
127 127
128 128 # now notify all recipients in question
129 129
130 130 for recipient in rec_objs.union(mention_recipients):
131 131 # inject current recipient
132 132 email_kwargs['recipient'] = recipient
133 133 email_kwargs['mention'] = recipient in mention_recipients
134 134 (subject, email_body, email_body_plaintext) = EmailNotificationModel().render_email(
135 135 notification_type, **email_kwargs)
136 136
137 137 extra_headers = None
138 138 if 'thread_ids' in email_kwargs:
139 139 extra_headers = {'thread_ids': email_kwargs.pop('thread_ids')}
140 140
141 141 log.debug('Creating notification email task for user:`%s`', recipient)
142 142 task = run_task(
143 143 tasks.send_email, recipient.email, subject,
144 144 email_body_plaintext, email_body, extra_headers=extra_headers)
145 145 log.debug('Created email task: %s', task)
146 146
147 147 return notification
148 148
149 149 def delete(self, user, notification):
150 150 # we don't want to remove actual notification just the assignment
151 151 try:
152 152 notification = self.__get_notification(notification)
153 153 user = self._get_user(user)
154 154 if notification and user:
155 155 obj = UserNotification.query()\
156 156 .filter(UserNotification.user == user)\
157 157 .filter(UserNotification.notification == notification)\
158 158 .one()
159 159 Session().delete(obj)
160 160 return True
161 161 except Exception:
162 162 log.error(traceback.format_exc())
163 163 raise
164 164
165 165 def get_for_user(self, user, filter_=None):
166 166 """
167 167 Get mentions for given user, filter them if filter dict is given
168 168 """
169 169 user = self._get_user(user)
170 170
171 171 q = UserNotification.query()\
172 172 .filter(UserNotification.user == user)\
173 173 .join((
174 174 Notification, UserNotification.notification_id ==
175 175 Notification.notification_id))
176 176 if filter_ == ['all']:
177 177 q = q # no filter
178 178 elif filter_ == ['unread']:
179 179 q = q.filter(UserNotification.read == false())
180 180 elif filter_:
181 181 q = q.filter(Notification.type_.in_(filter_))
182 182
183 183 return q
184 184
185 185 def mark_read(self, user, notification):
186 186 try:
187 187 notification = self.__get_notification(notification)
188 188 user = self._get_user(user)
189 189 if notification and user:
190 190 obj = UserNotification.query()\
191 191 .filter(UserNotification.user == user)\
192 192 .filter(UserNotification.notification == notification)\
193 193 .one()
194 194 obj.read = True
195 195 Session().add(obj)
196 196 return True
197 197 except Exception:
198 198 log.error(traceback.format_exc())
199 199 raise
200 200
201 201 def mark_all_read_for_user(self, user, filter_=None):
202 202 user = self._get_user(user)
203 203 q = UserNotification.query()\
204 204 .filter(UserNotification.user == user)\
205 205 .filter(UserNotification.read == false())\
206 206 .join((
207 207 Notification, UserNotification.notification_id ==
208 208 Notification.notification_id))
209 209 if filter_ == ['unread']:
210 210 q = q.filter(UserNotification.read == false())
211 211 elif filter_:
212 212 q = q.filter(Notification.type_.in_(filter_))
213 213
214 214 # this is a little inefficient but sqlalchemy doesn't support
215 215 # update on joined tables :(
216 216 for obj in q.all():
217 217 obj.read = True
218 218 Session().add(obj)
219 219
220 220 def get_unread_cnt_for_user(self, user):
221 221 user = self._get_user(user)
222 222 return UserNotification.query()\
223 223 .filter(UserNotification.read == false())\
224 224 .filter(UserNotification.user == user).count()
225 225
226 226 def get_unread_for_user(self, user):
227 227 user = self._get_user(user)
228 228 return [x.notification for x in UserNotification.query()
229 229 .filter(UserNotification.read == false())
230 230 .filter(UserNotification.user == user).all()]
231 231
232 232 def get_user_notification(self, user, notification):
233 233 user = self._get_user(user)
234 234 notification = self.__get_notification(notification)
235 235
236 236 return UserNotification.query()\
237 237 .filter(UserNotification.notification == notification)\
238 238 .filter(UserNotification.user == user).scalar()
239 239
240 240 def make_description(self, notification, translate, show_age=True):
241 241 """
242 242 Creates a human readable description based on properties
243 243 of notification object
244 244 """
245 245 _ = translate
246 246 _map = {
247 247 notification.TYPE_CHANGESET_COMMENT: [
248 248 _('%(user)s commented on commit %(date_or_age)s'),
249 249 _('%(user)s commented on commit at %(date_or_age)s'),
250 250 ],
251 251 notification.TYPE_MESSAGE: [
252 252 _('%(user)s sent message %(date_or_age)s'),
253 253 _('%(user)s sent message at %(date_or_age)s'),
254 254 ],
255 255 notification.TYPE_MENTION: [
256 256 _('%(user)s mentioned you %(date_or_age)s'),
257 257 _('%(user)s mentioned you at %(date_or_age)s'),
258 258 ],
259 259 notification.TYPE_REGISTRATION: [
260 260 _('%(user)s registered in RhodeCode %(date_or_age)s'),
261 261 _('%(user)s registered in RhodeCode at %(date_or_age)s'),
262 262 ],
263 263 notification.TYPE_PULL_REQUEST: [
264 264 _('%(user)s opened new pull request %(date_or_age)s'),
265 265 _('%(user)s opened new pull request at %(date_or_age)s'),
266 266 ],
267 267 notification.TYPE_PULL_REQUEST_UPDATE: [
268 268 _('%(user)s updated pull request %(date_or_age)s'),
269 269 _('%(user)s updated pull request at %(date_or_age)s'),
270 270 ],
271 271 notification.TYPE_PULL_REQUEST_COMMENT: [
272 272 _('%(user)s commented on pull request %(date_or_age)s'),
273 273 _('%(user)s commented on pull request at %(date_or_age)s'),
274 274 ],
275 275 }
276 276
277 277 templates = _map[notification.type_]
278 278
279 279 if show_age:
280 280 template = templates[0]
281 281 date_or_age = h.age(notification.created_on)
282 282 if translate:
283 283 date_or_age = translate(date_or_age)
284 284
285 285 if isinstance(date_or_age, TranslationString):
286 286 date_or_age = date_or_age.interpolate()
287 287
288 288 else:
289 289 template = templates[1]
290 290 date_or_age = h.format_date(notification.created_on)
291 291
292 292 return template % {
293 293 'user': notification.created_by_user.username,
294 294 'date_or_age': date_or_age,
295 295 }
296 296
297 297
298 298 # Templates for Titles, that could be overwritten by rcextensions
299 299 # Title of email for pull-request update
300 300 EMAIL_PR_UPDATE_SUBJECT_TEMPLATE = ''
301 301 # Title of email for request for pull request review
302 302 EMAIL_PR_REVIEW_SUBJECT_TEMPLATE = ''
303 303
304 304 # Title of email for general comment on pull request
305 305 EMAIL_PR_COMMENT_SUBJECT_TEMPLATE = ''
306 306 # Title of email for general comment which includes status change on pull request
307 307 EMAIL_PR_COMMENT_STATUS_CHANGE_SUBJECT_TEMPLATE = ''
308 308 # Title of email for inline comment on a file in pull request
309 309 EMAIL_PR_COMMENT_FILE_SUBJECT_TEMPLATE = ''
310 310
311 311 # Title of email for general comment on commit
312 312 EMAIL_COMMENT_SUBJECT_TEMPLATE = ''
313 313 # Title of email for general comment which includes status change on commit
314 314 EMAIL_COMMENT_STATUS_CHANGE_SUBJECT_TEMPLATE = ''
315 315 # Title of email for inline comment on a file in commit
316 316 EMAIL_COMMENT_FILE_SUBJECT_TEMPLATE = ''
317 317
318 318
319 319 class EmailNotificationModel(BaseModel):
320 320 TYPE_COMMIT_COMMENT = Notification.TYPE_CHANGESET_COMMENT
321 321 TYPE_REGISTRATION = Notification.TYPE_REGISTRATION
322 322 TYPE_PULL_REQUEST = Notification.TYPE_PULL_REQUEST
323 323 TYPE_PULL_REQUEST_COMMENT = Notification.TYPE_PULL_REQUEST_COMMENT
324 324 TYPE_PULL_REQUEST_UPDATE = Notification.TYPE_PULL_REQUEST_UPDATE
325 325 TYPE_MAIN = Notification.TYPE_MESSAGE
326 326
327 327 TYPE_PASSWORD_RESET = 'password_reset'
328 328 TYPE_PASSWORD_RESET_CONFIRMATION = 'password_reset_confirmation'
329 329 TYPE_EMAIL_TEST = 'email_test'
330 330 TYPE_EMAIL_EXCEPTION = 'exception'
331 331 TYPE_TEST = 'test'
332 332
333 333 email_types = {
334 334 TYPE_MAIN:
335 335 'rhodecode:templates/email_templates/main.mako',
336 336 TYPE_TEST:
337 337 'rhodecode:templates/email_templates/test.mako',
338 338 TYPE_EMAIL_EXCEPTION:
339 339 'rhodecode:templates/email_templates/exception_tracker.mako',
340 340 TYPE_EMAIL_TEST:
341 341 'rhodecode:templates/email_templates/email_test.mako',
342 342 TYPE_REGISTRATION:
343 343 'rhodecode:templates/email_templates/user_registration.mako',
344 344 TYPE_PASSWORD_RESET:
345 345 'rhodecode:templates/email_templates/password_reset.mako',
346 346 TYPE_PASSWORD_RESET_CONFIRMATION:
347 347 'rhodecode:templates/email_templates/password_reset_confirmation.mako',
348 348 TYPE_COMMIT_COMMENT:
349 349 'rhodecode:templates/email_templates/commit_comment.mako',
350 350 TYPE_PULL_REQUEST:
351 351 'rhodecode:templates/email_templates/pull_request_review.mako',
352 352 TYPE_PULL_REQUEST_COMMENT:
353 353 'rhodecode:templates/email_templates/pull_request_comment.mako',
354 354 TYPE_PULL_REQUEST_UPDATE:
355 355 'rhodecode:templates/email_templates/pull_request_update.mako',
356 356 }
357 357
358 358 premailer_instance = premailer.Premailer(
359 359 cssutils_logging_level=logging.ERROR,
360 360 cssutils_logging_handler=logging.getLogger().handlers[0]
361 361 if logging.getLogger().handlers else None,
362 362 )
363 363
364 364 def __init__(self):
365 365 """
366 366 Example usage::
367 367
368 368 (subject, email_body, email_body_plaintext) = EmailNotificationModel().render_email(
369 369 EmailNotificationModel.TYPE_TEST, **email_kwargs)
370 370
371 371 """
372 372 super(EmailNotificationModel, self).__init__()
373 373 self.rhodecode_instance_name = rhodecode.CONFIG.get('rhodecode_title')
374 374
375 375 def _update_kwargs_for_render(self, kwargs):
376 376 """
377 377 Inject params required for Mako rendering
378 378
379 379 :param kwargs:
380 380 """
381 381
382 382 kwargs['rhodecode_instance_name'] = self.rhodecode_instance_name
383 383 kwargs['rhodecode_version'] = rhodecode.__version__
384 384 instance_url = h.route_url('home')
385 385 _kwargs = {
386 386 'instance_url': instance_url,
387 'whitespace_filter': self.whitespace_filter
387 'whitespace_filter': self.whitespace_filter,
388 'email_pr_update_subject_template': EMAIL_PR_UPDATE_SUBJECT_TEMPLATE,
389 'email_pr_review_subject_template': EMAIL_PR_REVIEW_SUBJECT_TEMPLATE,
390 'email_pr_comment_subject_template': EMAIL_PR_COMMENT_SUBJECT_TEMPLATE,
391 'email_pr_comment_status_change_subject_template': EMAIL_PR_COMMENT_STATUS_CHANGE_SUBJECT_TEMPLATE,
392 'email_pr_comment_file_subject_template': EMAIL_PR_COMMENT_FILE_SUBJECT_TEMPLATE,
393 'email_comment_subject_template': EMAIL_COMMENT_SUBJECT_TEMPLATE,
394 'email_comment_status_change_subject_template': EMAIL_COMMENT_STATUS_CHANGE_SUBJECT_TEMPLATE,
395 'email_comment_file_subject_template': EMAIL_COMMENT_FILE_SUBJECT_TEMPLATE,
388 396 }
389 397 _kwargs.update(kwargs)
390 398 return _kwargs
391 399
392 400 def whitespace_filter(self, text):
393 401 return text.replace('\n', '').replace('\t', '')
394 402
395 403 def get_renderer(self, type_, request):
396 404 template_name = self.email_types[type_]
397 405 return request.get_partial_renderer(template_name)
398 406
399 407 def render_email(self, type_, **kwargs):
400 408 """
401 409 renders template for email, and returns a tuple of
402 410 (subject, email_headers, email_html_body, email_plaintext_body)
403 411 """
404 412 # translator and helpers inject
405 413 _kwargs = self._update_kwargs_for_render(kwargs)
406 414 request = get_current_request()
407 415 email_template = self.get_renderer(type_, request=request)
408 416
409 417 subject = email_template.render('subject', **_kwargs)
410 418
411 419 try:
412 420 body_plaintext = email_template.render('body_plaintext', **_kwargs)
413 421 except AttributeError:
414 422 # it's not defined in template, ok we can skip it
415 423 body_plaintext = ''
416 424
417 425 # render WHOLE template
418 426 body = email_template.render(None, **_kwargs)
419 427
420 428 try:
421 429 # Inline CSS styles and conversion
422 430 body = self.premailer_instance.transform(body)
423 431 except Exception:
424 432 log.exception('Failed to parse body with premailer')
425 433 pass
426 434
427 435 return subject, body, body_plaintext
@@ -1,598 +1,598 b''
1 1 # -*- coding: utf-8 -*-
2 2
3 3 # Copyright (C) 2010-2020 RhodeCode GmbH
4 4 #
5 5 # This program is free software: you can redistribute it and/or modify
6 6 # it under the terms of the GNU Affero General Public License, version 3
7 7 # (only), as published by the Free Software Foundation.
8 8 #
9 9 # This program is distributed in the hope that it will be useful,
10 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 12 # GNU General Public License for more details.
13 13 #
14 14 # You should have received a copy of the GNU Affero General Public License
15 15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
16 16 #
17 17 # This program is dual-licensed. If you wish to learn more about the
18 18 # RhodeCode Enterprise Edition, including its added features, Support services,
19 19 # and proprietary license terms, please see https://rhodecode.com/licenses/
20 20
21 21 """
22 22 permissions model for RhodeCode
23 23 """
24 24 import collections
25 25 import logging
26 26 import traceback
27 27
28 28 from sqlalchemy.exc import DatabaseError
29 29
30 30 from rhodecode import events
31 31 from rhodecode.model import BaseModel
32 32 from rhodecode.model.db import (
33 33 User, Permission, UserToPerm, UserRepoToPerm, UserRepoGroupToPerm,
34 34 UserUserGroupToPerm, UserGroup, UserGroupToPerm, UserToRepoBranchPermission)
35 35 from rhodecode.lib.utils2 import str2bool, safe_int
36 36
37 37 log = logging.getLogger(__name__)
38 38
39 39
40 40 class PermissionModel(BaseModel):
41 41 """
42 42 Permissions model for RhodeCode
43 43 """
44 44
45 45 cls = Permission
46 46 global_perms = {
47 47 'default_repo_create': None,
48 48 # special case for create repos on write access to group
49 49 'default_repo_create_on_write': None,
50 50 'default_repo_group_create': None,
51 51 'default_user_group_create': None,
52 52 'default_fork_create': None,
53 53 'default_inherit_default_permissions': None,
54 54 'default_register': None,
55 55 'default_password_reset': None,
56 56 'default_extern_activate': None,
57 57
58 58 # object permissions below
59 59 'default_repo_perm': None,
60 60 'default_group_perm': None,
61 61 'default_user_group_perm': None,
62 62
63 63 # branch
64 64 'default_branch_perm': None,
65 65 }
66 66
67 67 def set_global_permission_choices(self, c_obj, gettext_translator):
68 68 _ = gettext_translator
69 69
70 70 c_obj.repo_perms_choices = [
71 71 ('repository.none', _('None'),),
72 72 ('repository.read', _('Read'),),
73 73 ('repository.write', _('Write'),),
74 74 ('repository.admin', _('Admin'),)]
75 75
76 76 c_obj.group_perms_choices = [
77 77 ('group.none', _('None'),),
78 78 ('group.read', _('Read'),),
79 79 ('group.write', _('Write'),),
80 80 ('group.admin', _('Admin'),)]
81 81
82 82 c_obj.user_group_perms_choices = [
83 83 ('usergroup.none', _('None'),),
84 84 ('usergroup.read', _('Read'),),
85 85 ('usergroup.write', _('Write'),),
86 86 ('usergroup.admin', _('Admin'),)]
87 87
88 88 c_obj.branch_perms_choices = [
89 89 ('branch.none', _('Protected/No Access'),),
90 90 ('branch.merge', _('Web merge'),),
91 91 ('branch.push', _('Push'),),
92 92 ('branch.push_force', _('Force Push'),)]
93 93
94 94 c_obj.register_choices = [
95 95 ('hg.register.none', _('Disabled')),
96 96 ('hg.register.manual_activate', _('Allowed with manual account activation')),
97 97 ('hg.register.auto_activate', _('Allowed with automatic account activation')),]
98 98
99 99 c_obj.password_reset_choices = [
100 100 ('hg.password_reset.enabled', _('Allow password recovery')),
101 101 ('hg.password_reset.hidden', _('Hide password recovery link')),
102 102 ('hg.password_reset.disabled', _('Disable password recovery')),]
103 103
104 104 c_obj.extern_activate_choices = [
105 105 ('hg.extern_activate.manual', _('Manual activation of external account')),
106 106 ('hg.extern_activate.auto', _('Automatic activation of external account')),]
107 107
108 108 c_obj.repo_create_choices = [
109 109 ('hg.create.none', _('Disabled')),
110 110 ('hg.create.repository', _('Enabled'))]
111 111
112 112 c_obj.repo_create_on_write_choices = [
113 113 ('hg.create.write_on_repogroup.false', _('Disabled')),
114 114 ('hg.create.write_on_repogroup.true', _('Enabled'))]
115 115
116 116 c_obj.user_group_create_choices = [
117 117 ('hg.usergroup.create.false', _('Disabled')),
118 118 ('hg.usergroup.create.true', _('Enabled'))]
119 119
120 120 c_obj.repo_group_create_choices = [
121 121 ('hg.repogroup.create.false', _('Disabled')),
122 122 ('hg.repogroup.create.true', _('Enabled'))]
123 123
124 124 c_obj.fork_choices = [
125 125 ('hg.fork.none', _('Disabled')),
126 126 ('hg.fork.repository', _('Enabled'))]
127 127
128 128 c_obj.inherit_default_permission_choices = [
129 129 ('hg.inherit_default_perms.false', _('Disabled')),
130 130 ('hg.inherit_default_perms.true', _('Enabled'))]
131 131
132 132 def get_default_perms(self, object_perms, suffix):
133 133 defaults = {}
134 134 for perm in object_perms:
135 135 # perms
136 136 if perm.permission.permission_name.startswith('repository.'):
137 137 defaults['default_repo_perm' + suffix] = perm.permission.permission_name
138 138
139 139 if perm.permission.permission_name.startswith('group.'):
140 140 defaults['default_group_perm' + suffix] = perm.permission.permission_name
141 141
142 142 if perm.permission.permission_name.startswith('usergroup.'):
143 143 defaults['default_user_group_perm' + suffix] = perm.permission.permission_name
144 144
145 145 # branch
146 146 if perm.permission.permission_name.startswith('branch.'):
147 147 defaults['default_branch_perm' + suffix] = perm.permission.permission_name
148 148
149 149 # creation of objects
150 150 if perm.permission.permission_name.startswith('hg.create.write_on_repogroup'):
151 151 defaults['default_repo_create_on_write' + suffix] = perm.permission.permission_name
152 152
153 153 elif perm.permission.permission_name.startswith('hg.create.'):
154 154 defaults['default_repo_create' + suffix] = perm.permission.permission_name
155 155
156 156 if perm.permission.permission_name.startswith('hg.fork.'):
157 157 defaults['default_fork_create' + suffix] = perm.permission.permission_name
158 158
159 159 if perm.permission.permission_name.startswith('hg.inherit_default_perms.'):
160 160 defaults['default_inherit_default_permissions' + suffix] = perm.permission.permission_name
161 161
162 162 if perm.permission.permission_name.startswith('hg.repogroup.'):
163 163 defaults['default_repo_group_create' + suffix] = perm.permission.permission_name
164 164
165 165 if perm.permission.permission_name.startswith('hg.usergroup.'):
166 166 defaults['default_user_group_create' + suffix] = perm.permission.permission_name
167 167
168 168 # registration and external account activation
169 169 if perm.permission.permission_name.startswith('hg.register.'):
170 170 defaults['default_register' + suffix] = perm.permission.permission_name
171 171
172 172 if perm.permission.permission_name.startswith('hg.password_reset.'):
173 173 defaults['default_password_reset' + suffix] = perm.permission.permission_name
174 174
175 175 if perm.permission.permission_name.startswith('hg.extern_activate.'):
176 176 defaults['default_extern_activate' + suffix] = perm.permission.permission_name
177 177
178 178 return defaults
179 179
180 180 def _make_new_user_perm(self, user, perm_name):
181 181 log.debug('Creating new user permission:%s', perm_name)
182 182 new = UserToPerm()
183 183 new.user = user
184 184 new.permission = Permission.get_by_key(perm_name)
185 185 return new
186 186
187 187 def _make_new_user_group_perm(self, user_group, perm_name):
188 188 log.debug('Creating new user group permission:%s', perm_name)
189 189 new = UserGroupToPerm()
190 190 new.users_group = user_group
191 191 new.permission = Permission.get_by_key(perm_name)
192 192 return new
193 193
194 194 def _keep_perm(self, perm_name, keep_fields):
195 195 def get_pat(field_name):
196 196 return {
197 197 # global perms
198 198 'default_repo_create': 'hg.create.',
199 199 # special case for create repos on write access to group
200 200 'default_repo_create_on_write': 'hg.create.write_on_repogroup.',
201 201 'default_repo_group_create': 'hg.repogroup.create.',
202 202 'default_user_group_create': 'hg.usergroup.create.',
203 203 'default_fork_create': 'hg.fork.',
204 204 'default_inherit_default_permissions': 'hg.inherit_default_perms.',
205 205
206 206 # application perms
207 207 'default_register': 'hg.register.',
208 208 'default_password_reset': 'hg.password_reset.',
209 209 'default_extern_activate': 'hg.extern_activate.',
210 210
211 211 # object permissions below
212 212 'default_repo_perm': 'repository.',
213 213 'default_group_perm': 'group.',
214 214 'default_user_group_perm': 'usergroup.',
215 215 # branch
216 216 'default_branch_perm': 'branch.',
217 217
218 218 }[field_name]
219 219 for field in keep_fields:
220 220 pat = get_pat(field)
221 221 if perm_name.startswith(pat):
222 222 return True
223 223 return False
224 224
225 225 def _clear_object_perm(self, object_perms, preserve=None):
226 226 preserve = preserve or []
227 227 _deleted = []
228 228 for perm in object_perms:
229 229 perm_name = perm.permission.permission_name
230 230 if not self._keep_perm(perm_name, keep_fields=preserve):
231 231 _deleted.append(perm_name)
232 232 self.sa.delete(perm)
233 233 return _deleted
234 234
235 235 def _clear_user_perms(self, user_id, preserve=None):
236 236 perms = self.sa.query(UserToPerm)\
237 237 .filter(UserToPerm.user_id == user_id)\
238 238 .all()
239 239 return self._clear_object_perm(perms, preserve=preserve)
240 240
241 241 def _clear_user_group_perms(self, user_group_id, preserve=None):
242 242 perms = self.sa.query(UserGroupToPerm)\
243 243 .filter(UserGroupToPerm.users_group_id == user_group_id)\
244 244 .all()
245 245 return self._clear_object_perm(perms, preserve=preserve)
246 246
247 247 def _set_new_object_perms(self, obj_type, object, form_result, preserve=None):
248 248 # clear current entries, to make this function idempotent
249 249 # it will fix even if we define more permissions or permissions
250 250 # are somehow missing
251 251 preserve = preserve or []
252 252 _global_perms = self.global_perms.copy()
253 253 if obj_type not in ['user', 'user_group']:
254 254 raise ValueError("obj_type must be on of 'user' or 'user_group'")
255 255 global_perms = len(_global_perms)
256 256 default_user_perms = len(Permission.DEFAULT_USER_PERMISSIONS)
257 257 if global_perms != default_user_perms:
258 258 raise Exception(
259 259 'Inconsistent permissions definition. Got {} vs {}'.format(
260 260 global_perms, default_user_perms))
261 261
262 262 if obj_type == 'user':
263 263 self._clear_user_perms(object.user_id, preserve)
264 264 if obj_type == 'user_group':
265 265 self._clear_user_group_perms(object.users_group_id, preserve)
266 266
267 267 # now kill the keys that we want to preserve from the form.
268 268 for key in preserve:
269 269 del _global_perms[key]
270 270
271 271 for k in _global_perms.copy():
272 272 _global_perms[k] = form_result[k]
273 273
274 274 # at that stage we validate all are passed inside form_result
275 275 for _perm_key, perm_value in _global_perms.items():
276 276 if perm_value is None:
277 277 raise ValueError('Missing permission for %s' % (_perm_key,))
278 278
279 279 if obj_type == 'user':
280 280 p = self._make_new_user_perm(object, perm_value)
281 281 self.sa.add(p)
282 282 if obj_type == 'user_group':
283 283 p = self._make_new_user_group_perm(object, perm_value)
284 284 self.sa.add(p)
285 285
286 286 def _set_new_user_perms(self, user, form_result, preserve=None):
287 287 return self._set_new_object_perms(
288 288 'user', user, form_result, preserve)
289 289
290 290 def _set_new_user_group_perms(self, user_group, form_result, preserve=None):
291 291 return self._set_new_object_perms(
292 292 'user_group', user_group, form_result, preserve)
293 293
294 294 def set_new_user_perms(self, user, form_result):
295 295 # calculate what to preserve from what is given in form_result
296 296 preserve = set(self.global_perms.keys()).difference(set(form_result.keys()))
297 297 return self._set_new_user_perms(user, form_result, preserve)
298 298
299 299 def set_new_user_group_perms(self, user_group, form_result):
300 300 # calculate what to preserve from what is given in form_result
301 301 preserve = set(self.global_perms.keys()).difference(set(form_result.keys()))
302 302 return self._set_new_user_group_perms(user_group, form_result, preserve)
303 303
304 304 def create_permissions(self):
305 305 """
306 306 Create permissions for whole system
307 307 """
308 308 for p in Permission.PERMS:
309 309 if not Permission.get_by_key(p[0]):
310 310 new_perm = Permission()
311 311 new_perm.permission_name = p[0]
312 312 new_perm.permission_longname = p[0] # translation err with p[1]
313 313 self.sa.add(new_perm)
314 314
315 315 def _create_default_object_permission(self, obj_type, obj, obj_perms,
316 316 force=False):
317 317 if obj_type not in ['user', 'user_group']:
318 318 raise ValueError("obj_type must be on of 'user' or 'user_group'")
319 319
320 320 def _get_group(perm_name):
321 321 return '.'.join(perm_name.split('.')[:1])
322 322
323 323 defined_perms_groups = map(
324 324 _get_group, (x.permission.permission_name for x in obj_perms))
325 325 log.debug('GOT ALREADY DEFINED:%s', obj_perms)
326 326
327 327 if force:
328 328 self._clear_object_perm(obj_perms)
329 329 self.sa.commit()
330 330 defined_perms_groups = []
331 331 # for every default permission that needs to be created, we check if
332 332 # it's group is already defined, if it's not we create default perm
333 333 for perm_name in Permission.DEFAULT_USER_PERMISSIONS:
334 334 gr = _get_group(perm_name)
335 335 if gr not in defined_perms_groups:
336 336 log.debug('GR:%s not found, creating permission %s',
337 337 gr, perm_name)
338 338 if obj_type == 'user':
339 339 new_perm = self._make_new_user_perm(obj, perm_name)
340 340 self.sa.add(new_perm)
341 341 if obj_type == 'user_group':
342 342 new_perm = self._make_new_user_group_perm(obj, perm_name)
343 343 self.sa.add(new_perm)
344 344
345 345 def create_default_user_permissions(self, user, force=False):
346 346 """
347 347 Creates only missing default permissions for user, if force is set it
348 348 resets the default permissions for that user
349 349
350 350 :param user:
351 351 :param force:
352 352 """
353 353 user = self._get_user(user)
354 354 obj_perms = UserToPerm.query().filter(UserToPerm.user == user).all()
355 355 return self._create_default_object_permission(
356 356 'user', user, obj_perms, force)
357 357
358 358 def create_default_user_group_permissions(self, user_group, force=False):
359 359 """
360 360 Creates only missing default permissions for user group, if force is
361 361 set it resets the default permissions for that user group
362 362
363 363 :param user_group:
364 364 :param force:
365 365 """
366 366 user_group = self._get_user_group(user_group)
367 367 obj_perms = UserToPerm.query().filter(UserGroupToPerm.users_group == user_group).all()
368 368 return self._create_default_object_permission(
369 369 'user_group', user_group, obj_perms, force)
370 370
371 371 def update_application_permissions(self, form_result):
372 372 if 'perm_user_id' in form_result:
373 373 perm_user = User.get(safe_int(form_result['perm_user_id']))
374 374 else:
375 375 # used mostly to do lookup for default user
376 376 perm_user = User.get_by_username(form_result['perm_user_name'])
377 377
378 378 try:
379 379 # stage 1 set anonymous access
380 380 if perm_user.username == User.DEFAULT_USER:
381 381 perm_user.active = str2bool(form_result['anonymous'])
382 382 self.sa.add(perm_user)
383 383
384 384 # stage 2 reset defaults and set them from form data
385 385 self._set_new_user_perms(perm_user, form_result, preserve=[
386 386 'default_repo_perm',
387 387 'default_group_perm',
388 388 'default_user_group_perm',
389 389 'default_branch_perm',
390 390
391 391 'default_repo_group_create',
392 392 'default_user_group_create',
393 393 'default_repo_create_on_write',
394 394 'default_repo_create',
395 395 'default_fork_create',
396 396 'default_inherit_default_permissions',])
397 397
398 398 self.sa.commit()
399 399 except (DatabaseError,):
400 400 log.error(traceback.format_exc())
401 401 self.sa.rollback()
402 402 raise
403 403
404 404 def update_user_permissions(self, form_result):
405 405 if 'perm_user_id' in form_result:
406 406 perm_user = User.get(safe_int(form_result['perm_user_id']))
407 407 else:
408 408 # used mostly to do lookup for default user
409 409 perm_user = User.get_by_username(form_result['perm_user_name'])
410 410 try:
411 411 # stage 2 reset defaults and set them from form data
412 412 self._set_new_user_perms(perm_user, form_result, preserve=[
413 413 'default_repo_perm',
414 414 'default_group_perm',
415 415 'default_user_group_perm',
416 416 'default_branch_perm',
417 417
418 418 'default_register',
419 419 'default_password_reset',
420 420 'default_extern_activate'])
421 421 self.sa.commit()
422 422 except (DatabaseError,):
423 423 log.error(traceback.format_exc())
424 424 self.sa.rollback()
425 425 raise
426 426
427 427 def update_user_group_permissions(self, form_result):
428 428 if 'perm_user_group_id' in form_result:
429 429 perm_user_group = UserGroup.get(safe_int(form_result['perm_user_group_id']))
430 430 else:
431 431 # used mostly to do lookup for default user
432 432 perm_user_group = UserGroup.get_by_group_name(form_result['perm_user_group_name'])
433 433 try:
434 434 # stage 2 reset defaults and set them from form data
435 435 self._set_new_user_group_perms(perm_user_group, form_result, preserve=[
436 436 'default_repo_perm',
437 437 'default_group_perm',
438 438 'default_user_group_perm',
439 439 'default_branch_perm',
440 440
441 441 'default_register',
442 442 'default_password_reset',
443 443 'default_extern_activate'])
444 444 self.sa.commit()
445 445 except (DatabaseError,):
446 446 log.error(traceback.format_exc())
447 447 self.sa.rollback()
448 448 raise
449 449
450 450 def update_object_permissions(self, form_result):
451 451 if 'perm_user_id' in form_result:
452 452 perm_user = User.get(safe_int(form_result['perm_user_id']))
453 453 else:
454 454 # used mostly to do lookup for default user
455 455 perm_user = User.get_by_username(form_result['perm_user_name'])
456 456 try:
457 457
458 458 # stage 2 reset defaults and set them from form data
459 459 self._set_new_user_perms(perm_user, form_result, preserve=[
460 460 'default_repo_group_create',
461 461 'default_user_group_create',
462 462 'default_repo_create_on_write',
463 463 'default_repo_create',
464 464 'default_fork_create',
465 465 'default_inherit_default_permissions',
466 466 'default_branch_perm',
467 467
468 468 'default_register',
469 469 'default_password_reset',
470 470 'default_extern_activate'])
471 471
472 472 # overwrite default repo permissions
473 473 if form_result['overwrite_default_repo']:
474 474 _def_name = form_result['default_repo_perm'].split('repository.')[-1]
475 475 _def = Permission.get_by_key('repository.' + _def_name)
476 476 for r2p in self.sa.query(UserRepoToPerm)\
477 477 .filter(UserRepoToPerm.user == perm_user)\
478 478 .all():
479 479 # don't reset PRIVATE repositories
480 480 if not r2p.repository.private:
481 481 r2p.permission = _def
482 482 self.sa.add(r2p)
483 483
484 484 # overwrite default repo group permissions
485 485 if form_result['overwrite_default_group']:
486 486 _def_name = form_result['default_group_perm'].split('group.')[-1]
487 487 _def = Permission.get_by_key('group.' + _def_name)
488 488 for g2p in self.sa.query(UserRepoGroupToPerm)\
489 489 .filter(UserRepoGroupToPerm.user == perm_user)\
490 490 .all():
491 491 g2p.permission = _def
492 492 self.sa.add(g2p)
493 493
494 494 # overwrite default user group permissions
495 495 if form_result['overwrite_default_user_group']:
496 496 _def_name = form_result['default_user_group_perm'].split('usergroup.')[-1]
497 497 # user groups
498 498 _def = Permission.get_by_key('usergroup.' + _def_name)
499 499 for g2p in self.sa.query(UserUserGroupToPerm)\
500 500 .filter(UserUserGroupToPerm.user == perm_user)\
501 501 .all():
502 502 g2p.permission = _def
503 503 self.sa.add(g2p)
504 504
505 505 # COMMIT
506 506 self.sa.commit()
507 507 except (DatabaseError,):
508 508 log.exception('Failed to set default object permissions')
509 509 self.sa.rollback()
510 510 raise
511 511
512 512 def update_branch_permissions(self, form_result):
513 513 if 'perm_user_id' in form_result:
514 514 perm_user = User.get(safe_int(form_result['perm_user_id']))
515 515 else:
516 516 # used mostly to do lookup for default user
517 517 perm_user = User.get_by_username(form_result['perm_user_name'])
518 518 try:
519 519
520 520 # stage 2 reset defaults and set them from form data
521 521 self._set_new_user_perms(perm_user, form_result, preserve=[
522 522 'default_repo_perm',
523 523 'default_group_perm',
524 524 'default_user_group_perm',
525 525
526 526 'default_repo_group_create',
527 527 'default_user_group_create',
528 528 'default_repo_create_on_write',
529 529 'default_repo_create',
530 530 'default_fork_create',
531 531 'default_inherit_default_permissions',
532 532
533 533 'default_register',
534 534 'default_password_reset',
535 535 'default_extern_activate'])
536 536
537 537 # overwrite default branch permissions
538 538 if form_result['overwrite_default_branch']:
539 539 _def_name = \
540 540 form_result['default_branch_perm'].split('branch.')[-1]
541 541
542 542 _def = Permission.get_by_key('branch.' + _def_name)
543 543
544 544 user_perms = UserToRepoBranchPermission.query()\
545 545 .join(UserToRepoBranchPermission.user_repo_to_perm)\
546 546 .filter(UserRepoToPerm.user == perm_user).all()
547 547
548 548 for g2p in user_perms:
549 549 g2p.permission = _def
550 550 self.sa.add(g2p)
551 551
552 552 # COMMIT
553 553 self.sa.commit()
554 554 except (DatabaseError,):
555 555 log.exception('Failed to set default branch permissions')
556 556 self.sa.rollback()
557 557 raise
558 558
559 559 def get_users_with_repo_write(self, db_repo):
560 560 write_plus = ['repository.write', 'repository.admin']
561 561 default_user_id = User.get_default_user_id()
562 562 user_write_permissions = collections.OrderedDict()
563 563
564 # write+ and DEFAULT user for inheritance
564 # write or higher and DEFAULT user for inheritance
565 565 for perm in db_repo.permissions():
566 566 if perm.permission in write_plus or perm.user_id == default_user_id:
567 567 user_write_permissions[perm.user_id] = perm
568 568 return user_write_permissions
569 569
570 570 def get_user_groups_with_repo_write(self, db_repo):
571 571 write_plus = ['repository.write', 'repository.admin']
572 572 user_group_write_permissions = collections.OrderedDict()
573 573
574 # write+ and DEFAULT user for inheritance
574 # write or higher and DEFAULT user for inheritance
575 575 for p in db_repo.permission_user_groups():
576 576 if p.permission in write_plus:
577 577 user_group_write_permissions[p.users_group_id] = p
578 578 return user_group_write_permissions
579 579
580 580 def trigger_permission_flush(self, affected_user_ids=None):
581 581 affected_user_ids or User.get_all_user_ids()
582 582 events.trigger(events.UserPermissionsChange(affected_user_ids))
583 583
584 584 def flush_user_permission_caches(self, changes, affected_user_ids=None):
585 585 affected_user_ids = affected_user_ids or []
586 586
587 587 for change in changes['added'] + changes['updated'] + changes['deleted']:
588 588 if change['type'] == 'user':
589 589 affected_user_ids.append(change['id'])
590 590 if change['type'] == 'user_group':
591 591 user_group = UserGroup.get(safe_int(change['id']))
592 592 if user_group:
593 593 group_members_ids = [x.user_id for x in user_group.members]
594 594 affected_user_ids.extend(group_members_ids)
595 595
596 596 self.trigger_permission_flush(affected_user_ids)
597 597
598 598 return affected_user_ids
@@ -1,170 +1,172 b''
1 1 /* This file is automatically generated. DO NOT change it manually.
2 2 * If this file needs to be modified, edit
3 3 * rhodecode/utils/file_generation/js_i18n_data.py
4 4 * and run the script invoke -r scripts/ generate.js-i18n .
5 5 */
6 6 //JS translations map
7 7 var _TM = {
8 8 '(from usergroup {0})': '(from usergroup {0})',
9 9 '<strong>{0} file</strong> changed, ': '<strong>{0} file</strong> changed, ',
10 10 '<strong>{0} files</strong> changed, ': '<strong>{0} files</strong> changed, ',
11 11 'Add another comment': 'Add another comment',
12 12 'Adding new reviewers is forbidden.': 'Adding new reviewers is forbidden.',
13 13 'Ajax Request Error': 'Ajax Request Error',
14 14 'All Authors': 'All Authors',
15 15 'All individual reviewers must vote.': 'All individual reviewers must vote.',
16 16 'All reviewers must vote.': 'All reviewers must vote.',
17 17 'Are you sure to close this pull request without merging?': 'Are you sure to close this pull request without merging?',
18 18 'At least {0} reviewer must vote.': 'At least {0} reviewer must vote.',
19 19 'At least {0} reviewers must vote.': 'At least {0} reviewers must vote.',
20 20 'Authentication Token': 'Authentication Token',
21 21 'Author is not allowed to be a reviewer.': 'Author is not allowed to be a reviewer.',
22 22 'Changed files': 'Changed files',
23 23 'Close': 'Close',
24 24 'Collapse all files': 'Collapse all files',
25 25 'Collapse {0} commit': 'Collapse {0} commit',
26 26 'Collapse {0} commits': 'Collapse {0} commits',
27 'Comment body was not changed.': 'Comment body was not changed.',
27 28 'Comment text will be set automatically based on currently selected status ({0}) ...': 'Comment text will be set automatically based on currently selected status ({0}) ...',
28 29 'Commit Authors are not allowed to be a reviewer.': 'Commit Authors are not allowed to be a reviewer.',
29 30 'Context file: ': 'Context file: ',
30 31 'Delete': 'Delete',
31 32 'Delete this comment?': 'Delete this comment?',
32 33 'Diff to Commit ': 'Diff to Commit ',
33 34 'Error during search operation': 'Error during search operation',
34 35 'Expand all files': 'Expand all files',
35 36 'Expand {0} commit': 'Expand {0} commit',
36 37 'Expand {0} commits': 'Expand {0} commits',
37 38 'Fetching repository state failed. Error code: {0} {1}. Try <a href="{2}">refreshing</a> this page.': 'Fetching repository state failed. Error code: {0} {1}. Try <a href="{2}">refreshing</a> this page.',
38 39 'Fetching repository state failed. Error code: {0} {1}. Try refreshing this page.': 'Fetching repository state failed. Error code: {0} {1}. Try refreshing this page.',
39 40 'File `{0}` has a newer version available, or has been removed. Click {1} to see the latest version.': 'File `{0}` has a newer version available, or has been removed. Click {1} to see the latest version.',
40 41 'Follow': 'Follow',
41 42 'Force updating...': 'Force updating...',
42 43 'Hide full context diff': 'Hide full context diff',
43 44 'Hide whitespace changes': 'Hide whitespace changes',
44 45 'Invite reviewers to this discussion': 'Invite reviewers to this discussion',
45 46 'Leave a comment on line {0}.': 'Leave a comment on line {0}.',
46 47 'Leave a comment, or click resolve button to resolve TODO comment #{0}': 'Leave a comment, or click resolve button to resolve TODO comment #{0}',
47 48 'Leave a resolution comment, or click resolve button to resolve TODO comment #{0}': 'Leave a resolution comment, or click resolve button to resolve TODO comment #{0}',
48 49 'Lifetime': 'Lifetime',
49 50 'Loading ...': 'Loading ...',
50 51 'Loading diff ...': 'Loading diff ...',
51 52 'Loading failed': 'Loading failed',
52 53 'Loading more results...': 'Loading more results...',
53 54 'Loading...': 'Loading...',
54 55 'No bookmarks available yet.': 'No bookmarks available yet.',
55 56 'No branches available yet.': 'No branches available yet.',
56 57 'No forks available yet.': 'No forks available yet.',
57 58 'No gists available yet.': 'No gists available yet.',
58 59 'No matches found': 'No matches found',
59 60 'No matching files': 'No matching files',
60 61 'No pull requests available yet.': 'No pull requests available yet.',
61 62 'No repositories available yet.': 'No repositories available yet.',
62 63 'No repositories present.': 'No repositories present.',
63 64 'No repository groups available yet.': 'No repository groups available yet.',
64 65 'No repository groups present.': 'No repository groups present.',
65 66 'No results': 'No results',
66 67 'No ssh keys available yet.': 'No ssh keys available yet.',
67 68 'No tags available yet.': 'No tags available yet.',
68 69 'No user groups available yet.': 'No user groups available yet.',
69 70 'No users available yet.': 'No users available yet.',
70 71 'Not Reviewed': 'Not Reviewed',
71 72 'Note Comment': 'Note Comment',
72 73 'One result is available, press enter to select it.': 'One result is available, press enter to select it.',
73 74 'Open new pull request': 'Open new pull request',
74 75 'Open new pull request for selected commit': 'Open new pull request for selected commit',
75 76 'Please delete {0} character': 'Please delete {0} character',
76 77 'Please delete {0} characters': 'Please delete {0} characters',
77 78 'Please enter {0} or more character': 'Please enter {0} or more character',
78 79 'Please enter {0} or more characters': 'Please enter {0} or more characters',
79 80 'Please wait creating pull request...': 'Please wait creating pull request...',
80 81 'Reviewers picked from source code changes.': 'Reviewers picked from source code changes.',
81 82 'Saving...': 'Saving...',
82 83 'Searching...': 'Searching...',
83 84 'Selection link': 'Selection link',
84 85 'Send': 'Send',
85 86 'Set status to Approved': 'Set status to Approved',
86 87 'Set status to Rejected': 'Set status to Rejected',
87 88 'Show': 'Show',
88 89 'Show at Commit ': 'Show at Commit ',
89 90 'Show commit range {0} ... {1}': 'Show commit range {0} ... {1}',
90 91 'Show full context diff': 'Show full context diff',
91 92 'Show more': 'Show more',
92 93 'Show selected commit __S': 'Show selected commit __S',
93 94 'Show selected commits __S ... __E': 'Show selected commits __S ... __E',
94 95 'Show this authentication token?': 'Show this authentication token?',
95 96 'Show whitespace changes': 'Show whitespace changes',
96 97 'Specified expiration date': 'Specified expiration date',
97 98 'Start following this repository': 'Start following this repository',
98 99 'Started watching this repository': 'Started watching this repository',
99 100 'Status Review': 'Status Review',
100 101 'Stop following this repository': 'Stop following this repository',
101 102 'Stopped watching this repository': 'Stopped watching this repository',
102 103 'Submitting...': 'Submitting...',
103 104 'Switch to chat': 'Switch to chat',
104 105 'Switch to comment': 'Switch to comment',
105 106 'TODO comment': 'TODO comment',
106 107 'TODO from comment {0} was fixed.': 'TODO from comment {0} was fixed.',
107 108 'There are currently no open pull requests requiring your participation.': 'There are currently no open pull requests requiring your participation.',
108 109 'There is a later version of file tree available. Click {0} to create a file at the latest tree.': 'There is a later version of file tree available. Click {0} to create a file at the latest tree.',
109 110 'There is an existing path `{0}` at this commit.': 'There is an existing path `{0}` at this commit.',
110 111 'This pull requests will consist of <strong>{0} commit</strong>.': 'This pull requests will consist of <strong>{0} commit</strong>.',
111 112 'This pull requests will consist of <strong>{0} commits</strong>.': 'This pull requests will consist of <strong>{0} commits</strong>.',
112 113 'Toggle Wide Mode diff': 'Toggle Wide Mode diff',
113 114 'Unfollow': 'Unfollow',
114 115 'Unwatch': 'Unwatch',
116 'Updated Comment': 'Updated Comment',
115 117 'Updating...': 'Updating...',
116 118 'User `{0}` already in reviewers': 'User `{0}` already in reviewers',
117 119 'User `{0}` not allowed to be a reviewer': 'User `{0}` not allowed to be a reviewer',
118 120 'Watch': 'Watch',
119 121 'Yes, delete comment #{0}!': 'Yes, delete comment #{0}!',
120 122 'You can only select {0} item': 'You can only select {0} item',
121 123 'You can only select {0} items': 'You can only select {0} items',
122 124 'activated': 'activated',
123 125 'added manually by "{0}"': 'added manually by "{0}"',
124 126 'date not in future': 'date not in future',
125 127 'disabled': 'disabled',
126 128 'enabled': 'enabled',
127 129 'file': 'file',
128 130 'files': 'files',
129 131 'go to numeric commit': 'go to numeric commit',
130 132 'in {0}': 'in {0}',
131 133 'in {0} and {1}': 'in {0} and {1}',
132 134 'in {0}, {1}': 'in {0}, {1}',
133 135 'just now': 'just now',
134 136 'loading...': 'loading...',
135 137 'member of "{0}"': 'member of "{0}"',
136 138 'no commits': 'no commits',
137 139 'not active': 'not active',
138 140 'resolve comment': 'resolve comment',
139 141 'showing {0} out of {1} commit': 'showing {0} out of {1} commit',
140 142 'showing {0} out of {1} commits': 'showing {0} out of {1} commits',
141 143 'specify commit': 'specify commit',
142 144 'truncated result': 'truncated result',
143 145 'truncated results': 'truncated results',
144 146 '{0} ({1} inactive) of {2} user groups ({3} inactive)': '{0} ({1} inactive) of {2} user groups ({3} inactive)',
145 147 '{0} ({1} inactive) of {2} users ({3} inactive)': '{0} ({1} inactive) of {2} users ({3} inactive)',
146 148 '{0} active out of {1} users': '{0} active out of {1} users',
147 149 '{0} ago': '{0} ago',
148 150 '{0} and {1}': '{0} and {1}',
149 151 '{0} and {1} ago': '{0} and {1} ago',
150 152 '{0} day': '{0} day',
151 153 '{0} days': '{0} days',
152 154 '{0} hour': '{0} hour',
153 155 '{0} hours': '{0} hours',
154 156 '{0} min': '{0} min',
155 157 '{0} month': '{0} month',
156 158 '{0} months': '{0} months',
157 159 '{0} of {1} repositories': '{0} of {1} repositories',
158 160 '{0} of {1} repository groups': '{0} of {1} repository groups',
159 161 '{0} out of {1} ssh keys': '{0} out of {1} ssh keys',
160 162 '{0} out of {1} users': '{0} out of {1} users',
161 163 '{0} repositories': '{0} repositories',
162 164 '{0} repository groups': '{0} repository groups',
163 165 '{0} results are available, use up and down arrow keys to navigate.': '{0} results are available, use up and down arrow keys to navigate.',
164 166 '{0} sec': '{0} sec',
165 167 '{0} user groups ({1} inactive)': '{0} user groups ({1} inactive)',
166 168 '{0} users ({1} inactive)': '{0} users ({1} inactive)',
167 169 '{0} year': '{0} year',
168 170 '{0} years': '{0} years',
169 171 '{0}, {1} ago': '{0}, {1} ago'
170 172 }; No newline at end of file
@@ -1,170 +1,172 b''
1 1 /* This file is automatically generated. DO NOT change it manually.
2 2 * If this file needs to be modified, edit
3 3 * rhodecode/utils/file_generation/js_i18n_data.py
4 4 * and run the script invoke -r scripts/ generate.js-i18n .
5 5 */
6 6 //JS translations map
7 7 var _TM = {
8 8 '(from usergroup {0})': '(from usergroup {0})',
9 9 '<strong>{0} file</strong> changed, ': '<strong>{0} file</strong> changed, ',
10 10 '<strong>{0} files</strong> changed, ': '<strong>{0} files</strong> changed, ',
11 11 'Add another comment': 'Add another comment',
12 12 'Adding new reviewers is forbidden.': 'Adding new reviewers is forbidden.',
13 13 'Ajax Request Error': 'Ajax Request Error',
14 14 'All Authors': 'All Authors',
15 15 'All individual reviewers must vote.': 'All individual reviewers must vote.',
16 16 'All reviewers must vote.': 'All reviewers must vote.',
17 17 'Are you sure to close this pull request without merging?': 'Are you sure to close this pull request without merging?',
18 18 'At least {0} reviewer must vote.': 'At least {0} reviewer must vote.',
19 19 'At least {0} reviewers must vote.': 'At least {0} reviewers must vote.',
20 20 'Authentication Token': 'Authentication Token',
21 21 'Author is not allowed to be a reviewer.': 'Author is not allowed to be a reviewer.',
22 22 'Changed files': 'Changed files',
23 23 'Close': 'Close',
24 24 'Collapse all files': 'Collapse all files',
25 25 'Collapse {0} commit': 'Collapse {0} commit',
26 26 'Collapse {0} commits': 'Collapse {0} commits',
27 'Comment body was not changed.': 'Comment body was not changed.',
27 28 'Comment text will be set automatically based on currently selected status ({0}) ...': 'Comment text will be set automatically based on currently selected status ({0}) ...',
28 29 'Commit Authors are not allowed to be a reviewer.': 'Commit Authors are not allowed to be a reviewer.',
29 30 'Context file: ': 'Context file: ',
30 31 'Delete': 'Löschen',
31 32 'Delete this comment?': 'Delete this comment?',
32 33 'Diff to Commit ': 'Diff to Commit ',
33 34 'Error during search operation': 'Error during search operation',
34 35 'Expand all files': 'Expand all files',
35 36 'Expand {0} commit': 'Expand {0} commit',
36 37 'Expand {0} commits': 'Expand {0} commits',
37 38 'Fetching repository state failed. Error code: {0} {1}. Try <a href="{2}">refreshing</a> this page.': 'Fetching repository state failed. Error code: {0} {1}. Try <a href="{2}">refreshing</a> this page.',
38 39 'Fetching repository state failed. Error code: {0} {1}. Try refreshing this page.': 'Fetching repository state failed. Error code: {0} {1}. Try refreshing this page.',
39 40 'File `{0}` has a newer version available, or has been removed. Click {1} to see the latest version.': 'File `{0}` has a newer version available, or has been removed. Click {1} to see the latest version.',
40 41 'Follow': 'Follow',
41 42 'Force updating...': 'Force updating...',
42 43 'Hide full context diff': 'Hide full context diff',
43 44 'Hide whitespace changes': 'Hide whitespace changes',
44 45 'Invite reviewers to this discussion': 'Invite reviewers to this discussion',
45 46 'Leave a comment on line {0}.': 'Leave a comment on line {0}.',
46 47 'Leave a comment, or click resolve button to resolve TODO comment #{0}': 'Leave a comment, or click resolve button to resolve TODO comment #{0}',
47 48 'Leave a resolution comment, or click resolve button to resolve TODO comment #{0}': 'Leave a resolution comment, or click resolve button to resolve TODO comment #{0}',
48 49 'Lifetime': 'Lebensdauer',
49 50 'Loading ...': 'Loading ...',
50 51 'Loading diff ...': 'Loading diff ...',
51 52 'Loading failed': 'Loading failed',
52 53 'Loading more results...': 'Loading more results...',
53 54 'Loading...': 'Loading...',
54 55 'No bookmarks available yet.': 'No bookmarks available yet.',
55 56 'No branches available yet.': 'No branches available yet.',
56 57 'No forks available yet.': 'No forks available yet.',
57 58 'No gists available yet.': 'No gists available yet.',
58 59 'No matches found': 'Keine Treffer gefunden',
59 60 'No matching files': 'No matching files',
60 61 'No pull requests available yet.': 'No pull requests available yet.',
61 62 'No repositories available yet.': 'No repositories available yet.',
62 63 'No repositories present.': 'No repositories present.',
63 64 'No repository groups available yet.': 'No repository groups available yet.',
64 65 'No repository groups present.': 'No repository groups present.',
65 66 'No results': 'No results',
66 67 'No ssh keys available yet.': 'No ssh keys available yet.',
67 68 'No tags available yet.': 'No tags available yet.',
68 69 'No user groups available yet.': 'No user groups available yet.',
69 70 'No users available yet.': 'No users available yet.',
70 71 'Not Reviewed': 'Nicht Begutachtet',
71 72 'Note Comment': 'Note Comment',
72 73 'One result is available, press enter to select it.': 'One result is available, press enter to select it.',
73 74 'Open new pull request': 'Open new pull request',
74 75 'Open new pull request for selected commit': 'Open new pull request for selected commit',
75 76 'Please delete {0} character': 'Bitte {0} Zeichen löschen',
76 77 'Please delete {0} characters': 'Bitte {0} Zeichen löschen',
77 78 'Please enter {0} or more character': 'Bitte {0} oder mehr Zeichen eingeben',
78 79 'Please enter {0} or more characters': 'Bitte {0} oder mehr Zeichen eingeben',
79 80 'Please wait creating pull request...': 'Please wait creating pull request...',
80 81 'Reviewers picked from source code changes.': 'Reviewers picked from source code changes.',
81 82 'Saving...': 'Saving...',
82 83 'Searching...': 'Searching...',
83 84 'Selection link': 'Selection link',
84 85 'Send': 'Senden',
85 86 'Set status to Approved': 'Set status to Approved',
86 87 'Set status to Rejected': 'Set status to Rejected',
87 88 'Show': 'Show',
88 89 'Show at Commit ': 'Show at Commit ',
89 90 'Show commit range {0} ... {1}': 'Show commit range {0} ... {1}',
90 91 'Show full context diff': 'Show full context diff',
91 92 'Show more': 'Show more',
92 93 'Show selected commit __S': 'Show selected commit __S',
93 94 'Show selected commits __S ... __E': 'Show selected commits __S ... __E',
94 95 'Show this authentication token?': 'Show this authentication token?',
95 96 'Show whitespace changes': 'Show whitespace changes',
96 97 'Specified expiration date': 'Specified expiration date',
97 98 'Start following this repository': 'Start following this repository',
98 99 'Started watching this repository': 'Started watching this repository',
99 100 'Status Review': 'Status Review',
100 101 'Stop following this repository': 'Stop following this repository',
101 102 'Stopped watching this repository': 'Stopped watching this repository',
102 103 'Submitting...': 'Submitting...',
103 104 'Switch to chat': 'Switch to chat',
104 105 'Switch to comment': 'Switch to comment',
105 106 'TODO comment': 'TODO comment',
106 107 'TODO from comment {0} was fixed.': 'TODO from comment {0} was fixed.',
107 108 'There are currently no open pull requests requiring your participation.': 'There are currently no open pull requests requiring your participation.',
108 109 'There is a later version of file tree available. Click {0} to create a file at the latest tree.': 'There is a later version of file tree available. Click {0} to create a file at the latest tree.',
109 110 'There is an existing path `{0}` at this commit.': 'There is an existing path `{0}` at this commit.',
110 111 'This pull requests will consist of <strong>{0} commit</strong>.': 'This pull requests will consist of <strong>{0} commit</strong>.',
111 112 'This pull requests will consist of <strong>{0} commits</strong>.': 'This pull requests will consist of <strong>{0} commits</strong>.',
112 113 'Toggle Wide Mode diff': 'Toggle Wide Mode diff',
113 114 'Unfollow': 'Unfollow',
114 115 'Unwatch': 'Unwatch',
116 'Updated Comment': 'Updated Comment',
115 117 'Updating...': 'Updating...',
116 118 'User `{0}` already in reviewers': 'User `{0}` already in reviewers',
117 119 'User `{0}` not allowed to be a reviewer': 'User `{0}` not allowed to be a reviewer',
118 120 'Watch': 'Watch',
119 121 'Yes, delete comment #{0}!': 'Yes, delete comment #{0}!',
120 122 'You can only select {0} item': 'You can only select {0} item',
121 123 'You can only select {0} items': 'You can only select {0} items',
122 124 'activated': 'activated',
123 125 'added manually by "{0}"': 'added manually by "{0}"',
124 126 'date not in future': 'date not in future',
125 127 'disabled': 'disabled',
126 128 'enabled': 'enabled',
127 129 'file': 'file',
128 130 'files': 'files',
129 131 'go to numeric commit': 'go to numeric commit',
130 132 'in {0}': 'in {0}',
131 133 'in {0} and {1}': 'in {0} and {1}',
132 134 'in {0}, {1}': 'in {0}, {1}',
133 135 'just now': 'jetzt gerade',
134 136 'loading...': 'loading...',
135 137 'member of "{0}"': 'member of "{0}"',
136 138 'no commits': 'no commits',
137 139 'not active': 'not active',
138 140 'resolve comment': 'resolve comment',
139 141 'showing {0} out of {1} commit': 'showing {0} out of {1} commit',
140 142 'showing {0} out of {1} commits': 'showing {0} out of {1} commits',
141 143 'specify commit': 'specify commit',
142 144 'truncated result': 'truncated result',
143 145 'truncated results': 'truncated results',
144 146 '{0} ({1} inactive) of {2} user groups ({3} inactive)': '{0} ({1} inactive) of {2} user groups ({3} inactive)',
145 147 '{0} ({1} inactive) of {2} users ({3} inactive)': '{0} ({1} inactive) of {2} users ({3} inactive)',
146 148 '{0} active out of {1} users': '{0} active out of {1} users',
147 149 '{0} ago': '{0} ago',
148 150 '{0} and {1}': '{0} and {1}',
149 151 '{0} and {1} ago': '{0} and {1} ago',
150 152 '{0} day': '{0} day',
151 153 '{0} days': '{0} days',
152 154 '{0} hour': '{0} hour',
153 155 '{0} hours': '{0} hours',
154 156 '{0} min': '{0} min',
155 157 '{0} month': '{0} month',
156 158 '{0} months': '{0} months',
157 159 '{0} of {1} repositories': '{0} of {1} repositories',
158 160 '{0} of {1} repository groups': '{0} of {1} repository groups',
159 161 '{0} out of {1} ssh keys': '{0} out of {1} ssh keys',
160 162 '{0} out of {1} users': '{0} out of {1} users',
161 163 '{0} repositories': '{0} repositories',
162 164 '{0} repository groups': '{0} repository groups',
163 165 '{0} results are available, use up and down arrow keys to navigate.': '{0} results are available, use up and down arrow keys to navigate.',
164 166 '{0} sec': '{0} sec',
165 167 '{0} user groups ({1} inactive)': '{0} user groups ({1} inactive)',
166 168 '{0} users ({1} inactive)': '{0} users ({1} inactive)',
167 169 '{0} year': '{0} year',
168 170 '{0} years': '{0} years',
169 171 '{0}, {1} ago': '{0}, {1} ago'
170 172 }; No newline at end of file
@@ -1,170 +1,172 b''
1 1 /* This file is automatically generated. DO NOT change it manually.
2 2 * If this file needs to be modified, edit
3 3 * rhodecode/utils/file_generation/js_i18n_data.py
4 4 * and run the script invoke -r scripts/ generate.js-i18n .
5 5 */
6 6 //JS translations map
7 7 var _TM = {
8 8 '(from usergroup {0})': '(from usergroup {0})',
9 9 '<strong>{0} file</strong> changed, ': '<strong>{0} file</strong> changed, ',
10 10 '<strong>{0} files</strong> changed, ': '<strong>{0} files</strong> changed, ',
11 11 'Add another comment': 'Add another comment',
12 12 'Adding new reviewers is forbidden.': 'Adding new reviewers is forbidden.',
13 13 'Ajax Request Error': 'Ajax Request Error',
14 14 'All Authors': 'All Authors',
15 15 'All individual reviewers must vote.': 'All individual reviewers must vote.',
16 16 'All reviewers must vote.': 'All reviewers must vote.',
17 17 'Are you sure to close this pull request without merging?': 'Are you sure to close this pull request without merging?',
18 18 'At least {0} reviewer must vote.': 'At least {0} reviewer must vote.',
19 19 'At least {0} reviewers must vote.': 'At least {0} reviewers must vote.',
20 20 'Authentication Token': 'Authentication Token',
21 21 'Author is not allowed to be a reviewer.': 'Author is not allowed to be a reviewer.',
22 22 'Changed files': 'Changed files',
23 23 'Close': 'Close',
24 24 'Collapse all files': 'Collapse all files',
25 25 'Collapse {0} commit': 'Collapse {0} commit',
26 26 'Collapse {0} commits': 'Collapse {0} commits',
27 'Comment body was not changed.': 'Comment body was not changed.',
27 28 'Comment text will be set automatically based on currently selected status ({0}) ...': 'Comment text will be set automatically based on currently selected status ({0}) ...',
28 29 'Commit Authors are not allowed to be a reviewer.': 'Commit Authors are not allowed to be a reviewer.',
29 30 'Context file: ': 'Context file: ',
30 31 'Delete': 'Delete',
31 32 'Delete this comment?': 'Delete this comment?',
32 33 'Diff to Commit ': 'Diff to Commit ',
33 34 'Error during search operation': 'Error during search operation',
34 35 'Expand all files': 'Expand all files',
35 36 'Expand {0} commit': 'Expand {0} commit',
36 37 'Expand {0} commits': 'Expand {0} commits',
37 38 'Fetching repository state failed. Error code: {0} {1}. Try <a href="{2}">refreshing</a> this page.': 'Fetching repository state failed. Error code: {0} {1}. Try <a href="{2}">refreshing</a> this page.',
38 39 'Fetching repository state failed. Error code: {0} {1}. Try refreshing this page.': 'Fetching repository state failed. Error code: {0} {1}. Try refreshing this page.',
39 40 'File `{0}` has a newer version available, or has been removed. Click {1} to see the latest version.': 'File `{0}` has a newer version available, or has been removed. Click {1} to see the latest version.',
40 41 'Follow': 'Follow',
41 42 'Force updating...': 'Force updating...',
42 43 'Hide full context diff': 'Hide full context diff',
43 44 'Hide whitespace changes': 'Hide whitespace changes',
44 45 'Invite reviewers to this discussion': 'Invite reviewers to this discussion',
45 46 'Leave a comment on line {0}.': 'Leave a comment on line {0}.',
46 47 'Leave a comment, or click resolve button to resolve TODO comment #{0}': 'Leave a comment, or click resolve button to resolve TODO comment #{0}',
47 48 'Leave a resolution comment, or click resolve button to resolve TODO comment #{0}': 'Leave a resolution comment, or click resolve button to resolve TODO comment #{0}',
48 49 'Lifetime': 'Lifetime',
49 50 'Loading ...': 'Loading ...',
50 51 'Loading diff ...': 'Loading diff ...',
51 52 'Loading failed': 'Loading failed',
52 53 'Loading more results...': 'Loading more results...',
53 54 'Loading...': 'Loading...',
54 55 'No bookmarks available yet.': 'No bookmarks available yet.',
55 56 'No branches available yet.': 'No branches available yet.',
56 57 'No forks available yet.': 'No forks available yet.',
57 58 'No gists available yet.': 'No gists available yet.',
58 59 'No matches found': 'No matches found',
59 60 'No matching files': 'No matching files',
60 61 'No pull requests available yet.': 'No pull requests available yet.',
61 62 'No repositories available yet.': 'No repositories available yet.',
62 63 'No repositories present.': 'No repositories present.',
63 64 'No repository groups available yet.': 'No repository groups available yet.',
64 65 'No repository groups present.': 'No repository groups present.',
65 66 'No results': 'No results',
66 67 'No ssh keys available yet.': 'No ssh keys available yet.',
67 68 'No tags available yet.': 'No tags available yet.',
68 69 'No user groups available yet.': 'No user groups available yet.',
69 70 'No users available yet.': 'No users available yet.',
70 71 'Not Reviewed': 'Not Reviewed',
71 72 'Note Comment': 'Note Comment',
72 73 'One result is available, press enter to select it.': 'One result is available, press enter to select it.',
73 74 'Open new pull request': 'Open new pull request',
74 75 'Open new pull request for selected commit': 'Open new pull request for selected commit',
75 76 'Please delete {0} character': 'Please delete {0} character',
76 77 'Please delete {0} characters': 'Please delete {0} characters',
77 78 'Please enter {0} or more character': 'Please enter {0} or more character',
78 79 'Please enter {0} or more characters': 'Please enter {0} or more characters',
79 80 'Please wait creating pull request...': 'Please wait creating pull request...',
80 81 'Reviewers picked from source code changes.': 'Reviewers picked from source code changes.',
81 82 'Saving...': 'Saving...',
82 83 'Searching...': 'Searching...',
83 84 'Selection link': 'Selection link',
84 85 'Send': 'Send',
85 86 'Set status to Approved': 'Set status to Approved',
86 87 'Set status to Rejected': 'Set status to Rejected',
87 88 'Show': 'Show',
88 89 'Show at Commit ': 'Show at Commit ',
89 90 'Show commit range {0} ... {1}': 'Show commit range {0} ... {1}',
90 91 'Show full context diff': 'Show full context diff',
91 92 'Show more': 'Show more',
92 93 'Show selected commit __S': 'Show selected commit __S',
93 94 'Show selected commits __S ... __E': 'Show selected commits __S ... __E',
94 95 'Show this authentication token?': 'Show this authentication token?',
95 96 'Show whitespace changes': 'Show whitespace changes',
96 97 'Specified expiration date': 'Specified expiration date',
97 98 'Start following this repository': 'Start following this repository',
98 99 'Started watching this repository': 'Started watching this repository',
99 100 'Status Review': 'Status Review',
100 101 'Stop following this repository': 'Stop following this repository',
101 102 'Stopped watching this repository': 'Stopped watching this repository',
102 103 'Submitting...': 'Submitting...',
103 104 'Switch to chat': 'Switch to chat',
104 105 'Switch to comment': 'Switch to comment',
105 106 'TODO comment': 'TODO comment',
106 107 'TODO from comment {0} was fixed.': 'TODO from comment {0} was fixed.',
107 108 'There are currently no open pull requests requiring your participation.': 'There are currently no open pull requests requiring your participation.',
108 109 'There is a later version of file tree available. Click {0} to create a file at the latest tree.': 'There is a later version of file tree available. Click {0} to create a file at the latest tree.',
109 110 'There is an existing path `{0}` at this commit.': 'There is an existing path `{0}` at this commit.',
110 111 'This pull requests will consist of <strong>{0} commit</strong>.': 'This pull requests will consist of <strong>{0} commit</strong>.',
111 112 'This pull requests will consist of <strong>{0} commits</strong>.': 'This pull requests will consist of <strong>{0} commits</strong>.',
112 113 'Toggle Wide Mode diff': 'Toggle Wide Mode diff',
113 114 'Unfollow': 'Unfollow',
114 115 'Unwatch': 'Unwatch',
116 'Updated Comment': 'Updated Comment',
115 117 'Updating...': 'Updating...',
116 118 'User `{0}` already in reviewers': 'User `{0}` already in reviewers',
117 119 'User `{0}` not allowed to be a reviewer': 'User `{0}` not allowed to be a reviewer',
118 120 'Watch': 'Watch',
119 121 'Yes, delete comment #{0}!': 'Yes, delete comment #{0}!',
120 122 'You can only select {0} item': 'You can only select {0} item',
121 123 'You can only select {0} items': 'You can only select {0} items',
122 124 'activated': 'activated',
123 125 'added manually by "{0}"': 'added manually by "{0}"',
124 126 'date not in future': 'date not in future',
125 127 'disabled': 'disabled',
126 128 'enabled': 'enabled',
127 129 'file': 'file',
128 130 'files': 'files',
129 131 'go to numeric commit': 'go to numeric commit',
130 132 'in {0}': 'in {0}',
131 133 'in {0} and {1}': 'in {0} and {1}',
132 134 'in {0}, {1}': 'in {0}, {1}',
133 135 'just now': 'just now',
134 136 'loading...': 'loading...',
135 137 'member of "{0}"': 'member of "{0}"',
136 138 'no commits': 'no commits',
137 139 'not active': 'not active',
138 140 'resolve comment': 'resolve comment',
139 141 'showing {0} out of {1} commit': 'showing {0} out of {1} commit',
140 142 'showing {0} out of {1} commits': 'showing {0} out of {1} commits',
141 143 'specify commit': 'specify commit',
142 144 'truncated result': 'truncated result',
143 145 'truncated results': 'truncated results',
144 146 '{0} ({1} inactive) of {2} user groups ({3} inactive)': '{0} ({1} inactive) of {2} user groups ({3} inactive)',
145 147 '{0} ({1} inactive) of {2} users ({3} inactive)': '{0} ({1} inactive) of {2} users ({3} inactive)',
146 148 '{0} active out of {1} users': '{0} active out of {1} users',
147 149 '{0} ago': '{0} ago',
148 150 '{0} and {1}': '{0} and {1}',
149 151 '{0} and {1} ago': '{0} and {1} ago',
150 152 '{0} day': '{0} day',
151 153 '{0} days': '{0} days',
152 154 '{0} hour': '{0} hour',
153 155 '{0} hours': '{0} hours',
154 156 '{0} min': '{0} min',
155 157 '{0} month': '{0} month',
156 158 '{0} months': '{0} months',
157 159 '{0} of {1} repositories': '{0} of {1} repositories',
158 160 '{0} of {1} repository groups': '{0} of {1} repository groups',
159 161 '{0} out of {1} ssh keys': '{0} out of {1} ssh keys',
160 162 '{0} out of {1} users': '{0} out of {1} users',
161 163 '{0} repositories': '{0} repositories',
162 164 '{0} repository groups': '{0} repository groups',
163 165 '{0} results are available, use up and down arrow keys to navigate.': '{0} results are available, use up and down arrow keys to navigate.',
164 166 '{0} sec': '{0} sec',
165 167 '{0} user groups ({1} inactive)': '{0} user groups ({1} inactive)',
166 168 '{0} users ({1} inactive)': '{0} users ({1} inactive)',
167 169 '{0} year': '{0} year',
168 170 '{0} years': '{0} years',
169 171 '{0}, {1} ago': '{0}, {1} ago'
170 172 }; No newline at end of file
@@ -1,170 +1,172 b''
1 1 /* This file is automatically generated. DO NOT change it manually.
2 2 * If this file needs to be modified, edit
3 3 * rhodecode/utils/file_generation/js_i18n_data.py
4 4 * and run the script invoke -r scripts/ generate.js-i18n .
5 5 */
6 6 //JS translations map
7 7 var _TM = {
8 8 '(from usergroup {0})': '(from usergroup {0})',
9 9 '<strong>{0} file</strong> changed, ': '<strong>{0} file</strong> changed, ',
10 10 '<strong>{0} files</strong> changed, ': '<strong>{0} files</strong> changed, ',
11 11 'Add another comment': 'Add another comment',
12 12 'Adding new reviewers is forbidden.': 'Adding new reviewers is forbidden.',
13 13 'Ajax Request Error': 'Ajax Request Error',
14 14 'All Authors': 'All Authors',
15 15 'All individual reviewers must vote.': 'All individual reviewers must vote.',
16 16 'All reviewers must vote.': 'All reviewers must vote.',
17 17 'Are you sure to close this pull request without merging?': 'Are you sure to close this pull request without merging?',
18 18 'At least {0} reviewer must vote.': 'At least {0} reviewer must vote.',
19 19 'At least {0} reviewers must vote.': 'At least {0} reviewers must vote.',
20 20 'Authentication Token': 'Authentication Token',
21 21 'Author is not allowed to be a reviewer.': 'Author is not allowed to be a reviewer.',
22 22 'Changed files': 'Changed files',
23 23 'Close': 'Close',
24 24 'Collapse all files': 'Collapse all files',
25 25 'Collapse {0} commit': 'Collapse {0} commit',
26 26 'Collapse {0} commits': 'Collapse {0} commits',
27 'Comment body was not changed.': 'Comment body was not changed.',
27 28 'Comment text will be set automatically based on currently selected status ({0}) ...': 'Comment text will be set automatically based on currently selected status ({0}) ...',
28 29 'Commit Authors are not allowed to be a reviewer.': 'Commit Authors are not allowed to be a reviewer.',
29 30 'Context file: ': 'Context file: ',
30 31 'Delete': 'Delete',
31 32 'Delete this comment?': 'Delete this comment?',
32 33 'Diff to Commit ': 'Diff to Commit ',
33 34 'Error during search operation': 'Error during search operation',
34 35 'Expand all files': 'Expand all files',
35 36 'Expand {0} commit': 'Expand {0} commit',
36 37 'Expand {0} commits': 'Expand {0} commits',
37 38 'Fetching repository state failed. Error code: {0} {1}. Try <a href="{2}">refreshing</a> this page.': 'Fetching repository state failed. Error code: {0} {1}. Try <a href="{2}">refreshing</a> this page.',
38 39 'Fetching repository state failed. Error code: {0} {1}. Try refreshing this page.': 'Fetching repository state failed. Error code: {0} {1}. Try refreshing this page.',
39 40 'File `{0}` has a newer version available, or has been removed. Click {1} to see the latest version.': 'File `{0}` has a newer version available, or has been removed. Click {1} to see the latest version.',
40 41 'Follow': 'Follow',
41 42 'Force updating...': 'Force updating...',
42 43 'Hide full context diff': 'Hide full context diff',
43 44 'Hide whitespace changes': 'Hide whitespace changes',
44 45 'Invite reviewers to this discussion': 'Invite reviewers to this discussion',
45 46 'Leave a comment on line {0}.': 'Leave a comment on line {0}.',
46 47 'Leave a comment, or click resolve button to resolve TODO comment #{0}': 'Leave a comment, or click resolve button to resolve TODO comment #{0}',
47 48 'Leave a resolution comment, or click resolve button to resolve TODO comment #{0}': 'Leave a resolution comment, or click resolve button to resolve TODO comment #{0}',
48 49 'Lifetime': 'De por vida',
49 50 'Loading ...': 'Loading ...',
50 51 'Loading diff ...': 'Loading diff ...',
51 52 'Loading failed': 'Loading failed',
52 53 'Loading more results...': 'Loading more results...',
53 54 'Loading...': 'Loading...',
54 55 'No bookmarks available yet.': 'No bookmarks available yet.',
55 56 'No branches available yet.': 'No branches available yet.',
56 57 'No forks available yet.': 'No forks available yet.',
57 58 'No gists available yet.': 'No gists available yet.',
58 59 'No matches found': 'No matches found',
59 60 'No matching files': 'No matching files',
60 61 'No pull requests available yet.': 'No pull requests available yet.',
61 62 'No repositories available yet.': 'No repositories available yet.',
62 63 'No repositories present.': 'No repositories present.',
63 64 'No repository groups available yet.': 'No repository groups available yet.',
64 65 'No repository groups present.': 'No repository groups present.',
65 66 'No results': 'No results',
66 67 'No ssh keys available yet.': 'No ssh keys available yet.',
67 68 'No tags available yet.': 'No tags available yet.',
68 69 'No user groups available yet.': 'No user groups available yet.',
69 70 'No users available yet.': 'No users available yet.',
70 71 'Not Reviewed': 'Not Reviewed',
71 72 'Note Comment': 'Note Comment',
72 73 'One result is available, press enter to select it.': 'One result is available, press enter to select it.',
73 74 'Open new pull request': 'Open new pull request',
74 75 'Open new pull request for selected commit': 'Open new pull request for selected commit',
75 76 'Please delete {0} character': 'Please delete {0} character',
76 77 'Please delete {0} characters': 'Please delete {0} characters',
77 78 'Please enter {0} or more character': 'Please enter {0} or more character',
78 79 'Please enter {0} or more characters': 'Please enter {0} or more characters',
79 80 'Please wait creating pull request...': 'Please wait creating pull request...',
80 81 'Reviewers picked from source code changes.': 'Reviewers picked from source code changes.',
81 82 'Saving...': 'Saving...',
82 83 'Searching...': 'Searching...',
83 84 'Selection link': 'Selection link',
84 85 'Send': 'Send',
85 86 'Set status to Approved': 'Set status to Approved',
86 87 'Set status to Rejected': 'Set status to Rejected',
87 88 'Show': 'Show',
88 89 'Show at Commit ': 'Show at Commit ',
89 90 'Show commit range {0} ... {1}': 'Show commit range {0} ... {1}',
90 91 'Show full context diff': 'Show full context diff',
91 92 'Show more': 'Show more',
92 93 'Show selected commit __S': 'Show selected commit __S',
93 94 'Show selected commits __S ... __E': 'Show selected commits __S ... __E',
94 95 'Show this authentication token?': 'Show this authentication token?',
95 96 'Show whitespace changes': 'Show whitespace changes',
96 97 'Specified expiration date': 'Specified expiration date',
97 98 'Start following this repository': 'Start following this repository',
98 99 'Started watching this repository': 'Started watching this repository',
99 100 'Status Review': 'Status Review',
100 101 'Stop following this repository': 'Stop following this repository',
101 102 'Stopped watching this repository': 'Stopped watching this repository',
102 103 'Submitting...': 'Submitting...',
103 104 'Switch to chat': 'Switch to chat',
104 105 'Switch to comment': 'Switch to comment',
105 106 'TODO comment': 'TODO comment',
106 107 'TODO from comment {0} was fixed.': 'TODO from comment {0} was fixed.',
107 108 'There are currently no open pull requests requiring your participation.': 'There are currently no open pull requests requiring your participation.',
108 109 'There is a later version of file tree available. Click {0} to create a file at the latest tree.': 'There is a later version of file tree available. Click {0} to create a file at the latest tree.',
109 110 'There is an existing path `{0}` at this commit.': 'There is an existing path `{0}` at this commit.',
110 111 'This pull requests will consist of <strong>{0} commit</strong>.': 'This pull requests will consist of <strong>{0} commit</strong>.',
111 112 'This pull requests will consist of <strong>{0} commits</strong>.': 'This pull requests will consist of <strong>{0} commits</strong>.',
112 113 'Toggle Wide Mode diff': 'Toggle Wide Mode diff',
113 114 'Unfollow': 'Unfollow',
114 115 'Unwatch': 'Unwatch',
116 'Updated Comment': 'Updated Comment',
115 117 'Updating...': 'Updating...',
116 118 'User `{0}` already in reviewers': 'User `{0}` already in reviewers',
117 119 'User `{0}` not allowed to be a reviewer': 'User `{0}` not allowed to be a reviewer',
118 120 'Watch': 'Watch',
119 121 'Yes, delete comment #{0}!': 'Yes, delete comment #{0}!',
120 122 'You can only select {0} item': 'You can only select {0} item',
121 123 'You can only select {0} items': 'You can only select {0} items',
122 124 'activated': 'activated',
123 125 'added manually by "{0}"': 'added manually by "{0}"',
124 126 'date not in future': 'date not in future',
125 127 'disabled': 'disabled',
126 128 'enabled': 'enabled',
127 129 'file': 'file',
128 130 'files': 'files',
129 131 'go to numeric commit': 'go to numeric commit',
130 132 'in {0}': 'in {0}',
131 133 'in {0} and {1}': 'in {0} and {1}',
132 134 'in {0}, {1}': 'in {0}, {1}',
133 135 'just now': 'just now',
134 136 'loading...': 'loading...',
135 137 'member of "{0}"': 'member of "{0}"',
136 138 'no commits': 'no commits',
137 139 'not active': 'not active',
138 140 'resolve comment': 'resolve comment',
139 141 'showing {0} out of {1} commit': 'showing {0} out of {1} commit',
140 142 'showing {0} out of {1} commits': 'showing {0} out of {1} commits',
141 143 'specify commit': 'specify commit',
142 144 'truncated result': 'truncated result',
143 145 'truncated results': 'truncated results',
144 146 '{0} ({1} inactive) of {2} user groups ({3} inactive)': '{0} ({1} inactive) of {2} user groups ({3} inactive)',
145 147 '{0} ({1} inactive) of {2} users ({3} inactive)': '{0} ({1} inactive) of {2} users ({3} inactive)',
146 148 '{0} active out of {1} users': '{0} active out of {1} users',
147 149 '{0} ago': '{0} ago',
148 150 '{0} and {1}': '{0} and {1}',
149 151 '{0} and {1} ago': '{0} and {1} ago',
150 152 '{0} day': '{0} day',
151 153 '{0} days': '{0} days',
152 154 '{0} hour': '{0} hour',
153 155 '{0} hours': '{0} hours',
154 156 '{0} min': '{0} min',
155 157 '{0} month': '{0} month',
156 158 '{0} months': '{0} months',
157 159 '{0} of {1} repositories': '{0} of {1} repositories',
158 160 '{0} of {1} repository groups': '{0} of {1} repository groups',
159 161 '{0} out of {1} ssh keys': '{0} out of {1} ssh keys',
160 162 '{0} out of {1} users': '{0} out of {1} users',
161 163 '{0} repositories': '{0} repositories',
162 164 '{0} repository groups': '{0} repository groups',
163 165 '{0} results are available, use up and down arrow keys to navigate.': '{0} results are available, use up and down arrow keys to navigate.',
164 166 '{0} sec': '{0} sec',
165 167 '{0} user groups ({1} inactive)': '{0} user groups ({1} inactive)',
166 168 '{0} users ({1} inactive)': '{0} users ({1} inactive)',
167 169 '{0} year': '{0} year',
168 170 '{0} years': '{0} years',
169 171 '{0}, {1} ago': '{0}, {1} ago'
170 172 }; No newline at end of file
@@ -1,170 +1,172 b''
1 1 /* This file is automatically generated. DO NOT change it manually.
2 2 * If this file needs to be modified, edit
3 3 * rhodecode/utils/file_generation/js_i18n_data.py
4 4 * and run the script invoke -r scripts/ generate.js-i18n .
5 5 */
6 6 //JS translations map
7 7 var _TM = {
8 8 '(from usergroup {0})': '(from usergroup {0})',
9 9 '<strong>{0} file</strong> changed, ': '<strong>{0} file</strong> changed, ',
10 10 '<strong>{0} files</strong> changed, ': '<strong>{0} files</strong> changed, ',
11 11 'Add another comment': 'Add another comment',
12 12 'Adding new reviewers is forbidden.': 'Adding new reviewers is forbidden.',
13 13 'Ajax Request Error': 'Ajax Request Error',
14 14 'All Authors': 'All Authors',
15 15 'All individual reviewers must vote.': 'All individual reviewers must vote.',
16 16 'All reviewers must vote.': 'All reviewers must vote.',
17 17 'Are you sure to close this pull request without merging?': 'Are you sure to close this pull request without merging?',
18 18 'At least {0} reviewer must vote.': 'At least {0} reviewer must vote.',
19 19 'At least {0} reviewers must vote.': 'At least {0} reviewers must vote.',
20 20 'Authentication Token': 'Authentication Token',
21 21 'Author is not allowed to be a reviewer.': 'Author is not allowed to be a reviewer.',
22 22 'Changed files': 'Changed files',
23 23 'Close': 'Close',
24 24 'Collapse all files': 'Collapse all files',
25 25 'Collapse {0} commit': 'Collapse {0} commit',
26 26 'Collapse {0} commits': 'Collapse {0} commits',
27 'Comment body was not changed.': 'Comment body was not changed.',
27 28 'Comment text will be set automatically based on currently selected status ({0}) ...': 'Comment text will be set automatically based on currently selected status ({0}) ...',
28 29 'Commit Authors are not allowed to be a reviewer.': 'Commit Authors are not allowed to be a reviewer.',
29 30 'Context file: ': 'Context file: ',
30 31 'Delete': 'Supprimer',
31 32 'Delete this comment?': 'Delete this comment?',
32 33 'Diff to Commit ': 'Diff to Commit ',
33 34 'Error during search operation': 'Error during search operation',
34 35 'Expand all files': 'Expand all files',
35 36 'Expand {0} commit': 'Expand {0} commit',
36 37 'Expand {0} commits': 'Expand {0} commits',
37 38 'Fetching repository state failed. Error code: {0} {1}. Try <a href="{2}">refreshing</a> this page.': 'Fetching repository state failed. Error code: {0} {1}. Try <a href="{2}">refreshing</a> this page.',
38 39 'Fetching repository state failed. Error code: {0} {1}. Try refreshing this page.': 'Fetching repository state failed. Error code: {0} {1}. Try refreshing this page.',
39 40 'File `{0}` has a newer version available, or has been removed. Click {1} to see the latest version.': 'File `{0}` has a newer version available, or has been removed. Click {1} to see the latest version.',
40 41 'Follow': 'Follow',
41 42 'Force updating...': 'Force updating...',
42 43 'Hide full context diff': 'Hide full context diff',
43 44 'Hide whitespace changes': 'Hide whitespace changes',
44 45 'Invite reviewers to this discussion': 'Invite reviewers to this discussion',
45 46 'Leave a comment on line {0}.': 'Leave a comment on line {0}.',
46 47 'Leave a comment, or click resolve button to resolve TODO comment #{0}': 'Leave a comment, or click resolve button to resolve TODO comment #{0}',
47 48 'Leave a resolution comment, or click resolve button to resolve TODO comment #{0}': 'Leave a resolution comment, or click resolve button to resolve TODO comment #{0}',
48 49 'Lifetime': 'Durée de vie',
49 50 'Loading ...': 'Loading ...',
50 51 'Loading diff ...': 'Loading diff ...',
51 52 'Loading failed': 'Loading failed',
52 53 'Loading more results...': 'Loading more results...',
53 54 'Loading...': 'Loading...',
54 55 'No bookmarks available yet.': 'No bookmarks available yet.',
55 56 'No branches available yet.': 'No branches available yet.',
56 57 'No forks available yet.': 'No forks available yet.',
57 58 'No gists available yet.': 'No gists available yet.',
58 59 'No matches found': 'No matches found',
59 60 'No matching files': 'No matching files',
60 61 'No pull requests available yet.': 'No pull requests available yet.',
61 62 'No repositories available yet.': 'No repositories available yet.',
62 63 'No repositories present.': 'No repositories present.',
63 64 'No repository groups available yet.': 'No repository groups available yet.',
64 65 'No repository groups present.': 'No repository groups present.',
65 66 'No results': 'No results',
66 67 'No ssh keys available yet.': 'No ssh keys available yet.',
67 68 'No tags available yet.': 'No tags available yet.',
68 69 'No user groups available yet.': 'No user groups available yet.',
69 70 'No users available yet.': 'No users available yet.',
70 71 'Not Reviewed': 'Pas encore relue',
71 72 'Note Comment': 'Note Comment',
72 73 'One result is available, press enter to select it.': 'One result is available, press enter to select it.',
73 74 'Open new pull request': 'Nouvelle requête de pull',
74 75 'Open new pull request for selected commit': 'Open new pull request for selected commit',
75 76 'Please delete {0} character': 'Please delete {0} character',
76 77 'Please delete {0} characters': 'Please delete {0} characters',
77 78 'Please enter {0} or more character': 'Please enter {0} or more character',
78 79 'Please enter {0} or more characters': 'Please enter {0} or more characters',
79 80 'Please wait creating pull request...': 'Please wait creating pull request...',
80 81 'Reviewers picked from source code changes.': 'Reviewers picked from source code changes.',
81 82 'Saving...': 'Saving...',
82 83 'Searching...': 'Searching...',
83 84 'Selection link': 'Lien vers la sélection',
84 85 'Send': 'Envoyer',
85 86 'Set status to Approved': 'Set status to Approved',
86 87 'Set status to Rejected': 'Set status to Rejected',
87 88 'Show': 'Show',
88 89 'Show at Commit ': 'Show at Commit ',
89 90 'Show commit range {0} ... {1}': 'Show commit range {0} ... {1}',
90 91 'Show full context diff': 'Show full context diff',
91 92 'Show more': 'Show more',
92 93 'Show selected commit __S': 'Show selected commit __S',
93 94 'Show selected commits __S ... __E': 'Show selected commits __S ... __E',
94 95 'Show this authentication token?': 'Show this authentication token?',
95 96 'Show whitespace changes': 'Show whitespace changes',
96 97 'Specified expiration date': 'Specified expiration date',
97 98 'Start following this repository': 'Suivre ce dépôt',
98 99 'Started watching this repository': 'Started watching this repository',
99 100 'Status Review': 'Status Review',
100 101 'Stop following this repository': 'Arrêter de suivre ce dépôt',
101 102 'Stopped watching this repository': 'Stopped watching this repository',
102 103 'Submitting...': 'Envoi…',
103 104 'Switch to chat': 'Switch to chat',
104 105 'Switch to comment': 'Switch to comment',
105 106 'TODO comment': 'TODO comment',
106 107 'TODO from comment {0} was fixed.': 'TODO from comment {0} was fixed.',
107 108 'There are currently no open pull requests requiring your participation.': 'There are currently no open pull requests requiring your participation.',
108 109 'There is a later version of file tree available. Click {0} to create a file at the latest tree.': 'There is a later version of file tree available. Click {0} to create a file at the latest tree.',
109 110 'There is an existing path `{0}` at this commit.': 'There is an existing path `{0}` at this commit.',
110 111 'This pull requests will consist of <strong>{0} commit</strong>.': 'This pull requests will consist of <strong>{0} commit</strong>.',
111 112 'This pull requests will consist of <strong>{0} commits</strong>.': 'This pull requests will consist of <strong>{0} commits</strong>.',
112 113 'Toggle Wide Mode diff': 'Toggle Wide Mode diff',
113 114 'Unfollow': 'Unfollow',
114 115 'Unwatch': 'Unwatch',
116 'Updated Comment': 'Updated Comment',
115 117 'Updating...': 'Updating...',
116 118 'User `{0}` already in reviewers': 'User `{0}` already in reviewers',
117 119 'User `{0}` not allowed to be a reviewer': 'User `{0}` not allowed to be a reviewer',
118 120 'Watch': 'Watch',
119 121 'Yes, delete comment #{0}!': 'Yes, delete comment #{0}!',
120 122 'You can only select {0} item': 'You can only select {0} item',
121 123 'You can only select {0} items': 'You can only select {0} items',
122 124 'activated': 'activated',
123 125 'added manually by "{0}"': 'added manually by "{0}"',
124 126 'date not in future': 'date not in future',
125 127 'disabled': 'Désactivé',
126 128 'enabled': 'Activé',
127 129 'file': 'file',
128 130 'files': 'Fichiers',
129 131 'go to numeric commit': 'go to numeric commit',
130 132 'in {0}': 'in {0}',
131 133 'in {0} and {1}': 'in {0} and {1}',
132 134 'in {0}, {1}': 'in {0}, {1}',
133 135 'just now': 'à l’instant',
134 136 'loading...': 'Chargement…',
135 137 'member of "{0}"': 'member of "{0}"',
136 138 'no commits': 'no commits',
137 139 'not active': 'not active',
138 140 'resolve comment': 'resolve comment',
139 141 'showing {0} out of {1} commit': 'showing {0} out of {1} commit',
140 142 'showing {0} out of {1} commits': 'showing {0} out of {1} commits',
141 143 'specify commit': 'Spécifier un commit',
142 144 'truncated result': 'truncated result',
143 145 'truncated results': 'truncated results',
144 146 '{0} ({1} inactive) of {2} user groups ({3} inactive)': '{0} ({1} inactive) of {2} user groups ({3} inactive)',
145 147 '{0} ({1} inactive) of {2} users ({3} inactive)': '{0} ({1} inactive) of {2} users ({3} inactive)',
146 148 '{0} active out of {1} users': '{0} active out of {1} users',
147 149 '{0} ago': '{0} ago',
148 150 '{0} and {1}': '{0} and {1}',
149 151 '{0} and {1} ago': '{0} and {1} ago',
150 152 '{0} day': '{0} day',
151 153 '{0} days': '{0} jours',
152 154 '{0} hour': '{0} hour',
153 155 '{0} hours': '{0} heures',
154 156 '{0} min': '{0} min',
155 157 '{0} month': '{0} month',
156 158 '{0} months': '{0} mois',
157 159 '{0} of {1} repositories': '{0} of {1} repositories',
158 160 '{0} of {1} repository groups': '{0} of {1} repository groups',
159 161 '{0} out of {1} ssh keys': '{0} out of {1} ssh keys',
160 162 '{0} out of {1} users': '{0} out of {1} users',
161 163 '{0} repositories': '{0} repositories',
162 164 '{0} repository groups': '{0} repository groups',
163 165 '{0} results are available, use up and down arrow keys to navigate.': '{0} results are available, use up and down arrow keys to navigate.',
164 166 '{0} sec': '{0} sec',
165 167 '{0} user groups ({1} inactive)': '{0} user groups ({1} inactive)',
166 168 '{0} users ({1} inactive)': '{0} users ({1} inactive)',
167 169 '{0} year': '{0} year',
168 170 '{0} years': '{0} années',
169 171 '{0}, {1} ago': '{0}, {1} ago'
170 172 }; No newline at end of file
@@ -1,170 +1,172 b''
1 1 /* This file is automatically generated. DO NOT change it manually.
2 2 * If this file needs to be modified, edit
3 3 * rhodecode/utils/file_generation/js_i18n_data.py
4 4 * and run the script invoke -r scripts/ generate.js-i18n .
5 5 */
6 6 //JS translations map
7 7 var _TM = {
8 8 '(from usergroup {0})': '(from usergroup {0})',
9 9 '<strong>{0} file</strong> changed, ': '<strong>{0} file</strong> changed, ',
10 10 '<strong>{0} files</strong> changed, ': '<strong>{0} files</strong> changed, ',
11 11 'Add another comment': 'Aggiungi un altro commento',
12 12 'Adding new reviewers is forbidden.': 'Adding new reviewers is forbidden.',
13 13 'Ajax Request Error': 'Ajax Request Error',
14 14 'All Authors': 'All Authors',
15 15 'All individual reviewers must vote.': 'All individual reviewers must vote.',
16 16 'All reviewers must vote.': 'All reviewers must vote.',
17 17 'Are you sure to close this pull request without merging?': 'Are you sure to close this pull request without merging?',
18 18 'At least {0} reviewer must vote.': 'At least {0} reviewer must vote.',
19 19 'At least {0} reviewers must vote.': 'At least {0} reviewers must vote.',
20 20 'Authentication Token': 'Authentication Token',
21 21 'Author is not allowed to be a reviewer.': 'Author is not allowed to be a reviewer.',
22 22 'Changed files': 'Changed files',
23 23 'Close': 'Close',
24 24 'Collapse all files': 'Collapse all files',
25 25 'Collapse {0} commit': 'Collapse {0} commit',
26 26 'Collapse {0} commits': 'Collapse {0} commits',
27 'Comment body was not changed.': 'Comment body was not changed.',
27 28 'Comment text will be set automatically based on currently selected status ({0}) ...': 'Comment text will be set automatically based on currently selected status ({0}) ...',
28 29 'Commit Authors are not allowed to be a reviewer.': 'Commit Authors are not allowed to be a reviewer.',
29 30 'Context file: ': 'Context file: ',
30 31 'Delete': 'Elimina',
31 32 'Delete this comment?': 'Delete this comment?',
32 33 'Diff to Commit ': 'Diff to Commit ',
33 34 'Error during search operation': 'Error during search operation',
34 35 'Expand all files': 'Expand all files',
35 36 'Expand {0} commit': 'Expand {0} commit',
36 37 'Expand {0} commits': 'Expand {0} commits',
37 38 'Fetching repository state failed. Error code: {0} {1}. Try <a href="{2}">refreshing</a> this page.': 'Fetching repository state failed. Error code: {0} {1}. Try <a href="{2}">refreshing</a> this page.',
38 39 'Fetching repository state failed. Error code: {0} {1}. Try refreshing this page.': 'Fetching repository state failed. Error code: {0} {1}. Try refreshing this page.',
39 40 'File `{0}` has a newer version available, or has been removed. Click {1} to see the latest version.': 'File `{0}` has a newer version available, or has been removed. Click {1} to see the latest version.',
40 41 'Follow': 'Segui',
41 42 'Force updating...': 'Force updating...',
42 43 'Hide full context diff': 'Hide full context diff',
43 44 'Hide whitespace changes': 'Hide whitespace changes',
44 45 'Invite reviewers to this discussion': 'Invite reviewers to this discussion',
45 46 'Leave a comment on line {0}.': 'Leave a comment on line {0}.',
46 47 'Leave a comment, or click resolve button to resolve TODO comment #{0}': 'Leave a comment, or click resolve button to resolve TODO comment #{0}',
47 48 'Leave a resolution comment, or click resolve button to resolve TODO comment #{0}': 'Leave a resolution comment, or click resolve button to resolve TODO comment #{0}',
48 49 'Lifetime': 'a vita',
49 50 'Loading ...': 'Caricamento ...',
50 51 'Loading diff ...': 'Loading diff ...',
51 52 'Loading failed': 'Loading failed',
52 53 'Loading more results...': 'Loading more results...',
53 54 'Loading...': 'Loading...',
54 55 'No bookmarks available yet.': 'No bookmarks available yet.',
55 56 'No branches available yet.': 'No branches available yet.',
56 57 'No forks available yet.': 'No forks available yet.',
57 58 'No gists available yet.': 'No gists available yet.',
58 59 'No matches found': 'Nessuna corrispondenza',
59 60 'No matching files': 'Nessuna corrispondenza tra i file',
60 61 'No pull requests available yet.': 'No pull requests available yet.',
61 62 'No repositories available yet.': 'No repositories available yet.',
62 63 'No repositories present.': 'No repositories present.',
63 64 'No repository groups available yet.': 'No repository groups available yet.',
64 65 'No repository groups present.': 'No repository groups present.',
65 66 'No results': 'Nessun risultato',
66 67 'No ssh keys available yet.': 'No ssh keys available yet.',
67 68 'No tags available yet.': 'No tags available yet.',
68 69 'No user groups available yet.': 'No user groups available yet.',
69 70 'No users available yet.': 'No users available yet.',
70 71 'Not Reviewed': 'Non Revisionato',
71 72 'Note Comment': 'Note Comment',
72 73 'One result is available, press enter to select it.': 'One result is available, press enter to select it.',
73 74 'Open new pull request': 'Apri una richiesta PULL',
74 75 'Open new pull request for selected commit': 'Open new pull request for selected commit',
75 76 'Please delete {0} character': 'Please delete {0} character',
76 77 'Please delete {0} characters': 'Please delete {0} characters',
77 78 'Please enter {0} or more character': 'Please enter {0} or more character',
78 79 'Please enter {0} or more characters': 'Please enter {0} or more characters',
79 80 'Please wait creating pull request...': 'Please wait creating pull request...',
80 81 'Reviewers picked from source code changes.': 'Reviewers picked from source code changes.',
81 82 'Saving...': 'Saving...',
82 83 'Searching...': 'Searching...',
83 84 'Selection link': 'Collegamento selezione',
84 85 'Send': 'Invia',
85 86 'Set status to Approved': 'Set status to Approved',
86 87 'Set status to Rejected': 'Set status to Rejected',
87 88 'Show': 'Show',
88 89 'Show at Commit ': 'Show at Commit ',
89 90 'Show commit range {0} ... {1}': 'Show commit range {0} ... {1}',
90 91 'Show full context diff': 'Show full context diff',
91 92 'Show more': 'Mostra ancora',
92 93 'Show selected commit __S': 'Show selected commit __S',
93 94 'Show selected commits __S ... __E': 'Show selected commits __S ... __E',
94 95 'Show this authentication token?': 'Show this authentication token?',
95 96 'Show whitespace changes': 'Show whitespace changes',
96 97 'Specified expiration date': 'Specified expiration date',
97 98 'Start following this repository': 'Inizia a seguire il repository',
98 99 'Started watching this repository': 'Started watching this repository',
99 100 'Status Review': 'Status Review',
100 101 'Stop following this repository': 'Smetti di seguire il repository',
101 102 'Stopped watching this repository': 'Stopped watching this repository',
102 103 'Submitting...': 'Inoltro...',
103 104 'Switch to chat': 'Switch to chat',
104 105 'Switch to comment': 'Switch to comment',
105 106 'TODO comment': 'TODO comment',
106 107 'TODO from comment {0} was fixed.': 'TODO from comment {0} was fixed.',
107 108 'There are currently no open pull requests requiring your participation.': 'Al momento non ci sono richieste di PULL che richiedono il tuo intervento',
108 109 'There is a later version of file tree available. Click {0} to create a file at the latest tree.': 'There is a later version of file tree available. Click {0} to create a file at the latest tree.',
109 110 'There is an existing path `{0}` at this commit.': 'There is an existing path `{0}` at this commit.',
110 111 'This pull requests will consist of <strong>{0} commit</strong>.': 'This pull requests will consist of <strong>{0} commit</strong>.',
111 112 'This pull requests will consist of <strong>{0} commits</strong>.': 'This pull requests will consist of <strong>{0} commits</strong>.',
112 113 'Toggle Wide Mode diff': 'Toggle Wide Mode diff',
113 114 'Unfollow': 'Smetti di seguire',
114 115 'Unwatch': 'Unwatch',
116 'Updated Comment': 'Updated Comment',
115 117 'Updating...': 'Updating...',
116 118 'User `{0}` already in reviewers': 'User `{0}` already in reviewers',
117 119 'User `{0}` not allowed to be a reviewer': 'User `{0}` not allowed to be a reviewer',
118 120 'Watch': 'Watch',
119 121 'Yes, delete comment #{0}!': 'Yes, delete comment #{0}!',
120 122 'You can only select {0} item': 'You can only select {0} item',
121 123 'You can only select {0} items': 'You can only select {0} items',
122 124 'activated': 'activated',
123 125 'added manually by "{0}"': 'added manually by "{0}"',
124 126 'date not in future': 'date not in future',
125 127 'disabled': 'disabilitato',
126 128 'enabled': 'abilitato',
127 129 'file': 'file',
128 130 'files': 'i file',
129 131 'go to numeric commit': 'go to numeric commit',
130 132 'in {0}': 'in {0}',
131 133 'in {0} and {1}': 'in {0} and {1}',
132 134 'in {0}, {1}': 'in {0}, {1}',
133 135 'just now': 'proprio ora',
134 136 'loading...': 'loading...',
135 137 'member of "{0}"': 'member of "{0}"',
136 138 'no commits': 'no commits',
137 139 'not active': 'not active',
138 140 'resolve comment': 'resolve comment',
139 141 'showing {0} out of {1} commit': 'showing {0} out of {1} commit',
140 142 'showing {0} out of {1} commits': 'showing {0} out of {1} commits',
141 143 'specify commit': 'specify commit',
142 144 'truncated result': 'truncated result',
143 145 'truncated results': 'truncated results',
144 146 '{0} ({1} inactive) of {2} user groups ({3} inactive)': '{0} ({1} inactive) of {2} user groups ({3} inactive)',
145 147 '{0} ({1} inactive) of {2} users ({3} inactive)': '{0} ({1} inactive) of {2} users ({3} inactive)',
146 148 '{0} active out of {1} users': '{0} active out of {1} users',
147 149 '{0} ago': '{0} ago',
148 150 '{0} and {1}': '{0} and {1}',
149 151 '{0} and {1} ago': '{0} and {1} ago',
150 152 '{0} day': '{0} day',
151 153 '{0} days': '{0} days',
152 154 '{0} hour': '{0} hour',
153 155 '{0} hours': '{0} hours',
154 156 '{0} min': '{0} min',
155 157 '{0} month': '{0} month',
156 158 '{0} months': '{0} months',
157 159 '{0} of {1} repositories': '{0} of {1} repositories',
158 160 '{0} of {1} repository groups': '{0} of {1} repository groups',
159 161 '{0} out of {1} ssh keys': '{0} out of {1} ssh keys',
160 162 '{0} out of {1} users': '{0} out of {1} users',
161 163 '{0} repositories': '{0} repositories',
162 164 '{0} repository groups': '{0} repository groups',
163 165 '{0} results are available, use up and down arrow keys to navigate.': '{0} results are available, use up and down arrow keys to navigate.',
164 166 '{0} sec': '{0} sec',
165 167 '{0} user groups ({1} inactive)': '{0} user groups ({1} inactive)',
166 168 '{0} users ({1} inactive)': '{0} users ({1} inactive)',
167 169 '{0} year': '{0} year',
168 170 '{0} years': '{0} years',
169 171 '{0}, {1} ago': '{0}, {1} ago'
170 172 }; No newline at end of file
@@ -1,170 +1,172 b''
1 1 /* This file is automatically generated. DO NOT change it manually.
2 2 * If this file needs to be modified, edit
3 3 * rhodecode/utils/file_generation/js_i18n_data.py
4 4 * and run the script invoke -r scripts/ generate.js-i18n .
5 5 */
6 6 //JS translations map
7 7 var _TM = {
8 8 '(from usergroup {0})': '(from usergroup {0})',
9 9 '<strong>{0} file</strong> changed, ': '<strong>{0} file</strong> changed, ',
10 10 '<strong>{0} files</strong> changed, ': '<strong>{0} files</strong> changed, ',
11 11 'Add another comment': '別のコメントを追加',
12 12 'Adding new reviewers is forbidden.': 'Adding new reviewers is forbidden.',
13 13 'Ajax Request Error': 'Ajax Request Error',
14 14 'All Authors': 'All Authors',
15 15 'All individual reviewers must vote.': 'All individual reviewers must vote.',
16 16 'All reviewers must vote.': 'All reviewers must vote.',
17 17 'Are you sure to close this pull request without merging?': 'Are you sure to close this pull request without merging?',
18 18 'At least {0} reviewer must vote.': 'At least {0} reviewer must vote.',
19 19 'At least {0} reviewers must vote.': 'At least {0} reviewers must vote.',
20 20 'Authentication Token': 'Authentication Token',
21 21 'Author is not allowed to be a reviewer.': 'Author is not allowed to be a reviewer.',
22 22 'Changed files': 'Changed files',
23 23 'Close': 'Close',
24 24 'Collapse all files': 'Collapse all files',
25 25 'Collapse {0} commit': 'Collapse {0} commit',
26 26 'Collapse {0} commits': 'Collapse {0} commits',
27 'Comment body was not changed.': 'Comment body was not changed.',
27 28 'Comment text will be set automatically based on currently selected status ({0}) ...': '選択したステータス ({0}) を元にコメントが自動的に設定されます...',
28 29 'Commit Authors are not allowed to be a reviewer.': 'Commit Authors are not allowed to be a reviewer.',
29 30 'Context file: ': 'Context file: ',
30 31 'Delete': '削除',
31 32 'Delete this comment?': 'Delete this comment?',
32 33 'Diff to Commit ': 'Diff to Commit ',
33 34 'Error during search operation': 'Error during search operation',
34 35 'Expand all files': 'Expand all files',
35 36 'Expand {0} commit': 'Expand {0} commit',
36 37 'Expand {0} commits': 'Expand {0} commits',
37 38 'Fetching repository state failed. Error code: {0} {1}. Try <a href="{2}">refreshing</a> this page.': 'Fetching repository state failed. Error code: {0} {1}. Try <a href="{2}">refreshing</a> this page.',
38 39 'Fetching repository state failed. Error code: {0} {1}. Try refreshing this page.': 'Fetching repository state failed. Error code: {0} {1}. Try refreshing this page.',
39 40 'File `{0}` has a newer version available, or has been removed. Click {1} to see the latest version.': 'File `{0}` has a newer version available, or has been removed. Click {1} to see the latest version.',
40 41 'Follow': 'フォロー',
41 42 'Force updating...': 'Force updating...',
42 43 'Hide full context diff': 'Hide full context diff',
43 44 'Hide whitespace changes': 'Hide whitespace changes',
44 45 'Invite reviewers to this discussion': 'Invite reviewers to this discussion',
45 46 'Leave a comment on line {0}.': 'Leave a comment on line {0}.',
46 47 'Leave a comment, or click resolve button to resolve TODO comment #{0}': 'Leave a comment, or click resolve button to resolve TODO comment #{0}',
47 48 'Leave a resolution comment, or click resolve button to resolve TODO comment #{0}': 'Leave a resolution comment, or click resolve button to resolve TODO comment #{0}',
48 49 'Lifetime': '有効期間',
49 50 'Loading ...': '読み込み中...',
50 51 'Loading diff ...': 'Loading diff ...',
51 52 'Loading failed': '読み込み失敗',
52 53 'Loading more results...': '結果を読み込み中...',
53 54 'Loading...': 'Loading...',
54 55 'No bookmarks available yet.': 'まだブックマークがありません。',
55 56 'No branches available yet.': 'まだブランチがありません。',
56 57 'No forks available yet.': 'No forks available yet.',
57 58 'No gists available yet.': 'まだ Gist がありません。',
58 59 'No matches found': '一致するものが見つかりません',
59 60 'No matching files': 'マッチするファイルはありません',
60 61 'No pull requests available yet.': 'まだプルリクエストがありません。',
61 62 'No repositories available yet.': 'まだリポジトリがありません。',
62 63 'No repositories present.': 'No repositories present.',
63 64 'No repository groups available yet.': 'まだリポジトリグループがありません。',
64 65 'No repository groups present.': 'No repository groups present.',
65 66 'No results': '結果がありません',
66 67 'No ssh keys available yet.': 'No ssh keys available yet.',
67 68 'No tags available yet.': 'まだタグがありません。',
68 69 'No user groups available yet.': 'まだユーザーグループがありません。',
69 70 'No users available yet.': 'まだユーザーがいません。',
70 71 'Not Reviewed': '未レビュー',
71 72 'Note Comment': 'Note Comment',
72 73 'One result is available, press enter to select it.': '1 件の結果があります。 Enter で選択できます。',
73 74 'Open new pull request': '新しいプルリクエストを作成',
74 75 'Open new pull request for selected commit': '選択したコミットから新しいプルリクエストを作成',
75 76 'Please delete {0} character': '{0} 文字削除してください',
76 77 'Please delete {0} characters': '{0} 文字削除してください',
77 78 'Please enter {0} or more character': '{0} 文字以上入力してください',
78 79 'Please enter {0} or more characters': '{0} 文字以上入力してください',
79 80 'Please wait creating pull request...': 'Please wait creating pull request...',
80 81 'Reviewers picked from source code changes.': 'Reviewers picked from source code changes.',
81 82 'Saving...': 'Saving...',
82 83 'Searching...': '検索中...',
83 84 'Selection link': 'セレクション・リンク',
84 85 'Send': '送信',
85 86 'Set status to Approved': 'ステータスを承認にする',
86 87 'Set status to Rejected': 'ステータスを拒否にする',
87 88 'Show': 'Show',
88 89 'Show at Commit ': 'Show at Commit ',
89 90 'Show commit range {0} ... {1}': 'Show commit range {0} ... {1}',
90 91 'Show full context diff': 'Show full context diff',
91 92 'Show more': 'もっと表示',
92 93 'Show selected commit __S': 'Show selected commit __S',
93 94 'Show selected commits __S ... __E': 'Show selected commits __S ... __E',
94 95 'Show this authentication token?': 'Show this authentication token?',
95 96 'Show whitespace changes': 'Show whitespace changes',
96 97 'Specified expiration date': 'Specified expiration date',
97 98 'Start following this repository': 'このリポジトリのフォローする',
98 99 'Started watching this repository': 'Started watching this repository',
99 100 'Status Review': 'ステータスレビュー',
100 101 'Stop following this repository': 'このリポジトリのフォローをやめる',
101 102 'Stopped watching this repository': 'Stopped watching this repository',
102 103 'Submitting...': '送信中...',
103 104 'Switch to chat': 'Switch to chat',
104 105 'Switch to comment': 'Switch to comment',
105 106 'TODO comment': 'TODO comment',
106 107 'TODO from comment {0} was fixed.': 'TODO from comment {0} was fixed.',
107 108 'There are currently no open pull requests requiring your participation.': 'There are currently no open pull requests requiring your participation.',
108 109 'There is a later version of file tree available. Click {0} to create a file at the latest tree.': 'There is a later version of file tree available. Click {0} to create a file at the latest tree.',
109 110 'There is an existing path `{0}` at this commit.': 'There is an existing path `{0}` at this commit.',
110 111 'This pull requests will consist of <strong>{0} commit</strong>.': 'This pull requests will consist of <strong>{0} commit</strong>.',
111 112 'This pull requests will consist of <strong>{0} commits</strong>.': 'This pull requests will consist of <strong>{0} commits</strong>.',
112 113 'Toggle Wide Mode diff': 'Toggle Wide Mode diff',
113 114 'Unfollow': 'アンフォロー',
114 115 'Unwatch': 'Unwatch',
116 'Updated Comment': 'Updated Comment',
115 117 'Updating...': 'Updating...',
116 118 'User `{0}` already in reviewers': 'User `{0}` already in reviewers',
117 119 'User `{0}` not allowed to be a reviewer': 'User `{0}` not allowed to be a reviewer',
118 120 'Watch': 'Watch',
119 121 'Yes, delete comment #{0}!': 'Yes, delete comment #{0}!',
120 122 'You can only select {0} item': '{0} 件のみ選択できます',
121 123 'You can only select {0} items': '{0} 件のみ選択できます',
122 124 'activated': 'activated',
123 125 'added manually by "{0}"': 'added manually by "{0}"',
124 126 'date not in future': 'date not in future',
125 127 'disabled': '無効',
126 128 'enabled': '有効',
127 129 'file': 'ファイル',
128 130 'files': 'ファイル',
129 131 'go to numeric commit': 'go to numeric commit',
130 132 'in {0}': 'in {0}',
131 133 'in {0} and {1}': 'in {0} and {1}',
132 134 'in {0}, {1}': 'in {0}, {1}',
133 135 'just now': 'たったいま',
134 136 'loading...': '読み込み中...',
135 137 'member of "{0}"': 'member of "{0}"',
136 138 'no commits': 'no commits',
137 139 'not active': 'not active',
138 140 'resolve comment': 'resolve comment',
139 141 'showing {0} out of {1} commit': 'showing {0} out of {1} commit',
140 142 'showing {0} out of {1} commits': 'showing {0} out of {1} commits',
141 143 'specify commit': 'specify commit',
142 144 'truncated result': '省略された結果',
143 145 'truncated results': '省略された結果',
144 146 '{0} ({1} inactive) of {2} user groups ({3} inactive)': '{0} ({1} inactive) of {2} user groups ({3} inactive)',
145 147 '{0} ({1} inactive) of {2} users ({3} inactive)': '{0} ({1} inactive) of {2} users ({3} inactive)',
146 148 '{0} active out of {1} users': '{0} active out of {1} users',
147 149 '{0} ago': '{0} 前',
148 150 '{0} and {1}': '{0} and {1}',
149 151 '{0} and {1} ago': '{0} and {1} ago',
150 152 '{0} day': '{0} 日',
151 153 '{0} days': '{0} days',
152 154 '{0} hour': '{0} 時間',
153 155 '{0} hours': '{0} hours',
154 156 '{0} min': '{0} 分',
155 157 '{0} month': '{0} ヶ月',
156 158 '{0} months': '{0} months',
157 159 '{0} of {1} repositories': '{0} of {1} repositories',
158 160 '{0} of {1} repository groups': '{0} of {1} repository groups',
159 161 '{0} out of {1} ssh keys': '{0} out of {1} ssh keys',
160 162 '{0} out of {1} users': '{0} out of {1} users',
161 163 '{0} repositories': '{0} repositories',
162 164 '{0} repository groups': '{0} repository groups',
163 165 '{0} results are available, use up and down arrow keys to navigate.': '{0} 件の結果があります。矢印キーの上下で選択できます。',
164 166 '{0} sec': '{0} 秒',
165 167 '{0} user groups ({1} inactive)': '{0} user groups ({1} inactive)',
166 168 '{0} users ({1} inactive)': '{0} users ({1} inactive)',
167 169 '{0} year': '{0} 年',
168 170 '{0} years': '{0} years',
169 171 '{0}, {1} ago': '{0}, {1} ago'
170 172 }; No newline at end of file
@@ -1,163 +1,165 b''
1 1 // AUTO GENERATED FILE FOR Babel JS-GETTEXT EXTRACTORS, DO NOT CHANGE
2 2 _gettext('(from usergroup {0})');
3 3 _gettext('<strong>{0} file</strong> changed, ');
4 4 _gettext('<strong>{0} files</strong> changed, ');
5 5 _gettext('Add another comment');
6 6 _gettext('Adding new reviewers is forbidden.');
7 7 _gettext('Ajax Request Error');
8 8 _gettext('All Authors');
9 9 _gettext('All individual reviewers must vote.');
10 10 _gettext('All reviewers must vote.');
11 11 _gettext('Are you sure to close this pull request without merging?');
12 12 _gettext('At least {0} reviewer must vote.');
13 13 _gettext('At least {0} reviewers must vote.');
14 14 _gettext('Authentication Token');
15 15 _gettext('Author is not allowed to be a reviewer.');
16 16 _gettext('Changed files');
17 17 _gettext('Close');
18 18 _gettext('Collapse all files');
19 19 _gettext('Collapse {0} commit');
20 20 _gettext('Collapse {0} commits');
21 _gettext('Comment body was not changed.');
21 22 _gettext('Comment text will be set automatically based on currently selected status ({0}) ...');
22 23 _gettext('Commit Authors are not allowed to be a reviewer.');
23 24 _gettext('Context file: ');
24 25 _gettext('Delete');
25 26 _gettext('Delete this comment?');
26 27 _gettext('Diff to Commit ');
27 28 _gettext('Error during search operation');
28 29 _gettext('Expand all files');
29 30 _gettext('Expand {0} commit');
30 31 _gettext('Expand {0} commits');
31 32 _gettext('Fetching repository state failed. Error code: {0} {1}. Try <a href="{2}">refreshing</a> this page.');
32 33 _gettext('Fetching repository state failed. Error code: {0} {1}. Try refreshing this page.');
33 34 _gettext('File `{0}` has a newer version available, or has been removed. Click {1} to see the latest version.');
34 35 _gettext('Follow');
35 36 _gettext('Force updating...');
36 37 _gettext('Hide full context diff');
37 38 _gettext('Hide whitespace changes');
38 39 _gettext('Invite reviewers to this discussion');
39 40 _gettext('Leave a comment on line {0}.');
40 41 _gettext('Leave a comment, or click resolve button to resolve TODO comment #{0}');
41 42 _gettext('Leave a resolution comment, or click resolve button to resolve TODO comment #{0}');
42 43 _gettext('Lifetime');
43 44 _gettext('Loading ...');
44 45 _gettext('Loading diff ...');
45 46 _gettext('Loading failed');
46 47 _gettext('Loading more results...');
47 48 _gettext('Loading...');
48 49 _gettext('No bookmarks available yet.');
49 50 _gettext('No branches available yet.');
50 51 _gettext('No forks available yet.');
51 52 _gettext('No gists available yet.');
52 53 _gettext('No matches found');
53 54 _gettext('No matching files');
54 55 _gettext('No pull requests available yet.');
55 56 _gettext('No repositories available yet.');
56 57 _gettext('No repositories present.');
57 58 _gettext('No repository groups available yet.');
58 59 _gettext('No repository groups present.');
59 60 _gettext('No results');
60 61 _gettext('No ssh keys available yet.');
61 62 _gettext('No tags available yet.');
62 63 _gettext('No user groups available yet.');
63 64 _gettext('No users available yet.');
64 65 _gettext('Not Reviewed');
65 66 _gettext('Note Comment');
66 67 _gettext('One result is available, press enter to select it.');
67 68 _gettext('Open new pull request');
68 69 _gettext('Open new pull request for selected commit');
69 70 _gettext('Please delete {0} character');
70 71 _gettext('Please delete {0} characters');
71 72 _gettext('Please enter {0} or more character');
72 73 _gettext('Please enter {0} or more characters');
73 74 _gettext('Please wait creating pull request...');
74 75 _gettext('Reviewers picked from source code changes.');
75 76 _gettext('Saving...');
76 77 _gettext('Searching...');
77 78 _gettext('Selection link');
78 79 _gettext('Send');
79 80 _gettext('Set status to Approved');
80 81 _gettext('Set status to Rejected');
81 82 _gettext('Show');
82 83 _gettext('Show at Commit ');
83 84 _gettext('Show commit range {0} ... {1}');
84 85 _gettext('Show full context diff');
85 86 _gettext('Show more');
86 87 _gettext('Show selected commit __S');
87 88 _gettext('Show selected commits __S ... __E');
88 89 _gettext('Show this authentication token?');
89 90 _gettext('Show whitespace changes');
90 91 _gettext('Specified expiration date');
91 92 _gettext('Start following this repository');
92 93 _gettext('Started watching this repository');
93 94 _gettext('Status Review');
94 95 _gettext('Stop following this repository');
95 96 _gettext('Stopped watching this repository');
96 97 _gettext('Submitting...');
97 98 _gettext('Switch to chat');
98 99 _gettext('Switch to comment');
99 100 _gettext('TODO comment');
100 101 _gettext('TODO from comment {0} was fixed.');
101 102 _gettext('There are currently no open pull requests requiring your participation.');
102 103 _gettext('There is a later version of file tree available. Click {0} to create a file at the latest tree.');
103 104 _gettext('There is an existing path `{0}` at this commit.');
104 105 _gettext('This pull requests will consist of <strong>{0} commit</strong>.');
105 106 _gettext('This pull requests will consist of <strong>{0} commits</strong>.');
106 107 _gettext('Toggle Wide Mode diff');
107 108 _gettext('Unfollow');
108 109 _gettext('Unwatch');
110 _gettext('Updated Comment');
109 111 _gettext('Updating...');
110 112 _gettext('User `{0}` already in reviewers');
111 113 _gettext('User `{0}` not allowed to be a reviewer');
112 114 _gettext('Watch');
113 115 _gettext('Yes, delete comment #{0}!');
114 116 _gettext('You can only select {0} item');
115 117 _gettext('You can only select {0} items');
116 118 _gettext('activated');
117 119 _gettext('added manually by "{0}"');
118 120 _gettext('date not in future');
119 121 _gettext('disabled');
120 122 _gettext('enabled');
121 123 _gettext('file');
122 124 _gettext('files');
123 125 _gettext('go to numeric commit');
124 126 _gettext('in {0}');
125 127 _gettext('in {0} and {1}');
126 128 _gettext('in {0}, {1}');
127 129 _gettext('just now');
128 130 _gettext('loading...');
129 131 _gettext('member of "{0}"');
130 132 _gettext('no commits');
131 133 _gettext('not active');
132 134 _gettext('resolve comment');
133 135 _gettext('showing {0} out of {1} commit');
134 136 _gettext('showing {0} out of {1} commits');
135 137 _gettext('specify commit');
136 138 _gettext('truncated result');
137 139 _gettext('truncated results');
138 140 _gettext('{0} ({1} inactive) of {2} user groups ({3} inactive)');
139 141 _gettext('{0} ({1} inactive) of {2} users ({3} inactive)');
140 142 _gettext('{0} active out of {1} users');
141 143 _gettext('{0} ago');
142 144 _gettext('{0} and {1}');
143 145 _gettext('{0} and {1} ago');
144 146 _gettext('{0} day');
145 147 _gettext('{0} days');
146 148 _gettext('{0} hour');
147 149 _gettext('{0} hours');
148 150 _gettext('{0} min');
149 151 _gettext('{0} month');
150 152 _gettext('{0} months');
151 153 _gettext('{0} of {1} repositories');
152 154 _gettext('{0} of {1} repository groups');
153 155 _gettext('{0} out of {1} ssh keys');
154 156 _gettext('{0} out of {1} users');
155 157 _gettext('{0} repositories');
156 158 _gettext('{0} repository groups');
157 159 _gettext('{0} results are available, use up and down arrow keys to navigate.');
158 160 _gettext('{0} sec');
159 161 _gettext('{0} user groups ({1} inactive)');
160 162 _gettext('{0} users ({1} inactive)');
161 163 _gettext('{0} year');
162 164 _gettext('{0} years');
163 165 _gettext('{0}, {1} ago');
@@ -1,170 +1,172 b''
1 1 /* This file is automatically generated. DO NOT change it manually.
2 2 * If this file needs to be modified, edit
3 3 * rhodecode/utils/file_generation/js_i18n_data.py
4 4 * and run the script invoke -r scripts/ generate.js-i18n .
5 5 */
6 6 //JS translations map
7 7 var _TM = {
8 8 '(from usergroup {0})': '(from usergroup {0})',
9 9 '<strong>{0} file</strong> changed, ': '<strong>{0} file</strong> changed, ',
10 10 '<strong>{0} files</strong> changed, ': '<strong>{0} files</strong> changed, ',
11 11 'Add another comment': 'Dodaj kolejny komentarz',
12 12 'Adding new reviewers is forbidden.': 'Adding new reviewers is forbidden.',
13 13 'Ajax Request Error': 'Ajax Request Error',
14 14 'All Authors': 'All Authors',
15 15 'All individual reviewers must vote.': 'All individual reviewers must vote.',
16 16 'All reviewers must vote.': 'All reviewers must vote.',
17 17 'Are you sure to close this pull request without merging?': 'Are you sure to close this pull request without merging?',
18 18 'At least {0} reviewer must vote.': 'At least {0} reviewer must vote.',
19 19 'At least {0} reviewers must vote.': 'At least {0} reviewers must vote.',
20 20 'Authentication Token': 'Authentication Token',
21 21 'Author is not allowed to be a reviewer.': 'Author is not allowed to be a reviewer.',
22 22 'Changed files': 'Changed files',
23 23 'Close': 'Zamknij',
24 24 'Collapse all files': 'Collapse all files',
25 25 'Collapse {0} commit': 'Collapse {0} commit',
26 26 'Collapse {0} commits': 'Collapse {0} commits',
27 'Comment body was not changed.': 'Comment body was not changed.',
27 28 'Comment text will be set automatically based on currently selected status ({0}) ...': 'Comment text will be set automatically based on currently selected status ({0}) ...',
28 29 'Commit Authors are not allowed to be a reviewer.': 'Commit Authors are not allowed to be a reviewer.',
29 30 'Context file: ': 'Context file: ',
30 31 'Delete': 'Usuń',
31 32 'Delete this comment?': 'Delete this comment?',
32 33 'Diff to Commit ': 'Diff to Commit ',
33 34 'Error during search operation': 'Error during search operation',
34 35 'Expand all files': 'Expand all files',
35 36 'Expand {0} commit': 'Expand {0} commit',
36 37 'Expand {0} commits': 'Expand {0} commits',
37 38 'Fetching repository state failed. Error code: {0} {1}. Try <a href="{2}">refreshing</a> this page.': 'Fetching repository state failed. Error code: {0} {1}. Try <a href="{2}">refreshing</a> this page.',
38 39 'Fetching repository state failed. Error code: {0} {1}. Try refreshing this page.': 'Fetching repository state failed. Error code: {0} {1}. Try refreshing this page.',
39 40 'File `{0}` has a newer version available, or has been removed. Click {1} to see the latest version.': 'File `{0}` has a newer version available, or has been removed. Click {1} to see the latest version.',
40 41 'Follow': 'Obserwuj',
41 42 'Force updating...': 'Force updating...',
42 43 'Hide full context diff': 'Hide full context diff',
43 44 'Hide whitespace changes': 'Hide whitespace changes',
44 45 'Invite reviewers to this discussion': 'Invite reviewers to this discussion',
45 46 'Leave a comment on line {0}.': 'Leave a comment on line {0}.',
46 47 'Leave a comment, or click resolve button to resolve TODO comment #{0}': 'Leave a comment, or click resolve button to resolve TODO comment #{0}',
47 48 'Leave a resolution comment, or click resolve button to resolve TODO comment #{0}': 'Leave a resolution comment, or click resolve button to resolve TODO comment #{0}',
48 49 'Lifetime': 'Czas życia',
49 50 'Loading ...': 'Ładuję...',
50 51 'Loading diff ...': 'Loading diff ...',
51 52 'Loading failed': 'Loading failed',
52 53 'Loading more results...': 'Loading more results...',
53 54 'Loading...': 'Loading...',
54 55 'No bookmarks available yet.': 'No bookmarks available yet.',
55 56 'No branches available yet.': 'No branches available yet.',
56 57 'No forks available yet.': 'No forks available yet.',
57 58 'No gists available yet.': 'No gists available yet.',
58 59 'No matches found': 'No matches found',
59 60 'No matching files': 'Nie ma plików pasujących',
60 61 'No pull requests available yet.': 'No pull requests available yet.',
61 62 'No repositories available yet.': 'No repositories available yet.',
62 63 'No repositories present.': 'No repositories present.',
63 64 'No repository groups available yet.': 'No repository groups available yet.',
64 65 'No repository groups present.': 'No repository groups present.',
65 66 'No results': 'No results',
66 67 'No ssh keys available yet.': 'No ssh keys available yet.',
67 68 'No tags available yet.': 'No tags available yet.',
68 69 'No user groups available yet.': 'No user groups available yet.',
69 70 'No users available yet.': 'No users available yet.',
70 71 'Not Reviewed': 'Brak Korekty',
71 72 'Note Comment': 'Note Comment',
72 73 'One result is available, press enter to select it.': 'One result is available, press enter to select it.',
73 74 'Open new pull request': 'Otwórz nową prośbę o połączenie gałęzi',
74 75 'Open new pull request for selected commit': 'Open new pull request for selected commit',
75 76 'Please delete {0} character': 'Please delete {0} character',
76 77 'Please delete {0} characters': 'Please delete {0} characters',
77 78 'Please enter {0} or more character': 'Please enter {0} or more character',
78 79 'Please enter {0} or more characters': 'Please enter {0} or more characters',
79 80 'Please wait creating pull request...': 'Please wait creating pull request...',
80 81 'Reviewers picked from source code changes.': 'Reviewers picked from source code changes.',
81 82 'Saving...': 'Saving...',
82 83 'Searching...': 'Searching...',
83 84 'Selection link': 'Wybór linku',
84 85 'Send': 'Wyślij',
85 86 'Set status to Approved': 'Set status to Approved',
86 87 'Set status to Rejected': 'Set status to Rejected',
87 88 'Show': 'Show',
88 89 'Show at Commit ': 'Show at Commit ',
89 90 'Show commit range {0} ... {1}': 'Show commit range {0} ... {1}',
90 91 'Show full context diff': 'Show full context diff',
91 92 'Show more': 'Pokaż więcej',
92 93 'Show selected commit __S': 'Show selected commit __S',
93 94 'Show selected commits __S ... __E': 'Show selected commits __S ... __E',
94 95 'Show this authentication token?': 'Show this authentication token?',
95 96 'Show whitespace changes': 'Show whitespace changes',
96 97 'Specified expiration date': 'Specified expiration date',
97 98 'Start following this repository': 'Zacznij obserwację tego repozytorium',
98 99 'Started watching this repository': 'Started watching this repository',
99 100 'Status Review': 'Status Review',
100 101 'Stop following this repository': 'Zakończyć obserwację tego repozytorium',
101 102 'Stopped watching this repository': 'Stopped watching this repository',
102 103 'Submitting...': 'Przesyłanie...',
103 104 'Switch to chat': 'Switch to chat',
104 105 'Switch to comment': 'Switch to comment',
105 106 'TODO comment': 'TODO comment',
106 107 'TODO from comment {0} was fixed.': 'TODO from comment {0} was fixed.',
107 108 'There are currently no open pull requests requiring your participation.': 'There are currently no open pull requests requiring your participation.',
108 109 'There is a later version of file tree available. Click {0} to create a file at the latest tree.': 'There is a later version of file tree available. Click {0} to create a file at the latest tree.',
109 110 'There is an existing path `{0}` at this commit.': 'There is an existing path `{0}` at this commit.',
110 111 'This pull requests will consist of <strong>{0} commit</strong>.': 'This pull requests will consist of <strong>{0} commit</strong>.',
111 112 'This pull requests will consist of <strong>{0} commits</strong>.': 'This pull requests will consist of <strong>{0} commits</strong>.',
112 113 'Toggle Wide Mode diff': 'Toggle Wide Mode diff',
113 114 'Unfollow': 'Nie obserwuj',
114 115 'Unwatch': 'Unwatch',
116 'Updated Comment': 'Updated Comment',
115 117 'Updating...': 'Updating...',
116 118 'User `{0}` already in reviewers': 'User `{0}` already in reviewers',
117 119 'User `{0}` not allowed to be a reviewer': 'User `{0}` not allowed to be a reviewer',
118 120 'Watch': 'Watch',
119 121 'Yes, delete comment #{0}!': 'Yes, delete comment #{0}!',
120 122 'You can only select {0} item': 'You can only select {0} item',
121 123 'You can only select {0} items': 'You can only select {0} items',
122 124 'activated': 'activated',
123 125 'added manually by "{0}"': 'added manually by "{0}"',
124 126 'date not in future': 'date not in future',
125 127 'disabled': 'disabled',
126 128 'enabled': 'enabled',
127 129 'file': 'file',
128 130 'files': 'pliki',
129 131 'go to numeric commit': 'go to numeric commit',
130 132 'in {0}': 'in {0}',
131 133 'in {0} and {1}': 'in {0} and {1}',
132 134 'in {0}, {1}': 'in {0}, {1}',
133 135 'just now': 'przed chwilą',
134 136 'loading...': 'wczytywanie...',
135 137 'member of "{0}"': 'member of "{0}"',
136 138 'no commits': 'no commits',
137 139 'not active': 'not active',
138 140 'resolve comment': 'resolve comment',
139 141 'showing {0} out of {1} commit': 'showing {0} out of {1} commit',
140 142 'showing {0} out of {1} commits': 'showing {0} out of {1} commits',
141 143 'specify commit': 'specify commit',
142 144 'truncated result': 'truncated result',
143 145 'truncated results': 'truncated results',
144 146 '{0} ({1} inactive) of {2} user groups ({3} inactive)': '{0} ({1} inactive) of {2} user groups ({3} inactive)',
145 147 '{0} ({1} inactive) of {2} users ({3} inactive)': '{0} ({1} inactive) of {2} users ({3} inactive)',
146 148 '{0} active out of {1} users': '{0} aktywnych z {1} użytkowników',
147 149 '{0} ago': '{0} ago',
148 150 '{0} and {1}': '{0} and {1}',
149 151 '{0} and {1} ago': '{0} and {1} ago',
150 152 '{0} day': '{0} day',
151 153 '{0} days': '{0} days',
152 154 '{0} hour': '{0} hour',
153 155 '{0} hours': '{0} hours',
154 156 '{0} min': '{0} min',
155 157 '{0} month': '{0} month',
156 158 '{0} months': '{0} months',
157 159 '{0} of {1} repositories': '{0} of {1} repositories',
158 160 '{0} of {1} repository groups': '{0} of {1} repository groups',
159 161 '{0} out of {1} ssh keys': '{0} out of {1} ssh keys',
160 162 '{0} out of {1} users': '{0} out of {1} users',
161 163 '{0} repositories': '{0} repositories',
162 164 '{0} repository groups': '{0} repository groups',
163 165 '{0} results are available, use up and down arrow keys to navigate.': '{0} results are available, use up and down arrow keys to navigate.',
164 166 '{0} sec': '{0} sec',
165 167 '{0} user groups ({1} inactive)': '{0} user groups ({1} inactive)',
166 168 '{0} users ({1} inactive)': '{0} users ({1} inactive)',
167 169 '{0} year': '{0} year',
168 170 '{0} years': '{0} years',
169 171 '{0}, {1} ago': '{0}, {1} ago'
170 172 }; No newline at end of file
@@ -1,170 +1,172 b''
1 1 /* This file is automatically generated. DO NOT change it manually.
2 2 * If this file needs to be modified, edit
3 3 * rhodecode/utils/file_generation/js_i18n_data.py
4 4 * and run the script invoke -r scripts/ generate.js-i18n .
5 5 */
6 6 //JS translations map
7 7 var _TM = {
8 8 '(from usergroup {0})': '(from usergroup {0})',
9 9 '<strong>{0} file</strong> changed, ': '<strong>{0} file</strong> changed, ',
10 10 '<strong>{0} files</strong> changed, ': '<strong>{0} files</strong> changed, ',
11 11 'Add another comment': 'Adicionar outro comentário',
12 12 'Adding new reviewers is forbidden.': 'Adding new reviewers is forbidden.',
13 13 'Ajax Request Error': 'Ajax Request Error',
14 14 'All Authors': 'All Authors',
15 15 'All individual reviewers must vote.': 'All individual reviewers must vote.',
16 16 'All reviewers must vote.': 'All reviewers must vote.',
17 17 'Are you sure to close this pull request without merging?': 'Are you sure to close this pull request without merging?',
18 18 'At least {0} reviewer must vote.': 'At least {0} reviewer must vote.',
19 19 'At least {0} reviewers must vote.': 'At least {0} reviewers must vote.',
20 20 'Authentication Token': 'Authentication Token',
21 21 'Author is not allowed to be a reviewer.': 'Author is not allowed to be a reviewer.',
22 22 'Changed files': 'Changed files',
23 23 'Close': 'Close',
24 24 'Collapse all files': 'Collapse all files',
25 25 'Collapse {0} commit': 'Collapse {0} commit',
26 26 'Collapse {0} commits': 'Collapse {0} commits',
27 'Comment body was not changed.': 'Comment body was not changed.',
27 28 'Comment text will be set automatically based on currently selected status ({0}) ...': 'Comment text will be set automatically based on currently selected status ({0}) ...',
28 29 'Commit Authors are not allowed to be a reviewer.': 'Commit Authors are not allowed to be a reviewer.',
29 30 'Context file: ': 'Context file: ',
30 31 'Delete': 'Excluir',
31 32 'Delete this comment?': 'Delete this comment?',
32 33 'Diff to Commit ': 'Diff to Commit ',
33 34 'Error during search operation': 'Error during search operation',
34 35 'Expand all files': 'Expand all files',
35 36 'Expand {0} commit': 'Expand {0} commit',
36 37 'Expand {0} commits': 'Expand {0} commits',
37 38 'Fetching repository state failed. Error code: {0} {1}. Try <a href="{2}">refreshing</a> this page.': 'Fetching repository state failed. Error code: {0} {1}. Try <a href="{2}">refreshing</a> this page.',
38 39 'Fetching repository state failed. Error code: {0} {1}. Try refreshing this page.': 'Fetching repository state failed. Error code: {0} {1}. Try refreshing this page.',
39 40 'File `{0}` has a newer version available, or has been removed. Click {1} to see the latest version.': 'File `{0}` has a newer version available, or has been removed. Click {1} to see the latest version.',
40 41 'Follow': 'Seguir',
41 42 'Force updating...': 'Force updating...',
42 43 'Hide full context diff': 'Hide full context diff',
43 44 'Hide whitespace changes': 'Hide whitespace changes',
44 45 'Invite reviewers to this discussion': 'Invite reviewers to this discussion',
45 46 'Leave a comment on line {0}.': 'Leave a comment on line {0}.',
46 47 'Leave a comment, or click resolve button to resolve TODO comment #{0}': 'Leave a comment, or click resolve button to resolve TODO comment #{0}',
47 48 'Leave a resolution comment, or click resolve button to resolve TODO comment #{0}': 'Leave a resolution comment, or click resolve button to resolve TODO comment #{0}',
48 49 'Lifetime': 'Tempo de Vida',
49 50 'Loading ...': 'Carregando...',
50 51 'Loading diff ...': 'Loading diff ...',
51 52 'Loading failed': 'Loading failed',
52 53 'Loading more results...': 'Loading more results...',
53 54 'Loading...': 'Loading...',
54 55 'No bookmarks available yet.': 'No bookmarks available yet.',
55 56 'No branches available yet.': 'No branches available yet.',
56 57 'No forks available yet.': 'No forks available yet.',
57 58 'No gists available yet.': 'No gists available yet.',
58 59 'No matches found': 'No matches found',
59 60 'No matching files': 'Nenhum arquivo encontrado',
60 61 'No pull requests available yet.': 'No pull requests available yet.',
61 62 'No repositories available yet.': 'No repositories available yet.',
62 63 'No repositories present.': 'No repositories present.',
63 64 'No repository groups available yet.': 'No repository groups available yet.',
64 65 'No repository groups present.': 'No repository groups present.',
65 66 'No results': 'No results',
66 67 'No ssh keys available yet.': 'No ssh keys available yet.',
67 68 'No tags available yet.': 'No tags available yet.',
68 69 'No user groups available yet.': 'No user groups available yet.',
69 70 'No users available yet.': 'No users available yet.',
70 71 'Not Reviewed': 'Não Revisado',
71 72 'Note Comment': 'Note Comment',
72 73 'One result is available, press enter to select it.': 'One result is available, press enter to select it.',
73 74 'Open new pull request': 'Crie novo pull request',
74 75 'Open new pull request for selected commit': 'Open new pull request for selected commit',
75 76 'Please delete {0} character': 'Please delete {0} character',
76 77 'Please delete {0} characters': 'Please delete {0} characters',
77 78 'Please enter {0} or more character': 'Please enter {0} or more character',
78 79 'Please enter {0} or more characters': 'Please enter {0} or more characters',
79 80 'Please wait creating pull request...': 'Please wait creating pull request...',
80 81 'Reviewers picked from source code changes.': 'Reviewers picked from source code changes.',
81 82 'Saving...': 'Saving...',
82 83 'Searching...': 'Searching...',
83 84 'Selection link': 'Link da seleção',
84 85 'Send': 'Enviar',
85 86 'Set status to Approved': 'Set status to Approved',
86 87 'Set status to Rejected': 'Set status to Rejected',
87 88 'Show': 'Show',
88 89 'Show at Commit ': 'Show at Commit ',
89 90 'Show commit range {0} ... {1}': 'Show commit range {0} ... {1}',
90 91 'Show full context diff': 'Show full context diff',
91 92 'Show more': 'Mostrar mais',
92 93 'Show selected commit __S': 'Show selected commit __S',
93 94 'Show selected commits __S ... __E': 'Show selected commits __S ... __E',
94 95 'Show this authentication token?': 'Show this authentication token?',
95 96 'Show whitespace changes': 'Show whitespace changes',
96 97 'Specified expiration date': 'Specified expiration date',
97 98 'Start following this repository': 'Passar a seguir este repositório',
98 99 'Started watching this repository': 'Started watching this repository',
99 100 'Status Review': 'Status Review',
100 101 'Stop following this repository': 'Parar de seguir este repositório',
101 102 'Stopped watching this repository': 'Stopped watching this repository',
102 103 'Submitting...': 'Enviando...',
103 104 'Switch to chat': 'Switch to chat',
104 105 'Switch to comment': 'Switch to comment',
105 106 'TODO comment': 'TODO comment',
106 107 'TODO from comment {0} was fixed.': 'TODO from comment {0} was fixed.',
107 108 'There are currently no open pull requests requiring your participation.': 'There are currently no open pull requests requiring your participation.',
108 109 'There is a later version of file tree available. Click {0} to create a file at the latest tree.': 'There is a later version of file tree available. Click {0} to create a file at the latest tree.',
109 110 'There is an existing path `{0}` at this commit.': 'There is an existing path `{0}` at this commit.',
110 111 'This pull requests will consist of <strong>{0} commit</strong>.': 'This pull requests will consist of <strong>{0} commit</strong>.',
111 112 'This pull requests will consist of <strong>{0} commits</strong>.': 'This pull requests will consist of <strong>{0} commits</strong>.',
112 113 'Toggle Wide Mode diff': 'Toggle Wide Mode diff',
113 114 'Unfollow': 'Parar de seguir',
114 115 'Unwatch': 'Unwatch',
116 'Updated Comment': 'Updated Comment',
115 117 'Updating...': 'Updating...',
116 118 'User `{0}` already in reviewers': 'User `{0}` already in reviewers',
117 119 'User `{0}` not allowed to be a reviewer': 'User `{0}` not allowed to be a reviewer',
118 120 'Watch': 'Watch',
119 121 'Yes, delete comment #{0}!': 'Yes, delete comment #{0}!',
120 122 'You can only select {0} item': 'You can only select {0} item',
121 123 'You can only select {0} items': 'You can only select {0} items',
122 124 'activated': 'activated',
123 125 'added manually by "{0}"': 'added manually by "{0}"',
124 126 'date not in future': 'date not in future',
125 127 'disabled': 'desabilitado',
126 128 'enabled': 'enabled',
127 129 'file': 'file',
128 130 'files': 'arquivos',
129 131 'go to numeric commit': 'go to numeric commit',
130 132 'in {0}': 'in {0}',
131 133 'in {0} and {1}': 'in {0} and {1}',
132 134 'in {0}, {1}': 'in {0}, {1}',
133 135 'just now': 'agora há pouco',
134 136 'loading...': 'loading...',
135 137 'member of "{0}"': 'member of "{0}"',
136 138 'no commits': 'no commits',
137 139 'not active': 'not active',
138 140 'resolve comment': 'resolve comment',
139 141 'showing {0} out of {1} commit': 'showing {0} out of {1} commit',
140 142 'showing {0} out of {1} commits': 'showing {0} out of {1} commits',
141 143 'specify commit': 'specify commit',
142 144 'truncated result': 'truncated result',
143 145 'truncated results': 'truncated results',
144 146 '{0} ({1} inactive) of {2} user groups ({3} inactive)': '{0} ({1} inactive) of {2} user groups ({3} inactive)',
145 147 '{0} ({1} inactive) of {2} users ({3} inactive)': '{0} ({1} inactive) of {2} users ({3} inactive)',
146 148 '{0} active out of {1} users': '{0} active out of {1} users',
147 149 '{0} ago': '{0} ago',
148 150 '{0} and {1}': '{0} and {1}',
149 151 '{0} and {1} ago': '{0} and {1} ago',
150 152 '{0} day': '{0} day',
151 153 '{0} days': '{0} days',
152 154 '{0} hour': '{0} hour',
153 155 '{0} hours': '{0} hours',
154 156 '{0} min': '{0} min',
155 157 '{0} month': '{0} month',
156 158 '{0} months': '{0} months',
157 159 '{0} of {1} repositories': '{0} of {1} repositories',
158 160 '{0} of {1} repository groups': '{0} of {1} repository groups',
159 161 '{0} out of {1} ssh keys': '{0} out of {1} ssh keys',
160 162 '{0} out of {1} users': '{0} out of {1} users',
161 163 '{0} repositories': '{0} repositories',
162 164 '{0} repository groups': '{0} repository groups',
163 165 '{0} results are available, use up and down arrow keys to navigate.': '{0} results are available, use up and down arrow keys to navigate.',
164 166 '{0} sec': '{0} sec',
165 167 '{0} user groups ({1} inactive)': '{0} user groups ({1} inactive)',
166 168 '{0} users ({1} inactive)': '{0} users ({1} inactive)',
167 169 '{0} year': '{0} year',
168 170 '{0} years': '{0} years',
169 171 '{0}, {1} ago': '{0}, {1} ago'
170 172 }; No newline at end of file
@@ -1,170 +1,172 b''
1 1 /* This file is automatically generated. DO NOT change it manually.
2 2 * If this file needs to be modified, edit
3 3 * rhodecode/utils/file_generation/js_i18n_data.py
4 4 * and run the script invoke -r scripts/ generate.js-i18n .
5 5 */
6 6 //JS translations map
7 7 var _TM = {
8 8 '(from usergroup {0})': '(from usergroup {0})',
9 9 '<strong>{0} file</strong> changed, ': '<strong>{0} file</strong> changed, ',
10 10 '<strong>{0} files</strong> changed, ': '<strong>{0} files</strong> changed, ',
11 11 'Add another comment': 'Добавить другой комментарий',
12 12 'Adding new reviewers is forbidden.': 'Adding new reviewers is forbidden.',
13 13 'Ajax Request Error': 'Ajax Request Error',
14 14 'All Authors': 'All Authors',
15 15 'All individual reviewers must vote.': 'All individual reviewers must vote.',
16 16 'All reviewers must vote.': 'All reviewers must vote.',
17 17 'Are you sure to close this pull request without merging?': 'Are you sure to close this pull request without merging?',
18 18 'At least {0} reviewer must vote.': 'At least {0} reviewer must vote.',
19 19 'At least {0} reviewers must vote.': 'At least {0} reviewers must vote.',
20 20 'Authentication Token': 'Authentication Token',
21 21 'Author is not allowed to be a reviewer.': 'Author is not allowed to be a reviewer.',
22 22 'Changed files': 'Changed files',
23 23 'Close': 'Close',
24 24 'Collapse all files': 'Collapse all files',
25 25 'Collapse {0} commit': 'Collapse {0} commit',
26 26 'Collapse {0} commits': 'Collapse {0} commits',
27 'Comment body was not changed.': 'Comment body was not changed.',
27 28 'Comment text will be set automatically based on currently selected status ({0}) ...': 'Comment text will be set automatically based on currently selected status ({0}) ...',
28 29 'Commit Authors are not allowed to be a reviewer.': 'Commit Authors are not allowed to be a reviewer.',
29 30 'Context file: ': 'Context file: ',
30 31 'Delete': 'Удалить',
31 32 'Delete this comment?': 'Delete this comment?',
32 33 'Diff to Commit ': 'Diff to Commit ',
33 34 'Error during search operation': 'Error during search operation',
34 35 'Expand all files': 'Expand all files',
35 36 'Expand {0} commit': 'Expand {0} commit',
36 37 'Expand {0} commits': 'Expand {0} commits',
37 38 'Fetching repository state failed. Error code: {0} {1}. Try <a href="{2}">refreshing</a> this page.': 'Fetching repository state failed. Error code: {0} {1}. Try <a href="{2}">refreshing</a> this page.',
38 39 'Fetching repository state failed. Error code: {0} {1}. Try refreshing this page.': 'Fetching repository state failed. Error code: {0} {1}. Try refreshing this page.',
39 40 'File `{0}` has a newer version available, or has been removed. Click {1} to see the latest version.': 'File `{0}` has a newer version available, or has been removed. Click {1} to see the latest version.',
40 41 'Follow': 'Наблюдать',
41 42 'Force updating...': 'Force updating...',
42 43 'Hide full context diff': 'Hide full context diff',
43 44 'Hide whitespace changes': 'Hide whitespace changes',
44 45 'Invite reviewers to this discussion': 'Invite reviewers to this discussion',
45 46 'Leave a comment on line {0}.': 'Leave a comment on line {0}.',
46 47 'Leave a comment, or click resolve button to resolve TODO comment #{0}': 'Leave a comment, or click resolve button to resolve TODO comment #{0}',
47 48 'Leave a resolution comment, or click resolve button to resolve TODO comment #{0}': 'Leave a resolution comment, or click resolve button to resolve TODO comment #{0}',
48 49 'Lifetime': 'Срок',
49 50 'Loading ...': 'Загрузка...',
50 51 'Loading diff ...': 'Loading diff ...',
51 52 'Loading failed': 'Loading failed',
52 53 'Loading more results...': 'Loading more results...',
53 54 'Loading...': 'Loading...',
54 55 'No bookmarks available yet.': 'No bookmarks available yet.',
55 56 'No branches available yet.': 'No branches available yet.',
56 57 'No forks available yet.': 'No forks available yet.',
57 58 'No gists available yet.': 'No gists available yet.',
58 59 'No matches found': 'No matches found',
59 60 'No matching files': 'Нет совпадений',
60 61 'No pull requests available yet.': 'No pull requests available yet.',
61 62 'No repositories available yet.': 'No repositories available yet.',
62 63 'No repositories present.': 'No repositories present.',
63 64 'No repository groups available yet.': 'No repository groups available yet.',
64 65 'No repository groups present.': 'No repository groups present.',
65 66 'No results': 'No results',
66 67 'No ssh keys available yet.': 'No ssh keys available yet.',
67 68 'No tags available yet.': 'No tags available yet.',
68 69 'No user groups available yet.': 'No user groups available yet.',
69 70 'No users available yet.': 'No users available yet.',
70 71 'Not Reviewed': 'Не просмотрено',
71 72 'Note Comment': 'Note Comment',
72 73 'One result is available, press enter to select it.': 'One result is available, press enter to select it.',
73 74 'Open new pull request': 'Создать новый pull запрос',
74 75 'Open new pull request for selected commit': 'Open new pull request for selected commit',
75 76 'Please delete {0} character': 'Please delete {0} character',
76 77 'Please delete {0} characters': 'Please delete {0} characters',
77 78 'Please enter {0} or more character': 'Please enter {0} or more character',
78 79 'Please enter {0} or more characters': 'Please enter {0} or more characters',
79 80 'Please wait creating pull request...': 'Please wait creating pull request...',
80 81 'Reviewers picked from source code changes.': 'Reviewers picked from source code changes.',
81 82 'Saving...': 'Saving...',
82 83 'Searching...': 'Searching...',
83 84 'Selection link': 'Ссылка выбора',
84 85 'Send': 'Отправить',
85 86 'Set status to Approved': 'Set status to Approved',
86 87 'Set status to Rejected': 'Set status to Rejected',
87 88 'Show': 'Show',
88 89 'Show at Commit ': 'Show at Commit ',
89 90 'Show commit range {0} ... {1}': 'Show commit range {0} ... {1}',
90 91 'Show full context diff': 'Show full context diff',
91 92 'Show more': 'Показать еще',
92 93 'Show selected commit __S': 'Show selected commit __S',
93 94 'Show selected commits __S ... __E': 'Show selected commits __S ... __E',
94 95 'Show this authentication token?': 'Show this authentication token?',
95 96 'Show whitespace changes': 'Show whitespace changes',
96 97 'Specified expiration date': 'Specified expiration date',
97 98 'Start following this repository': 'Наблюдать за репозиторием',
98 99 'Started watching this repository': 'Started watching this repository',
99 100 'Status Review': 'Status Review',
100 101 'Stop following this repository': 'Отменить наблюдение за репозиторием',
101 102 'Stopped watching this repository': 'Stopped watching this repository',
102 103 'Submitting...': 'Применение...',
103 104 'Switch to chat': 'Switch to chat',
104 105 'Switch to comment': 'Switch to comment',
105 106 'TODO comment': 'TODO comment',
106 107 'TODO from comment {0} was fixed.': 'TODO from comment {0} was fixed.',
107 108 'There are currently no open pull requests requiring your participation.': 'There are currently no open pull requests requiring your participation.',
108 109 'There is a later version of file tree available. Click {0} to create a file at the latest tree.': 'There is a later version of file tree available. Click {0} to create a file at the latest tree.',
109 110 'There is an existing path `{0}` at this commit.': 'There is an existing path `{0}` at this commit.',
110 111 'This pull requests will consist of <strong>{0} commit</strong>.': 'This pull requests will consist of <strong>{0} commit</strong>.',
111 112 'This pull requests will consist of <strong>{0} commits</strong>.': 'This pull requests will consist of <strong>{0} commits</strong>.',
112 113 'Toggle Wide Mode diff': 'Toggle Wide Mode diff',
113 114 'Unfollow': 'Не наблюдать',
114 115 'Unwatch': 'Unwatch',
116 'Updated Comment': 'Updated Comment',
115 117 'Updating...': 'Updating...',
116 118 'User `{0}` already in reviewers': 'User `{0}` already in reviewers',
117 119 'User `{0}` not allowed to be a reviewer': 'User `{0}` not allowed to be a reviewer',
118 120 'Watch': 'Watch',
119 121 'Yes, delete comment #{0}!': 'Yes, delete comment #{0}!',
120 122 'You can only select {0} item': 'You can only select {0} item',
121 123 'You can only select {0} items': 'You can only select {0} items',
122 124 'activated': 'activated',
123 125 'added manually by "{0}"': 'added manually by "{0}"',
124 126 'date not in future': 'date not in future',
125 127 'disabled': 'отключено',
126 128 'enabled': 'enabled',
127 129 'file': 'file',
128 130 'files': 'файлы',
129 131 'go to numeric commit': 'go to numeric commit',
130 132 'in {0}': 'in {0}',
131 133 'in {0} and {1}': 'in {0} and {1}',
132 134 'in {0}, {1}': 'in {0}, {1}',
133 135 'just now': 'прямо сейчас',
134 136 'loading...': 'загрузка...',
135 137 'member of "{0}"': 'member of "{0}"',
136 138 'no commits': 'no commits',
137 139 'not active': 'not active',
138 140 'resolve comment': 'resolve comment',
139 141 'showing {0} out of {1} commit': 'showing {0} out of {1} commit',
140 142 'showing {0} out of {1} commits': 'showing {0} out of {1} commits',
141 143 'specify commit': 'specify commit',
142 144 'truncated result': 'truncated result',
143 145 'truncated results': 'truncated results',
144 146 '{0} ({1} inactive) of {2} user groups ({3} inactive)': '{0} ({1} inactive) of {2} user groups ({3} inactive)',
145 147 '{0} ({1} inactive) of {2} users ({3} inactive)': '{0} ({1} inactive) of {2} users ({3} inactive)',
146 148 '{0} active out of {1} users': '{0} active out of {1} users',
147 149 '{0} ago': '{0} ago',
148 150 '{0} and {1}': '{0} and {1}',
149 151 '{0} and {1} ago': '{0} and {1} ago',
150 152 '{0} day': '{0} day',
151 153 '{0} days': '{0} days',
152 154 '{0} hour': '{0} hour',
153 155 '{0} hours': '{0} hours',
154 156 '{0} min': '{0} min',
155 157 '{0} month': '{0} month',
156 158 '{0} months': '{0} months',
157 159 '{0} of {1} repositories': '{0} of {1} repositories',
158 160 '{0} of {1} repository groups': '{0} of {1} repository groups',
159 161 '{0} out of {1} ssh keys': '{0} out of {1} ssh keys',
160 162 '{0} out of {1} users': '{0} out of {1} users',
161 163 '{0} repositories': '{0} repositories',
162 164 '{0} repository groups': '{0} repository groups',
163 165 '{0} results are available, use up and down arrow keys to navigate.': '{0} results are available, use up and down arrow keys to navigate.',
164 166 '{0} sec': '{0} sec',
165 167 '{0} user groups ({1} inactive)': '{0} user groups ({1} inactive)',
166 168 '{0} users ({1} inactive)': '{0} users ({1} inactive)',
167 169 '{0} year': '{0} year',
168 170 '{0} years': '{0} years',
169 171 '{0}, {1} ago': '{0}, {1} ago'
170 172 }; No newline at end of file
@@ -1,170 +1,172 b''
1 1 /* This file is automatically generated. DO NOT change it manually.
2 2 * If this file needs to be modified, edit
3 3 * rhodecode/utils/file_generation/js_i18n_data.py
4 4 * and run the script invoke -r scripts/ generate.js-i18n .
5 5 */
6 6 //JS translations map
7 7 var _TM = {
8 8 '(from usergroup {0})': '(from usergroup {0})',
9 9 '<strong>{0} file</strong> changed, ': '<strong>{0} file</strong> changed, ',
10 10 '<strong>{0} files</strong> changed, ': '<strong>{0} files</strong> changed, ',
11 11 'Add another comment': 'Add another comment',
12 12 'Adding new reviewers is forbidden.': 'Adding new reviewers is forbidden.',
13 13 'Ajax Request Error': 'Ajax Request Error',
14 14 'All Authors': 'All Authors',
15 15 'All individual reviewers must vote.': 'All individual reviewers must vote.',
16 16 'All reviewers must vote.': 'All reviewers must vote.',
17 17 'Are you sure to close this pull request without merging?': 'Are you sure to close this pull request without merging?',
18 18 'At least {0} reviewer must vote.': 'At least {0} reviewer must vote.',
19 19 'At least {0} reviewers must vote.': 'At least {0} reviewers must vote.',
20 20 'Authentication Token': 'Authentication Token',
21 21 'Author is not allowed to be a reviewer.': 'Author is not allowed to be a reviewer.',
22 22 'Changed files': 'Changed files',
23 23 'Close': 'Close',
24 24 'Collapse all files': 'Collapse all files',
25 25 'Collapse {0} commit': 'Collapse {0} commit',
26 26 'Collapse {0} commits': 'Collapse {0} commits',
27 'Comment body was not changed.': 'Comment body was not changed.',
27 28 'Comment text will be set automatically based on currently selected status ({0}) ...': 'Comment text will be set automatically based on currently selected status ({0}) ...',
28 29 'Commit Authors are not allowed to be a reviewer.': 'Commit Authors are not allowed to be a reviewer.',
29 30 'Context file: ': 'Context file: ',
30 31 'Delete': '删除',
31 32 'Delete this comment?': 'Delete this comment?',
32 33 'Diff to Commit ': 'Diff to Commit ',
33 34 'Error during search operation': 'Error during search operation',
34 35 'Expand all files': 'Expand all files',
35 36 'Expand {0} commit': 'Expand {0} commit',
36 37 'Expand {0} commits': 'Expand {0} commits',
37 38 'Fetching repository state failed. Error code: {0} {1}. Try <a href="{2}">refreshing</a> this page.': 'Fetching repository state failed. Error code: {0} {1}. Try <a href="{2}">refreshing</a> this page.',
38 39 'Fetching repository state failed. Error code: {0} {1}. Try refreshing this page.': 'Fetching repository state failed. Error code: {0} {1}. Try refreshing this page.',
39 40 'File `{0}` has a newer version available, or has been removed. Click {1} to see the latest version.': 'File `{0}` has a newer version available, or has been removed. Click {1} to see the latest version.',
40 41 'Follow': 'Follow',
41 42 'Force updating...': 'Force updating...',
42 43 'Hide full context diff': 'Hide full context diff',
43 44 'Hide whitespace changes': 'Hide whitespace changes',
44 45 'Invite reviewers to this discussion': 'Invite reviewers to this discussion',
45 46 'Leave a comment on line {0}.': 'Leave a comment on line {0}.',
46 47 'Leave a comment, or click resolve button to resolve TODO comment #{0}': 'Leave a comment, or click resolve button to resolve TODO comment #{0}',
47 48 'Leave a resolution comment, or click resolve button to resolve TODO comment #{0}': 'Leave a resolution comment, or click resolve button to resolve TODO comment #{0}',
48 49 'Lifetime': '终身',
49 50 'Loading ...': 'Loading ...',
50 51 'Loading diff ...': 'Loading diff ...',
51 52 'Loading failed': 'Loading failed',
52 53 'Loading more results...': 'Loading more results...',
53 54 'Loading...': 'Loading...',
54 55 'No bookmarks available yet.': 'No bookmarks available yet.',
55 56 'No branches available yet.': 'No branches available yet.',
56 57 'No forks available yet.': 'No forks available yet.',
57 58 'No gists available yet.': 'No gists available yet.',
58 59 'No matches found': 'No matches found',
59 60 'No matching files': 'No matching files',
60 61 'No pull requests available yet.': 'No pull requests available yet.',
61 62 'No repositories available yet.': 'No repositories available yet.',
62 63 'No repositories present.': 'No repositories present.',
63 64 'No repository groups available yet.': 'No repository groups available yet.',
64 65 'No repository groups present.': 'No repository groups present.',
65 66 'No results': 'No results',
66 67 'No ssh keys available yet.': 'No ssh keys available yet.',
67 68 'No tags available yet.': 'No tags available yet.',
68 69 'No user groups available yet.': 'No user groups available yet.',
69 70 'No users available yet.': 'No users available yet.',
70 71 'Not Reviewed': '未检视',
71 72 'Note Comment': 'Note Comment',
72 73 'One result is available, press enter to select it.': 'One result is available, press enter to select it.',
73 74 'Open new pull request': '新建拉取请求',
74 75 'Open new pull request for selected commit': 'Open new pull request for selected commit',
75 76 'Please delete {0} character': 'Please delete {0} character',
76 77 'Please delete {0} characters': 'Please delete {0} characters',
77 78 'Please enter {0} or more character': 'Please enter {0} or more character',
78 79 'Please enter {0} or more characters': 'Please enter {0} or more characters',
79 80 'Please wait creating pull request...': 'Please wait creating pull request...',
80 81 'Reviewers picked from source code changes.': 'Reviewers picked from source code changes.',
81 82 'Saving...': 'Saving...',
82 83 'Searching...': 'Searching...',
83 84 'Selection link': '选择链接',
84 85 'Send': '发送',
85 86 'Set status to Approved': 'Set status to Approved',
86 87 'Set status to Rejected': 'Set status to Rejected',
87 88 'Show': 'Show',
88 89 'Show at Commit ': 'Show at Commit ',
89 90 'Show commit range {0} ... {1}': 'Show commit range {0} ... {1}',
90 91 'Show full context diff': 'Show full context diff',
91 92 'Show more': 'Show more',
92 93 'Show selected commit __S': 'Show selected commit __S',
93 94 'Show selected commits __S ... __E': 'Show selected commits __S ... __E',
94 95 'Show this authentication token?': 'Show this authentication token?',
95 96 'Show whitespace changes': 'Show whitespace changes',
96 97 'Specified expiration date': 'Specified expiration date',
97 98 'Start following this repository': '开始关注该版本库',
98 99 'Started watching this repository': 'Started watching this repository',
99 100 'Status Review': 'Status Review',
100 101 'Stop following this repository': '停止关注该版本库',
101 102 'Stopped watching this repository': 'Stopped watching this repository',
102 103 'Submitting...': '提交中……',
103 104 'Switch to chat': 'Switch to chat',
104 105 'Switch to comment': 'Switch to comment',
105 106 'TODO comment': 'TODO comment',
106 107 'TODO from comment {0} was fixed.': 'TODO from comment {0} was fixed.',
107 108 'There are currently no open pull requests requiring your participation.': 'There are currently no open pull requests requiring your participation.',
108 109 'There is a later version of file tree available. Click {0} to create a file at the latest tree.': 'There is a later version of file tree available. Click {0} to create a file at the latest tree.',
109 110 'There is an existing path `{0}` at this commit.': 'There is an existing path `{0}` at this commit.',
110 111 'This pull requests will consist of <strong>{0} commit</strong>.': 'This pull requests will consist of <strong>{0} commit</strong>.',
111 112 'This pull requests will consist of <strong>{0} commits</strong>.': 'This pull requests will consist of <strong>{0} commits</strong>.',
112 113 'Toggle Wide Mode diff': 'Toggle Wide Mode diff',
113 114 'Unfollow': 'Unfollow',
114 115 'Unwatch': 'Unwatch',
116 'Updated Comment': 'Updated Comment',
115 117 'Updating...': 'Updating...',
116 118 'User `{0}` already in reviewers': 'User `{0}` already in reviewers',
117 119 'User `{0}` not allowed to be a reviewer': 'User `{0}` not allowed to be a reviewer',
118 120 'Watch': 'Watch',
119 121 'Yes, delete comment #{0}!': 'Yes, delete comment #{0}!',
120 122 'You can only select {0} item': 'You can only select {0} item',
121 123 'You can only select {0} items': 'You can only select {0} items',
122 124 'activated': 'activated',
123 125 'added manually by "{0}"': 'added manually by "{0}"',
124 126 'date not in future': 'date not in future',
125 127 'disabled': '禁用',
126 128 'enabled': 'enabled',
127 129 'file': 'file',
128 130 'files': '文件',
129 131 'go to numeric commit': 'go to numeric commit',
130 132 'in {0}': 'in {0}',
131 133 'in {0} and {1}': 'in {0} and {1}',
132 134 'in {0}, {1}': 'in {0}, {1}',
133 135 'just now': '刚刚',
134 136 'loading...': 'loading...',
135 137 'member of "{0}"': 'member of "{0}"',
136 138 'no commits': 'no commits',
137 139 'not active': 'not active',
138 140 'resolve comment': 'resolve comment',
139 141 'showing {0} out of {1} commit': 'showing {0} out of {1} commit',
140 142 'showing {0} out of {1} commits': 'showing {0} out of {1} commits',
141 143 'specify commit': 'specify commit',
142 144 'truncated result': 'truncated result',
143 145 'truncated results': 'truncated results',
144 146 '{0} ({1} inactive) of {2} user groups ({3} inactive)': '{0} ({1} inactive) of {2} user groups ({3} inactive)',
145 147 '{0} ({1} inactive) of {2} users ({3} inactive)': '{0} ({1} inactive) of {2} users ({3} inactive)',
146 148 '{0} active out of {1} users': '{0} active out of {1} users',
147 149 '{0} ago': '{0} ago',
148 150 '{0} and {1}': '{0} and {1}',
149 151 '{0} and {1} ago': '{0} and {1} ago',
150 152 '{0} day': '{0} day',
151 153 '{0} days': '{0} days',
152 154 '{0} hour': '{0} hour',
153 155 '{0} hours': '{0} hours',
154 156 '{0} min': '{0} min',
155 157 '{0} month': '{0} month',
156 158 '{0} months': '{0} months',
157 159 '{0} of {1} repositories': '{0} of {1} repositories',
158 160 '{0} of {1} repository groups': '{0} of {1} repository groups',
159 161 '{0} out of {1} ssh keys': '{0} out of {1} ssh keys',
160 162 '{0} out of {1} users': '{0} out of {1} users',
161 163 '{0} repositories': '{0} repositories',
162 164 '{0} repository groups': '{0} repository groups',
163 165 '{0} results are available, use up and down arrow keys to navigate.': '{0} results are available, use up and down arrow keys to navigate.',
164 166 '{0} sec': '{0} sec',
165 167 '{0} user groups ({1} inactive)': '{0} user groups ({1} inactive)',
166 168 '{0} users ({1} inactive)': '{0} users ({1} inactive)',
167 169 '{0} year': '{0} year',
168 170 '{0} years': '{0} years',
169 171 '{0}, {1} ago': '{0}, {1} ago'
170 172 }; No newline at end of file
@@ -1,245 +1,245 b''
1 1 <%namespace name="base" file="/base/base.mako"/>
2 2
3 3 <div class="panel panel-default">
4 4 <div class="panel-heading">
5 5 <h3 class="panel-title">${_('Repository Access Permissions')}</h3>
6 6 </div>
7 7 <div class="panel-body">
8 8 ${h.secure_form(h.route_path('edit_repo_perms', repo_name=c.repo_name), request=request)}
9 9 <table id="permissions_manage" class="rctable permissions">
10 10 <tr>
11 11 <th class="td-radio">${_('None')}</th>
12 12 <th class="td-radio">${_('Read')}</th>
13 13 <th class="td-radio">${_('Write')}</th>
14 14 <th class="td-radio">${_('Admin')}</th>
15 15 <th class="td-owner">${_('User/User Group')}</th>
16 16 <th class="td-action"></th>
17 17 <th class="td-action"></th>
18 18 </tr>
19 19 ## USERS
20 20 %for _user in c.rhodecode_db_repo.permissions():
21 21 %if getattr(_user, 'admin_row', None) or getattr(_user, 'owner_row', None):
22 22 <tr class="perm_admin_row">
23 23 <td class="td-radio">${h.radio('admin_perm_%s' % _user.user_id,'repository.none', disabled="disabled")}</td>
24 24 <td class="td-radio">${h.radio('admin_perm_%s' % _user.user_id,'repository.read', disabled="disabled")}</td>
25 25 <td class="td-radio">${h.radio('admin_perm_%s' % _user.user_id,'repository.write', disabled="disabled")}</td>
26 26 <td class="td-radio">${h.radio('admin_perm_%s' % _user.user_id,'repository.admin', 'repository.admin', disabled="disabled")}</td>
27 27 <td class="td-user">
28 28 ${base.gravatar(_user.email, 16, user=_user, tooltip=True)}
29 29 ${h.link_to_user(_user.username)}
30 30 %if getattr(_user, 'admin_row', None):
31 31 (${_('super-admin')})
32 32 %endif
33 33 %if getattr(_user, 'owner_row', None):
34 34 (${_('owner')})
35 35 %endif
36 36 </td>
37 37 <td></td>
38 38 <td class="quick_repo_menu">
39 39 % if c.rhodecode_user.is_admin:
40 40 <i class="icon-more"></i>
41 41 <div class="menu_items_container" style="display: none;">
42 42 <ul class="menu_items">
43 43 <li>
44 44 ${h.link_to('show permissions', h.route_path('edit_user_perms_summary', user_id=_user.user_id, _anchor='repositories-permissions'))}
45 45 </li>
46 46 </ul>
47 47 </div>
48 48 % endif
49 49 </td>
50 50 </tr>
51 51 %elif _user.username == h.DEFAULT_USER and c.rhodecode_db_repo.private:
52 52 <tr>
53 53 <td colspan="4">
54 54 <span class="private_repo_msg">
55 55 <strong title="${h.tooltip(_user.permission)}">${_('private repository')}</strong>
56 56 </span>
57 57 </td>
58 58 <td class="private_repo_msg">
59 59 ${base.gravatar(h.DEFAULT_USER_EMAIL, 16)}
60 60 ${h.DEFAULT_USER} - ${_('only users/user groups explicitly added here will have access')}</td>
61 61 <td class="td-action">
62 62 <span class="noselect tooltip btn btn-link btn-default" onclick="setPrivateRepo(this, false); return false" title="${_('Private repositories are only visible to people explicitly added as collaborators. Default permissions wont apply')}">
63 63 ${_('un-set private mode')}
64 64 </span>
65 65 </td>
66 66 <td class="quick_repo_menu">
67 67 % if c.rhodecode_user.is_admin:
68 68 <i class="icon-more"></i>
69 69 <div class="menu_items_container" style="display: none;">
70 70 <ul class="menu_items">
71 71 <li>
72 72 ${h.link_to('show permissions', h.route_path('admin_permissions_overview', _anchor='repositories-permissions'))}
73 73 </li>
74 74 </ul>
75 75 </div>
76 76 % endif
77 77 </td>
78 78 </tr>
79 79 %else:
80 80 <% used_by_n_rules = len(getattr(_user, 'branch_rules', None) or []) %>
81 81 <tr>
82 82 <td class="td-radio">${h.radio('u_perm_%s' % _user.user_id,'repository.none', checked=_user.permission=='repository.none', disabled="disabled" if (used_by_n_rules and _user.username != h.DEFAULT_USER) else None)}</td>
83 83 <td class="td-radio">${h.radio('u_perm_%s' % _user.user_id,'repository.read', checked=_user.permission=='repository.read', disabled="disabled" if (used_by_n_rules and _user.username != h.DEFAULT_USER) else None)}</td>
84 84 <td class="td-radio">${h.radio('u_perm_%s' % _user.user_id,'repository.write', checked=_user.permission=='repository.write')}</td>
85 85 <td class="td-radio">${h.radio('u_perm_%s' % _user.user_id,'repository.admin', checked=_user.permission=='repository.admin')}</td>
86 86 <td class="td-user">
87 87 ${base.gravatar(_user.email, 16, user=_user, tooltip=True)}
88 88 <span class="user">
89 89 % if _user.username == h.DEFAULT_USER:
90 90 ${h.DEFAULT_USER}
91 91 % if _user.active:
92 92 <span class="user-perm-help-text"> - ${_('permission for other logged in and anonymous users')}</span>
93 93 % else:
94 94 <span class="user-perm-help-text"> - ${_('permission for other logged in users')}</span>
95 95 % endif
96 96 % else:
97 97 % if getattr(_user, 'duplicate_perm', None):
98 98 <span class="user-perm-duplicate">
99 99 ${h.link_to_user(_user.username)}
100 100 <span class="tooltip" title="${_('This entry is a duplicate, most probably left-over from previously set permission. This user has a higher permission set, so this entry is inactive. Please revoke this permission manually.')}">(${_('inactive duplicate')})
101 101 </span>
102 102 </span>
103 103 % else:
104 104 ${h.link_to_user(_user.username)}
105 105 % endif
106 106
107 107 %if getattr(_user, 'branch_rules', None):
108 108 % if used_by_n_rules == 1:
109 (${_('used by {} branch rule, requires write+ permissions').format(used_by_n_rules)})
109 (${_('used by {} branch rule, requires write or higher permissions').format(used_by_n_rules)})
110 110 % else:
111 (${_('used by {} branch rules, requires write+ permissions').format(used_by_n_rules)})
111 (${_('used by {} branch rules, requires write or higher permissions').format(used_by_n_rules)})
112 112 % endif
113 113 %endif
114 114 % endif
115 115 </span>
116 116 </td>
117 117 <td class="td-action">
118 118 %if _user.username != h.DEFAULT_USER and getattr(_user, 'branch_rules', None) is None:
119 119 <span class="btn btn-link btn-danger revoke_perm"
120 120 member="${_user.user_id}" member_type="user">
121 121 ${_('Remove')}
122 122 </span>
123 123 %elif _user.username == h.DEFAULT_USER:
124 124 <span class="noselect tooltip btn btn-link btn-default" onclick="setPrivateRepo(this, true); return false" title="${_('Private repositories are only visible to people explicitly added as collaborators. Default permissions wont apply')}">
125 125 ${_('set private mode')}
126 126 </span>
127 127 %endif
128 128 </td>
129 129 <td class="quick_repo_menu">
130 130 % if c.rhodecode_user.is_admin:
131 131 <i class="icon-more"></i>
132 132 <div class="menu_items_container" style="display: none;">
133 133 <ul class="menu_items">
134 134 <li>
135 135 % if _user.username == h.DEFAULT_USER:
136 136 ${h.link_to('show permissions', h.route_path('admin_permissions_overview', _anchor='repositories-permissions'))}
137 137 % else:
138 138 ${h.link_to('show permissions', h.route_path('edit_user_perms_summary', user_id=_user.user_id, _anchor='repositories-permissions'))}
139 139 % endif
140 140 </li>
141 141 </ul>
142 142 </div>
143 143 % endif
144 144 </td>
145 145 </tr>
146 146 %endif
147 147 %endfor
148 148
149 149 ## USER GROUPS
150 150 %for _user_group in c.rhodecode_db_repo.permission_user_groups(with_members=True):
151 151 <tr>
152 152 <td class="td-radio">${h.radio('g_perm_%s' % _user_group.users_group_id,'repository.none', checked=_user_group.permission=='repository.none')}</td>
153 153 <td class="td-radio">${h.radio('g_perm_%s' % _user_group.users_group_id,'repository.read', checked=_user_group.permission=='repository.read')}</td>
154 154 <td class="td-radio">${h.radio('g_perm_%s' % _user_group.users_group_id,'repository.write', checked=_user_group.permission=='repository.write')}</td>
155 155 <td class="td-radio">${h.radio('g_perm_%s' % _user_group.users_group_id,'repository.admin', checked=_user_group.permission=='repository.admin')}</td>
156 156 <td class="td-componentname">
157 157 ${base.user_group_icon(_user_group, tooltip=True)}
158 158 %if c.is_super_admin:
159 159 <a href="${h.route_path('edit_user_group',user_group_id=_user_group.users_group_id)}">
160 160 ${_user_group.users_group_name}
161 161 </a>
162 162 %else:
163 163 ${h.link_to_group(_user_group.users_group_name)}
164 164 %endif
165 165 (${_('members')}: ${len(_user_group.members)})
166 166 </td>
167 167 <td class="td-action">
168 168 <span class="btn btn-link btn-danger revoke_perm"
169 169 member="${_user_group.users_group_id}" member_type="user_group">
170 170 ${_('Remove')}
171 171 </span>
172 172 </td>
173 173 <td class="quick_repo_menu">
174 174 % if c.rhodecode_user.is_admin:
175 175 <i class="icon-more"></i>
176 176 <div class="menu_items_container" style="display: none;">
177 177 <ul class="menu_items">
178 178 <li>
179 179 ${h.link_to('show permissions', h.route_path('edit_user_group_perms_summary', user_group_id=_user_group.users_group_id, _anchor='repositories-permissions'))}
180 180 </li>
181 181 </ul>
182 182 </div>
183 183 % endif
184 184 </td>
185 185 </tr>
186 186 %endfor
187 187 <tr class="new_members" id="add_perm_input"></tr>
188 188
189 189 <tr>
190 190 <td></td>
191 191 <td></td>
192 192 <td></td>
193 193 <td></td>
194 194 <td></td>
195 195 <td>
196 196 <span id="add_perm" class="link">
197 197 ${_('Add user/user group')}
198 198 </span>
199 199 </td>
200 200 <td></td>
201 201 </tr>
202 202
203 203 </table>
204 204
205 205 <div class="buttons">
206 206 ${h.submit('save',_('Save'),class_="btn btn-primary")}
207 207 ${h.reset('reset',_('Reset'),class_="btn btn-danger")}
208 208 </div>
209 209 ${h.end_form()}
210 210 </div>
211 211 </div>
212 212
213 213 <script type="text/javascript">
214 214 $('#add_perm').on('click', function(e){
215 215 addNewPermInput($(this), 'repository');
216 216 });
217 217 $('.revoke_perm').on('click', function(e){
218 218 markRevokePermInput($(this), 'repository');
219 219 });
220 220 quick_repo_menu();
221 221
222 222 var setPrivateRepo = function (elem, private) {
223 223 var $elem = $(elem)
224 224 if ($elem.hasClass('disabled')) {
225 225 return
226 226 }
227 227 $elem.addClass('disabled');
228 228 $elem.css({"opacity": 0.3})
229 229
230 230 var postData = {
231 231 'csrf_token': CSRF_TOKEN,
232 232 'private': private
233 233 };
234 234
235 235 var success = function(o) {
236 236 var defaultUrl = pyroutes.url('edit_repo_perms', {"repo_name": templateContext.repo_name});
237 237 window.location = o.redirect_url || defaultUrl;
238 238 };
239 239
240 240 ajaxPOST(
241 241 pyroutes.url('edit_repo_perms_set_private', {"repo_name": templateContext.repo_name}),
242 242 postData,
243 243 success);
244 244 }
245 245 </script>
@@ -1,921 +1,921 b''
1 1 <%inherit file="/base/base.mako"/>
2 2 <%namespace name="base" file="/base/base.mako"/>
3 3 <%namespace name="dt" file="/data_table/_dt_elements.mako"/>
4 4
5 5 <%def name="title()">
6 6 ${_('{} Pull Request !{}').format(c.repo_name, c.pull_request.pull_request_id)}
7 7 %if c.rhodecode_name:
8 8 &middot; ${h.branding(c.rhodecode_name)}
9 9 %endif
10 10 </%def>
11 11
12 12 <%def name="breadcrumbs_links()">
13 13
14 14 </%def>
15 15
16 16 <%def name="menu_bar_nav()">
17 17 ${self.menu_items(active='repositories')}
18 18 </%def>
19 19
20 20 <%def name="menu_bar_subnav()">
21 21 ${self.repo_menu(active='showpullrequest')}
22 22 </%def>
23 23
24 24 <%def name="main()">
25 25
26 26 <script type="text/javascript">
27 27 // TODO: marcink switch this to pyroutes
28 28 AJAX_COMMENT_DELETE_URL = "${h.route_path('pullrequest_comment_delete',repo_name=c.repo_name,pull_request_id=c.pull_request.pull_request_id,comment_id='__COMMENT_ID__')}";
29 29 templateContext.pull_request_data.pull_request_id = ${c.pull_request.pull_request_id};
30 30 </script>
31 31
32 32 <div class="box">
33 33
34 34 <div class="box pr-summary">
35 35
36 36 <div class="summary-details block-left">
37 37 <div id="pr-title">
38 38 % if c.pull_request.is_closed():
39 39 <span class="pr-title-closed-tag tag">${_('Closed')}</span>
40 40 % endif
41 41 <input class="pr-title-input large disabled" disabled="disabled" name="pullrequest_title" type="text" value="${c.pull_request.title}">
42 42 </div>
43 43 <div id="pr-title-edit" class="input" style="display: none;">
44 44 <input class="pr-title-input large" id="pr-title-input" name="pullrequest_title" type="text" value="${c.pull_request.title}">
45 45 </div>
46 46
47 47 <% summary = lambda n:{False:'summary-short'}.get(n) %>
48 48 <div class="pr-details-title">
49 49 <div class="pull-left">
50 50 <a href="${h.route_path('pull_requests_global', pull_request_id=c.pull_request.pull_request_id)}">${_('Pull request !{}').format(c.pull_request.pull_request_id)}</a>
51 51 ${_('Created on')}
52 52 <span class="tooltip" title="${_('Last updated on')} ${h.format_date(c.pull_request.updated_on)}">${h.format_date(c.pull_request.created_on)},</span>
53 53 <span class="pr-details-title-author-pref">${_('by')}</span>
54 54 </div>
55 55
56 56 <div class="pull-left">
57 57 ${self.gravatar_with_user(c.pull_request.author.email, 16, tooltip=True)}
58 58 </div>
59 59
60 60 %if c.allowed_to_update:
61 61 <div class="pull-right">
62 62 <div id="edit_pull_request" class="action_button pr-save" style="display: none;">${_('Update title & description')}</div>
63 63 <div id="delete_pullrequest" class="action_button pr-save ${('' if c.allowed_to_delete else 'disabled' )}" style="display: none;">
64 64 % if c.allowed_to_delete:
65 65 ${h.secure_form(h.route_path('pullrequest_delete', repo_name=c.pull_request.target_repo.repo_name, pull_request_id=c.pull_request.pull_request_id), request=request)}
66 66 <input class="btn btn-link btn-danger no-margin" id="remove_${c.pull_request.pull_request_id}" name="remove_${c.pull_request.pull_request_id}"
67 67 onclick="submitConfirm(event, this, _gettext('Confirm to delete this pull request'), _gettext('Delete'), '${'!{}'.format(c.pull_request.pull_request_id)}')"
68 68 type="submit" value="${_('Delete pull request')}">
69 69 ${h.end_form()}
70 70 % else:
71 71 <span class="tooltip" title="${_('Not allowed to delete this pull request')}">${_('Delete pull request')}</span>
72 72 % endif
73 73 </div>
74 74 <div id="open_edit_pullrequest" class="action_button">${_('Edit')}</div>
75 75 <div id="close_edit_pullrequest" class="action_button" style="display: none;">${_('Cancel')}</div>
76 76 </div>
77 77
78 78 %endif
79 79 </div>
80 80
81 81 <div id="pr-desc" class="input" title="${_('Rendered using {} renderer').format(c.renderer)}">
82 82 ${h.render(c.pull_request.description, renderer=c.renderer, repo_name=c.repo_name)}
83 83 </div>
84 84
85 85 <div id="pr-desc-edit" class="input textarea" style="display: none;">
86 86 <input id="pr-renderer-input" type="hidden" name="description_renderer" value="${c.visual.default_renderer}">
87 87 ${dt.markup_form('pr-description-input', form_text=c.pull_request.description)}
88 88 </div>
89 89
90 90 <div id="summary" class="fields pr-details-content">
91 91
92 92 ## review
93 93 <div class="field">
94 94 <div class="label-pr-detail">
95 95 <label>${_('Review status')}:</label>
96 96 </div>
97 97 <div class="input">
98 98 %if c.pull_request_review_status:
99 99 <div class="tag status-tag-${c.pull_request_review_status}">
100 100 <i class="icon-circle review-status-${c.pull_request_review_status}"></i>
101 101 <span class="changeset-status-lbl">
102 102 %if c.pull_request.is_closed():
103 103 ${_('Closed')},
104 104 %endif
105 105
106 106 ${h.commit_status_lbl(c.pull_request_review_status)}
107 107
108 108 </span>
109 109 </div>
110 110 - ${_ungettext('calculated based on {} reviewer vote', 'calculated based on {} reviewers votes', len(c.pull_request_reviewers)).format(len(c.pull_request_reviewers))}
111 111 %endif
112 112 </div>
113 113 </div>
114 114
115 115 ## source
116 116 <div class="field">
117 117 <div class="label-pr-detail">
118 118 <label>${_('Commit flow')}:</label>
119 119 </div>
120 120 <div class="input">
121 121 <div class="pr-commit-flow">
122 122 ## Source
123 123 %if c.pull_request.source_ref_parts.type == 'branch':
124 124 <a href="${h.route_path('repo_commits', repo_name=c.pull_request.source_repo.repo_name, _query=dict(branch=c.pull_request.source_ref_parts.name))}"><code class="pr-source-info">${c.pull_request.source_ref_parts.type}:${c.pull_request.source_ref_parts.name}</code></a>
125 125 %else:
126 126 <code class="pr-source-info">${'{}:{}'.format(c.pull_request.source_ref_parts.type, c.pull_request.source_ref_parts.name)}</code>
127 127 %endif
128 128 ${_('of')} <a href="${h.route_path('repo_summary', repo_name=c.pull_request.source_repo.repo_name)}">${c.pull_request.source_repo.repo_name}</a>
129 129 &rarr;
130 130 ## Target
131 131 %if c.pull_request.target_ref_parts.type == 'branch':
132 132 <a href="${h.route_path('repo_commits', repo_name=c.pull_request.target_repo.repo_name, _query=dict(branch=c.pull_request.target_ref_parts.name))}"><code class="pr-target-info">${c.pull_request.target_ref_parts.type}:${c.pull_request.target_ref_parts.name}</code></a>
133 133 %else:
134 134 <code class="pr-target-info">${'{}:{}'.format(c.pull_request.target_ref_parts.type, c.pull_request.target_ref_parts.name)}</code>
135 135 %endif
136 136
137 137 ${_('of')} <a href="${h.route_path('repo_summary', repo_name=c.pull_request.target_repo.repo_name)}">${c.pull_request.target_repo.repo_name}</a>
138 138
139 139 <a class="source-details-action" href="#expand-source-details" onclick="return versionController.toggleElement(this, '.source-details')" data-toggle-on='<i class="icon-angle-down">more details</i>' data-toggle-off='<i class="icon-angle-up">less details</i>'>
140 140 <i class="icon-angle-down">more details</i>
141 141 </a>
142 142
143 143 </div>
144 144
145 145 <div class="source-details" style="display: none">
146 146
147 147 <ul>
148 148
149 149 ## common ancestor
150 150 <li>
151 151 ${_('Common ancestor')}:
152 152 % if c.ancestor_commit:
153 153 <a href="${h.route_path('repo_commit', repo_name=c.target_repo.repo_name, commit_id=c.ancestor_commit.raw_id)}">${h.show_id(c.ancestor_commit)}</a>
154 154 % else:
155 155 ${_('not available')}
156 156 % endif
157 157 </li>
158 158
159 159 ## pull url
160 160 <li>
161 161 %if h.is_hg(c.pull_request.source_repo):
162 162 <% clone_url = 'hg pull -r {} {}'.format(h.short_id(c.source_ref), c.pull_request.source_repo.clone_url()) %>
163 163 %elif h.is_git(c.pull_request.source_repo):
164 164 <% clone_url = 'git pull {} {}'.format(c.pull_request.source_repo.clone_url(), c.pull_request.source_ref_parts.name) %>
165 165 %endif
166 166
167 167 <span>${_('Pull changes from source')}</span>: <input type="text" class="input-monospace pr-pullinfo" value="${clone_url}" readonly="readonly">
168 168 <i class="tooltip icon-clipboard clipboard-action pull-right pr-pullinfo-copy" data-clipboard-text="${clone_url}" title="${_('Copy the pull url')}"></i>
169 169 </li>
170 170
171 171 ## Shadow repo
172 172 <li>
173 173 % if not c.pull_request.is_closed() and c.pull_request.shadow_merge_ref:
174 174 %if h.is_hg(c.pull_request.target_repo):
175 175 <% clone_url = 'hg clone --update {} {} pull-request-{}'.format(c.pull_request.shadow_merge_ref.name, c.shadow_clone_url, c.pull_request.pull_request_id) %>
176 176 %elif h.is_git(c.pull_request.target_repo):
177 177 <% clone_url = 'git clone --branch {} {} pull-request-{}'.format(c.pull_request.shadow_merge_ref.name, c.shadow_clone_url, c.pull_request.pull_request_id) %>
178 178 %endif
179 179
180 180 <span class="tooltip" title="${_('Clone repository in its merged state using shadow repository')}">${_('Clone from shadow repository')}</span>: <input type="text" class="input-monospace pr-mergeinfo" value="${clone_url}" readonly="readonly">
181 181 <i class="tooltip icon-clipboard clipboard-action pull-right pr-mergeinfo-copy" data-clipboard-text="${clone_url}" title="${_('Copy the clone url')}"></i>
182 182
183 183 % else:
184 184 <div class="">
185 185 ${_('Shadow repository data not available')}.
186 186 </div>
187 187 % endif
188 188 </li>
189 189
190 190 </ul>
191 191
192 192 </div>
193 193
194 194 </div>
195 195
196 196 </div>
197 197
198 198 ## versions
199 199 <div class="field">
200 200 <div class="label-pr-detail">
201 201 <label>${_('Versions')}:</label>
202 202 </div>
203 203
204 204 <% outdated_comm_count_ver = len(c.inline_versions[None]['outdated']) %>
205 205 <% general_outdated_comm_count_ver = len(c.comment_versions[None]['outdated']) %>
206 206
207 207 <div class="pr-versions">
208 208 % if c.show_version_changes:
209 209 <% outdated_comm_count_ver = len(c.inline_versions[c.at_version_num]['outdated']) %>
210 210 <% general_outdated_comm_count_ver = len(c.comment_versions[c.at_version_num]['outdated']) %>
211 211 ${_ungettext('{} version available for this pull request, ', '{} versions available for this pull request, ', len(c.versions)).format(len(c.versions))}
212 212 <a id="show-pr-versions" onclick="return versionController.toggleVersionView(this)" href="#show-pr-versions"
213 213 data-toggle-on="${_('show versions')}."
214 214 data-toggle-off="${_('hide versions')}.">
215 215 ${_('show versions')}.
216 216 </a>
217 217 <table>
218 218 ## SHOW ALL VERSIONS OF PR
219 219 <% ver_pr = None %>
220 220
221 221 % for data in reversed(list(enumerate(c.versions, 1))):
222 222 <% ver_pos = data[0] %>
223 223 <% ver = data[1] %>
224 224 <% ver_pr = ver.pull_request_version_id %>
225 225 <% display_row = '' if c.at_version and (c.at_version_num == ver_pr or c.from_version_num == ver_pr) else 'none' %>
226 226
227 227 <tr class="version-pr" style="display: ${display_row}">
228 228 <td>
229 229 <code>
230 230 <a href="${request.current_route_path(_query=dict(version=ver_pr or 'latest'))}">v${ver_pos}</a>
231 231 </code>
232 232 </td>
233 233 <td>
234 234 <input ${('checked="checked"' if c.from_version_num == ver_pr else '')} class="compare-radio-button" type="radio" name="ver_source" value="${ver_pr or 'latest'}" data-ver-pos="${ver_pos}"/>
235 235 <input ${('checked="checked"' if c.at_version_num == ver_pr else '')} class="compare-radio-button" type="radio" name="ver_target" value="${ver_pr or 'latest'}" data-ver-pos="${ver_pos}"/>
236 236 </td>
237 237 <td>
238 238 <% review_status = c.review_versions[ver_pr].status if ver_pr in c.review_versions else 'not_reviewed' %>
239 239 <i class="tooltip icon-circle review-status-${review_status}" title="${_('Your review status at this version')}"></i>
240 240
241 241 </td>
242 242 <td>
243 243 % if c.at_version_num != ver_pr:
244 244 <i class="tooltip icon-comment" title="${_('Comments from pull request version v{0}').format(ver_pos)}"></i>
245 245 <code>
246 246 General:${len(c.comment_versions[ver_pr]['at'])} / Inline:${len(c.inline_versions[ver_pr]['at'])}
247 247 </code>
248 248 % endif
249 249 </td>
250 250 <td>
251 251 ##<code>${ver.source_ref_parts.commit_id[:6]}</code>
252 252 </td>
253 253 <td>
254 254 <code>${h.age_component(ver.updated_on, time_is_local=True, tooltip=False)}</code>
255 255 </td>
256 256 </tr>
257 257 % endfor
258 258
259 259 <tr>
260 260 <td colspan="6">
261 261 <button id="show-version-diff" onclick="return versionController.showVersionDiff()" class="btn btn-sm" style="display: none"
262 262 data-label-text-locked="${_('select versions to show changes')}"
263 263 data-label-text-diff="${_('show changes between versions')}"
264 264 data-label-text-show="${_('show pull request for this version')}"
265 265 >
266 266 ${_('select versions to show changes')}
267 267 </button>
268 268 </td>
269 269 </tr>
270 270 </table>
271 271 % else:
272 272 <div>
273 273 ${_('Pull request versions not available')}.
274 274 </div>
275 275 % endif
276 276 </div>
277 277 </div>
278 278
279 279 </div>
280 280
281 281 </div>
282 282
283 283 ## REVIEW RULES
284 284 <div id="review_rules" style="display: none" class="reviewers-title block-right">
285 285 <div class="pr-details-title">
286 286 ${_('Reviewer rules')}
287 287 %if c.allowed_to_update:
288 288 <span id="close_edit_reviewers" class="block-right action_button last-item" style="display: none;">${_('Close')}</span>
289 289 %endif
290 290 </div>
291 291 <div class="pr-reviewer-rules">
292 292 ## review rules will be appended here, by default reviewers logic
293 293 </div>
294 294 <input id="review_data" type="hidden" name="review_data" value="">
295 295 </div>
296 296
297 297 ## REVIEWERS
298 298 <div class="reviewers-title first-panel block-right">
299 299 <div class="pr-details-title">
300 300 ${_('Pull request reviewers')}
301 301 %if c.allowed_to_update:
302 302 <span id="open_edit_reviewers" class="block-right action_button last-item">${_('Edit')}</span>
303 303 %endif
304 304 </div>
305 305 </div>
306 306 <div id="reviewers" class="block-right pr-details-content reviewers">
307 307
308 308 ## members redering block
309 309 <input type="hidden" name="__start__" value="review_members:sequence">
310 310 <ul id="review_members" class="group_members">
311 311
312 312 % for review_obj, member, reasons, mandatory, status in c.pull_request_reviewers:
313 313 <script>
314 314 var member = ${h.json.dumps(h.reviewer_as_json(member, reasons=reasons, mandatory=mandatory, user_group=review_obj.rule_user_group_data()))|n};
315 315 var status = "${(status[0][1].status if status else 'not_reviewed')}";
316 316 var status_lbl = "${h.commit_status_lbl(status[0][1].status if status else 'not_reviewed')}";
317 317 var allowed_to_update = ${h.json.dumps(c.allowed_to_update)};
318 318
319 319 var entry = renderTemplate('reviewMemberEntry', {
320 320 'member': member,
321 321 'mandatory': member.mandatory,
322 322 'reasons': member.reasons,
323 323 'allowed_to_update': allowed_to_update,
324 324 'review_status': status,
325 325 'review_status_label': status_lbl,
326 326 'user_group': member.user_group,
327 327 'create': false
328 328 });
329 329 $('#review_members').append(entry)
330 330 </script>
331 331
332 332 % endfor
333 333
334 334 </ul>
335 335
336 336 <input type="hidden" name="__end__" value="review_members:sequence">
337 337 ## end members redering block
338 338
339 339 %if not c.pull_request.is_closed():
340 340 <div id="add_reviewer" class="ac" style="display: none;">
341 341 %if c.allowed_to_update:
342 342 % if not c.forbid_adding_reviewers:
343 343 <div id="add_reviewer_input" class="reviewer_ac">
344 344 ${h.text('user', class_='ac-input', placeholder=_('Add reviewer or reviewer group'))}
345 345 <div id="reviewers_container"></div>
346 346 </div>
347 347 % endif
348 348 <div class="pull-right">
349 349 <button id="update_pull_request" class="btn btn-small no-margin">${_('Save Changes')}</button>
350 350 </div>
351 351 %endif
352 352 </div>
353 353 %endif
354 354 </div>
355 355
356 356 ## TODOs will be listed here
357 357 <div class="reviewers-title block-right">
358 358 <div class="pr-details-title">
359 359 ## Only show unresolved, that is only what matters
360 360 TODO Comments - ${len(c.unresolved_comments)} / ${(len(c.unresolved_comments) + len(c.resolved_comments))}
361 361
362 362 % if not c.at_version:
363 363 % if c.resolved_comments:
364 364 <span class="block-right action_button last-item noselect" onclick="$('.unresolved-todo-text').toggle(); return versionController.toggleElement(this, '.unresolved-todo');" data-toggle-on="Show resolved" data-toggle-off="Hide resolved">Show resolved</span>
365 365 % else:
366 366 <span class="block-right last-item noselect">Show resolved</span>
367 367 % endif
368 368 % endif
369 369 </div>
370 370 </div>
371 371 <div class="block-right pr-details-content reviewers">
372 372
373 373 <table class="todo-table">
374 374 <%
375 375 def sorter(entry):
376 376 user_id = entry.author.user_id
377 377 resolved = '1' if entry.resolved else '0'
378 378 if user_id == c.rhodecode_user.user_id:
379 379 # own comments first
380 380 user_id = 0
381 381 return '{}_{}_{}'.format(resolved, user_id, str(entry.comment_id).zfill(100))
382 382 %>
383 383
384 384 % if c.at_version:
385 385 <tr>
386 386 <td class="unresolved-todo-text">${_('unresolved TODOs unavailable in this view')}.</td>
387 387 </tr>
388 388 % else:
389 389 % for todo_comment in sorted(c.unresolved_comments + c.resolved_comments, key=sorter):
390 390 <% resolved = todo_comment.resolved %>
391 391 % if inline:
392 392 <% outdated_at_ver = todo_comment.outdated_at_version(getattr(c, 'at_version_num', None)) %>
393 393 % else:
394 394 <% outdated_at_ver = todo_comment.older_than_version(getattr(c, 'at_version_num', None)) %>
395 395 % endif
396 396
397 397 <tr ${('class="unresolved-todo" style="display: none"' if resolved else '') |n}>
398 398
399 399 <td class="td-todo-number">
400 400 % if resolved:
401 401 <a class="permalink todo-resolved tooltip" title="${_('Resolved by comment #{}').format(todo_comment.resolved.comment_id)}" href="#comment-${todo_comment.comment_id}" onclick="return Rhodecode.comments.scrollToComment($('#comment-${todo_comment.comment_id}'), 0, ${h.json.dumps(outdated_at_ver)})">
402 402 <i class="icon-flag-filled"></i> ${todo_comment.comment_id}</a>
403 403 % else:
404 404 <a class="permalink" href="#comment-${todo_comment.comment_id}" onclick="return Rhodecode.comments.scrollToComment($('#comment-${todo_comment.comment_id}'), 0, ${h.json.dumps(outdated_at_ver)})">
405 405 <i class="icon-flag-filled"></i> ${todo_comment.comment_id}</a>
406 406 % endif
407 407 </td>
408 408 <td class="td-todo-gravatar">
409 409 ${base.gravatar(todo_comment.author.email, 16, user=todo_comment.author, tooltip=True, extra_class=['no-margin'])}
410 410 </td>
411 411 <td class="todo-comment-text-wrapper">
412 412 <div class="todo-comment-text">
413 413 <code>${h.chop_at_smart(todo_comment.text, '\n', suffix_if_chopped='...')}</code>
414 414 </div>
415 415 </td>
416 416
417 417 </tr>
418 418 % endfor
419 419
420 420 % if len(c.unresolved_comments) == 0:
421 421 <tr>
422 422 <td class="unresolved-todo-text">${_('No unresolved TODOs')}.</td>
423 423 </tr>
424 424 % endif
425 425
426 426 % endif
427 427
428 428 </table>
429 429
430 430 </div>
431 431 </div>
432 432
433 433 </div>
434 434
435 435 <div class="box">
436 436
437 437 % if c.state_progressing:
438 438
439 439 <h2 style="text-align: center">
440 440 ${_('Cannot show diff when pull request state is changing. Current progress state')}: <span class="tag tag-merge-state-${c.pull_request.state}">${c.pull_request.state}</span>
441 441
442 442 % if c.is_super_admin:
443 443 <br/>
444 444 If you think this is an error try <a href="${h.current_route_path(request, force_state='created')}">forced state reset</a> to <span class="tag tag-merge-state-created">created</span> state.
445 445 % endif
446 446 </h2>
447 447
448 448 % else:
449 449
450 450 ## Diffs rendered here
451 451 <div class="table" >
452 452 <div id="changeset_compare_view_content">
453 453 ##CS
454 454 % if c.missing_requirements:
455 455 <div class="box">
456 456 <div class="alert alert-warning">
457 457 <div>
458 458 <strong>${_('Missing requirements:')}</strong>
459 459 ${_('These commits cannot be displayed, because this repository uses the Mercurial largefiles extension, which was not enabled.')}
460 460 </div>
461 461 </div>
462 462 </div>
463 463 % elif c.missing_commits:
464 464 <div class="box">
465 465 <div class="alert alert-warning">
466 466 <div>
467 467 <strong>${_('Missing commits')}:</strong>
468 ${_('This pull request cannot be displayed, because one or more commits no longer exist in the source repository.')}
469 ${_('Please update this pull request, push the commits back into the source repository, or consider closing this pull request.')}
470 ${_('Consider doing a {force_refresh_url} in case you think this is an error.').format(force_refresh_url=h.link_to('force refresh', h.current_route_path(request, force_refresh='1')))|n}
468 ${_('This pull request cannot be displayed, because one or more commits no longer exist in the source repository.')}<br/>
469 ${_('Please update this pull request, push the commits back into the source repository, or consider closing this pull request.')}<br/>
470 ${_('Consider doing a `force update commits` in case you think this is an error.')}
471 471 </div>
472 472 </div>
473 473 </div>
474 474 % elif c.pr_merge_source_commit.changed and not c.pull_request.is_closed():
475 475 <div class="box">
476 476 <div class="alert alert-info">
477 477 <div>
478 478 <strong>${_('There are new changes for `{}:{}` in source repository, please consider updating this pull request.').format(c.pr_merge_source_commit.ref_spec.type, c.pr_merge_source_commit.ref_spec.name)}</strong>
479 479 </div>
480 480 </div>
481 481 </div>
482 482 % endif
483 483
484 484 <div class="compare_view_commits_title">
485 485 % if not c.compare_mode:
486 486
487 487 % if c.at_version_pos:
488 488 <h4>
489 489 ${_('Showing changes at v%d, commenting is disabled.') % c.at_version_pos}
490 490 </h4>
491 491 % endif
492 492
493 493 <div class="pull-left">
494 494 <div class="btn-group">
495 495 <a class="${('collapsed' if c.collapse_all_commits else '')}" href="#expand-commits" onclick="toggleCommitExpand(this); return false" data-toggle-commits-cnt=${len(c.commit_ranges)} >
496 496 % if c.collapse_all_commits:
497 497 <i class="icon-plus-squared-alt icon-no-margin"></i>
498 498 ${_ungettext('Expand {} commit', 'Expand {} commits', len(c.commit_ranges)).format(len(c.commit_ranges))}
499 499 % else:
500 500 <i class="icon-minus-squared-alt icon-no-margin"></i>
501 501 ${_ungettext('Collapse {} commit', 'Collapse {} commits', len(c.commit_ranges)).format(len(c.commit_ranges))}
502 502 % endif
503 503 </a>
504 504 </div>
505 505 </div>
506 506
507 507 <div class="pull-right">
508 508 % if c.allowed_to_update and not c.pull_request.is_closed():
509 509
510 510 <div class="btn-group btn-group-actions">
511 511 <a id="update_commits" class="btn btn-primary no-margin" onclick="updateController.updateCommits(this); return false">
512 512 ${_('Update commits')}
513 513 </a>
514 514
515 515 <a id="update_commits_switcher" class="tooltip btn btn-primary btn-more-option" data-toggle="dropdown" aria-pressed="false" role="button" title="${_('more update options')}">
516 516 <i class="icon-down"></i>
517 517 </a>
518 518
519 519 <div class="btn-action-switcher-container right-align" id="update-commits-switcher">
520 520 <ul class="btn-action-switcher" role="menu" style="min-width: 300px;">
521 521 <li>
522 522 <a href="#forceUpdate" onclick="updateController.forceUpdateCommits(this); return false">
523 523 ${_('Force update commits')}
524 524 </a>
525 525 <div class="action-help-block">
526 526 ${_('Update commits and force refresh this pull request.')}
527 527 </div>
528 528 </li>
529 529 </ul>
530 530 </div>
531 531 </div>
532 532
533 533 % else:
534 534 <a class="tooltip btn disabled pull-right" disabled="disabled" title="${_('Update is disabled for current view')}">${_('Update commits')}</a>
535 535 % endif
536 536
537 537 </div>
538 538 % endif
539 539 </div>
540 540
541 541 % if not c.missing_commits:
542 542 % if c.compare_mode:
543 543 % if c.at_version:
544 544 <h4>
545 545 ${_('Commits and changes between v{ver_from} and {ver_to} of this pull request, commenting is disabled').format(ver_from=c.from_version_pos, ver_to=c.at_version_pos if c.at_version_pos else 'latest')}:
546 546 </h4>
547 547
548 548 <div class="subtitle-compare">
549 549 ${_('commits added: {}, removed: {}').format(len(c.commit_changes_summary.added), len(c.commit_changes_summary.removed))}
550 550 </div>
551 551
552 552 <div class="container">
553 553 <table class="rctable compare_view_commits">
554 554 <tr>
555 555 <th></th>
556 556 <th>${_('Time')}</th>
557 557 <th>${_('Author')}</th>
558 558 <th>${_('Commit')}</th>
559 559 <th></th>
560 560 <th>${_('Description')}</th>
561 561 </tr>
562 562
563 563 % for c_type, commit in c.commit_changes:
564 564 % if c_type in ['a', 'r']:
565 565 <%
566 566 if c_type == 'a':
567 567 cc_title = _('Commit added in displayed changes')
568 568 elif c_type == 'r':
569 569 cc_title = _('Commit removed in displayed changes')
570 570 else:
571 571 cc_title = ''
572 572 %>
573 573 <tr id="row-${commit.raw_id}" commit_id="${commit.raw_id}" class="compare_select">
574 574 <td>
575 575 <div class="commit-change-indicator color-${c_type}-border">
576 576 <div class="commit-change-content color-${c_type} tooltip" title="${h.tooltip(cc_title)}">
577 577 ${c_type.upper()}
578 578 </div>
579 579 </div>
580 580 </td>
581 581 <td class="td-time">
582 582 ${h.age_component(commit.date)}
583 583 </td>
584 584 <td class="td-user">
585 585 ${base.gravatar_with_user(commit.author, 16, tooltip=True)}
586 586 </td>
587 587 <td class="td-hash">
588 588 <code>
589 589 <a href="${h.route_path('repo_commit', repo_name=c.target_repo.repo_name, commit_id=commit.raw_id)}">
590 590 r${commit.idx}:${h.short_id(commit.raw_id)}
591 591 </a>
592 592 ${h.hidden('revisions', commit.raw_id)}
593 593 </code>
594 594 </td>
595 595 <td class="td-message expand_commit" data-commit-id="${commit.raw_id}" title="${_( 'Expand commit message')}" onclick="commitsController.expandCommit(this); return false">
596 596 <i class="icon-expand-linked"></i>
597 597 </td>
598 598 <td class="mid td-description">
599 599 <div class="log-container truncate-wrap">
600 600 <div class="message truncate" id="c-${commit.raw_id}" data-message-raw="${commit.message}">${h.urlify_commit_message(commit.message, c.repo_name)}</div>
601 601 </div>
602 602 </td>
603 603 </tr>
604 604 % endif
605 605 % endfor
606 606 </table>
607 607 </div>
608 608
609 609 % endif
610 610
611 611 % else:
612 612 <%include file="/compare/compare_commits.mako" />
613 613 % endif
614 614
615 615 <div class="cs_files">
616 616 <%namespace name="cbdiffs" file="/codeblocks/diffs.mako"/>
617 617 % if c.at_version:
618 618 <% c.inline_cnt = len(c.inline_versions[c.at_version_num]['display']) %>
619 619 <% c.comments = c.comment_versions[c.at_version_num]['display'] %>
620 620 % else:
621 621 <% c.inline_cnt = len(c.inline_versions[c.at_version_num]['until']) %>
622 622 <% c.comments = c.comment_versions[c.at_version_num]['until'] %>
623 623 % endif
624 624
625 625 <%
626 626 pr_menu_data = {
627 627 'outdated_comm_count_ver': outdated_comm_count_ver,
628 628 'pull_request': c.pull_request
629 629 }
630 630 %>
631 631
632 632 ${cbdiffs.render_diffset_menu(c.diffset, range_diff_on=c.range_diff_on, pull_request_menu=pr_menu_data)}
633 633
634 634 % if c.range_diff_on:
635 635 % for commit in c.commit_ranges:
636 636 ${cbdiffs.render_diffset(
637 637 c.changes[commit.raw_id],
638 638 commit=commit, use_comments=True,
639 639 collapse_when_files_over=5,
640 640 disable_new_comments=True,
641 641 deleted_files_comments=c.deleted_files_comments,
642 642 inline_comments=c.inline_comments,
643 643 pull_request_menu=pr_menu_data, show_todos=False)}
644 644 % endfor
645 645 % else:
646 646 ${cbdiffs.render_diffset(
647 647 c.diffset, use_comments=True,
648 648 collapse_when_files_over=30,
649 649 disable_new_comments=not c.allowed_to_comment,
650 650 deleted_files_comments=c.deleted_files_comments,
651 651 inline_comments=c.inline_comments,
652 652 pull_request_menu=pr_menu_data, show_todos=False)}
653 653 % endif
654 654
655 655 </div>
656 656 % else:
657 657 ## skipping commits we need to clear the view for missing commits
658 658 <div style="clear:both;"></div>
659 659 % endif
660 660
661 661 </div>
662 662 </div>
663 663
664 664 ## template for inline comment form
665 665 <%namespace name="comment" file="/changeset/changeset_file_comment.mako"/>
666 666
667 667 ## comments heading with count
668 668 <div class="comments-heading">
669 669 <i class="icon-comment"></i>
670 670 ${_('Comments')} ${len(c.comments)}
671 671 </div>
672 672
673 673 ## render general comments
674 674 <div id="comment-tr-show">
675 675 % if general_outdated_comm_count_ver:
676 676 <div class="info-box">
677 677 % if general_outdated_comm_count_ver == 1:
678 678 ${_('there is {num} general comment from older versions').format(num=general_outdated_comm_count_ver)},
679 679 <a href="#show-hidden-comments" onclick="$('.comment-general.comment-outdated').show(); $(this).parent().hide(); return false;">${_('show it')}</a>
680 680 % else:
681 681 ${_('there are {num} general comments from older versions').format(num=general_outdated_comm_count_ver)},
682 682 <a href="#show-hidden-comments" onclick="$('.comment-general.comment-outdated').show(); $(this).parent().hide(); return false;">${_('show them')}</a>
683 683 % endif
684 684 </div>
685 685 % endif
686 686 </div>
687 687
688 688 ${comment.generate_comments(c.comments, include_pull_request=True, is_pull_request=True)}
689 689
690 690 % if not c.pull_request.is_closed():
691 691 ## main comment form and it status
692 692 ${comment.comments(h.route_path('pullrequest_comment_create', repo_name=c.repo_name,
693 693 pull_request_id=c.pull_request.pull_request_id),
694 694 c.pull_request_review_status,
695 695 is_pull_request=True, change_status=c.allowed_to_change_status)}
696 696
697 697 ## merge status, and merge action
698 698 <div class="pull-request-merge">
699 699 <%include file="/pullrequests/pullrequest_merge_checks.mako"/>
700 700 </div>
701 701
702 702 %endif
703 703
704 704 % endif
705 705 </div>
706 706
707 707 <script type="text/javascript">
708 708
709 709 versionController = new VersionController();
710 710 versionController.init();
711 711
712 712 reviewersController = new ReviewersController();
713 713 commitsController = new CommitsController();
714 714
715 715 updateController = new UpdatePrController();
716 716
717 717 $(function () {
718 718
719 719 // custom code mirror
720 720 var codeMirrorInstance = $('#pr-description-input').get(0).MarkupForm.cm;
721 721
722 722 var PRDetails = {
723 723 editButton: $('#open_edit_pullrequest'),
724 724 closeButton: $('#close_edit_pullrequest'),
725 725 deleteButton: $('#delete_pullrequest'),
726 726 viewFields: $('#pr-desc, #pr-title'),
727 727 editFields: $('#pr-desc-edit, #pr-title-edit, .pr-save'),
728 728
729 729 init: function () {
730 730 var that = this;
731 731 this.editButton.on('click', function (e) {
732 732 that.edit();
733 733 });
734 734 this.closeButton.on('click', function (e) {
735 735 that.view();
736 736 });
737 737 },
738 738
739 739 edit: function (event) {
740 740 this.viewFields.hide();
741 741 this.editButton.hide();
742 742 this.deleteButton.hide();
743 743 this.closeButton.show();
744 744 this.editFields.show();
745 745 codeMirrorInstance.refresh();
746 746 },
747 747
748 748 view: function (event) {
749 749 this.editButton.show();
750 750 this.deleteButton.show();
751 751 this.editFields.hide();
752 752 this.closeButton.hide();
753 753 this.viewFields.show();
754 754 }
755 755 };
756 756
757 757 var ReviewersPanel = {
758 758 editButton: $('#open_edit_reviewers'),
759 759 closeButton: $('#close_edit_reviewers'),
760 760 addButton: $('#add_reviewer'),
761 761 removeButtons: $('.reviewer_member_remove,.reviewer_member_mandatory_remove'),
762 762
763 763 init: function () {
764 764 var self = this;
765 765 this.editButton.on('click', function (e) {
766 766 self.edit();
767 767 });
768 768 this.closeButton.on('click', function (e) {
769 769 self.close();
770 770 });
771 771 },
772 772
773 773 edit: function (event) {
774 774 this.editButton.hide();
775 775 this.closeButton.show();
776 776 this.addButton.show();
777 777 this.removeButtons.css('visibility', 'visible');
778 778 // review rules
779 779 reviewersController.loadReviewRules(
780 780 ${c.pull_request.reviewer_data_json | n});
781 781 },
782 782
783 783 close: function (event) {
784 784 this.editButton.show();
785 785 this.closeButton.hide();
786 786 this.addButton.hide();
787 787 this.removeButtons.css('visibility', 'hidden');
788 788 // hide review rules
789 789 reviewersController.hideReviewRules()
790 790 }
791 791 };
792 792
793 793 PRDetails.init();
794 794 ReviewersPanel.init();
795 795
796 796 showOutdated = function (self) {
797 797 $('.comment-inline.comment-outdated').show();
798 798 $('.filediff-outdated').show();
799 799 $('.showOutdatedComments').hide();
800 800 $('.hideOutdatedComments').show();
801 801 };
802 802
803 803 hideOutdated = function (self) {
804 804 $('.comment-inline.comment-outdated').hide();
805 805 $('.filediff-outdated').hide();
806 806 $('.hideOutdatedComments').hide();
807 807 $('.showOutdatedComments').show();
808 808 };
809 809
810 810 refreshMergeChecks = function () {
811 811 var loadUrl = "${request.current_route_path(_query=dict(merge_checks=1))}";
812 812 $('.pull-request-merge').css('opacity', 0.3);
813 813 $('.action-buttons-extra').css('opacity', 0.3);
814 814
815 815 $('.pull-request-merge').load(
816 816 loadUrl, function () {
817 817 $('.pull-request-merge').css('opacity', 1);
818 818
819 819 $('.action-buttons-extra').css('opacity', 1);
820 820 }
821 821 );
822 822 };
823 823
824 824 closePullRequest = function (status) {
825 825 if (!confirm(_gettext('Are you sure to close this pull request without merging?'))) {
826 826 return false;
827 827 }
828 828 // inject closing flag
829 829 $('.action-buttons-extra').append('<input type="hidden" class="close-pr-input" id="close_pull_request" value="1">');
830 830 $(generalCommentForm.statusChange).select2("val", status).trigger('change');
831 831 $(generalCommentForm.submitForm).submit();
832 832 };
833 833
834 834 $('#show-outdated-comments').on('click', function (e) {
835 835 var button = $(this);
836 836 var outdated = $('.comment-outdated');
837 837
838 838 if (button.html() === "(Show)") {
839 839 button.html("(Hide)");
840 840 outdated.show();
841 841 } else {
842 842 button.html("(Show)");
843 843 outdated.hide();
844 844 }
845 845 });
846 846
847 847 $('.show-inline-comments').on('change', function (e) {
848 848 var show = 'none';
849 849 var target = e.currentTarget;
850 850 if (target.checked) {
851 851 show = ''
852 852 }
853 853 var boxid = $(target).attr('id_for');
854 854 var comments = $('#{0} .inline-comments'.format(boxid));
855 855 var fn_display = function (idx) {
856 856 $(this).css('display', show);
857 857 };
858 858 $(comments).each(fn_display);
859 859 var btns = $('#{0} .inline-comments-button'.format(boxid));
860 860 $(btns).each(fn_display);
861 861 });
862 862
863 863 $('#merge_pull_request_form').submit(function () {
864 864 if (!$('#merge_pull_request').attr('disabled')) {
865 865 $('#merge_pull_request').attr('disabled', 'disabled');
866 866 }
867 867 return true;
868 868 });
869 869
870 870 $('#edit_pull_request').on('click', function (e) {
871 871 var title = $('#pr-title-input').val();
872 872 var description = codeMirrorInstance.getValue();
873 873 var renderer = $('#pr-renderer-input').val();
874 874 editPullRequest(
875 875 "${c.repo_name}", "${c.pull_request.pull_request_id}",
876 876 title, description, renderer);
877 877 });
878 878
879 879 $('#update_pull_request').on('click', function (e) {
880 880 $(this).attr('disabled', 'disabled');
881 881 $(this).addClass('disabled');
882 882 $(this).html(_gettext('Saving...'));
883 883 reviewersController.updateReviewers(
884 884 "${c.repo_name}", "${c.pull_request.pull_request_id}");
885 885 });
886 886
887 887
888 888 // fixing issue with caches on firefox
889 889 $('#update_commits').removeAttr("disabled");
890 890
891 891 $('.show-inline-comments').on('click', function (e) {
892 892 var boxid = $(this).attr('data-comment-id');
893 893 var button = $(this);
894 894
895 895 if (button.hasClass("comments-visible")) {
896 896 $('#{0} .inline-comments'.format(boxid)).each(function (index) {
897 897 $(this).hide();
898 898 });
899 899 button.removeClass("comments-visible");
900 900 } else {
901 901 $('#{0} .inline-comments'.format(boxid)).each(function (index) {
902 902 $(this).show();
903 903 });
904 904 button.addClass("comments-visible");
905 905 }
906 906 });
907 907
908 908 // register submit callback on commentForm form to track TODOs
909 909 window.commentFormGlobalSubmitSuccessCallback = function () {
910 910 refreshMergeChecks();
911 911 };
912 912
913 913 ReviewerAutoComplete('#user');
914 914
915 915 })
916 916
917 917 </script>
918 918
919 919 </div>
920 920
921 921 </%def>
@@ -1,746 +1,739 b''
1 1 # -*- coding: utf-8 -*-
2 2
3 3 # Copyright (C) 2010-2020 RhodeCode GmbH
4 4 #
5 5 # This program is free software: you can redistribute it and/or modify
6 6 # it under the terms of the GNU Affero General Public License, version 3
7 7 # (only), as published by the Free Software Foundation.
8 8 #
9 9 # This program is distributed in the hope that it will be useful,
10 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 12 # GNU General Public License for more details.
13 13 #
14 14 # You should have received a copy of the GNU Affero General Public License
15 15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
16 16 #
17 17 # This program is dual-licensed. If you wish to learn more about the
18 18 # RhodeCode Enterprise Edition, including its added features, Support services,
19 19 # and proprietary license terms, please see https://rhodecode.com/licenses/
20 20
21 21
22 22 """
23 23 Package for testing various lib/helper functions in rhodecode
24 24 """
25 25
26 26 import datetime
27 27 import string
28 28 import mock
29 29 import pytest
30 30
31 31 from rhodecode.tests import no_newline_id_generator
32 32 from rhodecode.tests.utils import run_test_concurrently
33 33
34 34 from rhodecode.lib import rc_cache
35 35 from rhodecode.lib.helpers import InitialsGravatar
36 36 from rhodecode.lib.utils2 import AttributeDict
37 37
38 38 from rhodecode.model.db import Repository, CacheKey
39 39
40 40
41 def _urls_for_proto(proto):
42 return [
43 ('%s://127.0.0.1' % proto, ['%s://' % proto, '127.0.0.1'],
44 '%s://127.0.0.1' % proto),
45 ('%s://marcink@127.0.0.1' % proto, ['%s://' % proto, '127.0.0.1'],
46 '%s://127.0.0.1' % proto),
47 ('%s://marcink:pass@127.0.0.1' % proto, ['%s://' % proto, '127.0.0.1'],
48 '%s://127.0.0.1' % proto),
49 ('%s://127.0.0.1:8080' % proto, ['%s://' % proto, '127.0.0.1', '8080'],
50 '%s://127.0.0.1:8080' % proto),
51 ('%s://domain.org' % proto, ['%s://' % proto, 'domain.org'],
52 '%s://domain.org' % proto),
53 ('%s://user:pass@domain.org:8080' % proto,
54 ['%s://' % proto, 'domain.org', '8080'],
55 '%s://domain.org:8080' % proto),
41 TEST_URLS = [
42 ('127.0.0.1', '127.0.0.1'),
43 ('marcink@127.0.0.1', '127.0.0.1'),
44 ('marcink:pass@127.0.0.1', '127.0.0.1'),
45 ('marcink@domain.name:pass@127.0.0.1', '127.0.0.1'),
46
47 ('127.0.0.1:8080', '127.0.0.1:8080'),
48 ('marcink@127.0.0.1:8080', '127.0.0.1:8080'),
49 ('marcink:pass@127.0.0.1:8080', '127.0.0.1:8080'),
50 ('marcink@domain.name:pass@127.0.0.1:8080', '127.0.0.1:8080'),
51
52 ('domain.org', 'domain.org'),
53 ('user:pass@domain.org:8080', 'domain.org:8080'),
54 ('user@domain.org:pass@domain.org:8080', 'domain.org:8080'),
56 55 ]
57 56
58 TEST_URLS = _urls_for_proto('http') + _urls_for_proto('https')
59 57
60
61 @pytest.mark.parametrize("test_url, expected, expected_creds", TEST_URLS)
62 def test_uri_filter(test_url, expected, expected_creds):
63 from rhodecode.lib.utils2 import uri_filter
64 assert uri_filter(test_url) == expected
65
66
67 @pytest.mark.parametrize("test_url, expected, expected_creds", TEST_URLS)
68 def test_credentials_filter(test_url, expected, expected_creds):
58 @pytest.mark.parametrize("protocol", ['http://', 'https://'])
59 @pytest.mark.parametrize("test_url, expected", TEST_URLS)
60 def test_credentials_filter(protocol, test_url, expected):
69 61 from rhodecode.lib.utils2 import credentials_filter
70 assert credentials_filter(test_url) == expected_creds
62 test_url = protocol + test_url
63 assert credentials_filter(test_url) == protocol + expected
71 64
72 65
73 66 @pytest.mark.parametrize("str_bool, expected", [
74 67 ('t', True),
75 68 ('true', True),
76 69 ('y', True),
77 70 ('yes', True),
78 71 ('on', True),
79 72 ('1', True),
80 73 ('Y', True),
81 74 ('yeS', True),
82 75 ('Y', True),
83 76 ('TRUE', True),
84 77 ('T', True),
85 78 ('False', False),
86 79 ('F', False),
87 80 ('FALSE', False),
88 81 ('0', False),
89 82 ('-1', False),
90 83 ('', False)
91 84 ])
92 85 def test_str2bool(str_bool, expected):
93 86 from rhodecode.lib.utils2 import str2bool
94 87 assert str2bool(str_bool) == expected
95 88
96 89
97 90 @pytest.mark.parametrize("text, expected", reduce(lambda a1,a2:a1+a2, [
98 91 [
99 92 (pref+"", []),
100 93 (pref+"Hi there @marcink", ['marcink']),
101 94 (pref+"Hi there @marcink and @bob", ['bob', 'marcink']),
102 95 (pref+"Hi there @marcink\n", ['marcink']),
103 96 (pref+"Hi there @marcink and @bob\n", ['bob', 'marcink']),
104 97 (pref+"Hi there marcin@rhodecode.com", []),
105 98 (pref+"Hi there @john.malcovic and @bob\n", ['bob', 'john.malcovic']),
106 99 (pref+"This needs to be reviewed: (@marcink,@john)", ["john", "marcink"]),
107 100 (pref+"This needs to be reviewed: (@marcink, @john)", ["john", "marcink"]),
108 101 (pref+"This needs to be reviewed: [@marcink,@john]", ["john", "marcink"]),
109 102 (pref+"This needs to be reviewed: (@marcink @john)", ["john", "marcink"]),
110 103 (pref+"@john @mary, please review", ["john", "mary"]),
111 104 (pref+"@john,@mary, please review", ["john", "mary"]),
112 105 (pref+"Hej @123, @22john,@mary, please review", ['123', '22john', 'mary']),
113 106 (pref+"@first hi there @marcink here's my email marcin@email.com "
114 107 "@lukaszb check @one_more22 it pls @ ttwelve @D[] @one@two@three ", ['first', 'lukaszb', 'marcink', 'one', 'one_more22']),
115 108 (pref+"@MARCIN @maRCiN @2one_more22 @john please see this http://org.pl", ['2one_more22', 'john', 'MARCIN', 'maRCiN']),
116 109 (pref+"@marian.user just do it @marco-polo and next extract @marco_polo", ['marco-polo', 'marco_polo', 'marian.user']),
117 110 (pref+"user.dot hej ! not-needed maril@domain.org", []),
118 111 (pref+"\n@marcin", ['marcin']),
119 112 ]
120 113 for pref in ['', '\n', 'hi !', '\t', '\n\n']]), ids=no_newline_id_generator)
121 114 def test_mention_extractor(text, expected):
122 115 from rhodecode.lib.utils2 import extract_mentioned_users
123 116 got = extract_mentioned_users(text)
124 117 assert sorted(got, key=lambda x: x.lower()) == got
125 118 assert set(expected) == set(got)
126 119
127 120 @pytest.mark.parametrize("age_args, expected, kw", [
128 121 ({}, u'just now', {}),
129 122 ({'seconds': -1}, u'1 second ago', {}),
130 123 ({'seconds': -60 * 2}, u'2 minutes ago', {}),
131 124 ({'hours': -1}, u'1 hour ago', {}),
132 125 ({'hours': -24}, u'1 day ago', {}),
133 126 ({'hours': -24 * 5}, u'5 days ago', {}),
134 127 ({'months': -1}, u'1 month ago', {}),
135 128 ({'months': -1, 'days': -2}, u'1 month and 2 days ago', {}),
136 129 ({'years': -1, 'months': -1}, u'1 year and 1 month ago', {}),
137 130 ({}, u'just now', {'short_format': True}),
138 131 ({'seconds': -1}, u'1sec ago', {'short_format': True}),
139 132 ({'seconds': -60 * 2}, u'2min ago', {'short_format': True}),
140 133 ({'hours': -1}, u'1h ago', {'short_format': True}),
141 134 ({'hours': -24}, u'1d ago', {'short_format': True}),
142 135 ({'hours': -24 * 5}, u'5d ago', {'short_format': True}),
143 136 ({'months': -1}, u'1m ago', {'short_format': True}),
144 137 ({'months': -1, 'days': -2}, u'1m, 2d ago', {'short_format': True}),
145 138 ({'years': -1, 'months': -1}, u'1y, 1m ago', {'short_format': True}),
146 139 ])
147 140 def test_age(age_args, expected, kw, baseapp):
148 141 from rhodecode.lib.utils2 import age
149 142 from dateutil import relativedelta
150 143 n = datetime.datetime(year=2012, month=5, day=17)
151 144 delt = lambda *args, **kwargs: relativedelta.relativedelta(*args, **kwargs)
152 145
153 146 def translate(elem):
154 147 return elem.interpolate()
155 148
156 149 assert translate(age(n + delt(**age_args), now=n, **kw)) == expected
157 150
158 151
159 152 @pytest.mark.parametrize("age_args, expected, kw", [
160 153 ({}, u'just now', {}),
161 154 ({'seconds': 1}, u'in 1 second', {}),
162 155 ({'seconds': 60 * 2}, u'in 2 minutes', {}),
163 156 ({'hours': 1}, u'in 1 hour', {}),
164 157 ({'hours': 24}, u'in 1 day', {}),
165 158 ({'hours': 24 * 5}, u'in 5 days', {}),
166 159 ({'months': 1}, u'in 1 month', {}),
167 160 ({'months': 1, 'days': 1}, u'in 1 month and 1 day', {}),
168 161 ({'years': 1, 'months': 1}, u'in 1 year and 1 month', {}),
169 162 ({}, u'just now', {'short_format': True}),
170 163 ({'seconds': 1}, u'in 1sec', {'short_format': True}),
171 164 ({'seconds': 60 * 2}, u'in 2min', {'short_format': True}),
172 165 ({'hours': 1}, u'in 1h', {'short_format': True}),
173 166 ({'hours': 24}, u'in 1d', {'short_format': True}),
174 167 ({'hours': 24 * 5}, u'in 5d', {'short_format': True}),
175 168 ({'months': 1}, u'in 1m', {'short_format': True}),
176 169 ({'months': 1, 'days': 1}, u'in 1m, 1d', {'short_format': True}),
177 170 ({'years': 1, 'months': 1}, u'in 1y, 1m', {'short_format': True}),
178 171 ])
179 172 def test_age_in_future(age_args, expected, kw, baseapp):
180 173 from rhodecode.lib.utils2 import age
181 174 from dateutil import relativedelta
182 175 n = datetime.datetime(year=2012, month=5, day=17)
183 176 delt = lambda *args, **kwargs: relativedelta.relativedelta(*args, **kwargs)
184 177
185 178 def translate(elem):
186 179 return elem.interpolate()
187 180
188 181 assert translate(age(n + delt(**age_args), now=n, **kw)) == expected
189 182
190 183
191 184 @pytest.mark.parametrize("sample, expected_tags", [
192 185 # entry
193 186 ((
194 187 ""
195 188 ),
196 189 [
197 190
198 191 ]),
199 192 # entry
200 193 ((
201 194 "hello world [stale]"
202 195 ),
203 196 [
204 197 ('state', '[stale]'),
205 198 ]),
206 199 # entry
207 200 ((
208 201 "hello world [v2.0.0] [v1.0.0]"
209 202 ),
210 203 [
211 204 ('generic', '[v2.0.0]'),
212 205 ('generic', '[v1.0.0]'),
213 206 ]),
214 207 # entry
215 208 ((
216 209 "he[ll]o wo[rl]d"
217 210 ),
218 211 [
219 212 ('label', '[ll]'),
220 213 ('label', '[rl]'),
221 214 ]),
222 215 # entry
223 216 ((
224 217 "hello world [stale]\n[featured]\n[stale] [dead] [dev]"
225 218 ),
226 219 [
227 220 ('state', '[stale]'),
228 221 ('state', '[featured]'),
229 222 ('state', '[stale]'),
230 223 ('state', '[dead]'),
231 224 ('state', '[dev]'),
232 225 ]),
233 226 # entry
234 227 ((
235 228 "hello world \n\n [stale] \n [url =&gt; [name](http://rc.com)]"
236 229 ),
237 230 [
238 231 ('state', '[stale]'),
239 232 ('url', '[url =&gt; [name](http://rc.com)]'),
240 233 ]),
241 234 # entry
242 235 ((
243 236 "[url =&gt; [linkNameJS](javascript:alert(document.domain))]\n"
244 237 "[url =&gt; [linkNameHTTP](http://rhodecode.com)]\n"
245 238 "[url =&gt; [linkNameHTTPS](https://rhodecode.com)]\n"
246 239 "[url =&gt; [linkNamePath](/repo_group)]\n"
247 240 ),
248 241 [
249 242 ('generic', '[linkNameJS]'),
250 243 ('url', '[url =&gt; [linkNameHTTP](http://rhodecode.com)]'),
251 244 ('url', '[url =&gt; [linkNameHTTPS](https://rhodecode.com)]'),
252 245 ('url', '[url =&gt; [linkNamePath](/repo_group)]'),
253 246 ]),
254 247 # entry
255 248 ((
256 249 "hello pta[tag] gog [[]] [[] sda ero[or]d [me =&gt;>< sa]"
257 250 "[requires] [stale] [see<>=&gt;] [see =&gt; http://url.com]"
258 251 "[requires =&gt; url] [lang =&gt; python] [just a tag] "
259 252 "<html_tag first='abc' attr=\"my.url?attr=&another=\"></html_tag>"
260 253 "[,d] [ =&gt; ULR ] [obsolete] [desc]]"
261 254 ),
262 255 [
263 256 ('label', '[desc]'),
264 257 ('label', '[obsolete]'),
265 258 ('label', '[or]'),
266 259 ('label', '[requires]'),
267 260 ('label', '[tag]'),
268 261 ('state', '[stale]'),
269 262 ('lang', '[lang =&gt; python]'),
270 263 ('ref', '[requires =&gt; url]'),
271 264 ('see', '[see =&gt; http://url.com]'),
272 265
273 266 ]),
274 267
275 268 ], ids=no_newline_id_generator)
276 269 def test_metatag_extraction(sample, expected_tags):
277 270 from rhodecode.lib.helpers import extract_metatags
278 271 tags, value = extract_metatags(sample)
279 272 assert sorted(tags) == sorted(expected_tags)
280 273
281 274
282 275 @pytest.mark.parametrize("tag_data, expected_html", [
283 276
284 277 (('state', '[stable]'), '<div class="metatag" tag="state stable">stable</div>'),
285 278 (('state', '[stale]'), '<div class="metatag" tag="state stale">stale</div>'),
286 279 (('state', '[featured]'), '<div class="metatag" tag="state featured">featured</div>'),
287 280 (('state', '[dev]'), '<div class="metatag" tag="state dev">dev</div>'),
288 281 (('state', '[dead]'), '<div class="metatag" tag="state dead">dead</div>'),
289 282
290 283 (('label', '[personal]'), '<div class="metatag" tag="label">personal</div>'),
291 284 (('generic', '[v2.0.0]'), '<div class="metatag" tag="generic">v2.0.0</div>'),
292 285
293 286 (('lang', '[lang =&gt; JavaScript]'), '<div class="metatag" tag="lang">JavaScript</div>'),
294 287 (('lang', '[lang =&gt; C++]'), '<div class="metatag" tag="lang">C++</div>'),
295 288 (('lang', '[lang =&gt; C#]'), '<div class="metatag" tag="lang">C#</div>'),
296 289 (('lang', '[lang =&gt; Delphi/Object]'), '<div class="metatag" tag="lang">Delphi/Object</div>'),
297 290 (('lang', '[lang =&gt; Objective-C]'), '<div class="metatag" tag="lang">Objective-C</div>'),
298 291 (('lang', '[lang =&gt; .NET]'), '<div class="metatag" tag="lang">.NET</div>'),
299 292
300 293 (('license', '[license =&gt; BSD 3-clause]'), '<div class="metatag" tag="license"><a href="http:\/\/www.opensource.org/licenses/BSD 3-clause">BSD 3-clause</a></div>'),
301 294 (('license', '[license =&gt; GPLv3]'), '<div class="metatag" tag="license"><a href="http:\/\/www.opensource.org/licenses/GPLv3">GPLv3</a></div>'),
302 295 (('license', '[license =&gt; MIT]'), '<div class="metatag" tag="license"><a href="http:\/\/www.opensource.org/licenses/MIT">MIT</a></div>'),
303 296 (('license', '[license =&gt; AGPLv3]'), '<div class="metatag" tag="license"><a href="http:\/\/www.opensource.org/licenses/AGPLv3">AGPLv3</a></div>'),
304 297
305 298 (('ref', '[requires =&gt; RepoName]'), '<div class="metatag" tag="ref requires">requires: <a href="/RepoName">RepoName</a></div>'),
306 299 (('ref', '[recommends =&gt; GroupName]'), '<div class="metatag" tag="ref recommends">recommends: <a href="/GroupName">GroupName</a></div>'),
307 300 (('ref', '[conflicts =&gt; SomeName]'), '<div class="metatag" tag="ref conflicts">conflicts: <a href="/SomeName">SomeName</a></div>'),
308 301 (('ref', '[base =&gt; SomeName]'), '<div class="metatag" tag="ref base">base: <a href="/SomeName">SomeName</a></div>'),
309 302
310 303 (('see', '[see =&gt; http://rhodecode.com]'), '<div class="metatag" tag="see">see: http://rhodecode.com </div>'),
311 304
312 305 (('url', '[url =&gt; [linkName](https://rhodecode.com)]'), '<div class="metatag" tag="url"> <a href="https://rhodecode.com">linkName</a> </div>'),
313 306 (('url', '[url =&gt; [example link](https://rhodecode.com)]'), '<div class="metatag" tag="url"> <a href="https://rhodecode.com">example link</a> </div>'),
314 307 (('url', '[url =&gt; [v1.0.0](https://rhodecode.com)]'), '<div class="metatag" tag="url"> <a href="https://rhodecode.com">v1.0.0</a> </div>'),
315 308
316 309 ])
317 310 def test_metatags_stylize(tag_data, expected_html):
318 311 from rhodecode.lib.helpers import style_metatag
319 312 tag_type,value = tag_data
320 313 assert style_metatag(tag_type, value) == expected_html
321 314
322 315
323 316 @pytest.mark.parametrize("tmpl_url, email, expected", [
324 317 ('http://test.com/{email}', 'test@foo.com', 'http://test.com/test@foo.com'),
325 318
326 319 ('http://test.com/{md5email}', 'test@foo.com', 'http://test.com/3cb7232fcc48743000cb86d0d5022bd9'),
327 320 ('http://test.com/{md5email}', 'testąć@foo.com', 'http://test.com/978debb907a3c55cd741872ab293ef30'),
328 321
329 322 ('http://testX.com/{md5email}?s={size}', 'test@foo.com', 'http://testX.com/3cb7232fcc48743000cb86d0d5022bd9?s=24'),
330 323 ('http://testX.com/{md5email}?s={size}', 'testąć@foo.com', 'http://testX.com/978debb907a3c55cd741872ab293ef30?s=24'),
331 324
332 325 ('{scheme}://{netloc}/{md5email}/{size}', 'test@foo.com', 'https://server.com/3cb7232fcc48743000cb86d0d5022bd9/24'),
333 326 ('{scheme}://{netloc}/{md5email}/{size}', 'testąć@foo.com', 'https://server.com/978debb907a3c55cd741872ab293ef30/24'),
334 327
335 328 ('http://test.com/{email}', 'testąć@foo.com', 'http://test.com/testąć@foo.com'),
336 329 ('http://test.com/{email}?size={size}', 'test@foo.com', 'http://test.com/test@foo.com?size=24'),
337 330 ('http://test.com/{email}?size={size}', 'testąć@foo.com', 'http://test.com/testąć@foo.com?size=24'),
338 331 ])
339 332 def test_gravatar_url_builder(tmpl_url, email, expected, request_stub):
340 333 from rhodecode.lib.helpers import gravatar_url
341 334
342 335 def fake_tmpl_context(_url):
343 336 _c = AttributeDict()
344 337 _c.visual = AttributeDict()
345 338 _c.visual.use_gravatar = True
346 339 _c.visual.gravatar_url = _url
347 340 return _c
348 341
349 342 # mock pyramid.threadlocals
350 343 def fake_get_current_request():
351 344 request_stub.scheme = 'https'
352 345 request_stub.host = 'server.com'
353 346
354 347 request_stub._call_context = fake_tmpl_context(tmpl_url)
355 348 return request_stub
356 349
357 350 with mock.patch('rhodecode.lib.helpers.get_current_request',
358 351 fake_get_current_request):
359 352
360 353 grav = gravatar_url(email_address=email, size=24)
361 354 assert grav == expected
362 355
363 356
364 357 @pytest.mark.parametrize(
365 358 "email, first_name, last_name, expected_initials, expected_color", [
366 359
367 360 ('test@rhodecode.com', '', '', 'TR', '#8a994d'),
368 361 ('marcin.kuzminski@rhodecode.com', '', '', 'MK', '#6559b3'),
369 362 # special cases of email
370 363 ('john.van.dam@rhodecode.com', '', '', 'JD', '#526600'),
371 364 ('Guido.van.Rossum@rhodecode.com', '', '', 'GR', '#990052'),
372 365 ('Guido.van.Rossum@rhodecode.com', 'Guido', 'Van Rossum', 'GR', '#990052'),
373 366
374 367 ('rhodecode+Guido.van.Rossum@rhodecode.com', '', '', 'RR', '#46598c'),
375 368 ('pclouds@rhodecode.com', 'Nguyễn Thái', 'Tgọc Duy', 'ND', '#665200'),
376 369
377 370 ('john-brown@foo.com', '', '', 'JF', '#73006b'),
378 371 ('admin@rhodecode.com', 'Marcin', 'Kuzminski', 'MK', '#104036'),
379 372 # partials
380 373 ('admin@rhodecode.com', 'Marcin', '', 'MR', '#104036'), # fn+email
381 374 ('admin@rhodecode.com', '', 'Kuzminski', 'AK', '#104036'), # em+ln
382 375 # non-ascii
383 376 ('admin@rhodecode.com', 'Marcin', 'Śuzminski', 'MS', '#104036'),
384 377 ('marcin.śuzminski@rhodecode.com', '', '', 'MS', '#73000f'),
385 378
386 379 # special cases, LDAP can provide those...
387 380 ('admin@', 'Marcin', 'Śuzminski', 'MS', '#aa00ff'),
388 381 ('marcin.śuzminski', '', '', 'MS', '#402020'),
389 382 ('null', '', '', 'NL', '#8c4646'),
390 383 ('some.@abc.com', 'some', '', 'SA', '#664e33')
391 384 ])
392 385 def test_initials_gravatar_pick_of_initials_and_color_algo(
393 386 email, first_name, last_name, expected_initials, expected_color):
394 387 instance = InitialsGravatar(email, first_name, last_name)
395 388 assert instance.get_initials() == expected_initials
396 389 assert instance.str2color(email) == expected_color
397 390
398 391
399 392 def test_initials_gravatar_mapping_algo():
400 393 pos = set()
401 394 instance = InitialsGravatar('', '', '')
402 395 iterations = 0
403 396
404 397 variations = []
405 398 for letter1 in string.ascii_letters:
406 399 for letter2 in string.ascii_letters[::-1][:10]:
407 400 for letter3 in string.ascii_letters[:10]:
408 401 variations.append(
409 402 '%s@rhodecode.com' % (letter1+letter2+letter3))
410 403
411 404 max_variations = 4096
412 405 for email in variations[:max_variations]:
413 406 iterations += 1
414 407 pos.add(
415 408 instance.pick_color_bank_index(email,
416 409 instance.get_color_bank()))
417 410
418 411 # we assume that we have match all 256 possible positions,
419 412 # in reasonable amount of different email addresses
420 413 assert len(pos) == 256
421 414 assert iterations == max_variations
422 415
423 416
424 417 @pytest.mark.parametrize("tmpl, repo_name, overrides, prefix, expected", [
425 418 (Repository.DEFAULT_CLONE_URI, 'group/repo1', {}, '', 'http://vps1:8000/group/repo1'),
426 419 (Repository.DEFAULT_CLONE_URI, 'group/repo1', {'user': 'marcink'}, '', 'http://marcink@vps1:8000/group/repo1'),
427 420 (Repository.DEFAULT_CLONE_URI, 'group/repo1', {}, '/rc', 'http://vps1:8000/rc/group/repo1'),
428 421 (Repository.DEFAULT_CLONE_URI, 'group/repo1', {'user': 'user'}, '/rc', 'http://user@vps1:8000/rc/group/repo1'),
429 422 (Repository.DEFAULT_CLONE_URI, 'group/repo1', {'user': 'marcink'}, '/rc', 'http://marcink@vps1:8000/rc/group/repo1'),
430 423 (Repository.DEFAULT_CLONE_URI, 'group/repo1', {'user': 'user'}, '/rc/', 'http://user@vps1:8000/rc/group/repo1'),
431 424 (Repository.DEFAULT_CLONE_URI, 'group/repo1', {'user': 'marcink'}, '/rc/', 'http://marcink@vps1:8000/rc/group/repo1'),
432 425 ('{scheme}://{user}@{netloc}/_{repoid}', 'group/repo1', {}, '', 'http://vps1:8000/_23'),
433 426 ('{scheme}://{user}@{netloc}/_{repoid}', 'group/repo1', {'user': 'marcink'}, '', 'http://marcink@vps1:8000/_23'),
434 427 ('http://{user}@{netloc}/_{repoid}', 'group/repo1', {'user': 'marcink'}, '', 'http://marcink@vps1:8000/_23'),
435 428 ('http://{netloc}/_{repoid}', 'group/repo1', {'user': 'marcink'}, '', 'http://vps1:8000/_23'),
436 429 ('https://{user}@proxy1.server.com/{repo}', 'group/repo1', {'user': 'marcink'}, '', 'https://marcink@proxy1.server.com/group/repo1'),
437 430 ('https://{user}@proxy1.server.com/{repo}', 'group/repo1', {}, '', 'https://proxy1.server.com/group/repo1'),
438 431 ('https://proxy1.server.com/{user}/{repo}', 'group/repo1', {'user': 'marcink'}, '', 'https://proxy1.server.com/marcink/group/repo1'),
439 432 ])
440 433 def test_clone_url_generator(tmpl, repo_name, overrides, prefix, expected):
441 434 from rhodecode.lib.utils2 import get_clone_url
442 435
443 436 class RequestStub(object):
444 437 def request_url(self, name):
445 438 return 'http://vps1:8000' + prefix
446 439
447 440 def route_url(self, name):
448 441 return self.request_url(name)
449 442
450 443 clone_url = get_clone_url(
451 444 request=RequestStub(),
452 445 uri_tmpl=tmpl,
453 446 repo_name=repo_name, repo_id=23, repo_type='hg', **overrides)
454 447 assert clone_url == expected
455 448
456 449
457 450 def test_clone_url_svn_ssh_generator():
458 451 from rhodecode.lib.utils2 import get_clone_url
459 452
460 453 class RequestStub(object):
461 454 def request_url(self, name):
462 455 return 'http://vps1:8000'
463 456
464 457 def route_url(self, name):
465 458 return self.request_url(name)
466 459
467 460 clone_url = get_clone_url(
468 461 request=RequestStub(),
469 462 uri_tmpl=Repository.DEFAULT_CLONE_URI_SSH,
470 463 repo_name='svn-test', repo_id=23, repo_type='svn', **{'sys_user': 'rcdev'})
471 464 assert clone_url == 'svn+ssh://rcdev@vps1/svn-test'
472 465
473 466
474 467 idx = 0
475 468
476 469
477 470 def _quick_url(text, tmpl="""<a class="tooltip-hovercard revision-link" href="%s" data-hovercard-alt="Commit: %s" data-hovercard-url="/some-url">%s</a>""", url_=None, commits=''):
478 471 """
479 472 Changes `some text url[foo]` => `some text <a href="/">foo</a>
480 473
481 474 :param text:
482 475 """
483 476 import re
484 477 # quickly change expected url[] into a link
485 478 url_pat = re.compile(r'(?:url\[)(.+?)(?:\])')
486 479 commits = commits or []
487 480
488 481 global idx
489 482 idx = 0
490 483
491 484 def url_func(match_obj):
492 485 global idx
493 486 _url = match_obj.groups()[0]
494 487 if commits:
495 488 commit = commits[idx]
496 489 idx += 1
497 490 return tmpl % (url_ or '/some-url', _url, commit)
498 491 else:
499 492 return tmpl % (url_ or '/some-url', _url)
500 493
501 494 return url_pat.sub(url_func, text)
502 495
503 496
504 497 @pytest.mark.parametrize("sample, expected, commits", [
505 498 (
506 499 "",
507 500 "",
508 501 [""]
509 502 ),
510 503 (
511 504 "git-svn-id: https://svn.apache.org/repos/asf/libcloud/trunk@1441655 13f79535-47bb-0310-9956-ffa450edef68",
512 505 "git-svn-id: https://svn.apache.org/repos/asf/libcloud/trunk@1441655 13f79535-47bb-0310-9956-ffa450edef68",
513 506 [""]
514 507 ),
515 508 (
516 509 "from rev 000000000000",
517 510 "from rev url[000000000000]",
518 511 ["000000000000"]
519 512 ),
520 513
521 514 (
522 515 "from rev 000000000000123123 also rev 000000000000",
523 516 "from rev url[000000000000123123] also rev url[000000000000]",
524 517 ["000000000000123123", "000000000000"]
525 518 ),
526 519 (
527 520 "this should-000 00",
528 521 "this should-000 00",
529 522 [""]
530 523 ),
531 524 (
532 525 "longtextffffffffff rev 123123123123",
533 526 "longtextffffffffff rev url[123123123123]",
534 527 ["123123123123"]
535 528 ),
536 529 (
537 530 "rev ffffffffffffffffffffffffffffffffffffffffffffffffff",
538 531 "rev ffffffffffffffffffffffffffffffffffffffffffffffffff",
539 532 ["ffffffffffffffffffffffffffffffffffffffffffffffffff"]
540 533 ),
541 534 (
542 535 "ffffffffffff some text traalaa",
543 536 "url[ffffffffffff] some text traalaa",
544 537 ["ffffffffffff"]
545 538 ),
546 539 (
547 540 """Multi line
548 541 123123123123
549 542 some text 000000000000
550 543 sometimes !
551 544 """,
552 545 """Multi line
553 546 url[123123123123]
554 547 some text url[000000000000]
555 548 sometimes !
556 549 """,
557 550 ["123123123123", "000000000000"]
558 551 )
559 552 ], ids=no_newline_id_generator)
560 553 def test_urlify_commits(sample, expected, commits):
561 554 def fake_url(self, *args, **kwargs):
562 555 return '/some-url'
563 556
564 557 expected = _quick_url(expected, commits=commits)
565 558
566 559 with mock.patch('rhodecode.lib.helpers.route_url', fake_url):
567 560 from rhodecode.lib.helpers import urlify_commits
568 561 assert urlify_commits(sample, 'repo_name') == expected
569 562
570 563
571 564 @pytest.mark.parametrize("sample, expected, url_", [
572 565 ("",
573 566 "",
574 567 ""),
575 568 ("https://svn.apache.org/repos",
576 569 "url[https://svn.apache.org/repos]",
577 570 "https://svn.apache.org/repos"),
578 571 ("http://svn.apache.org/repos",
579 572 "url[http://svn.apache.org/repos]",
580 573 "http://svn.apache.org/repos"),
581 574 ("from rev a also rev http://google.com",
582 575 "from rev a also rev url[http://google.com]",
583 576 "http://google.com"),
584 577 ("""Multi line
585 578 https://foo.bar.com
586 579 some text lalala""",
587 580 """Multi line
588 581 url[https://foo.bar.com]
589 582 some text lalala""",
590 583 "https://foo.bar.com")
591 584 ], ids=no_newline_id_generator)
592 585 def test_urlify_test(sample, expected, url_):
593 586 from rhodecode.lib.helpers import urlify_text
594 587 expected = _quick_url(expected, tmpl="""<a href="%s">%s</a>""", url_=url_)
595 588 assert urlify_text(sample) == expected
596 589
597 590
598 591 @pytest.mark.parametrize("test, expected", [
599 592 ("", None),
600 593 ("/_2", '2'),
601 594 ("_2", '2'),
602 595 ("/_2/", '2'),
603 596 ("_2/", '2'),
604 597
605 598 ("/_21", '21'),
606 599 ("_21", '21'),
607 600 ("/_21/", '21'),
608 601 ("_21/", '21'),
609 602
610 603 ("/_21/foobar", '21'),
611 604 ("_21/121", '21'),
612 605 ("/_21/_12", '21'),
613 606 ("_21/rc/foo", '21'),
614 607
615 608 ])
616 609 def test_get_repo_by_id(test, expected):
617 610 from rhodecode.model.repo import RepoModel
618 611 _test = RepoModel()._extract_id_from_repo_name(test)
619 612 assert _test == expected
620 613
621 614
622 615 def test_invalidation_context(baseapp):
623 616 repo_id = 9999
624 617
625 618 cache_namespace_uid = 'cache_repo_instance.{}_{}'.format(
626 619 repo_id, CacheKey.CACHE_TYPE_FEED)
627 620 invalidation_namespace = CacheKey.REPO_INVALIDATION_NAMESPACE.format(
628 621 repo_id=repo_id)
629 622 region = rc_cache.get_or_create_region('cache_repo_longterm', cache_namespace_uid)
630 623
631 624 calls = [1, 2]
632 625
633 626 @region.conditional_cache_on_arguments(namespace=cache_namespace_uid)
634 627 def _dummy_func(cache_key):
635 628 val = calls.pop(0)
636 629 return 'result:{}'.format(val)
637 630
638 631 inv_context_manager = rc_cache.InvalidationContext(
639 632 uid=cache_namespace_uid, invalidation_namespace=invalidation_namespace)
640 633
641 634 # 1st call, fresh caches
642 635 with inv_context_manager as invalidation_context:
643 636 should_invalidate = invalidation_context.should_invalidate()
644 637 if should_invalidate:
645 638 result = _dummy_func.refresh('some-key')
646 639 else:
647 640 result = _dummy_func('some-key')
648 641
649 642 assert isinstance(invalidation_context, rc_cache.FreshRegionCache)
650 643 assert should_invalidate is True
651 644
652 645 assert 'result:1' == result
653 646 # should be cached so calling it twice will give the same result !
654 647 result = _dummy_func('some-key')
655 648 assert 'result:1' == result
656 649
657 650 # 2nd call, we create a new context manager, this should be now key aware, and
658 651 # return an active cache region
659 652 with inv_context_manager as invalidation_context:
660 653 should_invalidate = invalidation_context.should_invalidate()
661 654 assert isinstance(invalidation_context, rc_cache.ActiveRegionCache)
662 655 assert should_invalidate is False
663 656
664 657 # Mark invalidation
665 658 CacheKey.set_invalidate(invalidation_namespace)
666 659
667 660 # 3nd call, fresh caches
668 661 with inv_context_manager as invalidation_context:
669 662 should_invalidate = invalidation_context.should_invalidate()
670 663 if should_invalidate:
671 664 result = _dummy_func.refresh('some-key')
672 665 else:
673 666 result = _dummy_func('some-key')
674 667
675 668 assert isinstance(invalidation_context, rc_cache.FreshRegionCache)
676 669 assert should_invalidate is True
677 670
678 671 assert 'result:2' == result
679 672
680 673 # cached again, same result
681 674 result = _dummy_func('some-key')
682 675 assert 'result:2' == result
683 676
684 677
685 678 def test_invalidation_context_exception_in_compute(baseapp):
686 679 repo_id = 888
687 680
688 681 cache_namespace_uid = 'cache_repo_instance.{}_{}'.format(
689 682 repo_id, CacheKey.CACHE_TYPE_FEED)
690 683 invalidation_namespace = CacheKey.REPO_INVALIDATION_NAMESPACE.format(
691 684 repo_id=repo_id)
692 685 region = rc_cache.get_or_create_region('cache_repo_longterm', cache_namespace_uid)
693 686
694 687 @region.conditional_cache_on_arguments(namespace=cache_namespace_uid)
695 688 def _dummy_func(cache_key):
696 689 raise Exception('Error in cache func')
697 690
698 691 with pytest.raises(Exception):
699 692 inv_context_manager = rc_cache.InvalidationContext(
700 693 uid=cache_namespace_uid, invalidation_namespace=invalidation_namespace)
701 694
702 695 # 1st call, fresh caches
703 696 with inv_context_manager as invalidation_context:
704 697 should_invalidate = invalidation_context.should_invalidate()
705 698 if should_invalidate:
706 699 _dummy_func.refresh('some-key-2')
707 700 else:
708 701 _dummy_func('some-key-2')
709 702
710 703
711 704 @pytest.mark.parametrize('execution_number', range(5))
712 705 def test_cache_invalidation_race_condition(execution_number, baseapp):
713 706 import time
714 707
715 708 repo_id = 777
716 709
717 710 cache_namespace_uid = 'cache_repo_instance.{}_{}'.format(
718 711 repo_id, CacheKey.CACHE_TYPE_FEED)
719 712 invalidation_namespace = CacheKey.REPO_INVALIDATION_NAMESPACE.format(
720 713 repo_id=repo_id)
721 714 region = rc_cache.get_or_create_region('cache_repo_longterm', cache_namespace_uid)
722 715
723 716 @run_test_concurrently(25)
724 717 def test_create_and_delete_cache_keys():
725 718 time.sleep(0.2)
726 719
727 720 @region.conditional_cache_on_arguments(namespace=cache_namespace_uid)
728 721 def _dummy_func(cache_key):
729 722 val = 'async'
730 723 return 'result:{}'.format(val)
731 724
732 725 inv_context_manager = rc_cache.InvalidationContext(
733 726 uid=cache_namespace_uid, invalidation_namespace=invalidation_namespace)
734 727
735 728 # 1st call, fresh caches
736 729 with inv_context_manager as invalidation_context:
737 730 should_invalidate = invalidation_context.should_invalidate()
738 731 if should_invalidate:
739 732 _dummy_func.refresh('some-key-3')
740 733 else:
741 734 _dummy_func('some-key-3')
742 735
743 736 # Mark invalidation
744 737 CacheKey.set_invalidate(invalidation_namespace)
745 738
746 739 test_create_and_delete_cache_keys()
General Comments 0
You need to be logged in to leave comments. Login now