Show More
The requested changes are too big and content was truncated. Show full diff
@@ -0,0 +1,11 b'' | |||
|
1 | [default] | |
|
2 | api_url = http://your.rhodecode.server:5000/_admin/api | |
|
3 | api_user = admin | |
|
4 | api_key = XXXXXXXXXXXX | |
|
5 | ||
|
6 | ldap_uri = ldap://your.ldap.server:389 | |
|
7 | ldap_user = cn=rhodecode,ou=binders,dc=linaro,dc=org | |
|
8 | ldap_key = XXXXXXXXX | |
|
9 | base_dn = dc=linaro,dc=org | |
|
10 | ||
|
11 | sync_users = True No newline at end of file |
@@ -0,0 +1,237 b'' | |||
|
1 | # This program is free software: you can redistribute it and/or modify | |
|
2 | # it under the terms of the GNU General Public License as published by | |
|
3 | # the Free Software Foundation, either version 3 of the License, or | |
|
4 | # (at your option) any later version. | |
|
5 | # | |
|
6 | # This program is distributed in the hope that it will be useful, | |
|
7 | # but WITHOUT ANY WARRANTY; without even the implied warranty of | |
|
8 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
|
9 | # GNU General Public License for more details. | |
|
10 | # | |
|
11 | # You should have received a copy of the GNU General Public License | |
|
12 | # along with this program. If not, see <http://www.gnu.org/licenses/>. | |
|
13 | ||
|
14 | import ldap | |
|
15 | import urllib2 | |
|
16 | import uuid | |
|
17 | import json | |
|
18 | ||
|
19 | from ConfigParser import ConfigParser | |
|
20 | ||
|
21 | config = ConfigParser() | |
|
22 | config.read('ldap_sync.conf') | |
|
23 | ||
|
24 | ||
|
25 | class InvalidResponseIDError(Exception): | |
|
26 | """ Request and response don't have the same UUID. """ | |
|
27 | ||
|
28 | ||
|
29 | class RhodecodeResponseError(Exception): | |
|
30 | """ Response has an error, something went wrong with request execution. """ | |
|
31 | ||
|
32 | ||
|
33 | class UserAlreadyInGroupError(Exception): | |
|
34 | """ User is already a member of the target group. """ | |
|
35 | ||
|
36 | ||
|
37 | class UserNotInGroupError(Exception): | |
|
38 | """ User is not a member of the target group. """ | |
|
39 | ||
|
40 | ||
|
41 | class RhodecodeAPI(): | |
|
42 | ||
|
43 | def __init__(self, url, key): | |
|
44 | self.url = url | |
|
45 | self.key = key | |
|
46 | ||
|
47 | def get_api_data(self, uid, method, args): | |
|
48 | """Prepare dict for API post.""" | |
|
49 | return { | |
|
50 | "id": uid, | |
|
51 | "api_key": self.key, | |
|
52 | "method": method, | |
|
53 | "args": args | |
|
54 | } | |
|
55 | ||
|
56 | def rhodecode_api_post(self, method, args): | |
|
57 | """Send a generic API post to Rhodecode. | |
|
58 | ||
|
59 | This will generate the UUID for validation check after the | |
|
60 | response is returned. Handle errors and get the result back. | |
|
61 | """ | |
|
62 | uid = str(uuid.uuid1()) | |
|
63 | data = self.get_api_data(uid, method, args) | |
|
64 | ||
|
65 | data = json.dumps(data) | |
|
66 | headers = {'content-type': 'text/plain'} | |
|
67 | req = urllib2.Request(self.url, data, headers) | |
|
68 | ||
|
69 | response = urllib2.urlopen(req) | |
|
70 | response = json.load(response) | |
|
71 | ||
|
72 | if uid != response["id"]: | |
|
73 | raise InvalidResponseIDError("UUID does not match.") | |
|
74 | ||
|
75 | if response["error"] != None: | |
|
76 | raise RhodecodeResponseError(response["error"]) | |
|
77 | ||
|
78 | return response["result"] | |
|
79 | ||
|
80 | def create_group(self, name, active=True): | |
|
81 | """Create the Rhodecode user group.""" | |
|
82 | args = { | |
|
83 | "group_name": name, | |
|
84 | "active": str(active) | |
|
85 | } | |
|
86 | self.rhodecode_api_post("create_users_group", args) | |
|
87 | ||
|
88 | def add_membership(self, group, username): | |
|
89 | """Add specific user to a group.""" | |
|
90 | args = { | |
|
91 | "usersgroupid": group, | |
|
92 | "userid": username | |
|
93 | } | |
|
94 | result = self.rhodecode_api_post("add_user_to_users_group", args) | |
|
95 | if not result["success"]: | |
|
96 | raise UserAlreadyInGroupError("User %s already in group %s." % | |
|
97 | (username, group)) | |
|
98 | ||
|
99 | def remove_membership(self, group, username): | |
|
100 | """Remove specific user from a group.""" | |
|
101 | args = { | |
|
102 | "usersgroupid": group, | |
|
103 | "userid": username | |
|
104 | } | |
|
105 | result = self.rhodecode_api_post("remove_user_from_users_group", args) | |
|
106 | if not result["success"]: | |
|
107 | raise UserNotInGroupError("User %s not in group %s." % | |
|
108 | (username, group)) | |
|
109 | ||
|
110 | def get_group_members(self, name): | |
|
111 | """Get the list of member usernames from a user group.""" | |
|
112 | args = {"usersgroupid": name} | |
|
113 | members = self.rhodecode_api_post("get_users_group", args)['members'] | |
|
114 | member_list = [] | |
|
115 | for member in members: | |
|
116 | member_list.append(member["username"]) | |
|
117 | return member_list | |
|
118 | ||
|
119 | def get_group(self, name): | |
|
120 | """Return group info.""" | |
|
121 | args = {"usersgroupid": name} | |
|
122 | return self.rhodecode_api_post("get_users_group", args) | |
|
123 | ||
|
124 | def get_user(self, username): | |
|
125 | """Return user info.""" | |
|
126 | args = {"userid": username} | |
|
127 | return self.rhodecode_api_post("get_user", args) | |
|
128 | ||
|
129 | ||
|
130 | class LdapClient(): | |
|
131 | ||
|
132 | def __init__(self, uri, user, key, base_dn): | |
|
133 | self.client = ldap.initialize(uri, trace_level=0) | |
|
134 | self.client.set_option(ldap.OPT_REFERRALS, 0) | |
|
135 | self.client.simple_bind(user, key) | |
|
136 | self.base_dn = base_dn | |
|
137 | ||
|
138 | def __del__(self): | |
|
139 | self.client.unbind() | |
|
140 | ||
|
141 | def get_groups(self): | |
|
142 | """Get all the groups in form of dict {group_name: group_info,...}.""" | |
|
143 | searchFilter = "objectClass=groupOfUniqueNames" | |
|
144 | result = self.client.search_s(self.base_dn, ldap.SCOPE_SUBTREE, | |
|
145 | searchFilter) | |
|
146 | ||
|
147 | groups = {} | |
|
148 | for group in result: | |
|
149 | groups[group[1]['cn'][0]] = group[1] | |
|
150 | ||
|
151 | return groups | |
|
152 | ||
|
153 | def get_group_users(self, groups, group): | |
|
154 | """Returns all the users belonging to a single group. | |
|
155 | ||
|
156 | Based on the list of groups and memberships, returns all the | |
|
157 | users belonging to a single group, searching recursively. | |
|
158 | """ | |
|
159 | users = [] | |
|
160 | for member in groups[group]["uniqueMember"]: | |
|
161 | member = self.parse_member_string(member) | |
|
162 | if member[0] == "uid": | |
|
163 | users.append(member[1]) | |
|
164 | elif member[0] == "cn": | |
|
165 | users += self.get_group_users(groups, member[1]) | |
|
166 | ||
|
167 | return users | |
|
168 | ||
|
169 | def parse_member_string(self, member): | |
|
170 | """Parses the member string and returns a touple of type and name. | |
|
171 | ||
|
172 | Unique member can be either user or group. Users will have 'uid' as | |
|
173 | prefix while groups will have 'cn'. | |
|
174 | """ | |
|
175 | member = member.split(",")[0] | |
|
176 | return member.split('=') | |
|
177 | ||
|
178 | ||
|
179 | class LdapSync(object): | |
|
180 | ||
|
181 | def __init__(self): | |
|
182 | self.ldap_client = LdapClient(config.get("default", "ldap_uri"), | |
|
183 | config.get("default", "ldap_user"), | |
|
184 | config.get("default", "ldap_key"), | |
|
185 | config.get("default", "base_dn")) | |
|
186 | self.rhodocode_api = RhodecodeAPI(config.get("default", "api_url"), | |
|
187 | config.get("default", "api_key")) | |
|
188 | ||
|
189 | def update_groups_from_ldap(self): | |
|
190 | """Add all the groups from LDAP to Rhodecode.""" | |
|
191 | added = existing = 0 | |
|
192 | groups = self.ldap_client.get_groups() | |
|
193 | for group in groups: | |
|
194 | try: | |
|
195 | self.rhodecode_api.create_group(group) | |
|
196 | added += 1 | |
|
197 | except Exception: | |
|
198 | existing += 1 | |
|
199 | ||
|
200 | return added, existing | |
|
201 | ||
|
202 | def update_memberships_from_ldap(self, group): | |
|
203 | """Update memberships in rhodecode based on the LDAP groups.""" | |
|
204 | groups = self.ldap_client.get_groups() | |
|
205 | group_users = self.ldap_client.get_group_users(groups, group) | |
|
206 | ||
|
207 | # Delete memberships first from each group which are not part | |
|
208 | # of the group any more. | |
|
209 | rhodecode_members = self.rhodecode_api.get_group_members(group) | |
|
210 | for rhodecode_member in rhodecode_members: | |
|
211 | if rhodecode_member not in group_users: | |
|
212 | try: | |
|
213 | self.rhodocode_api.remove_membership(group, | |
|
214 | rhodecode_member) | |
|
215 | except UserNotInGroupError: | |
|
216 | pass | |
|
217 | ||
|
218 | # Add memberships. | |
|
219 | for member in group_users: | |
|
220 | try: | |
|
221 | self.rhodecode_api.add_membership(group, member) | |
|
222 | except UserAlreadyInGroupError: | |
|
223 | # TODO: handle somehow maybe.. | |
|
224 | pass | |
|
225 | ||
|
226 | ||
|
227 | if __name__ == '__main__': | |
|
228 | sync = LdapSync() | |
|
229 | print sync.update_groups_from_ldap() | |
|
230 | ||
|
231 | for gr in sync.ldap_client.get_groups(): | |
|
232 | # TODO: exception when user does not exist during add membership... | |
|
233 | # How should we handle this.. Either sync users as well at this step, | |
|
234 | # or just ignore those who don't exist. If we want the second case, | |
|
235 | # we need to find a way to recognize the right exception (we always get | |
|
236 | # RhodecodeResponseError with no error code so maybe by return msg (?) | |
|
237 | sync.update_memberships_from_ldap(gr) |
|
1 | NO CONTENT: new file 100644 | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: new file 100644 | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: new file 100644 | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: new file 100644 |
|
1 | NO CONTENT: new file 100644 | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: new file 100644 | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: new file 100644 | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: new file 100644 | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: new file 100644 | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: new file 100644 | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: new file 100644 | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: new file 100644 | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: new file 100644 | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: new file 100644 | |
The requested commit or file is too big and content was truncated. Show full diff |
@@ -33,3 +33,4 b' List of contributors to RhodeCode projec' | |||
|
33 | 33 | Philip Jameson <philip.j@hostdime.com> |
|
34 | 34 | Mads Kiilerich <madski@unity3d.com> |
|
35 | 35 | Dan Sheridan <djs@adelard.com> |
|
36 | Dennis Brakhane <brakhane@googlemail.com> |
@@ -75,7 +75,7 b' RhodeCode Features' | |||
|
75 | 75 | - Supports http/https, LDAP, AD, proxy-pass authentication. |
|
76 | 76 | - Full permissions (private/read/write/admin) together with IP restrictions for each repository, |
|
77 | 77 | additional explicit forking and repository creation permissions. |
|
78 |
- User |
|
|
78 | - User groups for easier permission management | |
|
79 | 79 | - Repository groups let you group repos and manage them easier. |
|
80 | 80 | - Users can fork other users repos, and compare them at any time. |
|
81 | 81 | - Integrates easily with other systems, with custom created mappers you can connect it to almost |
@@ -25,59 +25,92 b' pdebug = false' | |||
|
25 | 25 | #smtp_port = |
|
26 | 26 | #smtp_use_tls = false |
|
27 | 27 | #smtp_use_ssl = true |
|
28 | # Specify available auth parameters here (e.g. LOGIN PLAIN CRAM-MD5, etc.) | |
|
28 | ## Specify available auth parameters here (e.g. LOGIN PLAIN CRAM-MD5, etc.) | |
|
29 | 29 | #smtp_auth = |
|
30 | 30 | |
|
31 | 31 | [server:main] |
|
32 | 32 | ## PASTE |
|
33 | ##nr of threads to spawn | |
|
33 | ## nr of threads to spawn | |
|
34 | 34 | #threadpool_workers = 5 |
|
35 | 35 | |
|
36 | ##max request before thread respawn | |
|
36 | ## max request before thread respawn | |
|
37 | 37 | #threadpool_max_requests = 10 |
|
38 | 38 | |
|
39 | ##option to use threads of process | |
|
39 | ## option to use threads of process | |
|
40 | 40 | #use_threadpool = true |
|
41 | 41 | |
|
42 | 42 | #use = egg:Paste#http |
|
43 | 43 | |
|
44 | #WAITRESS | |
|
44 | ## WAITRESS | |
|
45 | 45 | threads = 5 |
|
46 | ## 100GB | |
|
47 | max_request_body_size = 107374182400 | |
|
46 | 48 | use = egg:waitress#main |
|
47 | 49 | |
|
48 | 50 | host = 0.0.0.0 |
|
49 | 51 | port = 5000 |
|
50 | 52 | |
|
51 | [filter:proxy-prefix] | |
|
52 | # prefix middleware for rc | |
|
53 | use = egg:PasteDeploy#prefix | |
|
54 | prefix = /<your-prefix> | |
|
53 | ## prefix middleware for rc | |
|
54 | #[filter:proxy-prefix] | |
|
55 | #use = egg:PasteDeploy#prefix | |
|
56 | #prefix = /<your-prefix> | |
|
55 | 57 | |
|
56 | 58 | [app:main] |
|
57 | 59 | use = egg:rhodecode |
|
60 | ## enable proxy prefix middleware | |
|
58 | 61 | #filter-with = proxy-prefix |
|
62 | ||
|
59 | 63 | full_stack = true |
|
60 | 64 | static_files = true |
|
61 | # Optional Languages | |
|
62 | # en, fr, ja, pt_BR, zh_CN, zh_TW, pl | |
|
65 | ## Optional Languages | |
|
66 | ## en, fr, ja, pt_BR, zh_CN, zh_TW, pl | |
|
63 | 67 | lang = en |
|
64 | 68 | cache_dir = %(here)s/data |
|
65 | 69 | index_dir = %(here)s/data/index |
|
66 | app_instance_uuid = rc-develop | |
|
70 | ||
|
71 | ## uncomment and set this path to use archive download cache | |
|
72 | #archive_cache_dir = /tmp/tarballcache | |
|
73 | ||
|
74 | ## change this to unique ID for security | |
|
75 | app_instance_uuid = rc-production | |
|
76 | ||
|
77 | ## cut off limit for large diffs (size in bytes) | |
|
67 | 78 | cut_off_limit = 256000 |
|
68 | vcs_full_cache = True | |
|
79 | ||
|
80 | ## use cache version of scm repo everywhere | |
|
81 | vcs_full_cache = true | |
|
82 | ||
|
83 | ## force https in RhodeCode, fixes https redirects, assumes it's always https | |
|
69 | 84 | force_https = false |
|
85 | ||
|
86 | ## use Strict-Transport-Security headers | |
|
87 | use_htsts = false | |
|
88 | ||
|
89 | ## number of commits stats will parse on each iteration | |
|
70 | 90 | commit_parse_limit = 25 |
|
71 | # number of items displayed in lightweight dashboard before paginating | |
|
91 | ||
|
92 | ## number of items displayed in lightweight dashboard before paginating is shown | |
|
72 | 93 | dashboard_items = 100 |
|
94 | ||
|
95 | ## use gravatar service to display avatars | |
|
73 | 96 | use_gravatar = true |
|
74 | 97 | |
|
98 | ## path to git executable | |
|
99 | git_path = git | |
|
100 | ||
|
101 | ## git rev filter option, --all is the default filter, if you need to | |
|
102 | ## hide all refs in changelog switch this to --branches --tags | |
|
103 | git_rev_filter=--all | |
|
104 | ||
|
75 | 105 | ## RSS feed options |
|
76 | ||
|
77 | 106 | rss_cut_off_limit = 256000 |
|
78 | 107 | rss_items_per_page = 10 |
|
79 | 108 | rss_include_diff = false |
|
80 | 109 | |
|
110 | ## options for showing and identifying changesets | |
|
111 | show_sha_length = 12 | |
|
112 | show_revision_number = true | |
|
113 | ||
|
81 | 114 | |
|
82 | 115 | ## alternative_gravatar_url allows you to use your own avatar server application |
|
83 | 116 | ## the following parts of the URL will be replaced |
@@ -89,8 +122,11 b' rss_include_diff = false' | |||
|
89 | 122 | #alternative_gravatar_url = http://myavatarserver.com/getbyemail/{email}/{size} |
|
90 | 123 | #alternative_gravatar_url = http://myavatarserver.com/getbymd5/{md5email}?s={size} |
|
91 | 124 | |
|
125 | ||
|
126 | ## container auth options | |
|
92 | 127 | container_auth_enabled = false |
|
93 | 128 | proxypass_auth_enabled = false |
|
129 | ||
|
94 | 130 | ## default encoding used to convert from and to unicode |
|
95 | 131 | ## can be also a comma seperated list of encoding in case of mixed encodings |
|
96 | 132 | default_encoding = utf8 |
@@ -146,6 +182,11 b' instance_id =' | |||
|
146 | 182 | ## handling that. Set this variable to 403 to return HTTPForbidden |
|
147 | 183 | auth_ret_code = |
|
148 | 184 | |
|
185 | ## locking return code. When repository is locked return this HTTP code. 2XX | |
|
186 | ## codes don't break the transactions while 4XX codes do | |
|
187 | lock_ret_code = 423 | |
|
188 | ||
|
189 | ||
|
149 | 190 | #################################### |
|
150 | 191 | ### CELERY CONFIG #### |
|
151 | 192 | #################################### |
@@ -170,7 +211,7 b' celeryd.concurrency = 2' | |||
|
170 | 211 | celeryd.log.level = debug |
|
171 | 212 | celeryd.max.tasks.per.child = 1 |
|
172 | 213 | |
|
173 | #tasks will never be sent to the queue, but executed locally instead. | |
|
214 | ## tasks will never be sent to the queue, but executed locally instead. | |
|
174 | 215 | celery.always.eager = false |
|
175 | 216 | |
|
176 | 217 | #################################### |
@@ -226,18 +267,19 b' beaker.cache.sql_cache_long.key_length =' | |||
|
226 | 267 | |
|
227 | 268 | |
|
228 | 269 | beaker.session.key = rhodecode |
|
229 |
## secure cookie requires AES python libraries |
|
|
230 |
#beaker.session.encrypt_key = |
|
|
231 |
#beaker.session.validate_key = |
|
|
270 | ## secure cookie requires AES python libraries | |
|
271 | #beaker.session.encrypt_key = <key_for_encryption> | |
|
272 | #beaker.session.validate_key = <validation_key> | |
|
273 | ||
|
232 | 274 | ## sets session as invalid if it haven't been accessed for given amount of time |
|
233 | 275 | beaker.session.timeout = 2592000 |
|
234 | 276 | beaker.session.httponly = true |
|
235 | 277 | #beaker.session.cookie_path = /<your-prefix> |
|
236 | 278 | |
|
237 |
## uncomment for https secure cookie |
|
|
279 | ## uncomment for https secure cookie | |
|
238 | 280 | beaker.session.secure = false |
|
239 | 281 | |
|
240 |
## auto save the session to not to use .save() |
|
|
282 | ## auto save the session to not to use .save() | |
|
241 | 283 | beaker.session.auto = False |
|
242 | 284 | |
|
243 | 285 | ## default cookie expiration time in seconds `true` expire at browser close ## |
@@ -252,57 +294,57 b' beaker.session.auto = False' | |||
|
252 | 294 | ### [errormator] ### |
|
253 | 295 | #################### |
|
254 | 296 | |
|
255 | # Errormator is tailored to work with RhodeCode, see | |
|
256 | # http://errormator.com for details how to obtain an account | |
|
257 | # you must install python package `errormator_client` to make it work | |
|
297 | ## Errormator is tailored to work with RhodeCode, see | |
|
298 | ## http://errormator.com for details how to obtain an account | |
|
299 | ## you must install python package `errormator_client` to make it work | |
|
258 | 300 | |
|
259 | # errormator enabled | |
|
260 |
errormator = |
|
|
301 | ## errormator enabled | |
|
302 | errormator = false | |
|
261 | 303 | |
|
262 | 304 | errormator.server_url = https://api.errormator.com |
|
263 | 305 | errormator.api_key = YOUR_API_KEY |
|
264 | 306 | |
|
265 | # TWEAK AMOUNT OF INFO SENT HERE | |
|
307 | ## TWEAK AMOUNT OF INFO SENT HERE | |
|
266 | 308 | |
|
267 | # enables 404 error logging (default False) | |
|
309 | ## enables 404 error logging (default False) | |
|
268 | 310 | errormator.report_404 = false |
|
269 | 311 | |
|
270 | # time in seconds after request is considered being slow (default 1) | |
|
312 | ## time in seconds after request is considered being slow (default 1) | |
|
271 | 313 | errormator.slow_request_time = 1 |
|
272 | 314 | |
|
273 | # record slow requests in application | |
|
274 | # (needs to be enabled for slow datastore recording and time tracking) | |
|
315 | ## record slow requests in application | |
|
316 | ## (needs to be enabled for slow datastore recording and time tracking) | |
|
275 | 317 | errormator.slow_requests = true |
|
276 | 318 | |
|
277 | # enable hooking to application loggers | |
|
319 | ## enable hooking to application loggers | |
|
278 | 320 | # errormator.logging = true |
|
279 | 321 | |
|
280 | # minimum log level for log capture | |
|
322 | ## minimum log level for log capture | |
|
281 | 323 | # errormator.logging.level = WARNING |
|
282 | 324 | |
|
283 | # send logs only from erroneous/slow requests | |
|
284 | # (saves API quota for intensive logging) | |
|
325 | ## send logs only from erroneous/slow requests | |
|
326 | ## (saves API quota for intensive logging) | |
|
285 | 327 | errormator.logging_on_error = false |
|
286 | 328 | |
|
287 | # list of additonal keywords that should be grabbed from environ object | |
|
288 | # can be string with comma separated list of words in lowercase | |
|
289 | # (by default client will always send following info: | |
|
290 | # 'REMOTE_USER', 'REMOTE_ADDR', 'SERVER_NAME', 'CONTENT_TYPE' + all keys that | |
|
291 | # start with HTTP* this list be extended with additional keywords here | |
|
329 | ## list of additonal keywords that should be grabbed from environ object | |
|
330 | ## can be string with comma separated list of words in lowercase | |
|
331 | ## (by default client will always send following info: | |
|
332 | ## 'REMOTE_USER', 'REMOTE_ADDR', 'SERVER_NAME', 'CONTENT_TYPE' + all keys that | |
|
333 | ## start with HTTP* this list be extended with additional keywords here | |
|
292 | 334 | errormator.environ_keys_whitelist = |
|
293 | 335 | |
|
294 | 336 | |
|
295 | # list of keywords that should be blanked from request object | |
|
296 | # can be string with comma separated list of words in lowercase | |
|
297 | # (by default client will always blank keys that contain following words | |
|
298 | # 'password', 'passwd', 'pwd', 'auth_tkt', 'secret', 'csrf' | |
|
299 | # this list be extended with additional keywords set here | |
|
337 | ## list of keywords that should be blanked from request object | |
|
338 | ## can be string with comma separated list of words in lowercase | |
|
339 | ## (by default client will always blank keys that contain following words | |
|
340 | ## 'password', 'passwd', 'pwd', 'auth_tkt', 'secret', 'csrf' | |
|
341 | ## this list be extended with additional keywords set here | |
|
300 | 342 | errormator.request_keys_blacklist = |
|
301 | 343 | |
|
302 | 344 | |
|
303 | # list of namespaces that should be ignores when gathering log entries | |
|
304 | # can be string with comma separated list of namespaces | |
|
305 | # (by default the client ignores own entries: errormator_client.client) | |
|
345 | ## list of namespaces that should be ignores when gathering log entries | |
|
346 | ## can be string with comma separated list of namespaces | |
|
347 | ## (by default the client ignores own entries: errormator_client.client) | |
|
306 | 348 | errormator.log_namespace_blacklist = |
|
307 | 349 | |
|
308 | 350 | |
@@ -310,8 +352,8 b' errormator.log_namespace_blacklist =' | |||
|
310 | 352 | ### [sentry] ### |
|
311 | 353 | ################ |
|
312 | 354 | |
|
313 | # sentry is a alternative open source error aggregator | |
|
314 | # you must install python packages `sentry` and `raven` to enable | |
|
355 | ## sentry is a alternative open source error aggregator | |
|
356 | ## you must install python packages `sentry` and `raven` to enable | |
|
315 | 357 | |
|
316 | 358 | sentry.dsn = YOUR_DNS |
|
317 | 359 | sentry.servers = |
@@ -371,7 +413,7 b' handlers = console' | |||
|
371 | 413 | level = DEBUG |
|
372 | 414 | handlers = |
|
373 | 415 | qualname = routes.middleware |
|
374 | # "level = DEBUG" logs the route matched and routing variables. | |
|
416 | ## "level = DEBUG" logs the route matched and routing variables. | |
|
375 | 417 | propagate = 1 |
|
376 | 418 | |
|
377 | 419 | [logger_beaker] |
@@ -13,10 +13,10 b' with JSON protocol both ways. An url to ' | |||
|
13 | 13 | API ACCESS FOR WEB VIEWS |
|
14 | 14 | ++++++++++++++++++++++++ |
|
15 | 15 | |
|
16 |
API access can also be turned on for each web view in RhodeCode that is |
|
|
17 |
decorated with `@LoginRequired` decorator. To enable API access simple change |
|
|
18 |
the standard login decorator to `@LoginRequired(api_access=True)`. |
|
|
19 |
After this change, a rhodecode view can be accessed without login by adding a |
|
|
16 | API access can also be turned on for each web view in RhodeCode that is | |
|
17 | decorated with `@LoginRequired` decorator. To enable API access simple change | |
|
18 | the standard login decorator to `@LoginRequired(api_access=True)`. | |
|
19 | After this change, a rhodecode view can be accessed without login by adding a | |
|
20 | 20 | GET parameter `?api_key=<api_key>` to url. By default this is only |
|
21 | 21 | enabled on RSS/ATOM feed views. |
|
22 | 22 | |
@@ -26,7 +26,7 b' API ACCESS' | |||
|
26 | 26 | |
|
27 | 27 | All clients are required to send JSON-RPC spec JSON data:: |
|
28 | 28 | |
|
29 |
{ |
|
|
29 | { | |
|
30 | 30 | "id:"<id>", |
|
31 | 31 | "api_key":"<api_key>", |
|
32 | 32 | "method":"<method_name>", |
@@ -49,7 +49,7 b' Simply provide' | |||
|
49 | 49 | |
|
50 | 50 | RhodeCode API will return always a JSON-RPC response:: |
|
51 | 51 | |
|
52 |
{ |
|
|
52 | { | |
|
53 | 53 | "id":<id>, # matching id sent by request |
|
54 | 54 | "result": "<result>"|null, # JSON formatted result, null if any errors |
|
55 | 55 | "error": "null"|<error_message> # JSON formatted error (if any) |
@@ -70,14 +70,14 b' will be available.' | |||
|
70 | 70 | To get started quickly simply run:: |
|
71 | 71 | |
|
72 | 72 | rhodecode-api _create_config --apikey=<youapikey> --apihost=<rhodecode host> |
|
73 | ||
|
73 | ||
|
74 | 74 | This will create a file named .config in the directory you executed it storing |
|
75 | 75 | json config file with credentials. You can skip this step and always provide |
|
76 | 76 | both of the arguments to be able to communicate with server |
|
77 | 77 | |
|
78 | 78 | |
|
79 | 79 | after that simply run any api command for example get_repo:: |
|
80 | ||
|
80 | ||
|
81 | 81 | rhodecode-api get_repo |
|
82 | 82 | |
|
83 | 83 | calling {"api_key": "<apikey>", "id": 75, "args": {}, "method": "get_repo"} to http://127.0.0.1:5000 |
@@ -90,8 +90,8 b' Ups looks like we forgot to add an argum' | |||
|
90 | 90 | |
|
91 | 91 | Let's try again now giving the repoid as parameters:: |
|
92 | 92 | |
|
93 |
rhodecode-api get_repo repoid:rhodecode |
|
|
94 | ||
|
93 | rhodecode-api get_repo repoid:rhodecode | |
|
94 | ||
|
95 | 95 | calling {"api_key": "<apikey>", "id": 39, "args": {"repoid": "rhodecode"}, "method": "get_repo"} to http://127.0.0.1:5000 |
|
96 | 96 | rhodecode said: |
|
97 | 97 | {'error': None, |
@@ -132,7 +132,7 b' rescan_repos' | |||
|
132 | 132 | |
|
133 | 133 | Dispatch rescan repositories action. If remove_obsolete is set |
|
134 | 134 | RhodeCode will delete repos that are in database but not in the filesystem. |
|
135 |
This command can be executed only using api_key belonging to user with admin |
|
|
135 | This command can be executed only using api_key belonging to user with admin | |
|
136 | 136 | rights. |
|
137 | 137 | |
|
138 | 138 | INPUT:: |
@@ -147,17 +147,40 b' INPUT::' | |||
|
147 | 147 | OUTPUT:: |
|
148 | 148 | |
|
149 | 149 | id : <id_given_in_input> |
|
150 |
result : "{'added': [<list of names of added repos>], |
|
|
150 | result : "{'added': [<list of names of added repos>], | |
|
151 | 151 | 'removed': [<list of names of removed repos>]}" |
|
152 | 152 | error : null |
|
153 | 153 | |
|
154 | 154 | |
|
155 | invalidate_cache | |
|
156 | ---------------- | |
|
157 | ||
|
158 | Invalidate cache for repository. | |
|
159 | This command can be executed only using api_key belonging to user with admin | |
|
160 | rights or regular user that have write or admin or write access to repository. | |
|
161 | ||
|
162 | INPUT:: | |
|
163 | ||
|
164 | id : <id_for_response> | |
|
165 | api_key : "<api_key>" | |
|
166 | method : "invalidate_cache" | |
|
167 | args : { | |
|
168 | "repoid" : "<reponame or repo_id>" | |
|
169 | } | |
|
170 | ||
|
171 | OUTPUT:: | |
|
172 | ||
|
173 | id : <id_given_in_input> | |
|
174 | result : "Cache for repository `<reponame>` was invalidated: invalidated cache keys: <list_of_cache_keys>" | |
|
175 | error : null | |
|
176 | ||
|
155 | 177 | lock |
|
156 | 178 | ---- |
|
157 | 179 | |
|
158 | 180 | Set locking state on given repository by given user. If userid param is skipped |
|
159 | , then it is set to id of user whos calling this method. | |
|
160 | This command can be executed only using api_key belonging to user with admin | |
|
181 | , then it is set to id of user whos calling this method. If locked param is skipped | |
|
182 | then function shows current lock state of given repo. | |
|
183 | This command can be executed only using api_key belonging to user with admin | |
|
161 | 184 | rights or regular user that have admin or write access to repository. |
|
162 | 185 | |
|
163 | 186 | INPUT:: |
@@ -168,7 +191,7 b' INPUT::' | |||
|
168 | 191 | args : { |
|
169 | 192 | "repoid" : "<reponame or repo_id>" |
|
170 | 193 | "userid" : "<user_id or username = Optional(=apiuser)>", |
|
171 | "locked" : "<bool true|false>" | |
|
194 | "locked" : "<bool true|false = Optional(=None)>" | |
|
172 | 195 | } |
|
173 | 196 | |
|
174 | 197 | OUTPUT:: |
@@ -183,7 +206,7 b' show_ip' | |||
|
183 | 206 | |
|
184 | 207 | Shows IP address as seen from RhodeCode server, together with all |
|
185 | 208 | defined IP addresses for given user. |
|
186 |
This command can be executed only using api_key belonging to user with admin |
|
|
209 | This command can be executed only using api_key belonging to user with admin | |
|
187 | 210 | rights. |
|
188 | 211 | |
|
189 | 212 | INPUT:: |
@@ -208,7 +231,7 b' OUTPUT::' | |||
|
208 | 231 | ... |
|
209 | 232 | ] |
|
210 | 233 | } |
|
211 | ||
|
234 | ||
|
212 | 235 | error : null |
|
213 | 236 | |
|
214 | 237 | |
@@ -217,7 +240,7 b' get_user' | |||
|
217 | 240 | |
|
218 | 241 | Get's an user by username or user_id, Returns empty result if user is not found. |
|
219 | 242 | If userid param is skipped it is set to id of user who is calling this method. |
|
220 |
This command can be executed only using api_key belonging to user with admin |
|
|
243 | This command can be executed only using api_key belonging to user with admin | |
|
221 | 244 | rights, or regular users that cannot specify different userid than theirs |
|
222 | 245 | |
|
223 | 246 | |
@@ -226,16 +249,17 b' INPUT::' | |||
|
226 | 249 | id : <id_for_response> |
|
227 | 250 | api_key : "<api_key>" |
|
228 | 251 | method : "get_user" |
|
229 |
args : { |
|
|
252 | args : { | |
|
230 | 253 | "userid" : "<username or user_id Optional(=apiuser)>" |
|
231 | 254 | } |
|
232 | 255 | |
|
233 | 256 | OUTPUT:: |
|
234 | 257 | |
|
235 | 258 | id : <id_given_in_input> |
|
236 |
result: None if user does not exist or |
|
|
259 | result: None if user does not exist or | |
|
237 | 260 | { |
|
238 | 261 | "user_id" : "<user_id>", |
|
262 | "api_key" : "<api_key>", | |
|
239 | 263 | "username" : "<username>", |
|
240 | 264 | "firstname": "<firstname>", |
|
241 | 265 | "lastname" : "<lastname>", |
@@ -289,7 +313,7 b' OUTPUT::' | |||
|
289 | 313 | "ldap_dn" : "<ldap_dn>", |
|
290 | 314 | "last_login": "<last_login>", |
|
291 | 315 | }, |
|
292 |
|
|
|
316 | … | |
|
293 | 317 | ] |
|
294 | 318 | error: null |
|
295 | 319 | |
@@ -297,7 +321,7 b' OUTPUT::' | |||
|
297 | 321 | create_user |
|
298 | 322 | ----------- |
|
299 | 323 | |
|
300 |
Creates new user. This command can |
|
|
324 | Creates new user. This command can | |
|
301 | 325 | be executed only using api_key belonging to user with admin rights. |
|
302 | 326 | |
|
303 | 327 | |
@@ -341,7 +365,7 b' OUTPUT::' | |||
|
341 | 365 | update_user |
|
342 | 366 | ----------- |
|
343 | 367 | |
|
344 |
updates given user if such user exists. This command can |
|
|
368 | updates given user if such user exists. This command can | |
|
345 | 369 | be executed only using api_key belonging to user with admin rights. |
|
346 | 370 | |
|
347 | 371 | |
@@ -378,7 +402,7 b' OUTPUT::' | |||
|
378 | 402 | "admin" : "<bool>", |
|
379 | 403 | "ldap_dn" : "<ldap_dn>", |
|
380 | 404 | "last_login": "<last_login>", |
|
381 |
}, |
|
|
405 | }, | |
|
382 | 406 | } |
|
383 | 407 | error: null |
|
384 | 408 | |
@@ -387,7 +411,7 b' delete_user' | |||
|
387 | 411 | ----------- |
|
388 | 412 | |
|
389 | 413 | |
|
390 |
deletes givenuser if such user exists. This command can |
|
|
414 | deletes givenuser if such user exists. This command can | |
|
391 | 415 | be executed only using api_key belonging to user with admin rights. |
|
392 | 416 | |
|
393 | 417 | |
@@ -413,7 +437,7 b' OUTPUT::' | |||
|
413 | 437 | get_users_group |
|
414 | 438 | --------------- |
|
415 | 439 | |
|
416 |
Gets an existing user |
|
|
440 | Gets an existing user group. This command can be executed only using api_key | |
|
417 | 441 | belonging to user with admin rights. |
|
418 | 442 | |
|
419 | 443 | |
@@ -423,7 +447,7 b' INPUT::' | |||
|
423 | 447 | api_key : "<api_key>" |
|
424 | 448 | method : "get_users_group" |
|
425 | 449 | args : { |
|
426 |
"usersgroupid" : "<user |
|
|
450 | "usersgroupid" : "<user group id or name>" | |
|
427 | 451 | } |
|
428 | 452 | |
|
429 | 453 | OUTPUT:: |
@@ -435,7 +459,7 b' OUTPUT::' | |||
|
435 | 459 | "group_name" : "<groupname>", |
|
436 | 460 | "active": "<bool>", |
|
437 | 461 | "members" : [ |
|
438 |
{ |
|
|
462 | { | |
|
439 | 463 | "user_id" : "<user_id>", |
|
440 | 464 | "username" : "<username>", |
|
441 | 465 | "firstname": "<firstname>", |
@@ -456,7 +480,7 b' OUTPUT::' | |||
|
456 | 480 | get_users_groups |
|
457 | 481 | ---------------- |
|
458 | 482 | |
|
459 |
Lists all existing user |
|
|
483 | Lists all existing user groups. This command can be executed only using | |
|
460 | 484 | api_key belonging to user with admin rights. |
|
461 | 485 | |
|
462 | 486 | |
@@ -484,7 +508,7 b' OUTPUT::' | |||
|
484 | 508 | create_users_group |
|
485 | 509 | ------------------ |
|
486 | 510 | |
|
487 |
Creates new user |
|
|
511 | Creates new user group. This command can be executed only using api_key | |
|
488 | 512 | belonging to user with admin rights |
|
489 | 513 | |
|
490 | 514 | |
@@ -502,7 +526,7 b' OUTPUT::' | |||
|
502 | 526 | |
|
503 | 527 | id : <id_given_in_input> |
|
504 | 528 | result: { |
|
505 |
"msg": "created new user |
|
|
529 | "msg": "created new user group `<groupname>`", | |
|
506 | 530 | "users_group": { |
|
507 | 531 | "users_group_id" : "<id>", |
|
508 | 532 | "group_name" : "<groupname>", |
@@ -515,7 +539,7 b' OUTPUT::' | |||
|
515 | 539 | add_user_to_users_group |
|
516 | 540 | ----------------------- |
|
517 | 541 | |
|
518 |
Adds a user to a user |
|
|
542 | Adds a user to a user group. If user exists in that group success will be | |
|
519 | 543 | `false`. This command can be executed only using api_key |
|
520 | 544 | belonging to user with admin rights |
|
521 | 545 | |
@@ -526,7 +550,7 b' INPUT::' | |||
|
526 | 550 | api_key : "<api_key>" |
|
527 | 551 | method : "add_user_users_group" |
|
528 | 552 | args: { |
|
529 |
"usersgroupid" : "<user |
|
|
553 | "usersgroupid" : "<user group id or name>", | |
|
530 | 554 | "userid" : "<user_id or username>", |
|
531 | 555 | } |
|
532 | 556 | |
@@ -535,7 +559,7 b' OUTPUT::' | |||
|
535 | 559 | id : <id_given_in_input> |
|
536 | 560 | result: { |
|
537 | 561 | "success": True|False # depends on if member is in group |
|
538 |
"msg": "added member `<username>` to user |
|
|
562 | "msg": "added member `<username>` to user group `<groupname>` | | |
|
539 | 563 | User is already in that group" |
|
540 | 564 | } |
|
541 | 565 | error: null |
@@ -544,8 +568,8 b' OUTPUT::' | |||
|
544 | 568 | remove_user_from_users_group |
|
545 | 569 | ---------------------------- |
|
546 | 570 | |
|
547 |
Removes a user from a user |
|
|
548 |
be `false`. This command can be executed only |
|
|
571 | Removes a user from a user group. If user is not in given group success will | |
|
572 | be `false`. This command can be executed only | |
|
549 | 573 | using api_key belonging to user with admin rights |
|
550 | 574 | |
|
551 | 575 | |
@@ -555,7 +579,7 b' INPUT::' | |||
|
555 | 579 | api_key : "<api_key>" |
|
556 | 580 | method : "remove_user_from_users_group" |
|
557 | 581 | args: { |
|
558 |
"usersgroupid" : "<user |
|
|
582 | "usersgroupid" : "<user group id or name>", | |
|
559 | 583 | "userid" : "<user_id or username>", |
|
560 | 584 | } |
|
561 | 585 | |
@@ -564,7 +588,7 b' OUTPUT::' | |||
|
564 | 588 | id : <id_given_in_input> |
|
565 | 589 | result: { |
|
566 | 590 | "success": True|False, # depends on if member is in group |
|
567 |
"msg": "removed member <username> from user |
|
|
591 | "msg": "removed member <username> from user group <groupname> | | |
|
568 | 592 | User wasn't in group" |
|
569 | 593 | } |
|
570 | 594 | error: null |
@@ -574,8 +598,8 b' get_repo' | |||
|
574 | 598 | -------- |
|
575 | 599 | |
|
576 | 600 | Gets an existing repository by it's name or repository_id. Members will return |
|
577 |
either users_group or user associated to that repository. This command can be |
|
|
578 |
executed only using api_key belonging to user with admin |
|
|
601 | either users_group or user associated to that repository. This command can be | |
|
602 | executed only using api_key belonging to user with admin | |
|
579 | 603 | rights or regular user that have at least read access to repository. |
|
580 | 604 | |
|
581 | 605 | |
@@ -599,9 +623,9 b' OUTPUT::' | |||
|
599 | 623 | "clone_uri" : "<clone_uri>", |
|
600 | 624 | "enable_downloads": "<bool>", |
|
601 | 625 | "enable_locking": "<bool>", |
|
602 |
"enable_statistics": "<bool>", |
|
|
626 | "enable_statistics": "<bool>", | |
|
603 | 627 | "private": "<bool>", |
|
604 |
"created_on" : "<date_time_created>", |
|
|
628 | "created_on" : "<date_time_created>", | |
|
605 | 629 | "description" : "<description>", |
|
606 | 630 | "landing_rev": "<landing_rev>", |
|
607 | 631 | "last_changeset": { |
@@ -615,8 +639,8 b' OUTPUT::' | |||
|
615 | 639 | "owner": "<repo_owner>", |
|
616 | 640 | "fork_of": "<name_of_fork_parent>", |
|
617 | 641 | "members" : [ |
|
618 |
{ |
|
|
619 | "type": "user", | |
|
642 | { | |
|
643 | "type": "user", | |
|
620 | 644 | "user_id" : "<user_id>", |
|
621 | 645 | "username" : "<username>", |
|
622 | 646 | "firstname": "<firstname>", |
@@ -630,8 +654,8 b' OUTPUT::' | |||
|
630 | 654 | "permission" : "repository.(read|write|admin)" |
|
631 | 655 | }, |
|
632 | 656 | … |
|
633 |
{ |
|
|
634 | "type": "users_group", | |
|
657 | { | |
|
658 | "type": "users_group", | |
|
635 | 659 | "id" : "<usersgroupid>", |
|
636 | 660 | "name" : "<usersgroupname>", |
|
637 | 661 | "active": "<bool>", |
@@ -639,6 +663,22 b' OUTPUT::' | |||
|
639 | 663 | }, |
|
640 | 664 | … |
|
641 | 665 | ] |
|
666 | "followers": [ | |
|
667 | { | |
|
668 | "user_id" : "<user_id>", | |
|
669 | "username" : "<username>", | |
|
670 | "firstname": "<firstname>", | |
|
671 | "lastname" : "<lastname>", | |
|
672 | "email" : "<email>", | |
|
673 | "emails": "<list_of_all_additional_emails>", | |
|
674 | "ip_addresses": "<list_of_ip_addresses_for_user>", | |
|
675 | "active" : "<bool>", | |
|
676 | "admin" : "<bool>", | |
|
677 | "ldap_dn" : "<ldap_dn>", | |
|
678 | "last_login": "<last_login>", | |
|
679 | }, | |
|
680 | … | |
|
681 | ] | |
|
642 | 682 | } |
|
643 | 683 | error: null |
|
644 | 684 | |
@@ -646,8 +686,8 b' OUTPUT::' | |||
|
646 | 686 | get_repos |
|
647 | 687 | --------- |
|
648 | 688 | |
|
649 |
Lists all existing repositories. This command can be executed only using |
|
|
650 |
api_key belonging to user with admin rights or regular user that have |
|
|
689 | Lists all existing repositories. This command can be executed only using | |
|
690 | api_key belonging to user with admin rights or regular user that have | |
|
651 | 691 | admin, write or read access to repository. |
|
652 | 692 | |
|
653 | 693 | |
@@ -668,14 +708,14 b' OUTPUT::' | |||
|
668 | 708 | "repo_type" : "<repo_type>", |
|
669 | 709 | "clone_uri" : "<clone_uri>", |
|
670 | 710 | "private": : "<bool>", |
|
671 |
"created_on" : "<datetimecreated>", |
|
|
711 | "created_on" : "<datetimecreated>", | |
|
672 | 712 | "description" : "<description>", |
|
673 | 713 | "landing_rev": "<landing_rev>", |
|
674 | 714 | "owner": "<repo_owner>", |
|
675 | 715 | "fork_of": "<name_of_fork_parent>", |
|
676 | 716 | "enable_downloads": "<bool>", |
|
677 | 717 | "enable_locking": "<bool>", |
|
678 |
"enable_statistics": "<bool>", |
|
|
718 | "enable_statistics": "<bool>", | |
|
679 | 719 | }, |
|
680 | 720 | … |
|
681 | 721 | ] |
@@ -685,9 +725,9 b' OUTPUT::' | |||
|
685 | 725 | get_repo_nodes |
|
686 | 726 | -------------- |
|
687 | 727 | |
|
688 |
returns a list of nodes and it's children in a flat list for a given path |
|
|
689 |
at given revision. It's possible to specify ret_type to show only `files` or |
|
|
690 |
`dirs`. This command can be executed only using api_key belonging to user |
|
|
728 | returns a list of nodes and it's children in a flat list for a given path | |
|
729 | at given revision. It's possible to specify ret_type to show only `files` or | |
|
730 | `dirs`. This command can be executed only using api_key belonging to user | |
|
691 | 731 | with admin rights |
|
692 | 732 | |
|
693 | 733 | |
@@ -720,9 +760,9 b' create_repo' | |||
|
720 | 760 | ----------- |
|
721 | 761 | |
|
722 | 762 | Creates a repository. If repository name contains "/", all needed repository |
|
723 |
groups will be created. For example "foo/bar/baz" will create groups |
|
|
724 |
"foo", "bar" (with "foo" as parent), and create "baz" repository with |
|
|
725 |
"bar" as group. This command can be executed only using api_key belonging to user with admin |
|
|
763 | groups will be created. For example "foo/bar/baz" will create groups | |
|
764 | "foo", "bar" (with "foo" as parent), and create "baz" repository with | |
|
765 | "bar" as group. This command can be executed only using api_key belonging to user with admin | |
|
726 | 766 | rights or regular user that have create repository permission. Regular users |
|
727 | 767 | cannot specify owner parameter |
|
728 | 768 | |
@@ -756,14 +796,14 b' OUTPUT::' | |||
|
756 | 796 | "repo_type" : "<repo_type>", |
|
757 | 797 | "clone_uri" : "<clone_uri>", |
|
758 | 798 | "private": : "<bool>", |
|
759 |
"created_on" : "<datetimecreated>", |
|
|
799 | "created_on" : "<datetimecreated>", | |
|
760 | 800 | "description" : "<description>", |
|
761 | 801 | "landing_rev": "<landing_rev>", |
|
762 | 802 | "owner": "<username or user_id>", |
|
763 | 803 | "fork_of": "<name_of_fork_parent>", |
|
764 | 804 | "enable_downloads": "<bool>", |
|
765 | 805 | "enable_locking": "<bool>", |
|
766 |
"enable_statistics": "<bool>", |
|
|
806 | "enable_statistics": "<bool>", | |
|
767 | 807 | }, |
|
768 | 808 | } |
|
769 | 809 | error: null |
@@ -792,7 +832,7 b' INPUT::' | |||
|
792 | 832 | "copy_permissions": "<bool>", |
|
793 | 833 | "private": "<bool>", |
|
794 | 834 | "landing_rev": "<landing_rev>" |
|
795 | ||
|
835 | ||
|
796 | 836 | } |
|
797 | 837 | |
|
798 | 838 | OUTPUT:: |
@@ -808,8 +848,10 b' OUTPUT::' | |||
|
808 | 848 | delete_repo |
|
809 | 849 | ----------- |
|
810 | 850 | |
|
811 |
Deletes a repository. This command can be executed only using api_key belonging |
|
|
812 | rights or regular user that have admin access to repository. | |
|
851 | Deletes a repository. This command can be executed only using api_key belonging | |
|
852 | to user with admin rights or regular user that have admin access to repository. | |
|
853 | When `forks` param is set it's possible to detach or delete forks of deleting | |
|
854 | repository | |
|
813 | 855 | |
|
814 | 856 | |
|
815 | 857 | INPUT:: |
@@ -818,7 +860,8 b' INPUT::' | |||
|
818 | 860 | api_key : "<api_key>" |
|
819 | 861 | method : "delete_repo" |
|
820 | 862 | args: { |
|
821 | "repoid" : "<reponame or repo_id>" | |
|
863 | "repoid" : "<reponame or repo_id>", | |
|
864 | "forks" : "`delete` or `detach` = Optional(None)" | |
|
822 | 865 | } |
|
823 | 866 | |
|
824 | 867 | OUTPUT:: |
@@ -835,7 +878,7 b' grant_user_permission' | |||
|
835 | 878 | --------------------- |
|
836 | 879 | |
|
837 | 880 | Grant permission for user on given repository, or update existing one |
|
838 |
if found. This command can be executed only using api_key belonging to user |
|
|
881 | if found. This command can be executed only using api_key belonging to user | |
|
839 | 882 | with admin rights. |
|
840 | 883 | |
|
841 | 884 | |
@@ -863,7 +906,7 b' OUTPUT::' | |||
|
863 | 906 | revoke_user_permission |
|
864 | 907 | ---------------------- |
|
865 | 908 | |
|
866 |
Revoke permission for user on given repository. This command can be executed |
|
|
909 | Revoke permission for user on given repository. This command can be executed | |
|
867 | 910 | only using api_key belonging to user with admin rights. |
|
868 | 911 | |
|
869 | 912 | |
@@ -890,8 +933,8 b' OUTPUT::' | |||
|
890 | 933 | grant_users_group_permission |
|
891 | 934 | ---------------------------- |
|
892 | 935 | |
|
893 |
Grant permission for user |
|
|
894 |
existing one if found. This command can be executed only using |
|
|
936 | Grant permission for user group on given repository, or update | |
|
937 | existing one if found. This command can be executed only using | |
|
895 | 938 | api_key belonging to user with admin rights. |
|
896 | 939 | |
|
897 | 940 | |
@@ -902,7 +945,7 b' INPUT::' | |||
|
902 | 945 | method : "grant_users_group_permission" |
|
903 | 946 | args: { |
|
904 | 947 | "repoid" : "<reponame or repo_id>" |
|
905 |
"usersgroupid" : "<user |
|
|
948 | "usersgroupid" : "<user group id or name>" | |
|
906 | 949 | "perm" : "(repository.(none|read|write|admin))", |
|
907 | 950 | } |
|
908 | 951 | |
@@ -914,12 +957,12 b' OUTPUT::' | |||
|
914 | 957 | "success": true |
|
915 | 958 | } |
|
916 | 959 | error: null |
|
917 | ||
|
918 | ||
|
960 | ||
|
961 | ||
|
919 | 962 | revoke_users_group_permission |
|
920 | 963 | ----------------------------- |
|
921 | 964 | |
|
922 |
Revoke permission for user |
|
|
965 | Revoke permission for user group on given repository.This command can be | |
|
923 | 966 | executed only using api_key belonging to user with admin rights. |
|
924 | 967 | |
|
925 | 968 | INPUT:: |
@@ -929,7 +972,7 b' INPUT::' | |||
|
929 | 972 | method : "revoke_users_group_permission" |
|
930 | 973 | args: { |
|
931 | 974 | "repoid" : "<reponame or repo_id>" |
|
932 |
"usersgroupid" : "<user |
|
|
975 | "usersgroupid" : "<user group id or name>" | |
|
933 | 976 | } |
|
934 | 977 | |
|
935 | 978 | OUTPUT:: |
@@ -939,4 +982,4 b' OUTPUT::' | |||
|
939 | 982 | "msg" : "Revoked perm for group: `<usersgroupname>` in repo: `<reponame>`", |
|
940 | 983 | "success": true |
|
941 | 984 | } |
|
942 | error: null No newline at end of file | |
|
985 | error: null |
@@ -6,30 +6,30 b' The :mod:`models` Module' | |||
|
6 | 6 | |
|
7 | 7 | .. automodule:: rhodecode.model |
|
8 | 8 | :members: |
|
9 | ||
|
9 | ||
|
10 | 10 | .. automodule:: rhodecode.model.comment |
|
11 | 11 | :members: |
|
12 | ||
|
12 | ||
|
13 | 13 | .. automodule:: rhodecode.model.notification |
|
14 |
:members: |
|
|
14 | :members: | |
|
15 | 15 | |
|
16 | 16 | .. automodule:: rhodecode.model.permission |
|
17 | 17 | :members: |
|
18 | 18 | |
|
19 | 19 | .. automodule:: rhodecode.model.repo_permission |
|
20 |
:members: |
|
|
20 | :members: | |
|
21 | 21 | |
|
22 | 22 | .. automodule:: rhodecode.model.repo |
|
23 |
:members: |
|
|
23 | :members: | |
|
24 | 24 | |
|
25 | 25 | .. automodule:: rhodecode.model.repos_group |
|
26 | 26 | :members: |
|
27 | ||
|
27 | ||
|
28 | 28 | .. automodule:: rhodecode.model.scm |
|
29 | 29 | :members: |
|
30 | ||
|
30 | ||
|
31 | 31 | .. automodule:: rhodecode.model.user |
|
32 |
:members: |
|
|
33 | ||
|
32 | :members: | |
|
33 | ||
|
34 | 34 | .. automodule:: rhodecode.model.users_group |
|
35 |
:members: |
|
|
35 | :members: |
@@ -4,6 +4,82 b'' | |||
|
4 | 4 | Changelog |
|
5 | 5 | ========= |
|
6 | 6 | |
|
7 | 1.6.0rc1 (**2013-04-07**) | |
|
8 | ------------------------- | |
|
9 | ||
|
10 | news | |
|
11 | ++++ | |
|
12 | ||
|
13 | - Redesign UI, with lots of small improvements. | |
|
14 | - Group management delegation. Group admin can manage a group, and repos | |
|
15 | under it, admin can create child groups inside group he manages. | |
|
16 | - Repository extra fields. Optional unlimited extra fields can be defined for | |
|
17 | each repository to store custom data. | |
|
18 | - API get_repo call includes repo followers now. | |
|
19 | - Large amounts of improvements in pull requests. | |
|
20 | - #734 repo switcher is available in all pages. | |
|
21 | - #733 API invalidate_cache function. | |
|
22 | - Added option to turn on HSTS headers when using SSL. | |
|
23 | - #83 show repo size on summary page. | |
|
24 | - #745 added show full diff link into to big diff message. | |
|
25 | - Deprecated RSS links - ATOM is the present and the future. | |
|
26 | - Add option to define custom lexers for custom extensions for code highlight | |
|
27 | in rcextension module. | |
|
28 | - Git executable is now configurable via .ini files. | |
|
29 | - #689 repositories now has optional detach/delete option for connected forks. | |
|
30 | - Obfuscate password when cloning a remote repo with credentials. | |
|
31 | - #788 tarball cache. zip or compressed tarballs can be optionally cached for | |
|
32 | faster serving. | |
|
33 | - Speed up of last_changeset extraction in VCS. | |
|
34 | - API get_locks function. | |
|
35 | - Configurable HTTP codes for repository locking. | |
|
36 | - Possible to use closed branches in ?branch= in changelog. | |
|
37 | - Linaro's ldap sync scripts. | |
|
38 | - #797 git refs filter is now configurable via .ini file. | |
|
39 | - New ishell paster command for easier administrative tasks. | |
|
40 | ||
|
41 | fixes | |
|
42 | +++++ | |
|
43 | ||
|
44 | - #654 switch to handles `/` in branch/tag/bookmark names. | |
|
45 | - #572 moved out password reset tasks from celery. | |
|
46 | - #730 filter out repo groups choices to only ones that you have write+ access. | |
|
47 | - #462 disable file editing when not on branch head. | |
|
48 | - #731 update-repoinfo sometimes failed to update data when changesets were | |
|
49 | initial commits. | |
|
50 | - #749,#805 and #516 Removed duplication of repo settings for rhodecode admins | |
|
51 | and repo admins. | |
|
52 | - Global permission update with "overwrite existing settings" shouldn't | |
|
53 | override private repositories. | |
|
54 | - #642 added recursion limit for stats gathering. | |
|
55 | - #739 Delete/Edit repositories should only point to admin links if the user | |
|
56 | is an super admin. | |
|
57 | - Fixed escaping of html in "patch" view for GIT repos. | |
|
58 | - #747 load changeset cache after forking to refresh lightweight dashboard caches. | |
|
59 | - Quick repo list: public/private icon control should only control icons, | |
|
60 | not repo visibility. | |
|
61 | - #746 UnicodeDedode errors on feed controllers. | |
|
62 | - #756 cleanup repos didn't properly compose paths of repos to be cleaned up. | |
|
63 | - #763 gravatar helper function should fallback into default image if somehow | |
|
64 | email provided is empty. | |
|
65 | - Fixes #762, LDAP and container created users are now activated based on | |
|
66 | the registration settings in permissions. | |
|
67 | - Cleanup would recurse into every leaf and could thus not be used on lots of | |
|
68 | large repositories. | |
|
69 | - Better detection of deleting groups with subgroups inside. | |
|
70 | - Fixed issue with renaming repos group together with changing parents with | |
|
71 | multiple nested trees. | |
|
72 | - #594 web interface file committing executes push hooks. | |
|
73 | - Disallow cloning from different URI's that http[s]/svn/git/hg. | |
|
74 | - Handling of RhodeCode extra params in consistent way. | |
|
75 | - Don't normalize path if it's empty on adding a file through web interface. | |
|
76 | - #808 missing changesets and files should return 404 not redirect | |
|
77 | - #809 added url quote in clone url. | |
|
78 | - Fixed issues with importing non-ascii repo names. | |
|
79 | - Automatically assign instance_id for host and process if it has been set to * | |
|
80 | - Fixed multiple IP addresses in each of extracted IP. | |
|
81 | - Lot of other small bug fixes and improvements. | |
|
82 | ||
|
7 | 83 | 1.5.4 (**2013-03-13**) |
|
8 | 84 | ---------------------- |
|
9 | 85 | |
@@ -20,8 +96,8 b' fixes' | |||
|
20 | 96 | if email is empty |
|
21 | 97 | - fixes #762 user global activation flag is also respected for LDAP created |
|
22 | 98 | accounts |
|
23 |
- use password obfuscate when clonning a remote repo with credentials inside |
|
|
24 | - fixed issue with renaming repos group together with changing parents | |
|
99 | - use password obfuscate when clonning a remote repo with credentials inside | |
|
100 | - fixed issue with renaming repository group together with changing parents | |
|
25 | 101 | - disallow cloning from file:/// URIs |
|
26 | 102 | - handle all cases with multiple IP addresses in proxy headers |
|
27 | 103 | |
@@ -84,7 +160,7 b' 1.5.1 (**2012-12-13**)' | |||
|
84 | 160 | news |
|
85 | 161 | ++++ |
|
86 | 162 | |
|
87 |
- implements #677: Don't allow to close pull requests when they are |
|
|
163 | - implements #677: Don't allow to close pull requests when they are | |
|
88 | 164 | under-review status |
|
89 | 165 | - implemented #670 Implementation of Roles in Pull Request |
|
90 | 166 | |
@@ -95,6 +171,7 b' fixes' | |||
|
95 | 171 | - fixed changeset status labels, they now select radio buttons |
|
96 | 172 | - #682 translation difficult for multi-line text |
|
97 | 173 | - #683 fixed difference between messages about not mapped repositories |
|
174 | - email: fail nicely when no SMTP server has been configured | |
|
98 | 175 | |
|
99 | 176 | 1.5.0 (**2012-12-12**) |
|
100 | 177 | ---------------------- |
@@ -120,7 +197,7 b' news' | |||
|
120 | 197 | - implemented #638 permissions overview to groups |
|
121 | 198 | - implements #636, lazy loading of history and authors to speed up source |
|
122 | 199 | pages rendering |
|
123 |
- implemented #647, option to pass list of default encoding used to |
|
|
200 | - implemented #647, option to pass list of default encoding used to | |
|
124 | 201 | encode to/decode from unicode |
|
125 | 202 | - added caching layer into RSS/ATOM feeds. |
|
126 | 203 | - basic implementation of cherry picking changesets for pull request, ref #575 |
@@ -143,17 +220,17 b' fixes' | |||
|
143 | 220 | - fixes #612 Double quotes to Single quotes result in bad html in diff |
|
144 | 221 | - fixes #630 git statistics do too much work making them slow. |
|
145 | 222 | - fixes #625 Git-Tags are not displayed in Shortlog |
|
146 |
- fix for issue #602, enforce str when setting mercurial UI object. |
|
|
223 | - fix for issue #602, enforce str when setting mercurial UI object. | |
|
147 | 224 | When this is used together with mercurial internal translation system |
|
148 | 225 | it can lead to UnicodeDecodeErrors |
|
149 | 226 | - fixes #645 Fix git handler when doing delete remote branch |
|
150 | - implements #649 added two seperate method for author and commiter to VCS | |
|
151 | changeset class switch author for git backed to be the real author not commiter | |
|
227 | - implements #649 added two seperate method for author and committer to VCS | |
|
228 | changeset class switch author for git backed to be the real author not committer | |
|
152 | 229 | - fix issue #504 RhodeCode is showing different versions of README on |
|
153 | 230 | different summary page loads |
|
154 | 231 | - implemented #658 Changing username in LDAP-Mode should not be allowed. |
|
155 | 232 | - fixes #652 switch to generator approach when doing file annotation to prevent |
|
156 |
huge memory consumption |
|
|
233 | huge memory consumption | |
|
157 | 234 | - fixes #666 move lockkey path location to cache_dir to ensure this path is |
|
158 | 235 | always writable for rhodecode server |
|
159 | 236 | - many more small fixes and improvements |
@@ -204,9 +281,9 b' news' | |||
|
204 | 281 | fixes |
|
205 | 282 | +++++ |
|
206 | 283 | |
|
207 |
- fixed #570 explicit user |
|
|
284 | - fixed #570 explicit user group permissions can overwrite owner permissions | |
|
208 | 285 | - fixed #578 set proper PATH with current Python for Git |
|
209 |
hooks to execute within same Python as RhodeCode |
|
|
286 | hooks to execute within same Python as RhodeCode | |
|
210 | 287 | - fixed issue with Git bare repos that ends with .git in name |
|
211 | 288 | |
|
212 | 289 | 1.4.2 (**2012-09-12**) |
@@ -221,12 +298,12 b' news' | |||
|
221 | 298 | groups. Now only write access to group allows to create a repostiory |
|
222 | 299 | within that group |
|
223 | 300 | - #565 Add support for {netloc} and {scheme} to alternative_gravatar_url |
|
224 |
- updated translation for zh_CN |
|
|
301 | - updated translation for zh_CN | |
|
225 | 302 | |
|
226 | 303 | fixes |
|
227 | 304 | +++++ |
|
228 | 305 | |
|
229 | - fixed visual permissions check on repos groups inside groups | |
|
306 | - fixed visual permissions check on repository groups inside groups | |
|
230 | 307 | - fixed issues with non-ascii search terms in search, and indexers |
|
231 | 308 | - fixed parsing of page number in GET parameters |
|
232 | 309 | - fixed issues with generating pull-request overview for repos with |
@@ -240,7 +317,7 b' news' | |||
|
240 | 317 | ++++ |
|
241 | 318 | |
|
242 | 319 | - always put a comment about code-review status change even if user send |
|
243 |
empty data |
|
|
320 | empty data | |
|
244 | 321 | - modified_on column saves repository update and it's going to be used |
|
245 | 322 | later for light version of main page ref #500 |
|
246 | 323 | - pull request notifications send much nicer emails with details about pull |
@@ -251,10 +328,10 b' fixes' | |||
|
251 | 328 | +++++ |
|
252 | 329 | |
|
253 | 330 | - fixed migrations of permissions that can lead to inconsistency. |
|
254 |
Some users sent feedback that after upgrading from older versions issues |
|
|
331 | Some users sent feedback that after upgrading from older versions issues | |
|
255 | 332 | with updating default permissions occurred. RhodeCode detects that now and |
|
256 | 333 | resets default user permission to initial state if there is a need for that. |
|
257 |
Also forces users to set the default value for new forking permission. |
|
|
334 | Also forces users to set the default value for new forking permission. | |
|
258 | 335 | - #535 improved apache wsgi example configuration in docs |
|
259 | 336 | - fixes #550 mercurial repositories comparision failed when origin repo had |
|
260 | 337 | additional not-common changesets |
@@ -273,7 +350,7 b' 1.4.0 (**2012-09-03**)' | |||
|
273 | 350 | |
|
274 | 351 | news |
|
275 | 352 | ++++ |
|
276 | ||
|
353 | ||
|
277 | 354 | - new codereview system |
|
278 | 355 | - email map, allowing users to have multiple email addresses mapped into |
|
279 | 356 | their accounts |
@@ -284,11 +361,11 b' news' | |||
|
284 | 361 | - #464 added links to groups in permission box |
|
285 | 362 | - #465 mentions autocomplete inside comments boxes |
|
286 | 363 | - #469 added --update-only option to whoosh to re-index only given list |
|
287 |
of repos in index |
|
|
364 | of repos in index | |
|
288 | 365 | - rhodecode-api CLI client |
|
289 | 366 | - new git http protocol replaced buggy dulwich implementation. |
|
290 | 367 | Now based on pygrack & gitweb |
|
291 |
- Improved RSS/ATOM feeds. Discoverable by browsers using proper headers, and |
|
|
368 | - Improved RSS/ATOM feeds. Discoverable by browsers using proper headers, and | |
|
292 | 369 | reformated based on user suggestions. Additional rss/atom feeds for user |
|
293 | 370 | journal |
|
294 | 371 | - various i18n improvements |
@@ -296,21 +373,21 b' news' | |||
|
296 | 373 | - File view now displays small gravatars off all authors of given file |
|
297 | 374 | - Implemented landing revisions. Each repository will get landing_rev attribute |
|
298 | 375 | that defines 'default' revision/branch for generating readme files |
|
299 |
- Implemented #509, RhodeCode enforces SSL for push/pulling if requested at |
|
|
376 | - Implemented #509, RhodeCode enforces SSL for push/pulling if requested at | |
|
300 | 377 | earliest possible call. |
|
301 | 378 | - Import remote svn repositories to mercurial using hgsubversion. |
|
302 | 379 | - Fixed #508 RhodeCode now has a option to explicitly set forking permissions |
|
303 | 380 | - RhodeCode can use alternative server for generating avatar icons |
|
304 | 381 | - implemented repositories locking. Pull locks, push unlocks. Also can be done |
|
305 | 382 | via API calls |
|
306 |
- #538 form for permissions can handle multiple users at once |
|
|
383 | - #538 form for permissions can handle multiple users at once | |
|
307 | 384 | |
|
308 | 385 | fixes |
|
309 | 386 | +++++ |
|
310 | 387 | |
|
311 | 388 | - improved translations |
|
312 | 389 | - fixes issue #455 Creating an archive generates an exception on Windows |
|
313 |
- fixes #448 Download ZIP archive keeps file in /tmp open and results |
|
|
390 | - fixes #448 Download ZIP archive keeps file in /tmp open and results | |
|
314 | 391 | in out of disk space |
|
315 | 392 | - fixes issue #454 Search results under Windows include proceeding |
|
316 | 393 | backslash |
@@ -322,9 +399,9 b' fixes' | |||
|
322 | 399 | - fixed issue #459. Changed the way of obtaining logger in reindex task. |
|
323 | 400 | - fixed #453 added ID field in whoosh SCHEMA that solves the issue of |
|
324 | 401 | reindexing modified files |
|
325 |
- fixed #481 rhodecode emails are sent without Date header |
|
|
402 | - fixed #481 rhodecode emails are sent without Date header | |
|
326 | 403 | - fixed #458 wrong count when no repos are present |
|
327 |
- fixed issue #492 missing `\ No newline at end of file` test at the end of |
|
|
404 | - fixed issue #492 missing `\ No newline at end of file` test at the end of | |
|
328 | 405 | new chunk in html diff |
|
329 | 406 | - full text search now works also for commit messages |
|
330 | 407 | |
@@ -335,8 +412,8 b' news' | |||
|
335 | 412 | ++++ |
|
336 | 413 | |
|
337 | 414 | - chinese traditional translation |
|
338 |
- changed setup-app into setup-rhodecode and added arguments for auto-setup |
|
|
339 |
mode that doesn't need user interaction |
|
|
415 | - changed setup-app into setup-rhodecode and added arguments for auto-setup | |
|
416 | mode that doesn't need user interaction | |
|
340 | 417 | |
|
341 | 418 | fixes |
|
342 | 419 | +++++ |
@@ -356,11 +433,11 b' news' | |||
|
356 | 433 | - use ext_json for json module |
|
357 | 434 | - unified annotation view with file source view |
|
358 | 435 | - notification improvements, better inbox + css |
|
359 |
- #419 don't strip passwords for login forms, make rhodecode |
|
|
436 | - #419 don't strip passwords for login forms, make rhodecode | |
|
360 | 437 | more compatible with LDAP servers |
|
361 |
- Added HTTP_X_FORWARDED_FOR as another method of extracting |
|
|
362 |
IP for pull/push logs. - moved all to base controller |
|
|
363 |
- #415: Adding comment to changeset causes reload. |
|
|
438 | - Added HTTP_X_FORWARDED_FOR as another method of extracting | |
|
439 | IP for pull/push logs. - moved all to base controller | |
|
440 | - #415: Adding comment to changeset causes reload. | |
|
364 | 441 | Comments are now added via ajax and doesn't reload the page |
|
365 | 442 | - #374 LDAP config is discarded when LDAP can't be activated |
|
366 | 443 | - limited push/pull operations are now logged for git in the journal |
@@ -376,7 +453,7 b' fixes' | |||
|
376 | 453 | - #418 cast to unicode fixes in notification objects |
|
377 | 454 | - #426 fixed mention extracting regex |
|
378 | 455 | - fixed remote-pulling for git remotes remopositories |
|
379 |
- fixed #434: Error when accessing files or changesets of a git repository |
|
|
456 | - fixed #434: Error when accessing files or changesets of a git repository | |
|
380 | 457 | with submodules |
|
381 | 458 | - fixed issue with empty APIKEYS for users after registration ref. #438 |
|
382 | 459 | - fixed issue with getting README files from git repositories |
@@ -393,15 +470,15 b' news' | |||
|
393 | 470 | - created rcextensions module with additional mappings (ref #322) and |
|
394 | 471 | post push/pull/create repo hooks callbacks |
|
395 | 472 | - implemented #377 Users view for his own permissions on account page |
|
396 |
- #399 added inheritance of permissions for user |
|
|
397 |
- #401 repository group is automatically pre-selected when adding repos |
|
|
473 | - #399 added inheritance of permissions for user group on repository groups | |
|
474 | - #401 repository group is automatically pre-selected when adding repos | |
|
398 | 475 | inside a repository group |
|
399 |
- added alternative HTTP 403 response when client failed to authenticate. Helps |
|
|
476 | - added alternative HTTP 403 response when client failed to authenticate. Helps | |
|
400 | 477 | solving issues with Mercurial and LDAP |
|
401 |
- #402 removed group prefix from repository name when listing repositories |
|
|
478 | - #402 removed group prefix from repository name when listing repositories | |
|
402 | 479 | inside a group |
|
403 | 480 | - added gravatars into permission view and permissions autocomplete |
|
404 |
- #347 when running multiple RhodeCode instances, properly invalidates cache |
|
|
481 | - #347 when running multiple RhodeCode instances, properly invalidates cache | |
|
405 | 482 | for all registered servers |
|
406 | 483 | |
|
407 | 484 | fixes |
@@ -411,15 +488,15 b' fixes' | |||
|
411 | 488 | - fixed #385 clone by ID url was loosing proxy prefix in URL |
|
412 | 489 | - fixed some unicode problems with waitress |
|
413 | 490 | - fixed issue with escaping < and > in changeset commits |
|
414 |
- fixed error occurring during recursive group creation in API |
|
|
491 | - fixed error occurring during recursive group creation in API | |
|
415 | 492 | create_repo function |
|
416 | 493 | - fixed #393 py2.5 fixes for routes url generator |
|
417 | 494 | - fixed #397 Private repository groups shows up before login |
|
418 | 495 | - fixed #396 fixed problems with revoking users in nested groups |
|
419 |
- fixed mysql unicode issues + specified InnoDB as default engine with |
|
|
496 | - fixed mysql unicode issues + specified InnoDB as default engine with | |
|
420 | 497 | utf8 charset |
|
421 | 498 | - #406 trim long branch/tag names in changelog to not break UI |
|
422 | ||
|
499 | ||
|
423 | 500 | 1.3.3 (**2012-03-02**) |
|
424 | 501 | ---------------------- |
|
425 | 502 | |
@@ -430,11 +507,11 b' news' | |||
|
430 | 507 | fixes |
|
431 | 508 | +++++ |
|
432 | 509 | |
|
433 |
- fixed some python2.5 compatibility issues |
|
|
510 | - fixed some python2.5 compatibility issues | |
|
434 | 511 | - fixed issues with removed repos was accidentally added as groups, after |
|
435 | 512 | full rescan of paths |
|
436 | 513 | - fixes #376 Cannot edit user (using container auth) |
|
437 |
- fixes #378 Invalid image urls on changeset screen with proxy-prefix |
|
|
514 | - fixes #378 Invalid image urls on changeset screen with proxy-prefix | |
|
438 | 515 | configuration |
|
439 | 516 | - fixed initial sorting of repos inside repo group |
|
440 | 517 | - fixes issue when user tried to resubmit same permission into user/user_groups |
@@ -442,7 +519,7 b' fixes' | |||
|
442 | 519 | - fixed raw_changeset for git. It was generated with hg patch headers |
|
443 | 520 | - fixed vcs issue with last_changeset for filenodes |
|
444 | 521 | - fixed missing commit after hook delete |
|
445 |
- fixed #372 issues with git operation detection that caused a security issue |
|
|
522 | - fixed #372 issues with git operation detection that caused a security issue | |
|
446 | 523 | for git repos |
|
447 | 524 | |
|
448 | 525 | 1.3.2 (**2012-02-28**) |
@@ -459,9 +536,9 b' fixes' | |||
|
459 | 536 | - fixed git remote repos validator that prevented from cloning remote git repos |
|
460 | 537 | - fixes #370 ending slashes fixes for repo and groups |
|
461 | 538 | - fixes #368 improved git-protocol detection to handle other clients |
|
462 |
- fixes #366 When Setting Repository Group To Blank Repo Group Wont Be |
|
|
539 | - fixes #366 When Setting Repository Group To Blank Repo Group Wont Be | |
|
463 | 540 | Moved To Root |
|
464 |
- fixes #371 fixed issues with beaker/sqlalchemy and non-ascii cache keys |
|
|
541 | - fixes #371 fixed issues with beaker/sqlalchemy and non-ascii cache keys | |
|
465 | 542 | - fixed #373 missing cascade drop on user_group_to_perm table |
|
466 | 543 | |
|
467 | 544 | 1.3.1 (**2012-02-27**) |
@@ -475,7 +552,7 b' fixes' | |||
|
475 | 552 | +++++ |
|
476 | 553 | |
|
477 | 554 | - redirection loop occurs when remember-me wasn't checked during login |
|
478 |
- fixes issues with git blob history generation |
|
|
555 | - fixes issues with git blob history generation | |
|
479 | 556 | - don't fetch branch for git in file history dropdown. Causes unneeded slowness |
|
480 | 557 | |
|
481 | 558 | 1.3.0 (**2012-02-26**) |
@@ -484,19 +561,19 b' 1.3.0 (**2012-02-26**)' | |||
|
484 | 561 | news |
|
485 | 562 | ++++ |
|
486 | 563 | |
|
487 |
- code review, inspired by github code-comments |
|
|
564 | - code review, inspired by github code-comments | |
|
488 | 565 | - #215 rst and markdown README files support |
|
489 | 566 | - #252 Container-based and proxy pass-through authentication support |
|
490 | 567 | - #44 branch browser. Filtering of changelog by branches |
|
491 | 568 | - mercurial bookmarks support |
|
492 | 569 | - new hover top menu, optimized to add maximum size for important views |
|
493 |
- configurable clone url template with possibility to specify protocol like |
|
|
570 | - configurable clone url template with possibility to specify protocol like | |
|
494 | 571 | ssh:// or http:// and also manually alter other parts of clone_url. |
|
495 | 572 | - enabled largefiles extension by default |
|
496 | 573 | - optimized summary file pages and saved a lot of unused space in them |
|
497 | 574 | - #239 option to manually mark repository as fork |
|
498 | 575 | - #320 mapping of commit authors to RhodeCode users |
|
499 |
- #304 hashes are displayed using monospace font |
|
|
576 | - #304 hashes are displayed using monospace font | |
|
500 | 577 | - diff configuration, toggle white lines and context lines |
|
501 | 578 | - #307 configurable diffs, whitespace toggle, increasing context lines |
|
502 | 579 | - sorting on branches, tags and bookmarks using YUI datatable |
@@ -504,17 +581,17 b' news' | |||
|
504 | 581 | - implements #330 api method for listing nodes ar particular revision |
|
505 | 582 | - #73 added linking issues in commit messages to chosen issue tracker url |
|
506 | 583 | based on user defined regular expression |
|
507 |
- added linking of changesets in commit messages |
|
|
584 | - added linking of changesets in commit messages | |
|
508 | 585 | - new compact changelog with expandable commit messages |
|
509 | 586 | - firstname and lastname are optional in user creation |
|
510 | 587 | - #348 added post-create repository hook |
|
511 |
- #212 global encoding settings is now configurable from .ini files |
|
|
588 | - #212 global encoding settings is now configurable from .ini files | |
|
512 | 589 | - #227 added repository groups permissions |
|
513 | 590 | - markdown gets codehilite extensions |
|
514 |
- new API methods, delete_repositories, grante/revoke permissions for groups |
|
|
591 | - new API methods, delete_repositories, grante/revoke permissions for groups | |
|
515 | 592 | and repos |
|
516 | ||
|
517 | ||
|
593 | ||
|
594 | ||
|
518 | 595 | fixes |
|
519 | 596 | +++++ |
|
520 | 597 | |
@@ -522,15 +599,15 b' fixes' | |||
|
522 | 599 | - fixed sorting of repo tables |
|
523 | 600 | - #326 escape of special html entities in diffs |
|
524 | 601 | - normalized user_name => username in api attributes |
|
525 |
- fixes #298 ldap created users with mixed case emails created conflicts |
|
|
602 | - fixes #298 ldap created users with mixed case emails created conflicts | |
|
526 | 603 | on saving a form |
|
527 |
- fixes issue when owner of a repo couldn't revoke permissions for users |
|
|
604 | - fixes issue when owner of a repo couldn't revoke permissions for users | |
|
528 | 605 | and groups |
|
529 | 606 | - fixes #271 rare JSON serialization problem with statistics |
|
530 | 607 | - fixes #337 missing validation check for conflicting names of a group with a |
|
531 |
repositor |
|
|
608 | repository group | |
|
532 | 609 | - #340 fixed session problem for mysql and celery tasks |
|
533 |
- fixed #331 RhodeCode mangles repository names if the a repository group |
|
|
610 | - fixed #331 RhodeCode mangles repository names if the a repository group | |
|
534 | 611 | contains the "full path" to the repositories |
|
535 | 612 | - #355 RhodeCode doesn't store encrypted LDAP passwords |
|
536 | 613 | |
@@ -551,7 +628,7 b' fixes' | |||
|
551 | 628 | operation leading to crash. |
|
552 | 629 | - fixed missing email in account page. |
|
553 | 630 | - Reverted Mercurial to 2.0.1 for windows due to bug in Mercurial that makes |
|
554 |
forking on windows impossible |
|
|
631 | forking on windows impossible | |
|
555 | 632 | |
|
556 | 633 | 1.2.4 (**2012-01-19**) |
|
557 | 634 | ---------------------- |
@@ -563,23 +640,23 b' news' | |||
|
563 | 640 | full support to largefiles extension. Enabled by default in new installations |
|
564 | 641 | - #329 Ability to Add/Remove Groups to/from a Repository via AP |
|
565 | 642 | - added requires.txt file with requirements |
|
566 | ||
|
643 | ||
|
567 | 644 | fixes |
|
568 | 645 | +++++ |
|
569 | 646 | |
|
570 | 647 | - fixes db session issues with celery when emailing admins |
|
571 |
- #331 RhodeCode mangles repository names if the a repository group |
|
|
648 | - #331 RhodeCode mangles repository names if the a repository group | |
|
572 | 649 | contains the "full path" to the repositories |
|
573 | 650 | - #298 Conflicting e-mail addresses for LDAP and RhodeCode users |
|
574 | 651 | - DB session cleanup after hg protocol operations, fixes issues with |
|
575 | 652 | `mysql has gone away` errors |
|
576 | 653 | - #333 doc fixes for get_repo api function |
|
577 | 654 | - #271 rare JSON serialization problem with statistics enabled |
|
578 |
- #337 Fixes issues with validation of repository name conflicting with |
|
|
655 | - #337 Fixes issues with validation of repository name conflicting with | |
|
579 | 656 | a group name. A proper message is now displayed. |
|
580 | 657 | - #292 made ldap_dn in user edit readonly, to get rid of confusion that field |
|
581 |
doesn't work |
|
|
582 |
- #316 fixes issues with web description in hgrc files |
|
|
658 | doesn't work | |
|
659 | - #316 fixes issues with web description in hgrc files | |
|
583 | 660 | |
|
584 | 661 | 1.2.3 (**2011-11-02**) |
|
585 | 662 | ---------------------- |
@@ -587,21 +664,21 b' 1.2.3 (**2011-11-02**)' | |||
|
587 | 664 | news |
|
588 | 665 | ++++ |
|
589 | 666 | |
|
590 | - added option to manage repos group for non admin users | |
|
591 |
- added following API methods for get_users, create_user, get_users_groups, |
|
|
592 |
get_users_group, create_users_group, add_user_to_users_groups, get_repos, |
|
|
667 | - added option to manage repository group for non admin users | |
|
668 | - added following API methods for get_users, create_user, get_users_groups, | |
|
669 | get_users_group, create_users_group, add_user_to_users_groups, get_repos, | |
|
593 | 670 | get_repo, create_repo, add_user_to_repo |
|
594 |
- implements #237 added password confirmation for my account |
|
|
671 | - implements #237 added password confirmation for my account | |
|
595 | 672 | and admin edit user. |
|
596 | 673 | - implements #291 email notification for global events are now sent to all |
|
597 | 674 | administrator users, and global config email. |
|
598 | ||
|
675 | ||
|
599 | 676 | fixes |
|
600 | 677 | +++++ |
|
601 | 678 | |
|
602 | 679 | - added option for passing auth method for smtp mailer |
|
603 | 680 | - #276 issue with adding a single user with id>10 to usergroups |
|
604 |
- #277 fixes windows LDAP settings in which missing values breaks the ldap auth |
|
|
681 | - #277 fixes windows LDAP settings in which missing values breaks the ldap auth | |
|
605 | 682 | - #288 fixes managing of repos in a group for non admin user |
|
606 | 683 | |
|
607 | 684 | 1.2.2 (**2011-10-17**) |
@@ -611,17 +688,17 b' news' | |||
|
611 | 688 | ++++ |
|
612 | 689 | |
|
613 | 690 | - #226 repo groups are available by path instead of numerical id |
|
614 | ||
|
691 | ||
|
615 | 692 | fixes |
|
616 | 693 | +++++ |
|
617 | 694 | |
|
618 | 695 | - #259 Groups with the same name but with different parent group |
|
619 | 696 | - #260 Put repo in group, then move group to another group -> repo becomes unavailable |
|
620 | 697 | - #258 RhodeCode 1.2 assumes egg folder is writable (lockfiles problems) |
|
621 |
- #265 ldap save fails sometimes on converting attributes to booleans, |
|
|
698 | - #265 ldap save fails sometimes on converting attributes to booleans, | |
|
622 | 699 | added getter and setter into model that will prevent from this on db model level |
|
623 | 700 | - fixed problems with timestamps issues #251 and #213 |
|
624 |
- fixes #266 RhodeCode allows to create repo with the same name and in |
|
|
701 | - fixes #266 RhodeCode allows to create repo with the same name and in | |
|
625 | 702 | the same parent as group |
|
626 | 703 | - fixes #245 Rescan of the repositories on Windows |
|
627 | 704 | - fixes #248 cannot edit repos inside a group on windows |
@@ -637,7 +714,7 b' news' | |||
|
637 | 714 | fixes |
|
638 | 715 | +++++ |
|
639 | 716 | |
|
640 |
- fixed problems with basic auth and push problems |
|
|
717 | - fixed problems with basic auth and push problems | |
|
641 | 718 | - gui fixes |
|
642 | 719 | - fixed logger |
|
643 | 720 | |
@@ -655,30 +732,30 b' news' | |||
|
655 | 732 | - implemented #84 downloads can be enabled/disabled for each repository |
|
656 | 733 | - anonymous repository can be cloned without having to pass default:default |
|
657 | 734 | into clone url |
|
658 |
- fixed #90 whoosh indexer can index chooses repositories passed in command |
|
|
735 | - fixed #90 whoosh indexer can index chooses repositories passed in command | |
|
659 | 736 | line |
|
660 | 737 | - extended journal with day aggregates and paging |
|
661 | 738 | - implemented #107 source code lines highlight ranges |
|
662 |
- implemented #93 customizable changelog on combined revision ranges - |
|
|
663 |
equivalent of githubs compare view |
|
|
739 | - implemented #93 customizable changelog on combined revision ranges - | |
|
740 | equivalent of githubs compare view | |
|
664 | 741 | - implemented #108 extended and more powerful LDAP configuration |
|
665 |
- implemented #56 user |
|
|
742 | - implemented #56 user groups | |
|
666 | 743 | - major code rewrites optimized codes for speed and memory usage |
|
667 | 744 | - raw and diff downloads are now in git format |
|
668 | 745 | - setup command checks for write access to given path |
|
669 | 746 | - fixed many issues with international characters and unicode. It uses utf8 |
|
670 | 747 | decode with replace to provide less errors even with non utf8 encoded strings |
|
671 | 748 | - #125 added API KEY access to feeds |
|
672 |
- #109 Repository can be created from external Mercurial link (aka. remote |
|
|
749 | - #109 Repository can be created from external Mercurial link (aka. remote | |
|
673 | 750 | repository, and manually updated (via pull) from admin panel |
|
674 | 751 | - beta git support - push/pull server + basic view for git repos |
|
675 | 752 | - added followers page and forks page |
|
676 |
- server side file creation (with binary file upload interface) |
|
|
677 |
and edition with commits powered by codemirror |
|
|
678 |
- #111 file browser file finder, quick lookup files on whole file tree |
|
|
753 | - server side file creation (with binary file upload interface) | |
|
754 | and edition with commits powered by codemirror | |
|
755 | - #111 file browser file finder, quick lookup files on whole file tree | |
|
679 | 756 | - added quick login sliding menu into main page |
|
680 |
- changelog uses lazy loading of affected files details, in some scenarios |
|
|
681 |
this can improve speed of changelog page dramatically especially for |
|
|
757 | - changelog uses lazy loading of affected files details, in some scenarios | |
|
758 | this can improve speed of changelog page dramatically especially for | |
|
682 | 759 | larger repositories. |
|
683 | 760 | - implements #214 added support for downloading subrepos in download menu. |
|
684 | 761 | - Added basic API for direct operations on rhodecode via JSON |
@@ -687,7 +764,7 b' news' | |||
|
687 | 764 | fixes |
|
688 | 765 | +++++ |
|
689 | 766 | |
|
690 |
- fixed file browser bug, when switching into given form revision the url was |
|
|
767 | - fixed file browser bug, when switching into given form revision the url was | |
|
691 | 768 | not changing |
|
692 | 769 | - fixed propagation to error controller on simplehg and simplegit middlewares |
|
693 | 770 | - fixed error when trying to make a download on empty repository |
@@ -696,8 +773,8 b' fixes' | |||
|
696 | 773 | - journal fork fixes |
|
697 | 774 | - removed issue with space inside renamed repository after deletion |
|
698 | 775 | - fixed strange issue on formencode imports |
|
699 |
- fixed #126 Deleting repository on Windows, rename used incompatible chars. |
|
|
700 |
- #150 fixes for errors on repositories mapped in db but corrupted in |
|
|
776 | - fixed #126 Deleting repository on Windows, rename used incompatible chars. | |
|
777 | - #150 fixes for errors on repositories mapped in db but corrupted in | |
|
701 | 778 | filesystem |
|
702 | 779 | - fixed problem with ascendant characters in realm #181 |
|
703 | 780 | - fixed problem with sqlite file based database connection pool |
@@ -707,12 +784,12 b' fixes' | |||
|
707 | 784 | - fixes issue #197 Relative paths for pidlocks |
|
708 | 785 | - fixes issue #198 password will require only 3 chars now for login form |
|
709 | 786 | - fixes issue #199 wrong redirection for non admin users after creating a repository |
|
710 |
- fixes issues #202, bad db constraint made impossible to attach same group |
|
|
787 | - fixes issues #202, bad db constraint made impossible to attach same group | |
|
711 | 788 | more than one time. Affects only mysql/postgres |
|
712 | 789 | - fixes #218 os.kill patch for windows was missing sig param |
|
713 |
- improved rendering of dag (they are not trimmed anymore when number of |
|
|
790 | - improved rendering of dag (they are not trimmed anymore when number of | |
|
714 | 791 | heads exceeds 5) |
|
715 | ||
|
792 | ||
|
716 | 793 | 1.1.8 (**2011-04-12**) |
|
717 | 794 | ---------------------- |
|
718 | 795 | |
@@ -739,7 +816,7 b' fixes' | |||
|
739 | 816 | - fixed problems with displaying binary files, thanks to Thomas Waldmann |
|
740 | 817 | - removed name from archive files since it's breaking ui for long repo names |
|
741 | 818 | - fixed issue with archive headers sent to browser, thanks to Thomas Waldmann |
|
742 |
- fixed compatibility for 1024px displays, and larger dpi settings, thanks to |
|
|
819 | - fixed compatibility for 1024px displays, and larger dpi settings, thanks to | |
|
743 | 820 | Thomas Waldmann |
|
744 | 821 | - fixed issue #166 summary pager was skipping 10 revisions on second page |
|
745 | 822 | |
@@ -783,8 +860,8 b' fixes' | |||
|
783 | 860 | - fixed sorting by author in main page |
|
784 | 861 | - fixed crashes with diffs on binary files |
|
785 | 862 | - fixed #131 problem with boolean values for LDAP |
|
786 |
- fixed #122 mysql problems thanks to striker69 |
|
|
787 |
- fixed problem with errors on calling raw/raw_files/annotate functions |
|
|
863 | - fixed #122 mysql problems thanks to striker69 | |
|
864 | - fixed problem with errors on calling raw/raw_files/annotate functions | |
|
788 | 865 | with unknown revisions |
|
789 | 866 | - fixed returned rawfiles attachment names with international character |
|
790 | 867 | - cleaned out docs, big thanks to Jason Harris |
@@ -801,7 +878,7 b' fixes' | |||
|
801 | 878 | - fixed formencode import problem on settings page, that caused server crash |
|
802 | 879 | when that page was accessed as first after server start |
|
803 | 880 | - journal fixes |
|
804 |
- fixed option to access repository just by entering http://server/<repo_name> |
|
|
881 | - fixed option to access repository just by entering http://server/<repo_name> | |
|
805 | 882 | |
|
806 | 883 | 1.1.3 (**2011-02-16**) |
|
807 | 884 | ---------------------- |
@@ -816,11 +893,11 b' news' | |||
|
816 | 893 | fixes |
|
817 | 894 | +++++ |
|
818 | 895 | |
|
819 |
- fixed ehlo command and non auth mail servers on smtp_lib. Thanks to |
|
|
896 | - fixed ehlo command and non auth mail servers on smtp_lib. Thanks to | |
|
820 | 897 | apollo13 and Johan Walles |
|
821 | 898 | - small fixes in journal |
|
822 | 899 | - fixed problems with getting setting for celery from .ini files |
|
823 |
- registration, password reset and login boxes share the same title as main |
|
|
900 | - registration, password reset and login boxes share the same title as main | |
|
824 | 901 | application now |
|
825 | 902 | - fixed #113: to high permissions to fork repository |
|
826 | 903 | - fixed problem with '[' chars in commit messages in journal |
@@ -841,11 +918,11 b' fixes' | |||
|
841 | 918 | |
|
842 | 919 | - fixes #98 protection against float division of percentage stats |
|
843 | 920 | - fixed graph bug |
|
844 |
- forced webhelpers version since it was making troubles during installation |
|
|
921 | - forced webhelpers version since it was making troubles during installation | |
|
845 | 922 | |
|
846 | 923 | 1.1.1 (**2011-01-06**) |
|
847 | 924 | ---------------------- |
|
848 | ||
|
925 | ||
|
849 | 926 | news |
|
850 | 927 | ++++ |
|
851 | 928 | |
@@ -869,10 +946,10 b' news' | |||
|
869 | 946 | ++++ |
|
870 | 947 | |
|
871 | 948 | - rewrite of internals for vcs >=0.1.10 |
|
872 |
- uses mercurial 1.7 with dotencode disabled for maintaining compatibility |
|
|
949 | - uses mercurial 1.7 with dotencode disabled for maintaining compatibility | |
|
873 | 950 | with older clients |
|
874 | 951 | - anonymous access, authentication via ldap |
|
875 |
- performance upgrade for cached repos list - each repository has its own |
|
|
952 | - performance upgrade for cached repos list - each repository has its own | |
|
876 | 953 | cache that's invalidated when needed. |
|
877 | 954 | - performance upgrades on repositories with large amount of commits (20K+) |
|
878 | 955 | - main page quick filter for filtering repositories |
@@ -882,7 +959,7 b' news' | |||
|
882 | 959 | - more detailed action logger (based on hooks) with pushed changesets lists |
|
883 | 960 | and options to disable those hooks from admin panel |
|
884 | 961 | - introduced new enhanced changelog for merges that shows more accurate results |
|
885 |
- new improved and faster code stats (based on pygments lexers mapping tables, |
|
|
962 | - new improved and faster code stats (based on pygments lexers mapping tables, | |
|
886 | 963 | showing up to 10 trending sources for each repository. Additionally stats |
|
887 | 964 | can be disabled in repository settings. |
|
888 | 965 | - gui optimizations, fixed application width to 1024px |
@@ -903,10 +980,10 b' fixes' | |||
|
903 | 980 | - a lot of fixes and tweaks for file browser |
|
904 | 981 | - fixed detached session issues |
|
905 | 982 | - fixed when user had no repos he would see all repos listed in my account |
|
906 |
- fixed ui() instance bug when global hgrc settings was loaded for server |
|
|
983 | - fixed ui() instance bug when global hgrc settings was loaded for server | |
|
907 | 984 | instance and all hgrc options were merged with our db ui() object |
|
908 | 985 | - numerous small bugfixes |
|
909 | ||
|
986 | ||
|
910 | 987 | (special thanks for TkSoh for detailed feedback) |
|
911 | 988 | |
|
912 | 989 | |
@@ -971,6 +1048,6 b' 1.0.0rc3 (**2010-10-11**)' | |||
|
971 | 1048 | 1.0.0rc2 (**2010-10-11**) |
|
972 | 1049 | ------------------------- |
|
973 | 1050 | |
|
974 |
- Disabled dirsize in file browser, it's causing nasty bug when dir renames |
|
|
1051 | - Disabled dirsize in file browser, it's causing nasty bug when dir renames | |
|
975 | 1052 | occure. After vcs is fixed it'll be put back again. |
|
976 | 1053 | - templating/css rewrites, optimized css. |
@@ -10,9 +10,9 b' greatly appreciated!' | |||
|
10 | 10 | Could I request that you make your source contributions by first forking the |
|
11 | 11 | RhodeCode repository on bitbucket_ |
|
12 | 12 | https://bitbucket.org/marcinkuzminski/rhodecode and then make your changes to |
|
13 |
your forked repository. Please post all fixes into **BETA** branch since your |
|
|
13 | your forked repository. Please post all fixes into **BETA** branch since your | |
|
14 | 14 | fix might be already fixed there and i try to merge all fixes from beta into |
|
15 |
stable, and not the other way. Finally, when you are finished making a change, |
|
|
15 | stable, and not the other way. Finally, when you are finished making a change, | |
|
16 | 16 | please send me a pull request. |
|
17 | 17 | |
|
18 | 18 | To run RhodeCode in a development version you always need to install the latest |
@@ -22,7 +22,7 b' after downloading/pulling RhodeCode make' | |||
|
22 | 22 | |
|
23 | 23 | python setup.py develop |
|
24 | 24 | |
|
25 |
command to install/verify all required packages, and prepare development |
|
|
25 | command to install/verify all required packages, and prepare development | |
|
26 | 26 | enviroment. |
|
27 | 27 | |
|
28 | 28 |
@@ -13,7 +13,7 b' Users Guide' | |||
|
13 | 13 | installation |
|
14 | 14 | setup |
|
15 | 15 | upgrade |
|
16 | ||
|
16 | ||
|
17 | 17 | **Usage** |
|
18 | 18 | |
|
19 | 19 | .. toctree:: |
@@ -33,7 +33,7 b' Users Guide' | |||
|
33 | 33 | |
|
34 | 34 | .. toctree:: |
|
35 | 35 | :maxdepth: 1 |
|
36 | ||
|
36 | ||
|
37 | 37 | contributing |
|
38 | 38 | changelog |
|
39 | 39 | |
@@ -44,7 +44,7 b' Users Guide' | |||
|
44 | 44 | |
|
45 | 45 | api/api |
|
46 | 46 | api/models |
|
47 | ||
|
47 | ||
|
48 | 48 | |
|
49 | 49 | Other topics |
|
50 | 50 | ------------ |
@@ -61,4 +61,4 b' Other topics' | |||
|
61 | 61 | .. _git: http://git-scm.com/ |
|
62 | 62 | .. _celery: http://celeryproject.org/ |
|
63 | 63 | .. _Sphinx: http://sphinx.pocoo.org/ |
|
64 | .. _vcs: http://pypi.python.org/pypi/vcs No newline at end of file | |
|
64 | .. _vcs: http://pypi.python.org/pypi/vcs |
@@ -4,8 +4,8 b'' | |||
|
4 | 4 | Installation |
|
5 | 5 | ============ |
|
6 | 6 | |
|
7 |
``RhodeCode`` is written entirely in Python. Before posting any issues make |
|
|
8 |
sure, your not missing any system libraries and using right version of |
|
|
7 | ``RhodeCode`` is written entirely in Python. Before posting any issues make | |
|
8 | sure, your not missing any system libraries and using right version of | |
|
9 | 9 | libraries required by RhodeCode. There's also restriction in terms of mercurial |
|
10 | 10 | clients. Minimal version of hg client known working fine with RhodeCode is |
|
11 | 11 | **1.6**. If you're using older client, please upgrade. |
@@ -41,14 +41,14 b' Step by step installation example for Li' | |||
|
41 | 41 | |
|
42 | 42 | For installing RhodeCode i highly recommend using separate virtualenv_. This |
|
43 | 43 | way many required by RhodeCode libraries will remain sandboxed from your main |
|
44 |
python and making things less problematic when doing system python updates. |
|
|
44 | python and making things less problematic when doing system python updates. | |
|
45 | 45 | |
|
46 | 46 | Alternative very detailed installation instructions for Ubuntu Server with |
|
47 | 47 | celery, indexer and daemon scripts: https://gist.github.com/4546398 |
|
48 | 48 | |
|
49 | 49 | |
|
50 |
- Assuming you have installed virtualenv_ create a new virtual environment |
|
|
51 |
using virtualenv command:: |
|
|
50 | - Assuming you have installed virtualenv_ create a new virtual environment | |
|
51 | using virtualenv command:: | |
|
52 | 52 |
|
|
53 | 53 | virtualenv --no-site-packages /opt/rhodecode-venv |
|
54 | 54 | |
@@ -63,7 +63,7 b' celery, indexer and daemon scripts: http' | |||
|
63 | 63 | Python's "main" site-packages dir. |
|
64 | 64 | |
|
65 | 65 | |
|
66 |
- this will install new virtualenv_ into `/opt/rhodecode-venv`. |
|
|
66 | - this will install new virtualenv_ into `/opt/rhodecode-venv`. | |
|
67 | 67 | - Activate the virtualenv_ by running:: |
|
68 | 68 | |
|
69 | 69 | source /opt/rhodecode-venv/bin/activate |
@@ -71,52 +71,52 b' celery, indexer and daemon scripts: http' | |||
|
71 | 71 | .. note:: If you're using UNIX, *do not* use ``sudo`` to run the |
|
72 | 72 | ``virtualenv`` script. It's perfectly acceptable (and desirable) |
|
73 | 73 | to create a virtualenv as a normal user. |
|
74 | ||
|
75 |
- Make a folder for rhodecode data files, and configuration somewhere on the |
|
|
74 | ||
|
75 | - Make a folder for rhodecode data files, and configuration somewhere on the | |
|
76 | 76 | filesystem. For example:: |
|
77 | 77 | |
|
78 | 78 | mkdir /opt/rhodecode |
|
79 | ||
|
80 | ||
|
79 | ||
|
80 | ||
|
81 | 81 | - Go into the created directory run this command to install rhodecode:: |
|
82 | 82 | |
|
83 | 83 | easy_install rhodecode |
|
84 | ||
|
84 | ||
|
85 | 85 | or:: |
|
86 | ||
|
87 | pip install rhodecode | |
|
88 | 86 |
|
|
89 | - This will install rhodecode together with pylons and all other required | |
|
87 | pip install rhodecode | |
|
88 | ||
|
89 | - This will install rhodecode together with pylons and all other required | |
|
90 | 90 | python libraries into activated virtualenv |
|
91 | 91 | |
|
92 | 92 | Requirements for Celery (optional) |
|
93 | 93 | ---------------------------------- |
|
94 | 94 | |
|
95 | 95 | In order to gain maximum performance |
|
96 |
there are some third-party you must install. When RhodeCode is used |
|
|
96 | there are some third-party you must install. When RhodeCode is used | |
|
97 | 97 | together with celery you have to install some kind of message broker, |
|
98 | 98 | recommended one is rabbitmq_ to make the async tasks work. |
|
99 | 99 | |
|
100 | 100 | Of course RhodeCode works in sync mode also and then you do not have to install |
|
101 |
any third party applications. However, using Celery_ will give you a large |
|
|
102 |
speed improvement when using many big repositories. If you plan to use |
|
|
103 |
RhodeCode for say 7 to 10 repositories, RhodeCode will perform perfectly well |
|
|
101 | any third party applications. However, using Celery_ will give you a large | |
|
102 | speed improvement when using many big repositories. If you plan to use | |
|
103 | RhodeCode for say 7 to 10 repositories, RhodeCode will perform perfectly well | |
|
104 | 104 | without celery running. |
|
105 | ||
|
106 |
If you make the decision to run RhodeCode with celery make sure you run |
|
|
107 |
celeryd using paster and message broker together with the application. |
|
|
105 | ||
|
106 | If you make the decision to run RhodeCode with celery make sure you run | |
|
107 | celeryd using paster and message broker together with the application. | |
|
108 | 108 | |
|
109 | 109 | .. note:: |
|
110 | 110 | Installing message broker and using celery is optional, RhodeCode will |
|
111 | 111 | work perfectly fine without them. |
|
112 | 112 | |
|
113 | 113 | |
|
114 |
**Message Broker** |
|
|
114 | **Message Broker** | |
|
115 | 115 | |
|
116 | 116 | - preferred is `RabbitMq <http://www.rabbitmq.com/>`_ |
|
117 | 117 | - A possible alternative is `Redis <http://code.google.com/p/redis/>`_ |
|
118 | 118 | |
|
119 |
For installation instructions you can visit: |
|
|
119 | For installation instructions you can visit: | |
|
120 | 120 | http://ask.github.com/celery/getting-started/index.html. |
|
121 | 121 | This is a very nice tutorial on how to start using celery_ with rabbitmq_ |
|
122 | 122 | |
@@ -126,7 +126,7 b' You can now proceed to :ref:`setup`' | |||
|
126 | 126 | |
|
127 | 127 | |
|
128 | 128 | |
|
129 |
.. _virtualenv: http://pypi.python.org/pypi/virtualenv |
|
|
129 | .. _virtualenv: http://pypi.python.org/pypi/virtualenv | |
|
130 | 130 | .. _python: http://www.python.org/ |
|
131 | 131 | .. _mercurial: http://mercurial.selenic.com/ |
|
132 | 132 | .. _celery: http://celeryproject.org/ |
@@ -47,7 +47,7 b' choose "Visual C++ 2008 Express" when in' | |||
|
47 | 47 | required, you can uncheck them |
|
48 | 48 | |
|
49 | 49 | .. note:: |
|
50 | ||
|
50 | ||
|
51 | 51 | 64bit: You also need to install the Microsoft Windows SDK for .NET 3.5 SP1 (.NET 4.0 won't work). |
|
52 | 52 | Download from: http://www.microsoft.com/en-us/download/details.aspx?id=3138 |
|
53 | 53 | |
@@ -90,7 +90,7 b' http://sourceforge.net/projects/pywin32/' | |||
|
90 | 90 | .. note:: |
|
91 | 91 | |
|
92 | 92 | 64bit: Download and install the 64bit version. |
|
93 |
At the time of writing you can find this at: |
|
|
93 | At the time of writing you can find this at: | |
|
94 | 94 | http://sourceforge.net/projects/pywin32/files/pywin32/Build%20218/pywin32-218.win-amd64-py2.7.exe/download |
|
95 | 95 | |
|
96 | 96 | Step4 - Python BIN |
@@ -478,7 +478,7 b' Changing default encoding' | |||
|
478 | 478 | |
|
479 | 479 | By default RhodeCode uses utf8 encoding, starting from 1.3 series this |
|
480 | 480 | can be changed, simply edit default_encoding in .ini file to desired one. |
|
481 | This affects many parts in rhodecode including commiters names, filenames, | |
|
481 | This affects many parts in rhodecode including committers names, filenames, | |
|
482 | 482 | encoding of commit messages. In addition RhodeCode can detect if `chardet` |
|
483 | 483 | library is installed. If `chardet` is detected RhodeCode will fallback to it |
|
484 | 484 | when there are encode/decode errors. |
@@ -652,7 +652,7 b' Add the following at the end of the .ini' | |||
|
652 | 652 | prefix = /<someprefix> |
|
653 | 653 | |
|
654 | 654 | |
|
655 |
then change <someprefix> into your cho |
|
|
655 | then change <someprefix> into your chosen prefix | |
|
656 | 656 | |
|
657 | 657 | Apache's WSGI config |
|
658 | 658 | -------------------- |
@@ -3,16 +3,16 b'' | |||
|
3 | 3 | {% block sidebarlogo %} |
|
4 | 4 | <h3>Support RhodeCode development.</h3> |
|
5 | 5 | <div style="text-align:center"> |
|
6 |
|
|
|
7 |
|
|
|
8 |
|
|
|
9 |
|
|
|
10 |
|
|
|
11 |
|
|
|
12 |
|
|
|
6 | <form action="https://www.paypal.com/cgi-bin/webscr" method="post"> | |
|
7 | <input type="hidden" name="cmd" value="_s-xclick"> | |
|
8 | <input type="hidden" name="hosted_button_id" value="8U2LLRPLBKWDU"> | |
|
9 | <input style="border:0px !important" type="image" src="https://www.paypal.com/en_US/i/btn/btn_donate_SM.gif" | |
|
10 | border="0" name="submit" alt="PayPal - The safer, easier way to pay online!"> | |
|
11 | <img alt="" border="0" src="https://www.paypal.com/en_US/i/scr/pixel.gif" width="1" height="1"> | |
|
12 | </form> | |
|
13 | 13 | <div style="padding:5px"> |
|
14 | 14 | <a href="http://flattr.com/thing/167489/RhodeCode" target="_blank"> |
|
15 | 15 | <img src="http://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" border="0" /></a> |
|
16 | </div> | |
|
16 | </div> | |
|
17 | 17 | </div> |
|
18 | 18 | {% endblock %}} |
@@ -51,4 +51,4 b'' | |||
|
51 | 51 | .vc { color: #ff99ff } /* Name.Variable.Class */ |
|
52 | 52 | .vg { color: #ff99ff } /* Name.Variable.Global */ |
|
53 | 53 | .vi { color: #ff99ff } /* Name.Variable.Instance */ |
|
54 | .il { color: #009999 } /* Literal.Number.Integer.Long */ No newline at end of file | |
|
54 | .il { color: #009999 } /* Literal.Number.Integer.Long */ |
@@ -23,4 +23,4 b' Database' | |||
|
23 | 23 | When using sqlite just copy rhodecode.db. |
|
24 | 24 | Any other database engine requires a manual backup operation. |
|
25 | 25 | |
|
26 | Database backup will contain all gathered statistics No newline at end of file | |
|
26 | Database backup will contain all gathered statistics |
@@ -14,7 +14,7 b' enable detailed debug' | |||
|
14 | 14 | |
|
15 | 15 | RhodeCode uses standard python logging modules to log it's output. |
|
16 | 16 | By default only loggers with INFO level are displayed. To enable full output |
|
17 |
change `level = DEBUG` for all logging handlers in currently used .ini file. |
|
|
17 | change `level = DEBUG` for all logging handlers in currently used .ini file. | |
|
18 | 18 | This change will allow to see much more detailed output in the logfile or |
|
19 | 19 | console. This generally helps a lot to track issues. |
|
20 | 20 |
@@ -38,7 +38,7 b' Compare view from changelog' | |||
|
38 | 38 | Checkboxes in compare view allow users to view combined compare view. You can |
|
39 | 39 | only show the range between the first and last checkbox (no cherry pick). |
|
40 | 40 | Clicking more than one checkbox will activate a link in top saying |
|
41 | `Show selected changes <from-rev> -> <to-rev>` clicking this will bring | |
|
41 | `Show selected changesets <from-rev> -> <to-rev>` clicking this will bring | |
|
42 | 42 | compare view. In this view also it's possible to switch to combined compare. |
|
43 | 43 | |
|
44 | 44 | Compare view is also available from the journal on pushes having more than |
@@ -105,7 +105,7 b' Currently it support following options:' | |||
|
105 | 105 | |
|
106 | 106 | .. note:: |
|
107 | 107 | |
|
108 |
|
|
|
108 | - *`svn -> hg` cloning requires `hgsubversion` library to be installed.* | |
|
109 | 109 | |
|
110 | 110 | If you need to clone repositories that are protected via basic auth, you |
|
111 | 111 | might pass the url with stored credentials inside eg. |
@@ -11,10 +11,10 b' client installed on the machine to make ' | |||
|
11 | 11 | Although There is one limitation on git usage. |
|
12 | 12 | |
|
13 | 13 | - large pushes requires a http server with chunked encoding support. |
|
14 | ||
|
14 | ||
|
15 | 15 | if you plan to use git you need to run RhodeCode with some |
|
16 |
http server that supports chunked encoding which git http protocol uses, |
|
|
17 |
i recommend using waitress_ or gunicorn_ (linux only) for `paste` wsgi app |
|
|
16 | http server that supports chunked encoding which git http protocol uses, | |
|
17 | i recommend using waitress_ or gunicorn_ (linux only) for `paste` wsgi app | |
|
18 | 18 | replacement. Starting from version 1.4 waitress_ is the default wsgi server |
|
19 | 19 | used in RhodeCode. |
|
20 | 20 | |
@@ -23,33 +23,33 b' To use, simply change change the followi' | |||
|
23 | 23 | use = egg:Paste#http |
|
24 | 24 | |
|
25 | 25 | to:: |
|
26 | ||
|
26 | ||
|
27 | 27 | use = egg:waitress#main |
|
28 | 28 | |
|
29 | 29 | or:: |
|
30 | 30 | |
|
31 | 31 | use = egg:gunicorn#main |
|
32 | ||
|
33 | ||
|
32 | ||
|
33 | ||
|
34 | 34 | And comment out bellow options:: |
|
35 | 35 | |
|
36 |
threadpool_workers = |
|
|
37 |
threadpool_max_requests = |
|
|
38 |
use_threadpool = |
|
|
39 | ||
|
36 | threadpool_workers = | |
|
37 | threadpool_max_requests = | |
|
38 | use_threadpool = | |
|
39 | ||
|
40 | 40 | |
|
41 | 41 | You can simply run `paster serve` as usual. |
|
42 | 42 | |
|
43 | ||
|
44 |
You can always disable git/hg support by editing a |
|
|
43 | ||
|
44 | You can always disable git/hg support by editing a | |
|
45 | 45 | file **rhodecode/__init__.py** and commenting out backends |
|
46 | 46 | |
|
47 | 47 | .. code-block:: python |
|
48 | ||
|
48 | ||
|
49 | 49 | BACKENDS = { |
|
50 | 50 | 'hg': 'Mercurial repository', |
|
51 | 51 | #'git': 'Git repository', |
|
52 | 52 | } |
|
53 | 53 | |
|
54 | 54 | .. _waitress: http://pypi.python.org/pypi/waitress |
|
55 | .. _gunicorn: http://pypi.python.org/pypi/gunicorn No newline at end of file | |
|
55 | .. _gunicorn: http://pypi.python.org/pypi/gunicorn |
@@ -5,37 +5,37 b' RhodeCode repository locking system' | |||
|
5 | 5 | =================================== |
|
6 | 6 | |
|
7 | 7 | |
|
8 |
| Repos with **locking function=disabled** is the default, that's how repos work |
|
|
8 | | Repos with **locking function=disabled** is the default, that's how repos work | |
|
9 | 9 | today. |
|
10 | 10 | | Repos with **locking function=enabled** behaves like follows: |
|
11 | 11 | |
|
12 | 12 | Repos have a state called `locked` that can be true or false. |
|
13 |
The hg/git commands `hg/git clone`, `hg/git pull`, and `hg/git push` |
|
|
13 | The hg/git commands `hg/git clone`, `hg/git pull`, and `hg/git push` | |
|
14 | 14 | influence this state: |
|
15 | 15 | |
|
16 |
- The command `hg/git pull <repo>` will lock that repo (locked=true) |
|
|
16 | - The command `hg/git pull <repo>` will lock that repo (locked=true) | |
|
17 | 17 | if the user has write/admin permissions on this repo |
|
18 | 18 | |
|
19 |
- The command `hg/git clone <repo>` will lock that repo (locked=true) if the |
|
|
19 | - The command `hg/git clone <repo>` will lock that repo (locked=true) if the | |
|
20 | 20 | user has write/admin permissions on this repo |
|
21 | 21 | |
|
22 | 22 | |
|
23 | 23 | RhodeCode will remember the user id who locked the repo |
|
24 |
only this specific user can unlock the repo (locked=false) by calling |
|
|
24 | only this specific user can unlock the repo (locked=false) by calling | |
|
25 | 25 | |
|
26 |
- `hg/git push <repo>` |
|
|
26 | - `hg/git push <repo>` | |
|
27 | 27 | |
|
28 |
every other command on that repo from this user and |
|
|
28 | every other command on that repo from this user and | |
|
29 | 29 | every command from any other user will result in http return code 423 (locked) |
|
30 | 30 | |
|
31 | 31 | |
|
32 |
additionally the http error includes the <user> that locked the repo |
|
|
32 | additionally the http error includes the <user> that locked the repo | |
|
33 | 33 | (e.g. “repository <repo> locked by user <user>”) |
|
34 | 34 | |
|
35 | 35 | |
|
36 |
So the scenario of use for repos with `locking function` enabled is that |
|
|
36 | So the scenario of use for repos with `locking function` enabled is that | |
|
37 | 37 | every initial clone and every pull gives users (with write permission) |
|
38 | 38 | the exclusive right to do a push. |
|
39 | 39 | |
|
40 | 40 | |
|
41 | Each repo can be manually unlocked by admin from the repo settings menu. No newline at end of file | |
|
41 | Each repo can be manually unlocked by admin from the repo settings menu. |
@@ -13,7 +13,8 b' the best performance.' | |||
|
13 | 13 | more important to have faster disk than faster CPU. |
|
14 | 14 | |
|
15 | 15 | * Slowness on initial page can be easily fixed by grouping repositories, and/or |
|
16 | increasing cache size (see below) | |
|
16 | increasing cache size (see below), that includes using lightweight dashboard | |
|
17 | option and vcs_full_cache setting in .ini file | |
|
17 | 18 | |
|
18 | 19 | |
|
19 | 20 | Follow these few steps to improve performance of RhodeCode system. |
@@ -22,7 +23,7 b' Follow these few steps to improve perfor' | |||
|
22 | 23 | 1. Increase cache |
|
23 | 24 | |
|
24 | 25 | in the .ini file:: |
|
25 | ||
|
26 | ||
|
26 | 27 | beaker.cache.sql_cache_long.expire=3600 <-- set this to higher number |
|
27 | 28 | |
|
28 | 29 | This option affects the cache expiration time for main page. Having |
@@ -33,18 +34,29 b' 1. Increase cache' | |||
|
33 | 34 | system and it will expire cache for repositories that had been changed. |
|
34 | 35 | |
|
35 | 36 | 2. Switch from sqlite to postgres or mysql |
|
36 | ||
|
37 | ||
|
37 | 38 | sqlite is a good option when having small load on the system. But due to |
|
38 | 39 | locking issues with sqlite, it's not recommended to use it for larger |
|
39 | 40 | setup. Switching to mysql or postgres will result in a immediate |
|
40 | 41 | performance increase. |
|
41 | ||
|
42 | ||
|
42 | 43 | 3. Scale RhodeCode horizontally |
|
43 | 44 | |
|
44 | - running two or more instances on the same server can speed up things a lot | |
|
45 | - load balance using round robin or ip hash | |
|
46 | - you need to handle consistent user session storage by switching to | |
|
47 | db sessions, client side sessions or sharing session data folder across | |
|
48 | instances. See http://beaker.readthedocs.org/ docs for details. | |
|
49 |
|
|
|
50 | `instance_id` set in them No newline at end of file | |
|
45 | Scaling horizontally can give huge performance increase when dealing with | |
|
46 | large traffic (large amount of users, CI servers etc). RhodeCode can be | |
|
47 | scaled horizontally on one (recommended) or multiple machines. In order | |
|
48 | to scale horizontally you need to do the following: | |
|
49 | ||
|
50 | - each instance needs it's own .ini file and unique `instance_id` set in them | |
|
51 | - each instance `data` storage needs to be configured to be stored on a | |
|
52 | shared disk storage, preferably together with repositories. This `data` | |
|
53 | dir contains template caches, sessions, whoosh index and it's used for | |
|
54 | tasks locking (so it's safe across multiple instances). Set the | |
|
55 | `cache_dir`, `index_dir`, `beaker.cache.data_dir`, `beaker.cache.lock_dir` | |
|
56 | variables in each .ini file to shared location across RhodeCode instances | |
|
57 | - if celery is used each instance should run separate celery instance, but | |
|
58 | the message broken should be common to all of them (ex one rabbitmq | |
|
59 | shared server) | |
|
60 | - load balance using round robin or ip hash, recommended is writing LB rules | |
|
61 | that will separate regular user traffic from automated processes like CI | |
|
62 | servers or build bots. |
@@ -5,14 +5,14 b' working with RhodeCode and mercurial sub' | |||
|
5 | 5 | ============================================= |
|
6 | 6 | |
|
7 | 7 | example usage of Subrepos with RhodeCode:: |
|
8 | ||
|
8 | ||
|
9 | 9 | ## init a simple repo |
|
10 | hg init repo1 | |
|
10 | hg init repo1 | |
|
11 | 11 | cd repo1 |
|
12 | 12 | echo "file1" > file1 |
|
13 |
hg add file1 |
|
|
13 | hg add file1 | |
|
14 | 14 | hg ci --message "initial file 1" |
|
15 | ||
|
15 | ||
|
16 | 16 | #clone subrepo we want to add |
|
17 | 17 | hg clone http://rc.local/subrepo |
|
18 | 18 | |
@@ -22,7 +22,7 b' example usage of Subrepos with RhodeCode' | |||
|
22 | 22 | hg add .hgsub |
|
23 | 23 | hg ci --message "added remote subrepo" |
|
24 | 24 | |
|
25 | ||
|
25 | ||
|
26 | 26 | |
|
27 | 27 | In file list of repo1 you will see a connected subrepo at revision it was |
|
28 | 28 | during cloning. |
@@ -34,4 +34,4 b' Next we can edit the subrepo data, and p' | |||
|
34 | 34 | both of repositories. |
|
35 | 35 | |
|
36 | 36 | see http://mercurial.aragost.com/kick-start/en/subrepositories/ for more |
|
37 |
information about subrepositories |
|
|
37 | information about subrepositories |
@@ -2,7 +2,7 b'' | |||
|
2 | 2 | ######################################## |
|
3 | 3 | #### THIS IS A DEBIAN INIT.D SCRIPT #### |
|
4 | 4 | ######################################## |
|
5 | ||
|
5 | ||
|
6 | 6 | ### BEGIN INIT INFO |
|
7 | 7 | # Provides: rhodecode |
|
8 | 8 | # Required-Start: $all |
@@ -12,29 +12,29 b'' | |||
|
12 | 12 | # Short-Description: starts instance of rhodecode |
|
13 | 13 | # Description: starts instance of rhodecode using start-stop-daemon |
|
14 | 14 | ### END INIT INFO |
|
15 | ||
|
15 | ||
|
16 | 16 | APP_NAME="rhodecode" |
|
17 | APP_HOMEDIR="marcink/python_workspace" | |
|
18 |
APP_PATH="/ |
|
|
19 | ||
|
17 | APP_HOMEDIR="opt" | |
|
18 | APP_PATH="/$APP_HOMEDIR/$APP_NAME" | |
|
19 | ||
|
20 | 20 | CONF_NAME="production.ini" |
|
21 | ||
|
21 | ||
|
22 | 22 | PID_PATH="$APP_PATH/$APP_NAME.pid" |
|
23 | 23 | LOG_PATH="$APP_PATH/$APP_NAME.log" |
|
24 | ||
|
25 |
PYTHON_PATH="/ |
|
|
26 | ||
|
27 |
RUN_AS=" |
|
|
28 | ||
|
24 | ||
|
25 | PYTHON_PATH="/$APP_HOMEDIR/$APP_NAME-venv" | |
|
26 | ||
|
27 | RUN_AS="root" | |
|
28 | ||
|
29 | 29 | DAEMON="$PYTHON_PATH/bin/paster" |
|
30 | ||
|
30 | ||
|
31 | 31 | DAEMON_OPTS="serve --daemon \ |
|
32 |
|
|
|
33 |
|
|
|
34 |
|
|
|
35 |
|
|
|
36 | ||
|
37 | ||
|
32 | --user=$RUN_AS \ | |
|
33 | --group=$RUN_AS \ | |
|
34 | --pid-file=$PID_PATH \ | |
|
35 | --log-file=$LOG_PATH $APP_PATH/$CONF_NAME" | |
|
36 | ||
|
37 | ||
|
38 | 38 | start() { |
|
39 | 39 | echo "Starting $APP_NAME" |
|
40 | 40 | PYTHON_EGG_CACHE="/tmp" start-stop-daemon -d $APP_PATH \ |
@@ -43,19 +43,33 b' start() {' | |||
|
43 | 43 | --user $RUN_AS \ |
|
44 | 44 | --exec $DAEMON -- $DAEMON_OPTS |
|
45 | 45 | } |
|
46 | ||
|
46 | ||
|
47 | 47 | stop() { |
|
48 | 48 | echo "Stopping $APP_NAME" |
|
49 | 49 | start-stop-daemon -d $APP_PATH \ |
|
50 | 50 | --stop --quiet \ |
|
51 | 51 | --pidfile $PID_PATH || echo "$APP_NAME - Not running!" |
|
52 |
|
|
|
52 | ||
|
53 | 53 | if [ -f $PID_PATH ]; then |
|
54 | 54 | rm $PID_PATH |
|
55 | 55 | fi |
|
56 | 56 | } |
|
57 | ||
|
57 | ||
|
58 | status() { | |
|
59 | echo -n "Checking status of $APP_NAME ... " | |
|
60 | pid=`cat $PID_PATH` | |
|
61 | status=`ps ax | grep $pid | grep -ve grep` | |
|
62 | if [ "$?" -eq 0 ]; then | |
|
63 | echo "running" | |
|
64 | else | |
|
65 | echo "NOT running" | |
|
66 | fi | |
|
67 | } | |
|
68 | ||
|
58 | 69 | case "$1" in |
|
70 | status) | |
|
71 | status | |
|
72 | ;; | |
|
59 | 73 | start) |
|
60 | 74 | start |
|
61 | 75 | ;; |
@@ -73,4 +87,4 b' case "$1" in' | |||
|
73 | 87 | *) |
|
74 | 88 | echo "Usage: $0 {start|stop|restart}" |
|
75 | 89 | exit 1 |
|
76 | esac | |
|
90 | esac No newline at end of file |
@@ -25,59 +25,92 b' pdebug = false' | |||
|
25 | 25 | #smtp_port = |
|
26 | 26 | #smtp_use_tls = false |
|
27 | 27 | #smtp_use_ssl = true |
|
28 | # Specify available auth parameters here (e.g. LOGIN PLAIN CRAM-MD5, etc.) | |
|
28 | ## Specify available auth parameters here (e.g. LOGIN PLAIN CRAM-MD5, etc.) | |
|
29 | 29 | #smtp_auth = |
|
30 | 30 | |
|
31 | 31 | [server:main] |
|
32 | 32 | ## PASTE |
|
33 | ##nr of threads to spawn | |
|
33 | ## nr of threads to spawn | |
|
34 | 34 | #threadpool_workers = 5 |
|
35 | 35 | |
|
36 | ##max request before thread respawn | |
|
36 | ## max request before thread respawn | |
|
37 | 37 | #threadpool_max_requests = 10 |
|
38 | 38 | |
|
39 | ##option to use threads of process | |
|
39 | ## option to use threads of process | |
|
40 | 40 | #use_threadpool = true |
|
41 | 41 | |
|
42 | 42 | #use = egg:Paste#http |
|
43 | 43 | |
|
44 | #WAITRESS | |
|
44 | ## WAITRESS | |
|
45 | 45 | threads = 5 |
|
46 | ## 100GB | |
|
47 | max_request_body_size = 107374182400 | |
|
46 | 48 | use = egg:waitress#main |
|
47 | 49 | |
|
48 | 50 | host = 127.0.0.1 |
|
49 | 51 | port = 8001 |
|
50 | 52 | |
|
51 | [filter:proxy-prefix] | |
|
52 | # prefix middleware for rc | |
|
53 | use = egg:PasteDeploy#prefix | |
|
54 | prefix = /<your-prefix> | |
|
53 | ## prefix middleware for rc | |
|
54 | #[filter:proxy-prefix] | |
|
55 | #use = egg:PasteDeploy#prefix | |
|
56 | #prefix = /<your-prefix> | |
|
55 | 57 | |
|
56 | 58 | [app:main] |
|
57 | 59 | use = egg:rhodecode |
|
60 | ## enable proxy prefix middleware | |
|
58 | 61 | #filter-with = proxy-prefix |
|
62 | ||
|
59 | 63 | full_stack = true |
|
60 | 64 | static_files = true |
|
61 | # Optional Languages | |
|
62 | # en, fr, ja, pt_BR, zh_CN, zh_TW, pl | |
|
65 | ## Optional Languages | |
|
66 | ## en, fr, ja, pt_BR, zh_CN, zh_TW, pl | |
|
63 | 67 | lang = en |
|
64 | 68 | cache_dir = %(here)s/data |
|
65 | 69 | index_dir = %(here)s/data/index |
|
70 | ||
|
71 | ## uncomment and set this path to use archive download cache | |
|
72 | #archive_cache_dir = /tmp/tarballcache | |
|
73 | ||
|
74 | ## change this to unique ID for security | |
|
66 | 75 | app_instance_uuid = rc-production |
|
76 | ||
|
77 | ## cut off limit for large diffs (size in bytes) | |
|
67 | 78 | cut_off_limit = 256000 |
|
68 | vcs_full_cache = True | |
|
79 | ||
|
80 | ## use cache version of scm repo everywhere | |
|
81 | vcs_full_cache = true | |
|
82 | ||
|
83 | ## force https in RhodeCode, fixes https redirects, assumes it's always https | |
|
69 | 84 | force_https = false |
|
70 | commit_parse_limit = 50 | |
|
71 | # number of items displayed in lightweight dashboard before paginating | |
|
85 | ||
|
86 | ## use Strict-Transport-Security headers | |
|
87 | use_htsts = false | |
|
88 | ||
|
89 | ## number of commits stats will parse on each iteration | |
|
90 | commit_parse_limit = 25 | |
|
91 | ||
|
92 | ## number of items displayed in lightweight dashboard before paginating is shown | |
|
72 | 93 | dashboard_items = 100 |
|
94 | ||
|
95 | ## use gravatar service to display avatars | |
|
73 | 96 | use_gravatar = true |
|
74 | 97 | |
|
98 | ## path to git executable | |
|
99 | git_path = git | |
|
100 | ||
|
101 | ## git rev filter option, --all is the default filter, if you need to | |
|
102 | ## hide all refs in changelog switch this to --branches --tags | |
|
103 | git_rev_filter=--all | |
|
104 | ||
|
75 | 105 | ## RSS feed options |
|
76 | ||
|
77 | 106 | rss_cut_off_limit = 256000 |
|
78 | 107 | rss_items_per_page = 10 |
|
79 | 108 | rss_include_diff = false |
|
80 | 109 | |
|
110 | ## options for showing and identifying changesets | |
|
111 | show_sha_length = 12 | |
|
112 | show_revision_number = true | |
|
113 | ||
|
81 | 114 | |
|
82 | 115 | ## alternative_gravatar_url allows you to use your own avatar server application |
|
83 | 116 | ## the following parts of the URL will be replaced |
@@ -89,8 +122,11 b' rss_include_diff = false' | |||
|
89 | 122 | #alternative_gravatar_url = http://myavatarserver.com/getbyemail/{email}/{size} |
|
90 | 123 | #alternative_gravatar_url = http://myavatarserver.com/getbymd5/{md5email}?s={size} |
|
91 | 124 | |
|
125 | ||
|
126 | ## container auth options | |
|
92 | 127 | container_auth_enabled = false |
|
93 | 128 | proxypass_auth_enabled = false |
|
129 | ||
|
94 | 130 | ## default encoding used to convert from and to unicode |
|
95 | 131 | ## can be also a comma seperated list of encoding in case of mixed encodings |
|
96 | 132 | default_encoding = utf8 |
@@ -146,6 +182,11 b' instance_id =' | |||
|
146 | 182 | ## handling that. Set this variable to 403 to return HTTPForbidden |
|
147 | 183 | auth_ret_code = |
|
148 | 184 | |
|
185 | ## locking return code. When repository is locked return this HTTP code. 2XX | |
|
186 | ## codes don't break the transactions while 4XX codes do | |
|
187 | lock_ret_code = 423 | |
|
188 | ||
|
189 | ||
|
149 | 190 | #################################### |
|
150 | 191 | ### CELERY CONFIG #### |
|
151 | 192 | #################################### |
@@ -170,7 +211,7 b' celeryd.concurrency = 2' | |||
|
170 | 211 | celeryd.log.level = debug |
|
171 | 212 | celeryd.max.tasks.per.child = 1 |
|
172 | 213 | |
|
173 | #tasks will never be sent to the queue, but executed locally instead. | |
|
214 | ## tasks will never be sent to the queue, but executed locally instead. | |
|
174 | 215 | celery.always.eager = false |
|
175 | 216 | |
|
176 | 217 | #################################### |
@@ -226,18 +267,19 b' beaker.cache.sql_cache_long.key_length =' | |||
|
226 | 267 | |
|
227 | 268 | |
|
228 | 269 | beaker.session.key = rhodecode |
|
229 |
## secure cookie requires AES python libraries |
|
|
230 |
#beaker.session.encrypt_key = |
|
|
231 |
#beaker.session.validate_key = |
|
|
270 | ## secure cookie requires AES python libraries | |
|
271 | #beaker.session.encrypt_key = <key_for_encryption> | |
|
272 | #beaker.session.validate_key = <validation_key> | |
|
273 | ||
|
232 | 274 | ## sets session as invalid if it haven't been accessed for given amount of time |
|
233 | 275 | beaker.session.timeout = 2592000 |
|
234 | 276 | beaker.session.httponly = true |
|
235 | 277 | #beaker.session.cookie_path = /<your-prefix> |
|
236 | 278 | |
|
237 |
## uncomment for https secure cookie |
|
|
279 | ## uncomment for https secure cookie | |
|
238 | 280 | beaker.session.secure = false |
|
239 | 281 | |
|
240 |
## auto save the session to not to use .save() |
|
|
282 | ## auto save the session to not to use .save() | |
|
241 | 283 | beaker.session.auto = False |
|
242 | 284 | |
|
243 | 285 | ## default cookie expiration time in seconds `true` expire at browser close ## |
@@ -252,57 +294,57 b' beaker.session.auto = False' | |||
|
252 | 294 | ### [errormator] ### |
|
253 | 295 | #################### |
|
254 | 296 | |
|
255 | # Errormator is tailored to work with RhodeCode, see | |
|
256 | # http://errormator.com for details how to obtain an account | |
|
257 | # you must install python package `errormator_client` to make it work | |
|
297 | ## Errormator is tailored to work with RhodeCode, see | |
|
298 | ## http://errormator.com for details how to obtain an account | |
|
299 | ## you must install python package `errormator_client` to make it work | |
|
258 | 300 | |
|
259 | # errormator enabled | |
|
260 |
errormator = |
|
|
301 | ## errormator enabled | |
|
302 | errormator = false | |
|
261 | 303 | |
|
262 | 304 | errormator.server_url = https://api.errormator.com |
|
263 | 305 | errormator.api_key = YOUR_API_KEY |
|
264 | 306 | |
|
265 | # TWEAK AMOUNT OF INFO SENT HERE | |
|
307 | ## TWEAK AMOUNT OF INFO SENT HERE | |
|
266 | 308 | |
|
267 | # enables 404 error logging (default False) | |
|
309 | ## enables 404 error logging (default False) | |
|
268 | 310 | errormator.report_404 = false |
|
269 | 311 | |
|
270 | # time in seconds after request is considered being slow (default 1) | |
|
312 | ## time in seconds after request is considered being slow (default 1) | |
|
271 | 313 | errormator.slow_request_time = 1 |
|
272 | 314 | |
|
273 | # record slow requests in application | |
|
274 | # (needs to be enabled for slow datastore recording and time tracking) | |
|
315 | ## record slow requests in application | |
|
316 | ## (needs to be enabled for slow datastore recording and time tracking) | |
|
275 | 317 | errormator.slow_requests = true |
|
276 | 318 | |
|
277 | # enable hooking to application loggers | |
|
319 | ## enable hooking to application loggers | |
|
278 | 320 | # errormator.logging = true |
|
279 | 321 | |
|
280 | # minimum log level for log capture | |
|
322 | ## minimum log level for log capture | |
|
281 | 323 | # errormator.logging.level = WARNING |
|
282 | 324 | |
|
283 | # send logs only from erroneous/slow requests | |
|
284 | # (saves API quota for intensive logging) | |
|
325 | ## send logs only from erroneous/slow requests | |
|
326 | ## (saves API quota for intensive logging) | |
|
285 | 327 | errormator.logging_on_error = false |
|
286 | 328 | |
|
287 | # list of additonal keywords that should be grabbed from environ object | |
|
288 | # can be string with comma separated list of words in lowercase | |
|
289 | # (by default client will always send following info: | |
|
290 | # 'REMOTE_USER', 'REMOTE_ADDR', 'SERVER_NAME', 'CONTENT_TYPE' + all keys that | |
|
291 | # start with HTTP* this list be extended with additional keywords here | |
|
329 | ## list of additonal keywords that should be grabbed from environ object | |
|
330 | ## can be string with comma separated list of words in lowercase | |
|
331 | ## (by default client will always send following info: | |
|
332 | ## 'REMOTE_USER', 'REMOTE_ADDR', 'SERVER_NAME', 'CONTENT_TYPE' + all keys that | |
|
333 | ## start with HTTP* this list be extended with additional keywords here | |
|
292 | 334 | errormator.environ_keys_whitelist = |
|
293 | 335 | |
|
294 | 336 | |
|
295 | # list of keywords that should be blanked from request object | |
|
296 | # can be string with comma separated list of words in lowercase | |
|
297 | # (by default client will always blank keys that contain following words | |
|
298 | # 'password', 'passwd', 'pwd', 'auth_tkt', 'secret', 'csrf' | |
|
299 | # this list be extended with additional keywords set here | |
|
337 | ## list of keywords that should be blanked from request object | |
|
338 | ## can be string with comma separated list of words in lowercase | |
|
339 | ## (by default client will always blank keys that contain following words | |
|
340 | ## 'password', 'passwd', 'pwd', 'auth_tkt', 'secret', 'csrf' | |
|
341 | ## this list be extended with additional keywords set here | |
|
300 | 342 | errormator.request_keys_blacklist = |
|
301 | 343 | |
|
302 | 344 | |
|
303 | # list of namespaces that should be ignores when gathering log entries | |
|
304 | # can be string with comma separated list of namespaces | |
|
305 | # (by default the client ignores own entries: errormator_client.client) | |
|
345 | ## list of namespaces that should be ignores when gathering log entries | |
|
346 | ## can be string with comma separated list of namespaces | |
|
347 | ## (by default the client ignores own entries: errormator_client.client) | |
|
306 | 348 | errormator.log_namespace_blacklist = |
|
307 | 349 | |
|
308 | 350 | |
@@ -310,8 +352,8 b' errormator.log_namespace_blacklist =' | |||
|
310 | 352 | ### [sentry] ### |
|
311 | 353 | ################ |
|
312 | 354 | |
|
313 | # sentry is a alternative open source error aggregator | |
|
314 | # you must install python packages `sentry` and `raven` to enable | |
|
355 | ## sentry is a alternative open source error aggregator | |
|
356 | ## you must install python packages `sentry` and `raven` to enable | |
|
315 | 357 | |
|
316 | 358 | sentry.dsn = YOUR_DNS |
|
317 | 359 | sentry.servers = |
@@ -371,7 +413,7 b' handlers = console' | |||
|
371 | 413 | level = DEBUG |
|
372 | 414 | handlers = |
|
373 | 415 | qualname = routes.middleware |
|
374 | # "level = DEBUG" logs the route matched and routing variables. | |
|
416 | ## "level = DEBUG" logs the route matched and routing variables. | |
|
375 | 417 | propagate = 1 |
|
376 | 418 | |
|
377 | 419 | [logger_beaker] |
@@ -26,7 +26,7 b'' | |||
|
26 | 26 | import sys |
|
27 | 27 | import platform |
|
28 | 28 | |
|
29 |
VERSION = (1, |
|
|
29 | VERSION = (1, 6, 0, 'rc1') | |
|
30 | 30 | |
|
31 | 31 | try: |
|
32 | 32 | from rhodecode.lib import get_current_revision |
@@ -38,7 +38,7 b' except ImportError:' | |||
|
38 | 38 | |
|
39 | 39 | __version__ = ('.'.join((str(each) for each in VERSION[:3])) + |
|
40 | 40 | '.'.join(VERSION[3:])) |
|
41 |
__dbversion__ = 1 |
|
|
41 | __dbversion__ = 11 # defines current db version for migrations | |
|
42 | 42 | __platform__ = platform.system() |
|
43 | 43 | __license__ = 'GPLv3' |
|
44 | 44 | __py_version__ = sys.version_info |
@@ -238,7 +238,7 b' def main(argv=None):' | |||
|
238 | 238 | |
|
239 | 239 | try: |
|
240 | 240 | margs = dict(map(lambda s: s.split(':', 1), other)) |
|
241 | except: | |
|
241 | except Exception: | |
|
242 | 242 | sys.stderr.write('Error parsing arguments \n') |
|
243 | 243 | sys.exit() |
|
244 | 244 |
@@ -25,59 +25,92 b' pdebug = false' | |||
|
25 | 25 | #smtp_port = |
|
26 | 26 | #smtp_use_tls = false |
|
27 | 27 | #smtp_use_ssl = true |
|
28 | # Specify available auth parameters here (e.g. LOGIN PLAIN CRAM-MD5, etc.) | |
|
28 | ## Specify available auth parameters here (e.g. LOGIN PLAIN CRAM-MD5, etc.) | |
|
29 | 29 | #smtp_auth = |
|
30 | 30 | |
|
31 | 31 | [server:main] |
|
32 | 32 | ## PASTE |
|
33 | ##nr of threads to spawn | |
|
33 | ## nr of threads to spawn | |
|
34 | 34 | #threadpool_workers = 5 |
|
35 | 35 | |
|
36 | ##max request before thread respawn | |
|
36 | ## max request before thread respawn | |
|
37 | 37 | #threadpool_max_requests = 10 |
|
38 | 38 | |
|
39 | ##option to use threads of process | |
|
39 | ## option to use threads of process | |
|
40 | 40 | #use_threadpool = true |
|
41 | 41 | |
|
42 | 42 | #use = egg:Paste#http |
|
43 | 43 | |
|
44 | #WAITRESS | |
|
44 | ## WAITRESS | |
|
45 | 45 | threads = 5 |
|
46 | ## 100GB | |
|
47 | max_request_body_size = 107374182400 | |
|
46 | 48 | use = egg:waitress#main |
|
47 | 49 | |
|
48 | 50 | host = 127.0.0.1 |
|
49 | 51 | port = 5000 |
|
50 | 52 | |
|
51 | [filter:proxy-prefix] | |
|
52 | # prefix middleware for rc | |
|
53 | use = egg:PasteDeploy#prefix | |
|
54 | prefix = /<your-prefix> | |
|
53 | ## prefix middleware for rc | |
|
54 | #[filter:proxy-prefix] | |
|
55 | #use = egg:PasteDeploy#prefix | |
|
56 | #prefix = /<your-prefix> | |
|
55 | 57 | |
|
56 | 58 | [app:main] |
|
57 | 59 | use = egg:rhodecode |
|
60 | ## enable proxy prefix middleware | |
|
58 | 61 | #filter-with = proxy-prefix |
|
62 | ||
|
59 | 63 | full_stack = true |
|
60 | 64 | static_files = true |
|
61 | # Optional Languages | |
|
62 | # en, fr, ja, pt_BR, zh_CN, zh_TW, pl | |
|
65 | ## Optional Languages | |
|
66 | ## en, fr, ja, pt_BR, zh_CN, zh_TW, pl | |
|
63 | 67 | lang = en |
|
64 | 68 | cache_dir = %(here)s/data |
|
65 | 69 | index_dir = %(here)s/data/index |
|
70 | ||
|
71 | ## uncomment and set this path to use archive download cache | |
|
72 | #archive_cache_dir = /tmp/tarballcache | |
|
73 | ||
|
74 | ## change this to unique ID for security | |
|
66 | 75 | app_instance_uuid = ${app_instance_uuid} |
|
76 | ||
|
77 | ## cut off limit for large diffs (size in bytes) | |
|
67 | 78 | cut_off_limit = 256000 |
|
68 | vcs_full_cache = True | |
|
79 | ||
|
80 | ## use cache version of scm repo everywhere | |
|
81 | vcs_full_cache = true | |
|
82 | ||
|
83 | ## force https in RhodeCode, fixes https redirects, assumes it's always https | |
|
69 | 84 | force_https = false |
|
70 | commit_parse_limit = 50 | |
|
71 | # number of items displayed in lightweight dashboard before paginating | |
|
85 | ||
|
86 | ## use Strict-Transport-Security headers | |
|
87 | use_htsts = false | |
|
88 | ||
|
89 | ## number of commits stats will parse on each iteration | |
|
90 | commit_parse_limit = 25 | |
|
91 | ||
|
92 | ## number of items displayed in lightweight dashboard before paginating is shown | |
|
72 | 93 | dashboard_items = 100 |
|
94 | ||
|
95 | ## use gravatar service to display avatars | |
|
73 | 96 | use_gravatar = true |
|
74 | 97 | |
|
98 | ## path to git executable | |
|
99 | git_path = git | |
|
100 | ||
|
101 | ## git rev filter option, --all is the default filter, if you need to | |
|
102 | ## hide all refs in changelog switch this to --branches --tags | |
|
103 | git_rev_filter=--all | |
|
104 | ||
|
75 | 105 | ## RSS feed options |
|
76 | ||
|
77 | 106 | rss_cut_off_limit = 256000 |
|
78 | 107 | rss_items_per_page = 10 |
|
79 | 108 | rss_include_diff = false |
|
80 | 109 | |
|
110 | ## options for showing and identifying changesets | |
|
111 | show_sha_length = 12 | |
|
112 | show_revision_number = true | |
|
113 | ||
|
81 | 114 | |
|
82 | 115 | ## alternative_gravatar_url allows you to use your own avatar server application |
|
83 | 116 | ## the following parts of the URL will be replaced |
@@ -89,8 +122,11 b' rss_include_diff = false' | |||
|
89 | 122 | #alternative_gravatar_url = http://myavatarserver.com/getbyemail/{email}/{size} |
|
90 | 123 | #alternative_gravatar_url = http://myavatarserver.com/getbymd5/{md5email}?s={size} |
|
91 | 124 | |
|
125 | ||
|
126 | ## container auth options | |
|
92 | 127 | container_auth_enabled = false |
|
93 | 128 | proxypass_auth_enabled = false |
|
129 | ||
|
94 | 130 | ## default encoding used to convert from and to unicode |
|
95 | 131 | ## can be also a comma seperated list of encoding in case of mixed encodings |
|
96 | 132 | default_encoding = utf8 |
@@ -146,6 +182,11 b' instance_id =' | |||
|
146 | 182 | ## handling that. Set this variable to 403 to return HTTPForbidden |
|
147 | 183 | auth_ret_code = |
|
148 | 184 | |
|
185 | ## locking return code. When repository is locked return this HTTP code. 2XX | |
|
186 | ## codes don't break the transactions while 4XX codes do | |
|
187 | lock_ret_code = 423 | |
|
188 | ||
|
189 | ||
|
149 | 190 | #################################### |
|
150 | 191 | ### CELERY CONFIG #### |
|
151 | 192 | #################################### |
@@ -170,7 +211,7 b' celeryd.concurrency = 2' | |||
|
170 | 211 | celeryd.log.level = debug |
|
171 | 212 | celeryd.max.tasks.per.child = 1 |
|
172 | 213 | |
|
173 | #tasks will never be sent to the queue, but executed locally instead. | |
|
214 | ## tasks will never be sent to the queue, but executed locally instead. | |
|
174 | 215 | celery.always.eager = false |
|
175 | 216 | |
|
176 | 217 | #################################### |
@@ -226,18 +267,19 b' beaker.cache.sql_cache_long.key_length =' | |||
|
226 | 267 | |
|
227 | 268 | |
|
228 | 269 | beaker.session.key = rhodecode |
|
229 |
## secure cookie requires AES python libraries |
|
|
230 |
#beaker.session.encrypt_key = |
|
|
231 |
#beaker.session.validate_key = |
|
|
270 | ## secure cookie requires AES python libraries | |
|
271 | #beaker.session.encrypt_key = <key_for_encryption> | |
|
272 | #beaker.session.validate_key = <validation_key> | |
|
273 | ||
|
232 | 274 | ## sets session as invalid if it haven't been accessed for given amount of time |
|
233 | 275 | beaker.session.timeout = 2592000 |
|
234 | 276 | beaker.session.httponly = true |
|
235 | 277 | #beaker.session.cookie_path = /<your-prefix> |
|
236 | 278 | |
|
237 |
## uncomment for https secure cookie |
|
|
279 | ## uncomment for https secure cookie | |
|
238 | 280 | beaker.session.secure = false |
|
239 | 281 | |
|
240 |
## auto save the session to not to use .save() |
|
|
282 | ## auto save the session to not to use .save() | |
|
241 | 283 | beaker.session.auto = False |
|
242 | 284 | |
|
243 | 285 | ## default cookie expiration time in seconds `true` expire at browser close ## |
@@ -252,57 +294,57 b' beaker.session.auto = False' | |||
|
252 | 294 | ### [errormator] ### |
|
253 | 295 | #################### |
|
254 | 296 | |
|
255 | # Errormator is tailored to work with RhodeCode, see | |
|
256 | # http://errormator.com for details how to obtain an account | |
|
257 | # you must install python package `errormator_client` to make it work | |
|
297 | ## Errormator is tailored to work with RhodeCode, see | |
|
298 | ## http://errormator.com for details how to obtain an account | |
|
299 | ## you must install python package `errormator_client` to make it work | |
|
258 | 300 | |
|
259 | # errormator enabled | |
|
260 |
errormator = |
|
|
301 | ## errormator enabled | |
|
302 | errormator = false | |
|
261 | 303 | |
|
262 | 304 | errormator.server_url = https://api.errormator.com |
|
263 | 305 | errormator.api_key = YOUR_API_KEY |
|
264 | 306 | |
|
265 | # TWEAK AMOUNT OF INFO SENT HERE | |
|
307 | ## TWEAK AMOUNT OF INFO SENT HERE | |
|
266 | 308 | |
|
267 | # enables 404 error logging (default False) | |
|
309 | ## enables 404 error logging (default False) | |
|
268 | 310 | errormator.report_404 = false |
|
269 | 311 | |
|
270 | # time in seconds after request is considered being slow (default 1) | |
|
312 | ## time in seconds after request is considered being slow (default 1) | |
|
271 | 313 | errormator.slow_request_time = 1 |
|
272 | 314 | |
|
273 | # record slow requests in application | |
|
274 | # (needs to be enabled for slow datastore recording and time tracking) | |
|
315 | ## record slow requests in application | |
|
316 | ## (needs to be enabled for slow datastore recording and time tracking) | |
|
275 | 317 | errormator.slow_requests = true |
|
276 | 318 | |
|
277 | # enable hooking to application loggers | |
|
319 | ## enable hooking to application loggers | |
|
278 | 320 | # errormator.logging = true |
|
279 | 321 | |
|
280 | # minimum log level for log capture | |
|
322 | ## minimum log level for log capture | |
|
281 | 323 | # errormator.logging.level = WARNING |
|
282 | 324 | |
|
283 | # send logs only from erroneous/slow requests | |
|
284 | # (saves API quota for intensive logging) | |
|
325 | ## send logs only from erroneous/slow requests | |
|
326 | ## (saves API quota for intensive logging) | |
|
285 | 327 | errormator.logging_on_error = false |
|
286 | 328 | |
|
287 | # list of additonal keywords that should be grabbed from environ object | |
|
288 | # can be string with comma separated list of words in lowercase | |
|
289 | # (by default client will always send following info: | |
|
290 | # 'REMOTE_USER', 'REMOTE_ADDR', 'SERVER_NAME', 'CONTENT_TYPE' + all keys that | |
|
291 | # start with HTTP* this list be extended with additional keywords here | |
|
329 | ## list of additonal keywords that should be grabbed from environ object | |
|
330 | ## can be string with comma separated list of words in lowercase | |
|
331 | ## (by default client will always send following info: | |
|
332 | ## 'REMOTE_USER', 'REMOTE_ADDR', 'SERVER_NAME', 'CONTENT_TYPE' + all keys that | |
|
333 | ## start with HTTP* this list be extended with additional keywords here | |
|
292 | 334 | errormator.environ_keys_whitelist = |
|
293 | 335 | |
|
294 | 336 | |
|
295 | # list of keywords that should be blanked from request object | |
|
296 | # can be string with comma separated list of words in lowercase | |
|
297 | # (by default client will always blank keys that contain following words | |
|
298 | # 'password', 'passwd', 'pwd', 'auth_tkt', 'secret', 'csrf' | |
|
299 | # this list be extended with additional keywords set here | |
|
337 | ## list of keywords that should be blanked from request object | |
|
338 | ## can be string with comma separated list of words in lowercase | |
|
339 | ## (by default client will always blank keys that contain following words | |
|
340 | ## 'password', 'passwd', 'pwd', 'auth_tkt', 'secret', 'csrf' | |
|
341 | ## this list be extended with additional keywords set here | |
|
300 | 342 | errormator.request_keys_blacklist = |
|
301 | 343 | |
|
302 | 344 | |
|
303 | # list of namespaces that should be ignores when gathering log entries | |
|
304 | # can be string with comma separated list of namespaces | |
|
305 | # (by default the client ignores own entries: errormator_client.client) | |
|
345 | ## list of namespaces that should be ignores when gathering log entries | |
|
346 | ## can be string with comma separated list of namespaces | |
|
347 | ## (by default the client ignores own entries: errormator_client.client) | |
|
306 | 348 | errormator.log_namespace_blacklist = |
|
307 | 349 | |
|
308 | 350 | |
@@ -310,8 +352,8 b' errormator.log_namespace_blacklist =' | |||
|
310 | 352 | ### [sentry] ### |
|
311 | 353 | ################ |
|
312 | 354 | |
|
313 | # sentry is a alternative open source error aggregator | |
|
314 | # you must install python packages `sentry` and `raven` to enable | |
|
355 | ## sentry is a alternative open source error aggregator | |
|
356 | ## you must install python packages `sentry` and `raven` to enable | |
|
315 | 357 | |
|
316 | 358 | sentry.dsn = YOUR_DNS |
|
317 | 359 | sentry.servers = |
@@ -381,7 +423,7 b' handlers = console' | |||
|
381 | 423 | level = DEBUG |
|
382 | 424 | handlers = |
|
383 | 425 | qualname = routes.middleware |
|
384 | # "level = DEBUG" logs the route matched and routing variables. | |
|
426 | ## "level = DEBUG" logs the route matched and routing variables. | |
|
385 | 427 | propagate = 1 |
|
386 | 428 | |
|
387 | 429 | [logger_beaker] |
@@ -20,6 +20,7 b' from rhodecode.lib.auth import set_avail' | |||
|
20 | 20 | from rhodecode.lib.utils import repo2db_mapper, make_ui, set_rhodecode_config,\ |
|
21 | 21 | load_rcextensions, check_git_version |
|
22 | 22 | from rhodecode.lib.utils2 import engine_from_config, str2bool |
|
23 | from rhodecode.lib.db_manage import DbManage | |
|
23 | 24 | from rhodecode.model import init_model |
|
24 | 25 | from rhodecode.model.scm import ScmModel |
|
25 | 26 | |
@@ -88,7 +89,7 b' def load_environment(global_conf, app_co' | |||
|
88 | 89 | |
|
89 | 90 | #check git version |
|
90 | 91 | check_git_version() |
|
91 | ||
|
92 | DbManage.check_waitress() | |
|
92 | 93 | # MULTIPLE DB configs |
|
93 | 94 | # Setup the SQLAlchemy database engine |
|
94 | 95 | sa_engine_db1 = engine_from_config(config, 'sqlalchemy.db1.') |
@@ -100,6 +101,12 b' def load_environment(global_conf, app_co' | |||
|
100 | 101 | set_available_permissions(config) |
|
101 | 102 | config['base_path'] = repos_path |
|
102 | 103 | set_rhodecode_config(config) |
|
104 | ||
|
105 | instance_id = rhodecode.CONFIG.get('instance_id') | |
|
106 | if instance_id == '*': | |
|
107 | instance_id = '%s-%s' % (os.uname()[1], os.getpid()) | |
|
108 | rhodecode.CONFIG['instance_id'] = instance_id | |
|
109 | ||
|
103 | 110 | # CONFIGURATION OPTIONS HERE (note: all config options will override |
|
104 | 111 | # any Pylons config options) |
|
105 | 112 |
@@ -15,6 +15,7 b' from rhodecode.lib.middleware.simplehg i' | |||
|
15 | 15 | from rhodecode.lib.middleware.simplegit import SimpleGit |
|
16 | 16 | from rhodecode.lib.middleware.https_fixup import HttpsFixup |
|
17 | 17 | from rhodecode.config.environment import load_environment |
|
18 | from rhodecode.lib.middleware.wrapper import RequestWrapper | |
|
18 | 19 | |
|
19 | 20 | |
|
20 | 21 | def make_app(global_conf, full_stack=True, static_files=True, **app_conf): |
@@ -55,7 +56,7 b' def make_app(global_conf, full_stack=Tru' | |||
|
55 | 56 | |
|
56 | 57 | from rhodecode.lib.middleware.sentry import Sentry |
|
57 | 58 | from rhodecode.lib.middleware.errormator import Errormator |
|
58 | if Errormator: | |
|
59 | if Errormator and asbool(config['app_conf'].get('errormator')): | |
|
59 | 60 | app = Errormator(app, config) |
|
60 | 61 | elif Sentry: |
|
61 | 62 | app = Sentry(app, config) |
@@ -67,7 +68,7 b' def make_app(global_conf, full_stack=Tru' | |||
|
67 | 68 | # need any pylons stack middleware in them |
|
68 | 69 | app = SimpleHg(app, config) |
|
69 | 70 | app = SimpleGit(app, config) |
|
70 | ||
|
71 | app = RequestWrapper(app, config) | |
|
71 | 72 | # Display error documents for 401, 403, 404 status codes (and |
|
72 | 73 | # 500 when debug is disabled) |
|
73 | 74 | if asbool(config['debug']): |
@@ -6,6 +6,14 b'' | |||
|
6 | 6 | # build by pygments |
|
7 | 7 | EXTRA_MAPPINGS = {} |
|
8 | 8 | |
|
9 | # additional lexer definitions for custom files | |
|
10 | # it's overrides pygments lexers, and uses defined name of lexer to colorize the | |
|
11 | # files. Format is {'ext': 'lexer_name'} | |
|
12 | # List of lexers can be printed running: | |
|
13 | # python -c "import pprint;from pygments import lexers;pprint.pprint([(x[0], x[1]) for x in lexers.get_all_lexers()]);" | |
|
14 | ||
|
15 | EXTRA_LEXERS = {} | |
|
16 | ||
|
9 | 17 | #============================================================================== |
|
10 | 18 | # WHOOSH INDEX EXTENSIONS |
|
11 | 19 | #============================================================================== |
@@ -41,21 +41,32 b' def make_map(config):' | |||
|
41 | 41 | if len(by_id) == 2 and by_id[1].isdigit() and by_id[0] == '': |
|
42 | 42 | repo_name = Repository.get(by_id[1]).repo_name |
|
43 | 43 | match_dict['repo_name'] = repo_name |
|
44 | except: | |
|
44 | except Exception: | |
|
45 | 45 | pass |
|
46 | 46 | |
|
47 | 47 | return is_valid_repo(repo_name, config['base_path']) |
|
48 | 48 | |
|
49 | 49 | def check_group(environ, match_dict): |
|
50 | 50 | """ |
|
51 |
check for valid repositor |
|
|
51 | check for valid repository group for proper 404 handling | |
|
52 | 52 | |
|
53 | 53 | :param environ: |
|
54 | 54 | :param match_dict: |
|
55 | 55 | """ |
|
56 | 56 | repos_group_name = match_dict.get('group_name') |
|
57 | return is_valid_repos_group(repos_group_name, config['base_path']) | |
|
57 | 58 | |
|
58 | return is_valid_repos_group(repos_group_name, config['base_path']) | |
|
59 | def check_group_skip_path(environ, match_dict): | |
|
60 | """ | |
|
61 | check for valid repository group for proper 404 handling, but skips | |
|
62 | verification of existing path | |
|
63 | ||
|
64 | :param environ: | |
|
65 | :param match_dict: | |
|
66 | """ | |
|
67 | repos_group_name = match_dict.get('group_name') | |
|
68 | return is_valid_repos_group(repos_group_name, config['base_path'], | |
|
69 | skip_path_check=True) | |
|
59 | 70 | |
|
60 | 71 | def check_int(environ, match_dict): |
|
61 | 72 | return match_dict.get('id').isdigit() |
@@ -93,19 +104,14 b' def make_map(config):' | |||
|
93 | 104 | m.connect("formatted_repos", "/repos.{format}", |
|
94 | 105 | action="index", |
|
95 | 106 | conditions=dict(method=["GET"])) |
|
96 |
m.connect("new_repo", "/ |
|
|
97 |
action=" |
|
|
98 | m.connect("formatted_new_repo", "/repos/new.{format}", | |
|
99 | action="new", conditions=dict(method=["GET"])) | |
|
107 | m.connect("new_repo", "/create_repository", | |
|
108 | action="create_repository", conditions=dict(method=["GET"])) | |
|
100 | 109 | m.connect("/repos/{repo_name:.*?}", |
|
101 | 110 | action="update", conditions=dict(method=["PUT"], |
|
102 | 111 | function=check_repo)) |
|
103 | 112 | m.connect("/repos/{repo_name:.*?}", |
|
104 | 113 | action="delete", conditions=dict(method=["DELETE"], |
|
105 | 114 | function=check_repo)) |
|
106 | m.connect("edit_repo", "/repos/{repo_name:.*?}/edit", | |
|
107 | action="edit", conditions=dict(method=["GET"], | |
|
108 | function=check_repo)) | |
|
109 | 115 | m.connect("formatted_edit_repo", "/repos/{repo_name:.*?}.{format}/edit", |
|
110 | 116 | action="edit", conditions=dict(method=["GET"], |
|
111 | 117 | function=check_repo)) |
@@ -115,6 +121,11 b' def make_map(config):' | |||
|
115 | 121 | m.connect("formatted_repo", "/repos/{repo_name:.*?}.{format}", |
|
116 | 122 | action="show", conditions=dict(method=["GET"], |
|
117 | 123 | function=check_repo)) |
|
124 | #add repo perm member | |
|
125 | m.connect('set_repo_perm_member', "/set_repo_perm_member/{repo_name:.*?}", | |
|
126 | action="set_repo_perm_member", | |
|
127 | conditions=dict(method=["POST"], function=check_repo)) | |
|
128 | ||
|
118 | 129 | #ajax delete repo perm user |
|
119 | 130 | m.connect('delete_repo_user', "/repos_delete_user/{repo_name:.*?}", |
|
120 | 131 | action="delete_perm_user", |
@@ -145,6 +156,18 b' def make_map(config):' | |||
|
145 | 156 | m.connect('repo_locking', "/repo_locking/{repo_name:.*?}", |
|
146 | 157 | action="repo_locking", conditions=dict(method=["PUT"], |
|
147 | 158 | function=check_repo)) |
|
159 | m.connect('toggle_locking', "/locking_toggle/{repo_name:.*?}", | |
|
160 | action="toggle_locking", conditions=dict(method=["GET"], | |
|
161 | function=check_repo)) | |
|
162 | ||
|
163 | #repo fields | |
|
164 | m.connect('create_repo_fields', "/repo_fields/{repo_name:.*?}/new", | |
|
165 | action="create_repo_field", conditions=dict(method=["PUT"], | |
|
166 | function=check_repo)) | |
|
167 | ||
|
168 | m.connect('delete_repo_fields', "/repo_fields/{repo_name:.*?}/{field_id}", | |
|
169 | action="delete_repo_field", conditions=dict(method=["DELETE"], | |
|
170 | function=check_repo)) | |
|
148 | 171 | |
|
149 | 172 | with rmap.submapper(path_prefix=ADMIN_PREFIX, |
|
150 | 173 | controller='admin/repos_groups') as m: |
@@ -158,33 +181,34 b' def make_map(config):' | |||
|
158 | 181 | action="new", conditions=dict(method=["GET"])) |
|
159 | 182 | m.connect("formatted_new_repos_group", "/repos_groups/new.{format}", |
|
160 | 183 | action="new", conditions=dict(method=["GET"])) |
|
161 |
m.connect("update_repos_group", "/repos_groups/{ |
|
|
184 | m.connect("update_repos_group", "/repos_groups/{group_name:.*?}", | |
|
162 | 185 | action="update", conditions=dict(method=["PUT"], |
|
163 |
function=check_ |
|
|
164 |
m.connect("delete_repos_group", "/repos_groups/{ |
|
|
186 | function=check_group)) | |
|
187 | m.connect("delete_repos_group", "/repos_groups/{group_name:.*?}", | |
|
165 | 188 | action="delete", conditions=dict(method=["DELETE"], |
|
166 |
function=check_ |
|
|
167 |
m.connect("edit_repos_group", "/repos_groups/{ |
|
|
168 | action="edit", conditions=dict(method=["GET"],)) | |
|
169 | m.connect("formatted_edit_repos_group", | |
|
170 | "/repos_groups/{id}.{format}/edit", | |
|
189 | function=check_group_skip_path)) | |
|
190 | m.connect("edit_repos_group", "/repos_groups/{group_name:.*?}/edit", | |
|
171 | 191 | action="edit", conditions=dict(method=["GET"], |
|
172 |
function=check_ |
|
|
173 |
m.connect(" |
|
|
192 | function=check_group)) | |
|
193 | m.connect("formatted_edit_repos_group", | |
|
194 | "/repos_groups/{group_name:.*?}.{format}/edit", | |
|
195 | action="edit", conditions=dict(method=["GET"], | |
|
196 | function=check_group)) | |
|
197 | m.connect("repos_group", "/repos_groups/{group_name:.*?}", | |
|
174 | 198 | action="show", conditions=dict(method=["GET"], |
|
175 |
function=check_ |
|
|
176 |
m.connect("formatted_repos_group", "/repos_groups/{ |
|
|
199 | function=check_group)) | |
|
200 | m.connect("formatted_repos_group", "/repos_groups/{group_name:.*?}.{format}", | |
|
177 | 201 | action="show", conditions=dict(method=["GET"], |
|
178 |
function=check_ |
|
|
179 | # ajax delete repos group perm user | |
|
202 | function=check_group)) | |
|
203 | # ajax delete repository group perm user | |
|
180 | 204 | m.connect('delete_repos_group_user_perm', |
|
181 | "/delete_repos_group_user_perm/{group_name:.*}", | |
|
205 | "/delete_repos_group_user_perm/{group_name:.*?}", | |
|
182 | 206 | action="delete_repos_group_user_perm", |
|
183 | 207 | conditions=dict(method=["DELETE"], function=check_group)) |
|
184 | 208 | |
|
185 | # ajax delete repos group perm users_group | |
|
209 | # ajax delete repository group perm users_group | |
|
186 | 210 | m.connect('delete_repos_group_users_group_perm', |
|
187 | "/delete_repos_group_users_group_perm/{group_name:.*}", | |
|
211 | "/delete_repos_group_users_group_perm/{group_name:.*?}", | |
|
188 | 212 | action="delete_repos_group_users_group_perm", |
|
189 | 213 | conditions=dict(method=["DELETE"], function=check_group)) |
|
190 | 214 | |
@@ -227,7 +251,7 b' def make_map(config):' | |||
|
227 | 251 | m.connect("user_ips_delete", "/users_ips/{id}", |
|
228 | 252 | action="delete_ip", conditions=dict(method=["DELETE"])) |
|
229 | 253 | |
|
230 |
#ADMIN USER |
|
|
254 | #ADMIN USER GROUPS REST ROUTES | |
|
231 | 255 | with rmap.submapper(path_prefix=ADMIN_PREFIX, |
|
232 | 256 | controller='admin/users_groups') as m: |
|
233 | 257 | m.connect("users_groups", "/users_groups", |
@@ -308,8 +332,6 b' def make_map(config):' | |||
|
308 | 332 | action="my_account", conditions=dict(method=["GET"])) |
|
309 | 333 | m.connect("admin_settings_my_account_update", "/my_account_update", |
|
310 | 334 | action="my_account_update", conditions=dict(method=["PUT"])) |
|
311 | m.connect("admin_settings_create_repository", "/create_repository", | |
|
312 | action="create_repository", conditions=dict(method=["GET"])) | |
|
313 | 335 | m.connect("admin_settings_my_repos", "/my_account/repos", |
|
314 | 336 | action="my_account_my_repos", conditions=dict(method=["GET"])) |
|
315 | 337 | m.connect("admin_settings_my_pullrequests", "/my_account/pull_requests", |
@@ -389,8 +411,13 b' def make_map(config):' | |||
|
389 | 411 | |
|
390 | 412 | #SEARCH |
|
391 | 413 | rmap.connect('search', '%s/search' % ADMIN_PREFIX, controller='search',) |
|
392 |
rmap.connect('search_repo', '%s/search/{ |
|
|
393 |
|
|
|
414 | rmap.connect('search_repo_admin', '%s/search/{repo_name:.*}' % ADMIN_PREFIX, | |
|
415 | controller='search', | |
|
416 | conditions=dict(function=check_repo)) | |
|
417 | rmap.connect('search_repo', '/{repo_name:.*?}/search', | |
|
418 | controller='search', | |
|
419 | conditions=dict(function=check_repo), | |
|
420 | ) | |
|
394 | 421 | |
|
395 | 422 | #LOGIN/LOGOUT/REGISTER/SIGN IN |
|
396 | 423 | rmap.connect('login_home', '%s/login' % ADMIN_PREFIX, controller='login') |
@@ -423,6 +450,10 b' def make_map(config):' | |||
|
423 | 450 | controller='summary', |
|
424 | 451 | conditions=dict(function=check_repo)) |
|
425 | 452 | |
|
453 | rmap.connect('repo_size', '/{repo_name:.*?}/repo_size', | |
|
454 | controller='summary', action='repo_size', | |
|
455 | conditions=dict(function=check_repo)) | |
|
456 | ||
|
426 | 457 | rmap.connect('repos_group_home', '/{group_name:.*}', |
|
427 | 458 | controller='admin/repos_groups', action="show_by_name", |
|
428 | 459 | conditions=dict(function=check_group)) |
@@ -431,6 +462,17 b' def make_map(config):' | |||
|
431 | 462 | controller='changeset', revision='tip', |
|
432 | 463 | conditions=dict(function=check_repo)) |
|
433 | 464 | |
|
465 | # no longer user, but kept for routes to work | |
|
466 | rmap.connect("_edit_repo", "/{repo_name:.*?}/edit", | |
|
467 | controller='admin/repos', action="edit", | |
|
468 | conditions=dict(method=["GET"], function=check_repo) | |
|
469 | ) | |
|
470 | ||
|
471 | rmap.connect("edit_repo", "/{repo_name:.*?}/settings", | |
|
472 | controller='admin/repos', action="edit", | |
|
473 | conditions=dict(method=["GET"], function=check_repo) | |
|
474 | ) | |
|
475 | ||
|
434 | 476 | #still working url for backward compat. |
|
435 | 477 | rmap.connect('raw_changeset_home_depraced', |
|
436 | 478 | '/{repo_name:.*?}/raw-changeset/{revision}', |
@@ -471,8 +513,8 b' def make_map(config):' | |||
|
471 | 513 | controller='compare', action='index', |
|
472 | 514 | conditions=dict(function=check_repo), |
|
473 | 515 | requirements=dict( |
|
474 |
org_ref_type='(branch|book|tag|rev|or |
|
|
475 |
other_ref_type='(branch|book|tag|rev|o |
|
|
516 | org_ref_type='(branch|book|tag|rev|__other_ref_type__)', | |
|
517 | other_ref_type='(branch|book|tag|rev|__org_ref_type__)') | |
|
476 | 518 | ) |
|
477 | 519 | |
|
478 | 520 | rmap.connect('pullrequest_home', |
@@ -518,7 +560,7 b' def make_map(config):' | |||
|
518 | 560 | controller='pullrequests', action='delete_comment', |
|
519 | 561 | conditions=dict(function=check_repo, method=["DELETE"])) |
|
520 | 562 | |
|
521 | rmap.connect('summary_home', '/{repo_name:.*?}/summary', | |
|
563 | rmap.connect('summary_home_summary', '/{repo_name:.*?}/summary', | |
|
522 | 564 | controller='summary', conditions=dict(function=check_repo)) |
|
523 | 565 | |
|
524 | 566 | rmap.connect('shortlog_home', '/{repo_name:.*?}/shortlog', |
@@ -548,6 +590,10 b' def make_map(config):' | |||
|
548 | 590 | controller='files', revision='tip', f_path='', |
|
549 | 591 | conditions=dict(function=check_repo)) |
|
550 | 592 | |
|
593 | rmap.connect('files_home_nopath', '/{repo_name:.*?}/files/{revision}', | |
|
594 | controller='files', revision='tip', f_path='', | |
|
595 | conditions=dict(function=check_repo)) | |
|
596 | ||
|
551 | 597 | rmap.connect('files_history_home', |
|
552 | 598 | '/{repo_name:.*?}/history/{revision}/{f_path:.*}', |
|
553 | 599 | controller='files', action='history', revision='tip', f_path='', |
@@ -591,22 +637,6 b' def make_map(config):' | |||
|
591 | 637 | controller='files', action='nodelist', |
|
592 | 638 | conditions=dict(function=check_repo)) |
|
593 | 639 | |
|
594 | rmap.connect('repo_settings_delete', '/{repo_name:.*?}/settings', | |
|
595 | controller='settings', action="delete", | |
|
596 | conditions=dict(method=["DELETE"], function=check_repo)) | |
|
597 | ||
|
598 | rmap.connect('repo_settings_update', '/{repo_name:.*?}/settings', | |
|
599 | controller='settings', action="update", | |
|
600 | conditions=dict(method=["PUT"], function=check_repo)) | |
|
601 | ||
|
602 | rmap.connect('repo_settings_home', '/{repo_name:.*?}/settings', | |
|
603 | controller='settings', action='index', | |
|
604 | conditions=dict(function=check_repo)) | |
|
605 | ||
|
606 | rmap.connect('toggle_locking', "/{repo_name:.*?}/locking_toggle", | |
|
607 | controller='settings', action="toggle_locking", | |
|
608 | conditions=dict(method=["GET"], function=check_repo)) | |
|
609 | ||
|
610 | 640 | rmap.connect('repo_fork_create_home', '/{repo_name:.*?}/fork', |
|
611 | 641 | controller='forks', action='fork_create', |
|
612 | 642 | conditions=dict(function=check_repo, method=["POST"])) |
@@ -130,7 +130,7 b' class AdminController(BaseController):' | |||
|
130 | 130 | c.search_term = request.GET.get('filter') |
|
131 | 131 | try: |
|
132 | 132 | users_log = _journal_filter(users_log, c.search_term) |
|
133 | except: | |
|
133 | except Exception: | |
|
134 | 134 | # we want this to crash for now |
|
135 | 135 | raise |
|
136 | 136 |
@@ -107,7 +107,7 b' class DefaultsController(BaseController)' | |||
|
107 | 107 | encoding="UTF-8") |
|
108 | 108 | except Exception: |
|
109 | 109 | log.error(traceback.format_exc()) |
|
110 |
h.flash(_(' |
|
|
110 | h.flash(_('Error occurred during update of defaults'), | |
|
111 | 111 | category='error') |
|
112 | 112 | |
|
113 | 113 | return redirect(url('defaults')) |
@@ -123,7 +123,7 b' class LdapSettingsController(BaseControl' | |||
|
123 | 123 | Session().add(setting) |
|
124 | 124 | |
|
125 | 125 | Session().commit() |
|
126 |
h.flash(_('L |
|
|
126 | h.flash(_('LDAP settings updated successfully'), | |
|
127 | 127 | category='success') |
|
128 | 128 | if not ldap_active: |
|
129 | 129 | #if ldap is missing send an info to user |
@@ -144,7 +144,7 b' class LdapSettingsController(BaseControl' | |||
|
144 | 144 | encoding="UTF-8") |
|
145 | 145 | except Exception: |
|
146 | 146 | log.error(traceback.format_exc()) |
|
147 |
h.flash(_(' |
|
|
147 | h.flash(_('Error occurred during update of ldap settings'), | |
|
148 | 148 | category='error') |
|
149 | 149 | |
|
150 | 150 | return redirect(url('ldap_home')) |
@@ -28,7 +28,7 b' import traceback' | |||
|
28 | 28 | |
|
29 | 29 | from pylons import request |
|
30 | 30 | from pylons import tmpl_context as c, url |
|
31 | from pylons.controllers.util import redirect | |
|
31 | from pylons.controllers.util import redirect, abort | |
|
32 | 32 | |
|
33 | 33 | from webhelpers.paginate import Page |
|
34 | 34 | |
@@ -117,7 +117,7 b' class NotificationsController(BaseContro' | |||
|
117 | 117 | Session().commit() |
|
118 | 118 | return 'ok' |
|
119 | 119 | except Exception: |
|
120 | Session.rollback() | |
|
120 | Session().rollback() | |
|
121 | 121 | log.error(traceback.format_exc()) |
|
122 | 122 | return 'fail' |
|
123 | 123 | |
@@ -139,7 +139,7 b' class NotificationsController(BaseContro' | |||
|
139 | 139 | Session().commit() |
|
140 | 140 | return 'ok' |
|
141 | 141 | except Exception: |
|
142 | Session.rollback() | |
|
142 | Session().rollback() | |
|
143 | 143 | log.error(traceback.format_exc()) |
|
144 | 144 | return 'fail' |
|
145 | 145 | |
@@ -149,8 +149,9 b' class NotificationsController(BaseContro' | |||
|
149 | 149 | c.user = self.rhodecode_user |
|
150 | 150 | no = Notification.get(notification_id) |
|
151 | 151 | |
|
152 |
owner = a |
|
|
152 | owner = any(un.user.user_id == c.rhodecode_user.user_id | |
|
153 | 153 | for un in no.notifications_to_users) |
|
154 | ||
|
154 | 155 | if no and (h.HasPermissionAny('hg.admin', 'repository.admin')() or owner): |
|
155 | 156 | unotification = NotificationModel()\ |
|
156 | 157 | .get_user_notification(c.user.user_id, no) |
@@ -158,14 +159,14 b' class NotificationsController(BaseContro' | |||
|
158 | 159 | # if this association to user is not valid, we don't want to show |
|
159 | 160 | # this message |
|
160 | 161 | if unotification: |
|
161 |
if unotification.read |
|
|
162 | if not unotification.read: | |
|
162 | 163 | unotification.mark_as_read() |
|
163 | 164 | Session().commit() |
|
164 | 165 | c.notification = no |
|
165 | 166 | |
|
166 | 167 | return render('admin/notifications/show_notification.html') |
|
167 | 168 | |
|
168 | return redirect(url('notifications')) | |
|
169 | return abort(403) | |
|
169 | 170 | |
|
170 | 171 | def edit(self, notification_id, format='html'): |
|
171 | 172 | """GET /_admin/notifications/id/edit: Form to edit an existing item""" |
@@ -67,11 +67,11 b' class PermissionsController(BaseControll' | |||
|
67 | 67 | ('group.admin', _('Admin'),)] |
|
68 | 68 | self.register_choices = [ |
|
69 | 69 | ('hg.register.none', |
|
70 |
_(' |
|
|
70 | _('Disabled')), | |
|
71 | 71 | ('hg.register.manual_activate', |
|
72 |
_(' |
|
|
72 | _('Allowed with manual account activation')), | |
|
73 | 73 | ('hg.register.auto_activate', |
|
74 |
_(' |
|
|
74 | _('Allowed with automatic account activation')), ] | |
|
75 | 75 | |
|
76 | 76 | self.create_choices = [('hg.create.none', _('Disabled')), |
|
77 | 77 | ('hg.create.repository', _('Enabled'))] |
@@ -139,7 +139,7 b' class PermissionsController(BaseControll' | |||
|
139 | 139 | encoding="UTF-8") |
|
140 | 140 | except Exception: |
|
141 | 141 | log.error(traceback.format_exc()) |
|
142 |
h.flash(_(' |
|
|
142 | h.flash(_('Error occurred during update of permissions'), | |
|
143 | 143 | category='error') |
|
144 | 144 | |
|
145 | 145 | return redirect(url('edit_permission', id=id)) |
@@ -28,7 +28,7 b' import traceback' | |||
|
28 | 28 | import formencode |
|
29 | 29 | from formencode import htmlfill |
|
30 | 30 | |
|
31 | from webob.exc import HTTPInternalServerError | |
|
31 | from webob.exc import HTTPInternalServerError, HTTPForbidden | |
|
32 | 32 | from pylons import request, session, tmpl_context as c, url |
|
33 | 33 | from pylons.controllers.util import redirect |
|
34 | 34 | from pylons.i18n.translation import _ |
@@ -37,23 +37,25 b' from sqlalchemy.exc import IntegrityErro' | |||
|
37 | 37 | import rhodecode |
|
38 | 38 | from rhodecode.lib import helpers as h |
|
39 | 39 | from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator, \ |
|
40 | HasPermissionAnyDecorator, HasRepoPermissionAllDecorator | |
|
41 | from rhodecode.lib.base import BaseController, render | |
|
40 | HasPermissionAnyDecorator, HasRepoPermissionAllDecorator, NotAnonymous,\ | |
|
41 | HasPermissionAny, HasReposGroupPermissionAny, HasRepoPermissionAnyDecorator | |
|
42 | from rhodecode.lib.base import BaseRepoController, render | |
|
42 | 43 | from rhodecode.lib.utils import invalidate_cache, action_logger, repo_name_slug |
|
43 | 44 | from rhodecode.lib.helpers import get_token |
|
44 | 45 | from rhodecode.model.meta import Session |
|
45 | 46 | from rhodecode.model.db import User, Repository, UserFollowing, RepoGroup,\ |
|
46 | RhodeCodeSetting | |
|
47 | from rhodecode.model.forms import RepoForm | |
|
48 | from rhodecode.model.scm import ScmModel | |
|
47 | RhodeCodeSetting, RepositoryField | |
|
48 | from rhodecode.model.forms import RepoForm, RepoFieldForm, RepoPermsForm | |
|
49 | from rhodecode.model.scm import ScmModel, GroupList | |
|
49 | 50 | from rhodecode.model.repo import RepoModel |
|
50 | 51 | from rhodecode.lib.compat import json |
|
51 | 52 | from sqlalchemy.sql.expression import func |
|
53 | from rhodecode.lib.exceptions import AttachedForksError | |
|
52 | 54 | |
|
53 | 55 | log = logging.getLogger(__name__) |
|
54 | 56 | |
|
55 | 57 | |
|
56 | class ReposController(BaseController): | |
|
58 | class ReposController(BaseRepoController): | |
|
57 | 59 | """ |
|
58 | 60 | REST Controller styled on the Atom Publishing Protocol""" |
|
59 | 61 | # To properly map this controller, ensure your config/routing.py |
@@ -61,14 +63,15 b' class ReposController(BaseController):' | |||
|
61 | 63 | # map.resource('repo', 'repos') |
|
62 | 64 | |
|
63 | 65 | @LoginRequired() |
|
64 | @HasPermissionAnyDecorator('hg.admin', 'hg.create.repository') | |
|
65 | 66 | def __before__(self): |
|
66 | 67 | c.admin_user = session.get('admin_user') |
|
67 | 68 | c.admin_username = session.get('admin_username') |
|
68 | 69 | super(ReposController, self).__before__() |
|
69 | 70 | |
|
70 | 71 | def __load_defaults(self): |
|
71 | c.repo_groups = RepoGroup.groups_choices(check_perms=True) | |
|
72 | acl_groups = GroupList(RepoGroup.query().all(), | |
|
73 | perm_set=['group.write', 'group.admin']) | |
|
74 | c.repo_groups = RepoGroup.groups_choices(groups=acl_groups) | |
|
72 | 75 | c.repo_groups_choices = map(lambda k: unicode(k[0]), c.repo_groups) |
|
73 | 76 | |
|
74 | 77 | repo_model = RepoModel() |
@@ -116,6 +119,9 b' class ReposController(BaseController):' | |||
|
116 | 119 | c.stats_percentage = '%.2f' % ((float((last_rev)) / |
|
117 | 120 | c.repo_last_rev) * 100) |
|
118 | 121 | |
|
122 | c.repo_fields = RepositoryField.query()\ | |
|
123 | .filter(RepositoryField.repository == db_repo).all() | |
|
124 | ||
|
119 | 125 | defaults = RepoModel()._get_defaults(repo_name) |
|
120 | 126 | |
|
121 | 127 | c.repos_list = [('', _('--REMOVE FORK--'))] |
@@ -136,13 +142,14 b' class ReposController(BaseController):' | |||
|
136 | 142 | .all() |
|
137 | 143 | |
|
138 | 144 | repos_data = RepoModel().get_repos_as_dict(repos_list=c.repos_list, |
|
139 |
admin=True |
|
|
145 | admin=True, | |
|
146 | super_user_actions=True) | |
|
140 | 147 | #json used to render the grid |
|
141 | 148 | c.data = json.dumps(repos_data) |
|
142 | 149 | |
|
143 | 150 | return render('admin/repos/repos.html') |
|
144 | 151 | |
|
145 | @HasPermissionAnyDecorator('hg.admin', 'hg.create.repository') | |
|
152 | @NotAnonymous() | |
|
146 | 153 | def create(self): |
|
147 | 154 | """ |
|
148 | 155 | POST /repos: Create a new item""" |
@@ -154,15 +161,18 b' class ReposController(BaseController):' | |||
|
154 | 161 | form_result = RepoForm(repo_groups=c.repo_groups_choices, |
|
155 | 162 | landing_revs=c.landing_revs_choices)()\ |
|
156 | 163 | .to_python(dict(request.POST)) |
|
164 | ||
|
157 | 165 | new_repo = RepoModel().create(form_result, |
|
158 | 166 | self.rhodecode_user.user_id) |
|
159 | 167 | if form_result['clone_uri']: |
|
160 |
h.flash(_(' |
|
|
168 | h.flash(_('Created repository %s from %s') \ | |
|
161 | 169 | % (form_result['repo_name'], form_result['clone_uri']), |
|
162 | 170 | category='success') |
|
163 | 171 | else: |
|
164 |
h. |
|
|
165 | category='success') | |
|
172 | repo_url = h.link_to(form_result['repo_name'], | |
|
173 | h.url('summary_home', repo_name=form_result['repo_name_full'])) | |
|
174 | h.flash(h.literal(_('Created repository %s') % repo_url), | |
|
175 | category='success') | |
|
166 | 176 | |
|
167 | 177 | if request.POST.get('user_created'): |
|
168 | 178 | # created by regular non admin user |
@@ -175,16 +185,8 b' class ReposController(BaseController):' | |||
|
175 | 185 | self.sa) |
|
176 | 186 | Session().commit() |
|
177 | 187 | except formencode.Invalid, errors: |
|
178 | ||
|
179 | c.new_repo = errors.value['repo_name'] | |
|
180 | ||
|
181 | if request.POST.get('user_created'): | |
|
182 | r = render('admin/repos/repo_add_create_repository.html') | |
|
183 | else: | |
|
184 | r = render('admin/repos/repo_add.html') | |
|
185 | ||
|
186 | 188 | return htmlfill.render( |
|
187 | r, | |
|
189 | render('admin/repos/repo_add.html'), | |
|
188 | 190 | defaults=errors.value, |
|
189 | 191 | errors=errors.error_dict or {}, |
|
190 | 192 | prefix_error=False, |
@@ -192,21 +194,41 b' class ReposController(BaseController):' | |||
|
192 | 194 | |
|
193 | 195 | except Exception: |
|
194 | 196 | log.error(traceback.format_exc()) |
|
195 |
msg = _(' |
|
|
197 | msg = _('Error creating repository %s') \ | |
|
196 | 198 | % form_result.get('repo_name') |
|
197 | 199 | h.flash(msg, category='error') |
|
198 | return redirect(url('repos')) | |
|
200 | if c.rhodecode_user.is_admin: | |
|
201 | return redirect(url('repos')) | |
|
202 | return redirect(url('home')) | |
|
199 | 203 | #redirect to our new repo ! |
|
200 | 204 | return redirect(url('summary_home', repo_name=new_repo.repo_name)) |
|
201 | 205 | |
|
202 | @HasPermissionAllDecorator('hg.admin') | |
|
203 | def new(self, format='html'): | |
|
204 |
"""GET / |
|
|
206 | @NotAnonymous() | |
|
207 | def create_repository(self): | |
|
208 | """GET /_admin/create_repository: Form to create a new item""" | |
|
205 | 209 | new_repo = request.GET.get('repo', '') |
|
210 | parent_group = request.GET.get('parent_group') | |
|
211 | if not HasPermissionAny('hg.admin', 'hg.create.repository')(): | |
|
212 | #you're not super admin nor have global create permissions, | |
|
213 | #but maybe you have at least write permission to a parent group ? | |
|
214 | _gr = RepoGroup.get(parent_group) | |
|
215 | gr_name = _gr.group_name if _gr else None | |
|
216 | if not HasReposGroupPermissionAny('group.admin', 'group.write')(group_name=gr_name): | |
|
217 | raise HTTPForbidden | |
|
218 | ||
|
219 | acl_groups = GroupList(RepoGroup.query().all(), | |
|
220 | perm_set=['group.write', 'group.admin']) | |
|
221 | c.repo_groups = RepoGroup.groups_choices(groups=acl_groups) | |
|
222 | c.repo_groups_choices = map(lambda k: unicode(k[0]), c.repo_groups) | |
|
223 | choices, c.landing_revs = ScmModel().get_repo_landing_revs() | |
|
224 | ||
|
206 | 225 | c.new_repo = repo_name_slug(new_repo) |
|
207 | self.__load_defaults() | |
|
226 | ||
|
208 | 227 | ## apply the defaults from defaults page |
|
209 | 228 | defaults = RhodeCodeSetting.get_default_repo_settings(strip_prefix=True) |
|
229 | if parent_group: | |
|
230 | defaults.update({'repo_group': parent_group}) | |
|
231 | ||
|
210 | 232 | return htmlfill.render( |
|
211 | 233 | render('admin/repos/repo_add.html'), |
|
212 | 234 | defaults=defaults, |
@@ -215,7 +237,7 b' class ReposController(BaseController):' | |||
|
215 | 237 | encoding="UTF-8" |
|
216 | 238 | ) |
|
217 | 239 | |
|
218 |
@HasPermissionAllDecorator(' |
|
|
240 | @HasRepoPermissionAllDecorator('repository.admin') | |
|
219 | 241 | def update(self, repo_name): |
|
220 | 242 | """ |
|
221 | 243 | PUT /repos/repo_name: Update an existing item""" |
@@ -259,11 +281,11 b' class ReposController(BaseController):' | |||
|
259 | 281 | |
|
260 | 282 | except Exception: |
|
261 | 283 | log.error(traceback.format_exc()) |
|
262 |
h.flash(_(' |
|
|
284 | h.flash(_('Error occurred during update of repository %s') \ | |
|
263 | 285 | % repo_name, category='error') |
|
264 | 286 | return redirect(url('edit_repo', repo_name=changed_name)) |
|
265 | 287 | |
|
266 |
@HasPermissionAllDecorator(' |
|
|
288 | @HasRepoPermissionAllDecorator('repository.admin') | |
|
267 | 289 | def delete(self, repo_name): |
|
268 | 290 | """ |
|
269 | 291 | DELETE /repos/repo_name: Delete an existing item""" |
@@ -280,25 +302,27 b' class ReposController(BaseController):' | |||
|
280 | 302 | h.not_mapped_error(repo_name) |
|
281 | 303 | return redirect(url('repos')) |
|
282 | 304 | try: |
|
305 | _forks = repo.forks.count() | |
|
306 | handle_forks = None | |
|
307 | if _forks and request.POST.get('forks'): | |
|
308 | do = request.POST['forks'] | |
|
309 | if do == 'detach_forks': | |
|
310 | handle_forks = 'detach' | |
|
311 | h.flash(_('Detached %s forks') % _forks, category='success') | |
|
312 | elif do == 'delete_forks': | |
|
313 | handle_forks = 'delete' | |
|
314 | h.flash(_('Deleted %s forks') % _forks, category='success') | |
|
315 | repo_model.delete(repo, forks=handle_forks) | |
|
283 | 316 | action_logger(self.rhodecode_user, 'admin_deleted_repo', |
|
284 |
|
|
|
285 | repo_model.delete(repo) | |
|
317 | repo_name, self.ip_addr, self.sa) | |
|
286 | 318 | invalidate_cache('get_repo_cached_%s' % repo_name) |
|
287 |
h.flash(_(' |
|
|
319 | h.flash(_('Deleted repository %s') % repo_name, category='success') | |
|
288 | 320 | Session().commit() |
|
289 |
except |
|
|
290 | if e.message.find('repositories_fork_id_fkey') != -1: | |
|
291 | log.error(traceback.format_exc()) | |
|
292 | h.flash(_('Cannot delete %s it still contains attached ' | |
|
293 | 'forks') % repo_name, | |
|
294 | category='warning') | |
|
295 | else: | |
|
296 | log.error(traceback.format_exc()) | |
|
297 | h.flash(_('An error occurred during ' | |
|
298 | 'deletion of %s') % repo_name, | |
|
299 | category='error') | |
|
321 | except AttachedForksError: | |
|
322 | h.flash(_('Cannot delete %s it still contains attached forks') | |
|
323 | % repo_name, category='warning') | |
|
300 | 324 | |
|
301 |
except Exception |
|
|
325 | except Exception: | |
|
302 | 326 | log.error(traceback.format_exc()) |
|
303 | 327 | h.flash(_('An error occurred during deletion of %s') % repo_name, |
|
304 | 328 | category='error') |
@@ -306,6 +330,42 b' class ReposController(BaseController):' | |||
|
306 | 330 | return redirect(url('repos')) |
|
307 | 331 | |
|
308 | 332 | @HasRepoPermissionAllDecorator('repository.admin') |
|
333 | def set_repo_perm_member(self, repo_name): | |
|
334 | form = RepoPermsForm()().to_python(request.POST) | |
|
335 | ||
|
336 | perms_new = form['perms_new'] | |
|
337 | perms_updates = form['perms_updates'] | |
|
338 | cur_repo = repo_name | |
|
339 | ||
|
340 | # update permissions | |
|
341 | for member, perm, member_type in perms_updates: | |
|
342 | if member_type == 'user': | |
|
343 | # this updates existing one | |
|
344 | RepoModel().grant_user_permission( | |
|
345 | repo=cur_repo, user=member, perm=perm | |
|
346 | ) | |
|
347 | else: | |
|
348 | RepoModel().grant_users_group_permission( | |
|
349 | repo=cur_repo, group_name=member, perm=perm | |
|
350 | ) | |
|
351 | # set new permissions | |
|
352 | for member, perm, member_type in perms_new: | |
|
353 | if member_type == 'user': | |
|
354 | RepoModel().grant_user_permission( | |
|
355 | repo=cur_repo, user=member, perm=perm | |
|
356 | ) | |
|
357 | else: | |
|
358 | RepoModel().grant_users_group_permission( | |
|
359 | repo=cur_repo, group_name=member, perm=perm | |
|
360 | ) | |
|
361 | #TODO: implement this | |
|
362 | #action_logger(self.rhodecode_user, 'admin_changed_repo_permissions', | |
|
363 | # repo_name, self.ip_addr, self.sa) | |
|
364 | Session().commit() | |
|
365 | h.flash(_('Repository permissions updated'), category='success') | |
|
366 | return redirect(url('edit_repo', repo_name=repo_name)) | |
|
367 | ||
|
368 | @HasRepoPermissionAllDecorator('repository.admin') | |
|
309 | 369 | def delete_perm_user(self, repo_name): |
|
310 | 370 | """ |
|
311 | 371 | DELETE an existing repository permission user |
@@ -315,6 +375,9 b' class ReposController(BaseController):' | |||
|
315 | 375 | try: |
|
316 | 376 | RepoModel().revoke_user_permission(repo=repo_name, |
|
317 | 377 | user=request.POST['user_id']) |
|
378 | #TODO: implement this | |
|
379 | #action_logger(self.rhodecode_user, 'admin_revoked_repo_permissions', | |
|
380 | # repo_name, self.ip_addr, self.sa) | |
|
318 | 381 | Session().commit() |
|
319 | 382 | except Exception: |
|
320 | 383 | log.error(traceback.format_exc()) |
@@ -325,7 +388,7 b' class ReposController(BaseController):' | |||
|
325 | 388 | @HasRepoPermissionAllDecorator('repository.admin') |
|
326 | 389 | def delete_perm_users_group(self, repo_name): |
|
327 | 390 | """ |
|
328 |
DELETE an existing repository permission user |
|
|
391 | DELETE an existing repository permission user group | |
|
329 | 392 | |
|
330 | 393 | :param repo_name: |
|
331 | 394 | """ |
@@ -338,11 +401,11 b' class ReposController(BaseController):' | |||
|
338 | 401 | except Exception: |
|
339 | 402 | log.error(traceback.format_exc()) |
|
340 | 403 | h.flash(_('An error occurred during deletion of repository' |
|
341 |
' user |
|
|
404 | ' user groups'), | |
|
342 | 405 | category='error') |
|
343 | 406 | raise HTTPInternalServerError() |
|
344 | 407 | |
|
345 |
@HasPermissionAllDecorator(' |
|
|
408 | @HasRepoPermissionAllDecorator('repository.admin') | |
|
346 | 409 | def repo_stats(self, repo_name): |
|
347 | 410 | """ |
|
348 | 411 | DELETE an existing repository statistics |
@@ -359,7 +422,7 b' class ReposController(BaseController):' | |||
|
359 | 422 | category='error') |
|
360 | 423 | return redirect(url('edit_repo', repo_name=repo_name)) |
|
361 | 424 | |
|
362 |
@HasPermissionAllDecorator(' |
|
|
425 | @HasRepoPermissionAllDecorator('repository.admin') | |
|
363 | 426 | def repo_cache(self, repo_name): |
|
364 | 427 | """ |
|
365 | 428 | INVALIDATE existing repository cache |
@@ -376,7 +439,7 b' class ReposController(BaseController):' | |||
|
376 | 439 | category='error') |
|
377 | 440 | return redirect(url('edit_repo', repo_name=repo_name)) |
|
378 | 441 | |
|
379 |
@HasPermissionAllDecorator(' |
|
|
442 | @HasRepoPermissionAllDecorator('repository.admin') | |
|
380 | 443 | def repo_locking(self, repo_name): |
|
381 | 444 | """ |
|
382 | 445 | Unlock repository when it is locked ! |
@@ -396,7 +459,34 b' class ReposController(BaseController):' | |||
|
396 | 459 | category='error') |
|
397 | 460 | return redirect(url('edit_repo', repo_name=repo_name)) |
|
398 | 461 | |
|
399 |
@HasPermissionA |
|
|
462 | @HasRepoPermissionAnyDecorator('repository.write', 'repository.admin') | |
|
463 | def toggle_locking(self, repo_name): | |
|
464 | """ | |
|
465 | Toggle locking of repository by simple GET call to url | |
|
466 | ||
|
467 | :param repo_name: | |
|
468 | """ | |
|
469 | ||
|
470 | try: | |
|
471 | repo = Repository.get_by_repo_name(repo_name) | |
|
472 | ||
|
473 | if repo.enable_locking: | |
|
474 | if repo.locked[0]: | |
|
475 | Repository.unlock(repo) | |
|
476 | action = _('Unlocked') | |
|
477 | else: | |
|
478 | Repository.lock(repo, c.rhodecode_user.user_id) | |
|
479 | action = _('Locked') | |
|
480 | ||
|
481 | h.flash(_('Repository has been %s') % action, | |
|
482 | category='success') | |
|
483 | except Exception, e: | |
|
484 | log.error(traceback.format_exc()) | |
|
485 | h.flash(_('An error occurred during unlocking'), | |
|
486 | category='error') | |
|
487 | return redirect(url('summary_home', repo_name=repo_name)) | |
|
488 | ||
|
489 | @HasRepoPermissionAllDecorator('repository.admin') | |
|
400 | 490 | def repo_public_journal(self, repo_name): |
|
401 | 491 | """ |
|
402 | 492 | Set's this repository to be visible in public journal, |
@@ -415,7 +505,7 b' class ReposController(BaseController):' | |||
|
415 | 505 | h.flash(_('Updated repository visibility in public journal'), |
|
416 | 506 | category='success') |
|
417 | 507 | Session().commit() |
|
418 | except: | |
|
508 | except Exception: | |
|
419 | 509 | h.flash(_('An error occurred during setting this' |
|
420 | 510 | ' repository in public journal'), |
|
421 | 511 | category='error') |
@@ -424,7 +514,7 b' class ReposController(BaseController):' | |||
|
424 | 514 | h.flash(_('Token mismatch'), category='error') |
|
425 | 515 | return redirect(url('edit_repo', repo_name=repo_name)) |
|
426 | 516 | |
|
427 |
@HasPermissionAllDecorator(' |
|
|
517 | @HasRepoPermissionAllDecorator('repository.admin') | |
|
428 | 518 | def repo_pull(self, repo_name): |
|
429 | 519 | """ |
|
430 | 520 | Runs task to update given repository with remote changes, |
@@ -441,7 +531,7 b' class ReposController(BaseController):' | |||
|
441 | 531 | |
|
442 | 532 | return redirect(url('edit_repo', repo_name=repo_name)) |
|
443 | 533 | |
|
444 |
@HasPermissionAllDecorator(' |
|
|
534 | @HasRepoPermissionAllDecorator('repository.admin') | |
|
445 | 535 | def repo_as_fork(self, repo_name): |
|
446 | 536 | """ |
|
447 | 537 | Mark given repository as a fork of another |
@@ -468,7 +558,7 b' class ReposController(BaseController):' | |||
|
468 | 558 | """GET /repos/repo_name: Show a specific item""" |
|
469 | 559 | # url('repo', repo_name=ID) |
|
470 | 560 | |
|
471 |
@HasPermissionAllDecorator(' |
|
|
561 | @HasRepoPermissionAllDecorator('repository.admin') | |
|
472 | 562 | def edit(self, repo_name, format='html'): |
|
473 | 563 | """GET /repos/repo_name/edit: Form to edit an existing item""" |
|
474 | 564 | # url('edit_repo', repo_name=ID) |
@@ -480,3 +570,37 b' class ReposController(BaseController):' | |||
|
480 | 570 | encoding="UTF-8", |
|
481 | 571 | force_defaults=False |
|
482 | 572 | ) |
|
573 | ||
|
574 | @HasPermissionAllDecorator('hg.admin') | |
|
575 | def create_repo_field(self, repo_name): | |
|
576 | try: | |
|
577 | form_result = RepoFieldForm()().to_python(dict(request.POST)) | |
|
578 | new_field = RepositoryField() | |
|
579 | new_field.repository = Repository.get_by_repo_name(repo_name) | |
|
580 | new_field.field_key = form_result['new_field_key'] | |
|
581 | new_field.field_type = form_result['new_field_type'] # python type | |
|
582 | new_field.field_value = form_result['new_field_value'] # set initial blank value | |
|
583 | new_field.field_desc = form_result['new_field_desc'] | |
|
584 | new_field.field_label = form_result['new_field_label'] | |
|
585 | Session().add(new_field) | |
|
586 | Session().commit() | |
|
587 | ||
|
588 | except Exception, e: | |
|
589 | log.error(traceback.format_exc()) | |
|
590 | msg = _('An error occurred during creation of field') | |
|
591 | if isinstance(e, formencode.Invalid): | |
|
592 | msg += ". " + e.msg | |
|
593 | h.flash(msg, category='error') | |
|
594 | return redirect(url('edit_repo', repo_name=repo_name)) | |
|
595 | ||
|
596 | @HasPermissionAllDecorator('hg.admin') | |
|
597 | def delete_repo_field(self, repo_name, field_id): | |
|
598 | field = RepositoryField.get_or_404(field_id) | |
|
599 | try: | |
|
600 | Session().delete(field) | |
|
601 | Session().commit() | |
|
602 | except Exception, e: | |
|
603 | log.error(traceback.format_exc()) | |
|
604 | msg = _('An error occurred during removal of field') | |
|
605 | h.flash(msg, category='error') | |
|
606 | return redirect(url('edit_repo', repo_name=repo_name)) |
@@ -3,7 +3,7 b'' | |||
|
3 | 3 | rhodecode.controllers.admin.repos_groups |
|
4 | 4 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
5 | 5 | |
|
6 |
Repositor |
|
|
6 | Repository groups controller for RhodeCode | |
|
7 | 7 | |
|
8 | 8 | :created_on: Mar 23, 2010 |
|
9 | 9 | :author: marcink |
@@ -30,7 +30,7 b' import formencode' | |||
|
30 | 30 | from formencode import htmlfill |
|
31 | 31 | |
|
32 | 32 | from pylons import request, tmpl_context as c, url |
|
33 | from pylons.controllers.util import redirect | |
|
33 | from pylons.controllers.util import abort, redirect | |
|
34 | 34 | from pylons.i18n.translation import _ |
|
35 | 35 | |
|
36 | 36 | from sqlalchemy.exc import IntegrityError |
@@ -39,7 +39,8 b' import rhodecode' | |||
|
39 | 39 | from rhodecode.lib import helpers as h |
|
40 | 40 | from rhodecode.lib.ext_json import json |
|
41 | 41 | from rhodecode.lib.auth import LoginRequired, HasPermissionAnyDecorator,\ |
|
42 | HasReposGroupPermissionAnyDecorator | |
|
42 | HasReposGroupPermissionAnyDecorator, HasReposGroupPermissionAll,\ | |
|
43 | HasPermissionAll | |
|
43 | 44 | from rhodecode.lib.base import BaseController, render |
|
44 | 45 | from rhodecode.model.db import RepoGroup, Repository |
|
45 | 46 | from rhodecode.model.repos_group import ReposGroupModel |
@@ -47,8 +48,9 b' from rhodecode.model.forms import ReposG' | |||
|
47 | 48 | from rhodecode.model.meta import Session |
|
48 | 49 | from rhodecode.model.repo import RepoModel |
|
49 | 50 | from webob.exc import HTTPInternalServerError, HTTPNotFound |
|
50 | from rhodecode.lib.utils2 import str2bool | |
|
51 | from rhodecode.lib.utils2 import str2bool, safe_int | |
|
51 | 52 | from sqlalchemy.sql.expression import func |
|
53 | from rhodecode.model.scm import GroupList | |
|
52 | 54 | |
|
53 | 55 | log = logging.getLogger(__name__) |
|
54 | 56 | |
@@ -63,10 +65,21 b' class ReposGroupsController(BaseControll' | |||
|
63 | 65 | def __before__(self): |
|
64 | 66 | super(ReposGroupsController, self).__before__() |
|
65 | 67 | |
|
66 | def __load_defaults(self): | |
|
67 | c.repo_groups = RepoGroup.groups_choices() | |
|
68 | def __load_defaults(self, allow_empty_group=False, exclude_group_ids=[]): | |
|
69 | if HasPermissionAll('hg.admin')('group edit'): | |
|
70 | #we're global admin, we're ok and we can create TOP level groups | |
|
71 | allow_empty_group = True | |
|
72 | ||
|
73 | #override the choices for this form, we need to filter choices | |
|
74 | #and display only those we have ADMIN right | |
|
75 | groups_with_admin_rights = GroupList(RepoGroup.query().all(), | |
|
76 | perm_set=['group.admin']) | |
|
77 | c.repo_groups = RepoGroup.groups_choices(groups=groups_with_admin_rights, | |
|
78 | show_empty_group=allow_empty_group) | |
|
79 | # exclude filtered ids | |
|
80 | c.repo_groups = filter(lambda x: x[0] not in exclude_group_ids, | |
|
81 | c.repo_groups) | |
|
68 | 82 | c.repo_groups_choices = map(lambda k: unicode(k[0]), c.repo_groups) |
|
69 | ||
|
70 | 83 | repo_model = RepoModel() |
|
71 | 84 | c.users_array = repo_model.get_users_js() |
|
72 | 85 | c.users_groups_array = repo_model.get_users_groups_js() |
@@ -77,7 +90,6 b' class ReposGroupsController(BaseControll' | |||
|
77 | 90 | |
|
78 | 91 | :param group_id: |
|
79 | 92 | """ |
|
80 | self.__load_defaults() | |
|
81 | 93 | repo_group = RepoGroup.get_or_404(group_id) |
|
82 | 94 | data = repo_group.get_dict() |
|
83 | 95 | data['group_name'] = repo_group.name |
@@ -94,34 +106,46 b' class ReposGroupsController(BaseControll' | |||
|
94 | 106 | |
|
95 | 107 | return data |
|
96 | 108 | |
|
97 | @HasPermissionAnyDecorator('hg.admin') | |
|
109 | def _revoke_perms_on_yourself(self, form_result): | |
|
110 | _up = filter(lambda u: c.rhodecode_user.username == u[0], | |
|
111 | form_result['perms_updates']) | |
|
112 | _new = filter(lambda u: c.rhodecode_user.username == u[0], | |
|
113 | form_result['perms_new']) | |
|
114 | if _new and _new[0][1] != 'group.admin' or _up and _up[0][1] != 'group.admin': | |
|
115 | return True | |
|
116 | return False | |
|
117 | ||
|
98 | 118 | def index(self, format='html'): |
|
99 | 119 | """GET /repos_groups: All items in the collection""" |
|
100 | 120 | # url('repos_groups') |
|
121 | group_iter = GroupList(RepoGroup.query().all(), perm_set=['group.admin']) | |
|
101 | 122 | sk = lambda g: g.parents[0].group_name if g.parents else g.group_name |
|
102 |
c.groups = sorted( |
|
|
123 | c.groups = sorted(group_iter, key=sk) | |
|
103 | 124 | return render('admin/repos_groups/repos_groups_show.html') |
|
104 | 125 | |
|
105 | @HasPermissionAnyDecorator('hg.admin') | |
|
106 | 126 | def create(self): |
|
107 | 127 | """POST /repos_groups: Create a new item""" |
|
108 | 128 | # url('repos_groups') |
|
129 | ||
|
109 | 130 | self.__load_defaults() |
|
110 | repos_group_form = ReposGroupForm(available_groups = | |
|
111 | c.repo_groups_choices)() | |
|
131 | ||
|
132 | # permissions for can create group based on parent_id are checked | |
|
133 | # here in the Form | |
|
134 | repos_group_form = ReposGroupForm(available_groups= | |
|
135 | map(lambda k: unicode(k[0]), c.repo_groups))() | |
|
112 | 136 | try: |
|
113 | 137 | form_result = repos_group_form.to_python(dict(request.POST)) |
|
114 | 138 | ReposGroupModel().create( |
|
115 | 139 | group_name=form_result['group_name'], |
|
116 | 140 | group_description=form_result['group_description'], |
|
117 | parent=form_result['group_parent_id'] | |
|
141 | parent=form_result['group_parent_id'], | |
|
142 | owner=self.rhodecode_user.user_id | |
|
118 | 143 | ) |
|
119 | 144 | Session().commit() |
|
120 |
h.flash(_(' |
|
|
145 | h.flash(_('Created repository group %s') \ | |
|
121 | 146 | % form_result['group_name'], category='success') |
|
122 | 147 | #TODO: in futureaction_logger(, '', '', '', self.sa) |
|
123 | 148 | except formencode.Invalid, errors: |
|
124 | ||
|
125 | 149 | return htmlfill.render( |
|
126 | 150 | render('admin/repos_groups/repos_groups_add.html'), |
|
127 | 151 | defaults=errors.value, |
@@ -130,42 +154,73 b' class ReposGroupsController(BaseControll' | |||
|
130 | 154 | encoding="UTF-8") |
|
131 | 155 | except Exception: |
|
132 | 156 | log.error(traceback.format_exc()) |
|
133 |
h.flash(_(' |
|
|
157 | h.flash(_('Error occurred during creation of repository group %s') \ | |
|
134 | 158 | % request.POST.get('group_name'), category='error') |
|
159 | parent_group_id = form_result['group_parent_id'] | |
|
160 | #TODO: maybe we should get back to the main view, not the admin one | |
|
161 | return redirect(url('repos_groups', parent_group=parent_group_id)) | |
|
135 | 162 | |
|
136 | return redirect(url('repos_groups')) | |
|
137 | ||
|
138 | @HasPermissionAnyDecorator('hg.admin') | |
|
139 | 163 | def new(self, format='html'): |
|
140 | 164 | """GET /repos_groups/new: Form to create a new item""" |
|
141 | 165 | # url('new_repos_group') |
|
166 | if HasPermissionAll('hg.admin')('group create'): | |
|
167 | #we're global admin, we're ok and we can create TOP level groups | |
|
168 | pass | |
|
169 | else: | |
|
170 | # we pass in parent group into creation form, thus we know | |
|
171 | # what would be the group, we can check perms here ! | |
|
172 | group_id = safe_int(request.GET.get('parent_group')) | |
|
173 | group = RepoGroup.get(group_id) if group_id else None | |
|
174 | group_name = group.group_name if group else None | |
|
175 | if HasReposGroupPermissionAll('group.admin')(group_name, 'group create'): | |
|
176 | pass | |
|
177 | else: | |
|
178 | return abort(403) | |
|
179 | ||
|
142 | 180 | self.__load_defaults() |
|
143 | 181 | return render('admin/repos_groups/repos_groups_add.html') |
|
144 | 182 | |
|
145 |
@HasPermissionAnyDecorator(' |
|
|
146 |
def update(self, |
|
|
147 |
"""PUT /repos_groups/ |
|
|
183 | @HasReposGroupPermissionAnyDecorator('group.admin') | |
|
184 | def update(self, group_name): | |
|
185 | """PUT /repos_groups/group_name: Update an existing item""" | |
|
148 | 186 | # Forms posted to this method should contain a hidden field: |
|
149 | 187 | # <input type="hidden" name="_method" value="PUT" /> |
|
150 | 188 | # Or using helpers: |
|
151 |
# h.form(url('repos_group', |
|
|
189 | # h.form(url('repos_group', group_name=GROUP_NAME), | |
|
152 | 190 | # method='put') |
|
153 |
# url('repos_group', |
|
|
191 | # url('repos_group', group_name=GROUP_NAME) | |
|
154 | 192 | |
|
155 | self.__load_defaults() | |
|
156 | c.repos_group = RepoGroup.get(id) | |
|
193 | c.repos_group = ReposGroupModel()._get_repos_group(group_name) | |
|
194 | if HasPermissionAll('hg.admin')('group edit'): | |
|
195 | #we're global admin, we're ok and we can create TOP level groups | |
|
196 | allow_empty_group = True | |
|
197 | elif not c.repos_group.parent_group: | |
|
198 | allow_empty_group = True | |
|
199 | else: | |
|
200 | allow_empty_group = False | |
|
201 | self.__load_defaults(allow_empty_group=allow_empty_group, | |
|
202 | exclude_group_ids=[c.repos_group.group_id]) | |
|
157 | 203 | |
|
158 | 204 | repos_group_form = ReposGroupForm( |
|
159 | 205 | edit=True, |
|
160 | 206 | old_data=c.repos_group.get_dict(), |
|
161 | available_groups=c.repo_groups_choices | |
|
207 | available_groups=c.repo_groups_choices, | |
|
208 | can_create_in_root=allow_empty_group, | |
|
162 | 209 | )() |
|
163 | 210 | try: |
|
164 | 211 | form_result = repos_group_form.to_python(dict(request.POST)) |
|
165 | ReposGroupModel().update(id, form_result) | |
|
212 | if not c.rhodecode_user.is_admin: | |
|
213 | if self._revoke_perms_on_yourself(form_result): | |
|
214 | msg = _('Cannot revoke permission for yourself as admin') | |
|
215 | h.flash(msg, category='warning') | |
|
216 | raise Exception('revoke admin permission on self') | |
|
217 | ||
|
218 | new_gr = ReposGroupModel().update(group_name, form_result) | |
|
166 | 219 | Session().commit() |
|
167 |
h.flash(_(' |
|
|
220 | h.flash(_('Updated repository group %s') \ | |
|
168 | 221 | % form_result['group_name'], category='success') |
|
222 | # we now have new name ! | |
|
223 | group_name = new_gr.group_name | |
|
169 | 224 | #TODO: in future action_logger(, '', '', '', self.sa) |
|
170 | 225 | except formencode.Invalid, errors: |
|
171 | 226 | |
@@ -177,61 +232,60 b' class ReposGroupsController(BaseControll' | |||
|
177 | 232 | encoding="UTF-8") |
|
178 | 233 | except Exception: |
|
179 | 234 | log.error(traceback.format_exc()) |
|
180 |
h.flash(_(' |
|
|
235 | h.flash(_('Error occurred during update of repository group %s') \ | |
|
181 | 236 | % request.POST.get('group_name'), category='error') |
|
182 | 237 | |
|
183 |
return redirect(url('edit_repos_group', |
|
|
238 | return redirect(url('edit_repos_group', group_name=group_name)) | |
|
184 | 239 | |
|
185 |
@HasPermissionAnyDecorator(' |
|
|
186 |
def delete(self, |
|
|
187 |
"""DELETE /repos_groups/ |
|
|
240 | @HasReposGroupPermissionAnyDecorator('group.admin') | |
|
241 | def delete(self, group_name): | |
|
242 | """DELETE /repos_groups/group_name: Delete an existing item""" | |
|
188 | 243 | # Forms posted to this method should contain a hidden field: |
|
189 | 244 | # <input type="hidden" name="_method" value="DELETE" /> |
|
190 | 245 | # Or using helpers: |
|
191 |
# h.form(url('repos_group', |
|
|
246 | # h.form(url('repos_group', group_name=GROUP_NAME), | |
|
192 | 247 | # method='delete') |
|
193 |
# url('repos_group', |
|
|
248 | # url('repos_group', group_name=GROUP_NAME) | |
|
194 | 249 | |
|
195 | gr = RepoGroup.get(id) | |
|
250 | gr = c.repos_group = ReposGroupModel()._get_repos_group(group_name) | |
|
196 | 251 | repos = gr.repositories.all() |
|
197 | 252 | if repos: |
|
198 | 253 | h.flash(_('This group contains %s repositores and cannot be ' |
|
199 | 'deleted') % len(repos), | |
|
200 | category='error') | |
|
254 | 'deleted') % len(repos), category='warning') | |
|
255 | return redirect(url('repos_groups')) | |
|
256 | ||
|
257 | children = gr.children.all() | |
|
258 | if children: | |
|
259 | h.flash(_('This group contains %s subgroups and cannot be deleted' | |
|
260 | % (len(children))), category='warning') | |
|
201 | 261 | return redirect(url('repos_groups')) |
|
202 | 262 | |
|
203 | 263 | try: |
|
204 |
ReposGroupModel().delete( |
|
|
264 | ReposGroupModel().delete(group_name) | |
|
205 | 265 | Session().commit() |
|
206 |
h.flash(_(' |
|
|
266 | h.flash(_('Removed repository group %s') % group_name, | |
|
207 | 267 | category='success') |
|
208 | 268 | #TODO: in future action_logger(, '', '', '', self.sa) |
|
209 | except IntegrityError, e: | |
|
210 | if str(e.message).find('groups_group_parent_id_fkey') != -1: | |
|
211 | log.error(traceback.format_exc()) | |
|
212 | h.flash(_('Cannot delete this group it still contains ' | |
|
213 | 'subgroups'), | |
|
214 | category='warning') | |
|
215 | else: | |
|
216 | log.error(traceback.format_exc()) | |
|
217 | h.flash(_('error occurred during deletion of repos ' | |
|
218 | 'group %s') % gr.group_name, category='error') | |
|
219 | ||
|
220 | 269 | except Exception: |
|
221 | 270 | log.error(traceback.format_exc()) |
|
222 |
h.flash(_(' |
|
|
223 |
'group %s') % |
|
|
271 | h.flash(_('Error occurred during deletion of repos ' | |
|
272 | 'group %s') % group_name, category='error') | |
|
224 | 273 | |
|
225 | 274 | return redirect(url('repos_groups')) |
|
226 | 275 | |
|
227 | 276 | @HasReposGroupPermissionAnyDecorator('group.admin') |
|
228 | 277 | def delete_repos_group_user_perm(self, group_name): |
|
229 | 278 | """ |
|
230 |
DELETE an existing repositor |
|
|
279 | DELETE an existing repository group permission user | |
|
231 | 280 | |
|
232 | 281 | :param group_name: |
|
233 | 282 | """ |
|
234 | 283 | try: |
|
284 | if not c.rhodecode_user.is_admin: | |
|
285 | if c.rhodecode_user.user_id == safe_int(request.POST['user_id']): | |
|
286 | msg = _('Cannot revoke permission for yourself as admin') | |
|
287 | h.flash(msg, category='warning') | |
|
288 | raise Exception('revoke admin permission on self') | |
|
235 | 289 | recursive = str2bool(request.POST.get('recursive', False)) |
|
236 | 290 | ReposGroupModel().delete_permission( |
|
237 | 291 | repos_group=group_name, obj=request.POST['user_id'], |
@@ -247,7 +301,7 b' class ReposGroupsController(BaseControll' | |||
|
247 | 301 | @HasReposGroupPermissionAnyDecorator('group.admin') |
|
248 | 302 | def delete_repos_group_users_group_perm(self, group_name): |
|
249 | 303 | """ |
|
250 |
DELETE an existing repositor |
|
|
304 | DELETE an existing repository group permission user group | |
|
251 | 305 | |
|
252 | 306 | :param group_name: |
|
253 | 307 | """ |
@@ -262,7 +316,7 b' class ReposGroupsController(BaseControll' | |||
|
262 | 316 | except Exception: |
|
263 | 317 | log.error(traceback.format_exc()) |
|
264 | 318 | h.flash(_('An error occurred during deletion of group' |
|
265 |
' user |
|
|
319 | ' user groups'), | |
|
266 | 320 | category='error') |
|
267 | 321 | raise HTTPInternalServerError() |
|
268 | 322 | |
@@ -279,11 +333,11 b' class ReposGroupsController(BaseControll' | |||
|
279 | 333 | |
|
280 | 334 | @HasReposGroupPermissionAnyDecorator('group.read', 'group.write', |
|
281 | 335 | 'group.admin') |
|
282 |
def show(self, |
|
|
283 |
"""GET /repos_groups/ |
|
|
284 |
# url('repos_group', |
|
|
336 | def show(self, group_name, format='html'): | |
|
337 | """GET /repos_groups/group_name: Show a specific item""" | |
|
338 | # url('repos_group', group_name=GROUP_NAME) | |
|
285 | 339 | |
|
286 | c.group = RepoGroup.get_or_404(id) | |
|
340 | c.group = c.repos_group = ReposGroupModel()._get_repos_group(group_name) | |
|
287 | 341 | c.group_repos = c.group.repositories.all() |
|
288 | 342 | |
|
289 | 343 | #overwrite our cached list with current filter |
@@ -291,15 +345,15 b' class ReposGroupsController(BaseControll' | |||
|
291 | 345 | c.repo_cnt = 0 |
|
292 | 346 | |
|
293 | 347 | groups = RepoGroup.query().order_by(RepoGroup.group_name)\ |
|
294 | .filter(RepoGroup.group_parent_id == id).all() | |
|
348 | .filter(RepoGroup.group_parent_id == c.group.group_id).all() | |
|
295 | 349 | c.groups = self.scm_model.get_repos_groups(groups) |
|
296 | 350 | |
|
297 |
if c.visual.lightweight_dashboard |
|
|
351 | if not c.visual.lightweight_dashboard: | |
|
298 | 352 | c.repos_list = self.scm_model.get_repos(all_repos=gr_filter) |
|
299 | 353 | ## lightweight version of dashboard |
|
300 | 354 | else: |
|
301 | 355 | c.repos_list = Repository.query()\ |
|
302 | .filter(Repository.group_id == id)\ | |
|
356 | .filter(Repository.group_id == c.group.group_id)\ | |
|
303 | 357 | .order_by(func.lower(Repository.repo_name))\ |
|
304 | 358 | .all() |
|
305 | 359 | |
@@ -310,17 +364,25 b' class ReposGroupsController(BaseControll' | |||
|
310 | 364 | |
|
311 | 365 | return render('admin/repos_groups/repos_groups.html') |
|
312 | 366 | |
|
313 |
@HasPermissionAnyDecorator(' |
|
|
314 |
def edit(self, |
|
|
315 |
"""GET /repos_groups/ |
|
|
316 |
# url('edit_repos_group', |
|
|
367 | @HasReposGroupPermissionAnyDecorator('group.admin') | |
|
368 | def edit(self, group_name, format='html'): | |
|
369 | """GET /repos_groups/group_name/edit: Form to edit an existing item""" | |
|
370 | # url('edit_repos_group', group_name=GROUP_NAME) | |
|
317 | 371 | |
|
318 |
c.repos_group = ReposGroupModel()._get_repos_group( |
|
|
319 | defaults = self.__load_data(c.repos_group.group_id) | |
|
372 | c.repos_group = ReposGroupModel()._get_repos_group(group_name) | |
|
373 | #we can only allow moving empty group if it's already a top-level | |
|
374 | #group, ie has no parents, or we're admin | |
|
375 | if HasPermissionAll('hg.admin')('group edit'): | |
|
376 | #we're global admin, we're ok and we can create TOP level groups | |
|
377 | allow_empty_group = True | |
|
378 | elif not c.repos_group.parent_group: | |
|
379 | allow_empty_group = True | |
|
380 | else: | |
|
381 | allow_empty_group = False | |
|
320 | 382 | |
|
321 | # we need to exclude this group from the group list for editing | |
|
322 | c.repo_groups = filter(lambda x: x[0] != c.repos_group.group_id, | |
|
323 | c.repo_groups) | |
|
383 | self.__load_defaults(allow_empty_group=allow_empty_group, | |
|
384 | exclude_group_ids=[c.repos_group.group_id]) | |
|
385 | defaults = self.__load_data(c.repos_group.group_id) | |
|
324 | 386 | |
|
325 | 387 | return htmlfill.render( |
|
326 | 388 | render('admin/repos_groups/repos_groups_edit.html'), |
@@ -37,7 +37,8 b' from pylons.i18n.translation import _' | |||
|
37 | 37 | |
|
38 | 38 | from rhodecode.lib import helpers as h |
|
39 | 39 | from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator, \ |
|
40 | HasPermissionAnyDecorator, NotAnonymous | |
|
40 | HasPermissionAnyDecorator, NotAnonymous, HasPermissionAny,\ | |
|
41 | HasReposGroupPermissionAll, HasReposGroupPermissionAny, AuthUser | |
|
41 | 42 | from rhodecode.lib.base import BaseController, render |
|
42 | 43 | from rhodecode.lib.celerylib import tasks, run_task |
|
43 | 44 | from rhodecode.lib.utils import repo2db_mapper, invalidate_cache, \ |
@@ -46,7 +47,7 b' from rhodecode.model.db import RhodeCode' | |||
|
46 | 47 | RhodeCodeSetting, PullRequest, PullRequestReviewers |
|
47 | 48 | from rhodecode.model.forms import UserForm, ApplicationSettingsForm, \ |
|
48 | 49 | ApplicationUiSettingsForm, ApplicationVisualisationForm |
|
49 | from rhodecode.model.scm import ScmModel | |
|
50 | from rhodecode.model.scm import ScmModel, GroupList | |
|
50 | 51 | from rhodecode.model.user import UserModel |
|
51 | 52 | from rhodecode.model.repo import RepoModel |
|
52 | 53 | from rhodecode.model.db import User |
@@ -54,6 +55,7 b' from rhodecode.model.notification import' | |||
|
54 | 55 | from rhodecode.model.meta import Session |
|
55 | 56 | from rhodecode.lib.utils2 import str2bool, safe_unicode |
|
56 | 57 | from rhodecode.lib.compat import json |
|
58 | from webob.exc import HTTPForbidden | |
|
57 | 59 | log = logging.getLogger(__name__) |
|
58 | 60 | |
|
59 | 61 | |
@@ -165,7 +167,7 b' class SettingsController(BaseController)' | |||
|
165 | 167 | |
|
166 | 168 | except Exception: |
|
167 | 169 | log.error(traceback.format_exc()) |
|
168 |
h.flash(_(' |
|
|
170 | h.flash(_('Error occurred during updating ' | |
|
169 | 171 | 'application settings'), |
|
170 | 172 | category='error') |
|
171 | 173 | |
@@ -204,6 +206,11 b' class SettingsController(BaseController)' | |||
|
204 | 206 | form_result['rhodecode_lightweight_dashboard'] |
|
205 | 207 | Session().add(sett4) |
|
206 | 208 | |
|
209 | sett4 = RhodeCodeSetting.get_by_name_or_create('repository_fields') | |
|
210 | sett4.app_settings_value = \ | |
|
211 | form_result['rhodecode_repository_fields'] | |
|
212 | Session().add(sett4) | |
|
213 | ||
|
207 | 214 | Session().commit() |
|
208 | 215 | set_rhodecode_config(config) |
|
209 | 216 | h.flash(_('Updated visualisation settings'), |
@@ -211,7 +218,7 b' class SettingsController(BaseController)' | |||
|
211 | 218 | |
|
212 | 219 | except Exception: |
|
213 | 220 | log.error(traceback.format_exc()) |
|
214 |
h.flash(_(' |
|
|
221 | h.flash(_('Error occurred during updating ' | |
|
215 | 222 | 'visualisation settings'), |
|
216 | 223 | category='error') |
|
217 | 224 | |
@@ -229,9 +236,6 b' class SettingsController(BaseController)' | |||
|
229 | 236 | ) |
|
230 | 237 | |
|
231 | 238 | try: |
|
232 | # fix namespaces for hooks and extensions | |
|
233 | _f = lambda s: s.replace('.', '_') | |
|
234 | ||
|
235 | 239 | sett = RhodeCodeUi.get_by_key('push_ssl') |
|
236 | 240 | sett.ui_value = form_result['web_push_ssl'] |
|
237 | 241 | Session().add(sett) |
@@ -242,23 +246,19 b' class SettingsController(BaseController)' | |||
|
242 | 246 | |
|
243 | 247 | #HOOKS |
|
244 | 248 | sett = RhodeCodeUi.get_by_key(RhodeCodeUi.HOOK_UPDATE) |
|
245 |
sett.ui_active = form_result[ |
|
|
246 | RhodeCodeUi.HOOK_UPDATE)] | |
|
249 | sett.ui_active = form_result['hooks_changegroup_update'] | |
|
247 | 250 | Session().add(sett) |
|
248 | 251 | |
|
249 | 252 | sett = RhodeCodeUi.get_by_key(RhodeCodeUi.HOOK_REPO_SIZE) |
|
250 |
sett.ui_active = form_result[ |
|
|
251 | RhodeCodeUi.HOOK_REPO_SIZE)] | |
|
253 | sett.ui_active = form_result['hooks_changegroup_repo_size'] | |
|
252 | 254 | Session().add(sett) |
|
253 | 255 | |
|
254 | 256 | sett = RhodeCodeUi.get_by_key(RhodeCodeUi.HOOK_PUSH) |
|
255 |
sett.ui_active = form_result[ |
|
|
256 | RhodeCodeUi.HOOK_PUSH)] | |
|
257 | sett.ui_active = form_result['hooks_changegroup_push_logger'] | |
|
257 | 258 | Session().add(sett) |
|
258 | 259 | |
|
259 | 260 | sett = RhodeCodeUi.get_by_key(RhodeCodeUi.HOOK_PULL) |
|
260 |
sett.ui_active = form_result[ |
|
|
261 | RhodeCodeUi.HOOK_PULL)] | |
|
261 | sett.ui_active = form_result['hooks_outgoing_pull_logger'] | |
|
262 | 262 | |
|
263 | 263 | Session().add(sett) |
|
264 | 264 | |
@@ -269,7 +269,7 b' class SettingsController(BaseController)' | |||
|
269 | 269 | sett = RhodeCodeUi() |
|
270 | 270 | sett.ui_key = 'largefiles' |
|
271 | 271 | sett.ui_section = 'extensions' |
|
272 |
sett.ui_active = form_result[ |
|
|
272 | sett.ui_active = form_result['extensions_largefiles'] | |
|
273 | 273 | Session().add(sett) |
|
274 | 274 | |
|
275 | 275 | sett = RhodeCodeUi.get_by_key('hgsubversion') |
@@ -279,7 +279,7 b' class SettingsController(BaseController)' | |||
|
279 | 279 | sett.ui_key = 'hgsubversion' |
|
280 | 280 | sett.ui_section = 'extensions' |
|
281 | 281 | |
|
282 |
sett.ui_active = form_result[ |
|
|
282 | sett.ui_active = form_result['extensions_hgsubversion'] | |
|
283 | 283 | Session().add(sett) |
|
284 | 284 | |
|
285 | 285 | # sett = RhodeCodeUi.get_by_key('hggit') |
@@ -289,7 +289,7 b' class SettingsController(BaseController)' | |||
|
289 | 289 | # sett.ui_key = 'hggit' |
|
290 | 290 | # sett.ui_section = 'extensions' |
|
291 | 291 | # |
|
292 |
# sett.ui_active = form_result[ |
|
|
292 | # sett.ui_active = form_result['extensions_hggit'] | |
|
293 | 293 | # Session().add(sett) |
|
294 | 294 | |
|
295 | 295 | Session().commit() |
@@ -298,7 +298,7 b' class SettingsController(BaseController)' | |||
|
298 | 298 | |
|
299 | 299 | except Exception: |
|
300 | 300 | log.error(traceback.format_exc()) |
|
301 |
h.flash(_(' |
|
|
301 | h.flash(_('Error occurred during updating ' | |
|
302 | 302 | 'application settings'), category='error') |
|
303 | 303 | |
|
304 | 304 | if setting_id == 'hooks': |
@@ -324,7 +324,7 b' class SettingsController(BaseController)' | |||
|
324 | 324 | Session().commit() |
|
325 | 325 | except Exception: |
|
326 | 326 | log.error(traceback.format_exc()) |
|
327 |
h.flash(_(' |
|
|
327 | h.flash(_('Error occurred during hook creation'), | |
|
328 | 328 | category='error') |
|
329 | 329 | |
|
330 | 330 | return redirect(url('admin_edit_setting', setting_id='hooks')) |
@@ -402,6 +402,8 b' class SettingsController(BaseController)' | |||
|
402 | 402 | # url('admin_settings_my_account') |
|
403 | 403 | |
|
404 | 404 | c.user = User.get(self.rhodecode_user.user_id) |
|
405 | c.perm_user = AuthUser(user_id=self.rhodecode_user.user_id, | |
|
406 | ip_addr=self.ip_addr) | |
|
405 | 407 | c.ldap_dn = c.user.ldap_dn |
|
406 | 408 | |
|
407 | 409 | if c.user.username == 'default': |
@@ -433,6 +435,8 b' class SettingsController(BaseController)' | |||
|
433 | 435 | # url('admin_settings_my_account_update', id=ID) |
|
434 | 436 | uid = self.rhodecode_user.user_id |
|
435 | 437 | c.user = User.get(self.rhodecode_user.user_id) |
|
438 | c.perm_user = AuthUser(user_id=self.rhodecode_user.user_id, | |
|
439 | ip_addr=self.ip_addr) | |
|
436 | 440 | c.ldap_dn = c.user.ldap_dn |
|
437 | 441 | email = self.rhodecode_user.email |
|
438 | 442 | _form = UserForm(edit=True, |
@@ -460,45 +464,32 b' class SettingsController(BaseController)' | |||
|
460 | 464 | return render('admin/users/user_edit_my_account.html') |
|
461 | 465 | except Exception: |
|
462 | 466 | log.error(traceback.format_exc()) |
|
463 |
h.flash(_(' |
|
|
467 | h.flash(_('Error occurred during update of user %s') \ | |
|
464 | 468 | % form_result.get('username'), category='error') |
|
465 | 469 | |
|
466 | 470 | return redirect(url('my_account')) |
|
467 | 471 | |
|
468 | 472 | @NotAnonymous() |
|
469 | 473 | def my_account_my_pullrequests(self): |
|
470 | c.my_pull_requests = PullRequest.query()\ | |
|
474 | c.show_closed = request.GET.get('pr_show_closed') | |
|
475 | ||
|
476 | def _filter(pr): | |
|
477 | s = sorted(pr, key=lambda o: o.created_on, reverse=True) | |
|
478 | if not c.show_closed: | |
|
479 | s = filter(lambda p: p.status != PullRequest.STATUS_CLOSED, s) | |
|
480 | return s | |
|
481 | ||
|
482 | c.my_pull_requests = _filter(PullRequest.query()\ | |
|
471 | 483 | .filter(PullRequest.user_id == |
|
472 | 484 | self.rhodecode_user.user_id)\ |
|
473 | .all() | |
|
474 | c.participate_in_pull_requests = \ | |
|
475 | [x.pull_request for x in PullRequestReviewers.query()\ | |
|
476 | .filter(PullRequestReviewers.user_id == | |
|
477 | self.rhodecode_user.user_id)\ | |
|
478 | .all()] | |
|
479 | return render('admin/users/user_edit_my_account_pullrequests.html') | |
|
480 | ||
|
481 | @NotAnonymous() | |
|
482 | @HasPermissionAnyDecorator('hg.admin', 'hg.create.repository') | |
|
483 | def create_repository(self): | |
|
484 | """GET /_admin/create_repository: Form to create a new item""" | |
|
485 | .all()) | |
|
485 | 486 | |
|
486 | c.repo_groups = RepoGroup.groups_choices(check_perms=True) | |
|
487 | c.repo_groups_choices = map(lambda k: unicode(k[0]), c.repo_groups) | |
|
488 | choices, c.landing_revs = ScmModel().get_repo_landing_revs() | |
|
489 | ||
|
490 | new_repo = request.GET.get('repo', '') | |
|
491 | c.new_repo = repo_name_slug(new_repo) | |
|
487 | c.participate_in_pull_requests = _filter([ | |
|
488 | x.pull_request for x in PullRequestReviewers.query()\ | |
|
489 | .filter(PullRequestReviewers.user_id == | |
|
490 | self.rhodecode_user.user_id).all()]) | |
|
492 | 491 | |
|
493 | ## apply the defaults from defaults page | |
|
494 | defaults = RhodeCodeSetting.get_default_repo_settings(strip_prefix=True) | |
|
495 | return htmlfill.render( | |
|
496 | render('admin/repos/repo_add_create_repository.html'), | |
|
497 | defaults=defaults, | |
|
498 | errors={}, | |
|
499 | prefix_error=False, | |
|
500 | encoding="UTF-8" | |
|
501 | ) | |
|
492 | return render('admin/users/user_edit_my_account_pullrequests.html') | |
|
502 | 493 | |
|
503 | 494 | def _get_hg_ui_settings(self): |
|
504 | 495 | ret = RhodeCodeUi.query().all() |
@@ -99,9 +99,9 b' class UsersController(BaseController):' | |||
|
99 | 99 | "lastname": user.lastname, |
|
100 | 100 | "last_login": h.fmt_date(user.last_login), |
|
101 | 101 | "last_login_raw": datetime_to_time(user.last_login), |
|
102 |
"active": h.bool |
|
|
103 |
"admin": h.bool |
|
|
104 |
"ldap": h.bool |
|
|
102 | "active": h.boolicon(user.active), | |
|
103 | "admin": h.boolicon(user.admin), | |
|
104 | "ldap": h.boolicon(bool(user.ldap_dn)), | |
|
105 | 105 | "action": user_actions(user.user_id, user.username), |
|
106 | 106 | }) |
|
107 | 107 | |
@@ -127,7 +127,7 b' class UsersController(BaseController):' | |||
|
127 | 127 | usr = form_result['username'] |
|
128 | 128 | action_logger(self.rhodecode_user, 'admin_created_user:%s' % usr, |
|
129 | 129 | None, self.ip_addr, self.sa) |
|
130 |
h.flash(_(' |
|
|
130 | h.flash(_('Created user %s') % usr, | |
|
131 | 131 | category='success') |
|
132 | 132 | Session().commit() |
|
133 | 133 | except formencode.Invalid, errors: |
@@ -139,7 +139,7 b' class UsersController(BaseController):' | |||
|
139 | 139 | encoding="UTF-8") |
|
140 | 140 | except Exception: |
|
141 | 141 | log.error(traceback.format_exc()) |
|
142 |
h.flash(_(' |
|
|
142 | h.flash(_('Error occurred during creation of user %s') \ | |
|
143 | 143 | % request.POST.get('username'), category='error') |
|
144 | 144 | return redirect(url('users')) |
|
145 | 145 | |
@@ -195,7 +195,7 b' class UsersController(BaseController):' | |||
|
195 | 195 | encoding="UTF-8") |
|
196 | 196 | except Exception: |
|
197 | 197 | log.error(traceback.format_exc()) |
|
198 |
h.flash(_(' |
|
|
198 | h.flash(_('Error occurred during update of user %s') \ | |
|
199 | 199 | % form_result.get('username'), category='error') |
|
200 | 200 | return redirect(url('edit_user', id=id)) |
|
201 | 201 | |
@@ -211,7 +211,7 b' class UsersController(BaseController):' | |||
|
211 | 211 | try: |
|
212 | 212 | UserModel().delete(usr) |
|
213 | 213 | Session().commit() |
|
214 |
h.flash(_(' |
|
|
214 | h.flash(_('Successfully deleted user'), category='success') | |
|
215 | 215 | except (UserOwnsReposException, DefaultUserException), e: |
|
216 | 216 | h.flash(e, category='warning') |
|
217 | 217 | except Exception: |
@@ -3,7 +3,7 b'' | |||
|
3 | 3 | rhodecode.controllers.admin.users_groups |
|
4 | 4 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
5 | 5 | |
|
6 |
User |
|
|
6 | User Groups crud controller for pylons | |
|
7 | 7 | |
|
8 | 8 | :created_on: Jan 25, 2011 |
|
9 | 9 | :author: marcink |
@@ -33,16 +33,16 b' from pylons.controllers.util import abor' | |||
|
33 | 33 | from pylons.i18n.translation import _ |
|
34 | 34 | |
|
35 | 35 | from rhodecode.lib import helpers as h |
|
36 |
from rhodecode.lib.exceptions import User |
|
|
36 | from rhodecode.lib.exceptions import UserGroupsAssignedException | |
|
37 | 37 | from rhodecode.lib.utils2 import safe_unicode, str2bool |
|
38 | 38 | from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator |
|
39 | 39 | from rhodecode.lib.base import BaseController, render |
|
40 | 40 | |
|
41 |
from rhodecode.model.users_group import User |
|
|
41 | from rhodecode.model.users_group import UserGroupModel | |
|
42 | 42 | |
|
43 |
from rhodecode.model.db import User, User |
|
|
44 |
User |
|
|
45 |
from rhodecode.model.forms import User |
|
|
43 | from rhodecode.model.db import User, UserGroup, UserGroupToPerm,\ | |
|
44 | UserGroupRepoToPerm, UserGroupRepoGroupToPerm | |
|
45 | from rhodecode.model.forms import UserGroupForm | |
|
46 | 46 | from rhodecode.model.meta import Session |
|
47 | 47 | from rhodecode.lib.utils import action_logger |
|
48 | 48 | from sqlalchemy.orm import joinedload |
@@ -67,23 +67,23 b' class UsersGroupsController(BaseControll' | |||
|
67 | 67 | def index(self, format='html'): |
|
68 | 68 | """GET /users_groups: All items in the collection""" |
|
69 | 69 | # url('users_groups') |
|
70 |
c.users_groups_list = User |
|
|
70 | c.users_groups_list = UserGroup().query().all() | |
|
71 | 71 | return render('admin/users_groups/users_groups.html') |
|
72 | 72 | |
|
73 | 73 | def create(self): |
|
74 | 74 | """POST /users_groups: Create a new item""" |
|
75 | 75 | # url('users_groups') |
|
76 | 76 | |
|
77 |
users_group_form = User |
|
|
77 | users_group_form = UserGroupForm()() | |
|
78 | 78 | try: |
|
79 | 79 | form_result = users_group_form.to_python(dict(request.POST)) |
|
80 |
User |
|
|
80 | UserGroupModel().create(name=form_result['users_group_name'], | |
|
81 | 81 | active=form_result['users_group_active']) |
|
82 | 82 | gr = form_result['users_group_name'] |
|
83 | 83 | action_logger(self.rhodecode_user, |
|
84 | 84 | 'admin_created_users_group:%s' % gr, |
|
85 | 85 | None, self.ip_addr, self.sa) |
|
86 |
h.flash(_(' |
|
|
86 | h.flash(_('Created user group %s') % gr, category='success') | |
|
87 | 87 | Session().commit() |
|
88 | 88 | except formencode.Invalid, errors: |
|
89 | 89 | return htmlfill.render( |
@@ -94,7 +94,7 b' class UsersGroupsController(BaseControll' | |||
|
94 | 94 | encoding="UTF-8") |
|
95 | 95 | except Exception: |
|
96 | 96 | log.error(traceback.format_exc()) |
|
97 |
h.flash(_(' |
|
|
97 | h.flash(_('Error occurred during creation of user group %s') \ | |
|
98 | 98 | % request.POST.get('users_group_name'), category='error') |
|
99 | 99 | |
|
100 | 100 | return redirect(url('users_groups')) |
@@ -110,31 +110,33 b' class UsersGroupsController(BaseControll' | |||
|
110 | 110 | 'repositories_groups': {} |
|
111 | 111 | } |
|
112 | 112 | |
|
113 |
ugroup_repo_perms = User |
|
|
114 |
.options(joinedload(User |
|
|
115 |
.options(joinedload(User |
|
|
116 |
.filter(User |
|
|
113 | ugroup_repo_perms = UserGroupRepoToPerm.query()\ | |
|
114 | .options(joinedload(UserGroupRepoToPerm.permission))\ | |
|
115 | .options(joinedload(UserGroupRepoToPerm.repository))\ | |
|
116 | .filter(UserGroupRepoToPerm.users_group_id == id)\ | |
|
117 | 117 | .all() |
|
118 | 118 | |
|
119 | 119 | for gr in ugroup_repo_perms: |
|
120 | 120 | c.users_group.permissions['repositories'][gr.repository.repo_name] \ |
|
121 | 121 | = gr.permission.permission_name |
|
122 | 122 | |
|
123 |
ugroup_group_perms = User |
|
|
124 |
.options(joinedload(User |
|
|
125 |
.options(joinedload(User |
|
|
126 |
.filter(User |
|
|
123 | ugroup_group_perms = UserGroupRepoGroupToPerm.query()\ | |
|
124 | .options(joinedload(UserGroupRepoGroupToPerm.permission))\ | |
|
125 | .options(joinedload(UserGroupRepoGroupToPerm.group))\ | |
|
126 | .filter(UserGroupRepoGroupToPerm.users_group_id == id)\ | |
|
127 | 127 | .all() |
|
128 | 128 | |
|
129 | 129 | for gr in ugroup_group_perms: |
|
130 | 130 | c.users_group.permissions['repositories_groups'][gr.group.group_name] \ |
|
131 | 131 | = gr.permission.permission_name |
|
132 | 132 | |
|
133 |
c.group_members_obj = |
|
|
133 | c.group_members_obj = sorted((x.user for x in c.users_group.members), | |
|
134 | key=lambda u: u.username.lower()) | |
|
134 | 135 | c.group_members = [(x.user_id, x.username) for x in |
|
135 | 136 | c.group_members_obj] |
|
136 |
c.available_members = |
|
|
137 |
User.query().all() |
|
|
137 | c.available_members = sorted(((x.user_id, x.username) for x in | |
|
138 | User.query().all()), | |
|
139 | key=lambda u: u[1].lower()) | |
|
138 | 140 | |
|
139 | 141 | def update(self, id): |
|
140 | 142 | """PUT /users_groups/id: Update an existing item""" |
@@ -145,26 +147,26 b' class UsersGroupsController(BaseControll' | |||
|
145 | 147 | # method='put') |
|
146 | 148 | # url('users_group', id=ID) |
|
147 | 149 | |
|
148 |
c.users_group = User |
|
|
150 | c.users_group = UserGroup.get_or_404(id) | |
|
149 | 151 | self._load_data(id) |
|
150 | 152 | |
|
151 | 153 | available_members = [safe_unicode(x[0]) for x in c.available_members] |
|
152 | 154 | |
|
153 |
users_group_form = User |
|
|
155 | users_group_form = UserGroupForm(edit=True, | |
|
154 | 156 | old_data=c.users_group.get_dict(), |
|
155 | 157 | available_members=available_members)() |
|
156 | 158 | |
|
157 | 159 | try: |
|
158 | 160 | form_result = users_group_form.to_python(request.POST) |
|
159 |
User |
|
|
161 | UserGroupModel().update(c.users_group, form_result) | |
|
160 | 162 | gr = form_result['users_group_name'] |
|
161 | 163 | action_logger(self.rhodecode_user, |
|
162 | 164 | 'admin_updated_users_group:%s' % gr, |
|
163 | 165 | None, self.ip_addr, self.sa) |
|
164 |
h.flash(_(' |
|
|
166 | h.flash(_('Updated user group %s') % gr, category='success') | |
|
165 | 167 | Session().commit() |
|
166 | 168 | except formencode.Invalid, errors: |
|
167 |
ug_model = User |
|
|
169 | ug_model = UserGroupModel() | |
|
168 | 170 | defaults = errors.value |
|
169 | 171 | e = errors.error_dict or {} |
|
170 | 172 | defaults.update({ |
@@ -183,7 +185,7 b' class UsersGroupsController(BaseControll' | |||
|
183 | 185 | encoding="UTF-8") |
|
184 | 186 | except Exception: |
|
185 | 187 | log.error(traceback.format_exc()) |
|
186 |
h.flash(_(' |
|
|
188 | h.flash(_('Error occurred during update of user group %s') \ | |
|
187 | 189 | % request.POST.get('users_group_name'), category='error') |
|
188 | 190 | |
|
189 | 191 | return redirect(url('edit_users_group', id=id)) |
@@ -196,16 +198,16 b' class UsersGroupsController(BaseControll' | |||
|
196 | 198 | # h.form(url('users_group', id=ID), |
|
197 | 199 | # method='delete') |
|
198 | 200 | # url('users_group', id=ID) |
|
199 |
usr_gr = User |
|
|
201 | usr_gr = UserGroup.get_or_404(id) | |
|
200 | 202 | try: |
|
201 |
User |
|
|
203 | UserGroupModel().delete(usr_gr) | |
|
202 | 204 | Session().commit() |
|
203 |
h.flash(_(' |
|
|
204 |
except User |
|
|
205 | h.flash(_('Successfully deleted user group'), category='success') | |
|
206 | except UserGroupsAssignedException, e: | |
|
205 | 207 | h.flash(e, category='error') |
|
206 | 208 | except Exception: |
|
207 | 209 | log.error(traceback.format_exc()) |
|
208 |
h.flash(_('An error occurred during deletion of user |
|
|
210 | h.flash(_('An error occurred during deletion of user group'), | |
|
209 | 211 | category='error') |
|
210 | 212 | return redirect(url('users_groups')) |
|
211 | 213 | |
@@ -217,10 +219,10 b' class UsersGroupsController(BaseControll' | |||
|
217 | 219 | """GET /users_groups/id/edit: Form to edit an existing item""" |
|
218 | 220 | # url('edit_users_group', id=ID) |
|
219 | 221 | |
|
220 |
c.users_group = User |
|
|
222 | c.users_group = UserGroup.get_or_404(id) | |
|
221 | 223 | self._load_data(id) |
|
222 | 224 | |
|
223 |
ug_model = User |
|
|
225 | ug_model = UserGroupModel() | |
|
224 | 226 | defaults = c.users_group.get_dict() |
|
225 | 227 | defaults.update({ |
|
226 | 228 | 'create_repo_perm': ug_model.has_perm(c.users_group, |
@@ -240,37 +242,37 b' class UsersGroupsController(BaseControll' | |||
|
240 | 242 | """PUT /users_perm/id: Update an existing item""" |
|
241 | 243 | # url('users_group_perm', id=ID, method='put') |
|
242 | 244 | |
|
243 |
users_group = User |
|
|
245 | users_group = UserGroup.get_or_404(id) | |
|
244 | 246 | grant_create_perm = str2bool(request.POST.get('create_repo_perm')) |
|
245 | 247 | grant_fork_perm = str2bool(request.POST.get('fork_repo_perm')) |
|
246 | 248 | inherit_perms = str2bool(request.POST.get('inherit_default_permissions')) |
|
247 | 249 | |
|
248 |
user |
|
|
250 | usergroup_model = UserGroupModel() | |
|
249 | 251 | |
|
250 | 252 | try: |
|
251 | 253 | users_group.inherit_default_permissions = inherit_perms |
|
252 | 254 | Session().add(users_group) |
|
253 | 255 | |
|
254 | 256 | if grant_create_perm: |
|
255 |
user |
|
|
256 |
user |
|
|
257 |
h.flash(_("Granted 'repository create' permission to user |
|
|
257 | usergroup_model.revoke_perm(id, 'hg.create.none') | |
|
258 | usergroup_model.grant_perm(id, 'hg.create.repository') | |
|
259 | h.flash(_("Granted 'repository create' permission to user group"), | |
|
258 | 260 | category='success') |
|
259 | 261 | else: |
|
260 |
user |
|
|
261 |
user |
|
|
262 |
h.flash(_("Revoked 'repository create' permission to user |
|
|
262 | usergroup_model.revoke_perm(id, 'hg.create.repository') | |
|
263 | usergroup_model.grant_perm(id, 'hg.create.none') | |
|
264 | h.flash(_("Revoked 'repository create' permission to user group"), | |
|
263 | 265 | category='success') |
|
264 | 266 | |
|
265 | 267 | if grant_fork_perm: |
|
266 |
user |
|
|
267 |
user |
|
|
268 |
h.flash(_("Granted 'repository fork' permission to user |
|
|
268 | usergroup_model.revoke_perm(id, 'hg.fork.none') | |
|
269 | usergroup_model.grant_perm(id, 'hg.fork.repository') | |
|
270 | h.flash(_("Granted 'repository fork' permission to user group"), | |
|
269 | 271 | category='success') |
|
270 | 272 | else: |
|
271 |
user |
|
|
272 |
user |
|
|
273 |
h.flash(_("Revoked 'repository fork' permission to user |
|
|
273 | usergroup_model.revoke_perm(id, 'hg.fork.repository') | |
|
274 | usergroup_model.grant_perm(id, 'hg.fork.none') | |
|
275 | h.flash(_("Revoked 'repository fork' permission to user group"), | |
|
274 | 276 | category='success') |
|
275 | 277 | |
|
276 | 278 | Session().commit() |
@@ -27,20 +27,22 b'' | |||
|
27 | 27 | |
|
28 | 28 | import traceback |
|
29 | 29 | import logging |
|
30 | from pylons.controllers.util import abort | |
|
31 | 30 | |
|
32 | 31 | from rhodecode.controllers.api import JSONRPCController, JSONRPCError |
|
33 | 32 | from rhodecode.lib.auth import PasswordGenerator, AuthUser, \ |
|
34 | 33 | HasPermissionAllDecorator, HasPermissionAnyDecorator, \ |
|
35 | 34 | HasPermissionAnyApi, HasRepoPermissionAnyApi |
|
36 | 35 | from rhodecode.lib.utils import map_groups, repo2db_mapper |
|
36 | from rhodecode.lib.utils2 import str2bool, time_to_datetime, safe_int | |
|
37 | from rhodecode.lib import helpers as h | |
|
37 | 38 | from rhodecode.model.meta import Session |
|
38 | 39 | from rhodecode.model.scm import ScmModel |
|
39 | 40 | from rhodecode.model.repo import RepoModel |
|
40 | 41 | from rhodecode.model.user import UserModel |
|
41 |
from rhodecode.model.users_group import User |
|
|
42 | from rhodecode.model.users_group import UserGroupModel | |
|
42 | 43 | from rhodecode.model.permission import PermissionModel |
|
43 | 44 | from rhodecode.model.db import Repository, RhodeCodeSetting, UserIpMap |
|
45 | from rhodecode.lib.compat import json | |
|
44 | 46 | |
|
45 | 47 | log = logging.getLogger(__name__) |
|
46 | 48 | |
@@ -121,13 +123,13 b' def get_repo_or_error(repoid):' | |||
|
121 | 123 | |
|
122 | 124 | def get_users_group_or_error(usersgroupid): |
|
123 | 125 | """ |
|
124 |
Get user |
|
|
126 | Get user group by id or name or return JsonRPCError if not found | |
|
125 | 127 | |
|
126 | 128 | :param userid: |
|
127 | 129 | """ |
|
128 |
users_group = User |
|
|
130 | users_group = UserGroupModel().get_group(usersgroupid) | |
|
129 | 131 | if users_group is None: |
|
130 |
raise JSONRPCError('user |
|
|
132 | raise JSONRPCError('user group `%s` does not exist' % usersgroupid) | |
|
131 | 133 | return users_group |
|
132 | 134 | |
|
133 | 135 | |
@@ -202,7 +204,34 b' class ApiController(JSONRPCController):' | |||
|
202 | 204 | 'Error occurred during rescan repositories action' |
|
203 | 205 | ) |
|
204 | 206 | |
|
205 | def lock(self, apiuser, repoid, locked, userid=Optional(OAttr('apiuser'))): | |
|
207 | def invalidate_cache(self, apiuser, repoid): | |
|
208 | """ | |
|
209 | Dispatch cache invalidation action on given repo | |
|
210 | ||
|
211 | :param apiuser: | |
|
212 | :param repoid: | |
|
213 | """ | |
|
214 | repo = get_repo_or_error(repoid) | |
|
215 | if HasPermissionAnyApi('hg.admin')(user=apiuser) is False: | |
|
216 | # check if we have admin permission for this repo ! | |
|
217 | if HasRepoPermissionAnyApi('repository.admin', | |
|
218 | 'repository.write')(user=apiuser, | |
|
219 | repo_name=repo.repo_name) is False: | |
|
220 | raise JSONRPCError('repository `%s` does not exist' % (repoid)) | |
|
221 | ||
|
222 | try: | |
|
223 | invalidated_keys = ScmModel().mark_for_invalidation(repo.repo_name) | |
|
224 | Session().commit() | |
|
225 | return ('Cache for repository `%s` was invalidated: ' | |
|
226 | 'invalidated cache keys: %s' % (repoid, invalidated_keys)) | |
|
227 | except Exception: | |
|
228 | log.error(traceback.format_exc()) | |
|
229 | raise JSONRPCError( | |
|
230 | 'Error occurred during cache invalidation action' | |
|
231 | ) | |
|
232 | ||
|
233 | def lock(self, apiuser, repoid, locked=Optional(None), | |
|
234 | userid=Optional(OAttr('apiuser'))): | |
|
206 | 235 | """ |
|
207 | 236 | Set locking state on particular repository by given user, if |
|
208 | 237 | this command is runned by non-admin account userid is set to user |
@@ -230,21 +259,77 b' class ApiController(JSONRPCController):' | |||
|
230 | 259 | |
|
231 | 260 | if isinstance(userid, Optional): |
|
232 | 261 | userid = apiuser.user_id |
|
262 | ||
|
233 | 263 | user = get_user_or_error(userid) |
|
234 | locked = bool(locked) | |
|
235 | try: | |
|
236 | if locked: | |
|
237 | Repository.lock(repo, user.user_id) | |
|
264 | ||
|
265 | if isinstance(locked, Optional): | |
|
266 | lockobj = Repository.getlock(repo) | |
|
267 | ||
|
268 | if lockobj[0] is None: | |
|
269 | return ('Repo `%s` not locked. Locked=`False`.' | |
|
270 | % (repo.repo_name)) | |
|
238 | 271 | else: |
|
239 |
|
|
|
272 | userid, time_ = lockobj | |
|
273 | user = get_user_or_error(userid) | |
|
274 | ||
|
275 | return ('Repo `%s` locked by `%s`. Locked=`True`. ' | |
|
276 | 'Locked since: `%s`' | |
|
277 | % (repo.repo_name, user.username, | |
|
278 | json.dumps(time_to_datetime(time_)))) | |
|
279 | ||
|
280 | else: | |
|
281 | locked = str2bool(locked) | |
|
282 | try: | |
|
283 | if locked: | |
|
284 | Repository.lock(repo, user.user_id) | |
|
285 | else: | |
|
286 | Repository.unlock(repo) | |
|
287 | ||
|
288 | return ('User `%s` set lock state for repo `%s` to `%s`' | |
|
289 | % (user.username, repo.repo_name, locked)) | |
|
290 | except Exception: | |
|
291 | log.error(traceback.format_exc()) | |
|
292 | raise JSONRPCError( | |
|
293 | 'Error occurred locking repository `%s`' % repo.repo_name | |
|
294 | ) | |
|
240 | 295 | |
|
241 | return ('User `%s` set lock state for repo `%s` to `%s`' | |
|
242 | % (user.username, repo.repo_name, locked)) | |
|
243 | except Exception: | |
|
244 | log.error(traceback.format_exc()) | |
|
245 | raise JSONRPCError( | |
|
246 | 'Error occurred locking repository `%s`' % repo.repo_name | |
|
247 | ) | |
|
296 | def get_locks(self, apiuser, userid=Optional(OAttr('apiuser'))): | |
|
297 | """ | |
|
298 | Get all locks for given userid, if | |
|
299 | this command is runned by non-admin account userid is set to user | |
|
300 | who is calling this method, thus returning locks for himself | |
|
301 | ||
|
302 | :param apiuser: | |
|
303 | :param userid: | |
|
304 | """ | |
|
305 | if HasPermissionAnyApi('hg.admin')(user=apiuser): | |
|
306 | pass | |
|
307 | else: | |
|
308 | #make sure normal user does not pass someone else userid, | |
|
309 | #he is not allowed to do that | |
|
310 | if not isinstance(userid, Optional) and userid != apiuser.user_id: | |
|
311 | raise JSONRPCError( | |
|
312 | 'userid is not the same as your user' | |
|
313 | ) | |
|
314 | ret = [] | |
|
315 | if isinstance(userid, Optional): | |
|
316 | user = None | |
|
317 | else: | |
|
318 | user = get_user_or_error(userid) | |
|
319 | ||
|
320 | #show all locks | |
|
321 | for r in Repository.getAll(): | |
|
322 | userid, time_ = r.locked | |
|
323 | if time_: | |
|
324 | _api_data = r.get_api_data() | |
|
325 | # if we use userfilter just show the locks for this user | |
|
326 | if user: | |
|
327 | if safe_int(userid) == user.user_id: | |
|
328 | ret.append(_api_data) | |
|
329 | else: | |
|
330 | ret.append(_api_data) | |
|
331 | ||
|
332 | return ret | |
|
248 | 333 | |
|
249 | 334 | @HasPermissionAllDecorator('hg.admin') |
|
250 | 335 | def show_ip(self, apiuser, userid): |
@@ -423,7 +508,7 b' class ApiController(JSONRPCController):' | |||
|
423 | 508 | @HasPermissionAllDecorator('hg.admin') |
|
424 | 509 | def get_users_group(self, apiuser, usersgroupid): |
|
425 | 510 | """" |
|
426 |
Get user |
|
|
511 | Get user group by name or id | |
|
427 | 512 | |
|
428 | 513 | :param apiuser: |
|
429 | 514 | :param usersgroupid: |
@@ -442,13 +527,13 b' class ApiController(JSONRPCController):' | |||
|
442 | 527 | @HasPermissionAllDecorator('hg.admin') |
|
443 | 528 | def get_users_groups(self, apiuser): |
|
444 | 529 | """" |
|
445 |
Get all user |
|
|
530 | Get all user groups | |
|
446 | 531 | |
|
447 | 532 | :param apiuser: |
|
448 | 533 | """ |
|
449 | 534 | |
|
450 | 535 | result = [] |
|
451 |
for users_group in User |
|
|
536 | for users_group in UserGroupModel().get_all(): | |
|
452 | 537 | result.append(users_group.get_api_data()) |
|
453 | 538 | return result |
|
454 | 539 | |
@@ -462,15 +547,15 b' class ApiController(JSONRPCController):' | |||
|
462 | 547 | :param active: |
|
463 | 548 | """ |
|
464 | 549 | |
|
465 |
if User |
|
|
466 |
raise JSONRPCError("user |
|
|
550 | if UserGroupModel().get_by_name(group_name): | |
|
551 | raise JSONRPCError("user group `%s` already exist" % group_name) | |
|
467 | 552 | |
|
468 | 553 | try: |
|
469 | 554 | active = Optional.extract(active) |
|
470 |
ug = User |
|
|
555 | ug = UserGroupModel().create(name=group_name, active=active) | |
|
471 | 556 | Session().commit() |
|
472 | 557 | return dict( |
|
473 |
msg='created new user |
|
|
558 | msg='created new user group `%s`' % group_name, | |
|
474 | 559 | users_group=ug.get_api_data() |
|
475 | 560 | ) |
|
476 | 561 | except Exception: |
@@ -480,7 +565,7 b' class ApiController(JSONRPCController):' | |||
|
480 | 565 | @HasPermissionAllDecorator('hg.admin') |
|
481 | 566 | def add_user_to_users_group(self, apiuser, usersgroupid, userid): |
|
482 | 567 | """" |
|
483 |
Add a user to a user |
|
|
568 | Add a user to a user group | |
|
484 | 569 | |
|
485 | 570 | :param apiuser: |
|
486 | 571 | :param usersgroupid: |
@@ -490,9 +575,9 b' class ApiController(JSONRPCController):' | |||
|
490 | 575 | users_group = get_users_group_or_error(usersgroupid) |
|
491 | 576 | |
|
492 | 577 | try: |
|
493 |
ugm = User |
|
|
578 | ugm = UserGroupModel().add_user_to_group(users_group, user) | |
|
494 | 579 | success = True if ugm != True else False |
|
495 |
msg = 'added member `%s` to user |
|
|
580 | msg = 'added member `%s` to user group `%s`' % ( | |
|
496 | 581 | user.username, users_group.users_group_name |
|
497 | 582 | ) |
|
498 | 583 | msg = msg if success else 'User is already in that group' |
@@ -505,7 +590,7 b' class ApiController(JSONRPCController):' | |||
|
505 | 590 | except Exception: |
|
506 | 591 | log.error(traceback.format_exc()) |
|
507 | 592 | raise JSONRPCError( |
|
508 |
'failed to add member to user |
|
|
593 | 'failed to add member to user group `%s`' % ( | |
|
509 | 594 | users_group.users_group_name |
|
510 | 595 | ) |
|
511 | 596 | ) |
@@ -523,9 +608,9 b' class ApiController(JSONRPCController):' | |||
|
523 | 608 | users_group = get_users_group_or_error(usersgroupid) |
|
524 | 609 | |
|
525 | 610 | try: |
|
526 |
success = User |
|
|
611 | success = UserGroupModel().remove_user_from_group(users_group, | |
|
527 | 612 | user) |
|
528 |
msg = 'removed member `%s` from user |
|
|
613 | msg = 'removed member `%s` from user group `%s`' % ( | |
|
529 | 614 | user.username, users_group.users_group_name |
|
530 | 615 | ) |
|
531 | 616 | msg = msg if success else "User wasn't in group" |
@@ -534,7 +619,7 b' class ApiController(JSONRPCController):' | |||
|
534 | 619 | except Exception: |
|
535 | 620 | log.error(traceback.format_exc()) |
|
536 | 621 | raise JSONRPCError( |
|
537 |
'failed to remove member from user |
|
|
622 | 'failed to remove member from user group `%s`' % ( | |
|
538 | 623 | users_group.users_group_name |
|
539 | 624 | ) |
|
540 | 625 | ) |
@@ -555,6 +640,7 b' class ApiController(JSONRPCController):' | |||
|
555 | 640 | raise JSONRPCError('repository `%s` does not exist' % (repoid)) |
|
556 | 641 | |
|
557 | 642 | members = [] |
|
643 | followers = [] | |
|
558 | 644 | for user in repo.repo_to_perm: |
|
559 | 645 | perm = user.permission.permission_name |
|
560 | 646 | user = user.user |
@@ -571,8 +657,12 b' class ApiController(JSONRPCController):' | |||
|
571 | 657 | users_group_data['permission'] = perm |
|
572 | 658 | members.append(users_group_data) |
|
573 | 659 | |
|
660 | for user in repo.followers: | |
|
661 | followers.append(user.user.get_api_data()) | |
|
662 | ||
|
574 | 663 | data = repo.get_api_data() |
|
575 | 664 | data['members'] = members |
|
665 | data['followers'] = followers | |
|
576 | 666 | return data |
|
577 | 667 | |
|
578 | 668 | def get_repos(self, apiuser): |
@@ -763,12 +853,13 b' class ApiController(JSONRPCController):' | |||
|
763 | 853 | fork_name) |
|
764 | 854 | ) |
|
765 | 855 | |
|
766 | def delete_repo(self, apiuser, repoid): | |
|
856 | def delete_repo(self, apiuser, repoid, forks=Optional(None)): | |
|
767 | 857 | """ |
|
768 | 858 | Deletes a given repository |
|
769 | 859 | |
|
770 | 860 | :param apiuser: |
|
771 | 861 | :param repoid: |
|
862 | :param forks: detach or delete, what do do with attached forks for repo | |
|
772 | 863 | """ |
|
773 | 864 | repo = get_repo_or_error(repoid) |
|
774 | 865 | |
@@ -776,13 +867,26 b' class ApiController(JSONRPCController):' | |||
|
776 | 867 | # check if we have admin permission for this repo ! |
|
777 | 868 | if HasRepoPermissionAnyApi('repository.admin')(user=apiuser, |
|
778 | 869 | repo_name=repo.repo_name) is False: |
|
779 |
|
|
|
870 | raise JSONRPCError('repository `%s` does not exist' % (repoid)) | |
|
780 | 871 | |
|
781 | 872 | try: |
|
782 | RepoModel().delete(repo) | |
|
873 | handle_forks = Optional.extract(forks) | |
|
874 | _forks_msg = '' | |
|
875 | _forks = [f for f in repo.forks] | |
|
876 | if handle_forks == 'detach': | |
|
877 | _forks_msg = ' ' + _('Detached %s forks') % len(_forks) | |
|
878 | elif handle_forks == 'delete': | |
|
879 | _forks_msg = ' ' + _('Deleted %s forks') % len(_forks) | |
|
880 | elif _forks: | |
|
881 | raise JSONRPCError( | |
|
882 | 'Cannot delete `%s` it still contains attached forks' | |
|
883 | % repo.repo_name | |
|
884 | ) | |
|
885 | ||
|
886 | RepoModel().delete(repo, forks=forks) | |
|
783 | 887 | Session().commit() |
|
784 | 888 | return dict( |
|
785 | msg='Deleted repository `%s`' % repo.repo_name, | |
|
889 | msg='Deleted repository `%s`%s' % (repo.repo_name, _forks_msg), | |
|
786 | 890 | success=True |
|
787 | 891 | ) |
|
788 | 892 | except Exception: |
@@ -859,7 +963,7 b' class ApiController(JSONRPCController):' | |||
|
859 | 963 | def grant_users_group_permission(self, apiuser, repoid, usersgroupid, |
|
860 | 964 | perm): |
|
861 | 965 | """ |
|
862 |
Grant permission for user |
|
|
966 | Grant permission for user group on given repository, or update | |
|
863 | 967 | existing one if found |
|
864 | 968 | |
|
865 | 969 | :param apiuser: |
@@ -878,7 +982,7 b' class ApiController(JSONRPCController):' | |||
|
878 | 982 | |
|
879 | 983 | Session().commit() |
|
880 | 984 | return dict( |
|
881 |
msg='Granted perm: `%s` for user |
|
|
985 | msg='Granted perm: `%s` for user group: `%s` in ' | |
|
882 | 986 | 'repo: `%s`' % ( |
|
883 | 987 | perm.permission_name, users_group.users_group_name, |
|
884 | 988 | repo.repo_name |
@@ -888,7 +992,7 b' class ApiController(JSONRPCController):' | |||
|
888 | 992 | except Exception: |
|
889 | 993 | log.error(traceback.format_exc()) |
|
890 | 994 | raise JSONRPCError( |
|
891 |
'failed to edit permission for user |
|
|
995 | 'failed to edit permission for user group: `%s` in ' | |
|
892 | 996 | 'repo: `%s`' % ( |
|
893 | 997 | usersgroupid, repo.repo_name |
|
894 | 998 | ) |
@@ -897,7 +1001,7 b' class ApiController(JSONRPCController):' | |||
|
897 | 1001 | @HasPermissionAllDecorator('hg.admin') |
|
898 | 1002 | def revoke_users_group_permission(self, apiuser, repoid, usersgroupid): |
|
899 | 1003 | """ |
|
900 |
Revoke permission for user |
|
|
1004 | Revoke permission for user group on given repository | |
|
901 | 1005 | |
|
902 | 1006 | :param apiuser: |
|
903 | 1007 | :param repoid: |
@@ -912,7 +1016,7 b' class ApiController(JSONRPCController):' | |||
|
912 | 1016 | |
|
913 | 1017 | Session().commit() |
|
914 | 1018 | return dict( |
|
915 |
msg='Revoked perm for user |
|
|
1019 | msg='Revoked perm for user group: `%s` in repo: `%s`' % ( | |
|
916 | 1020 | users_group.users_group_name, repo.repo_name |
|
917 | 1021 | ), |
|
918 | 1022 | success=True |
@@ -920,7 +1024,7 b' class ApiController(JSONRPCController):' | |||
|
920 | 1024 | except Exception: |
|
921 | 1025 | log.error(traceback.format_exc()) |
|
922 | 1026 | raise JSONRPCError( |
|
923 |
'failed to edit permission for user |
|
|
1027 | 'failed to edit permission for user group: `%s` in ' | |
|
924 | 1028 | 'repo: `%s`' % ( |
|
925 | 1029 | users_group.users_group_name, repo.repo_name |
|
926 | 1030 | ) |
@@ -86,8 +86,8 b' class ChangelogController(BaseRepoContro' | |||
|
86 | 86 | c.statuses = c.rhodecode_db_repo.statuses(page_revisions) |
|
87 | 87 | except (RepositoryError, ChangesetDoesNotExistError, Exception), e: |
|
88 | 88 | log.error(traceback.format_exc()) |
|
89 |
h.flash(str(e), category=' |
|
|
90 | return redirect(url('home')) | |
|
89 | h.flash(str(e), category='error') | |
|
90 | return redirect(url('changelog_home', repo_name=c.repo_name)) | |
|
91 | 91 | |
|
92 | 92 | self._graph(c.rhodecode_repo, collection, c.total_cs, c.size, p) |
|
93 | 93 |
@@ -26,7 +26,7 b'' | |||
|
26 | 26 | import logging |
|
27 | 27 | import traceback |
|
28 | 28 | from collections import defaultdict |
|
29 | from webob.exc import HTTPForbidden, HTTPBadRequest | |
|
29 | from webob.exc import HTTPForbidden, HTTPBadRequest, HTTPNotFound | |
|
30 | 30 | |
|
31 | 31 | from pylons import tmpl_context as c, url, request, response |
|
32 | 32 | from pylons.i18n.translation import _ |
@@ -71,7 +71,7 b' def get_ignore_ws(fid, GET):' | |||
|
71 | 71 | if ig_ws: |
|
72 | 72 | try: |
|
73 | 73 | return int(ig_ws[0].split(':')[-1]) |
|
74 | except: | |
|
74 | except Exception: | |
|
75 | 75 | pass |
|
76 | 76 | return ig_ws_global |
|
77 | 77 | |
@@ -80,21 +80,21 b' def _ignorews_url(GET, fileid=None):' | |||
|
80 | 80 | fileid = str(fileid) if fileid else None |
|
81 | 81 | params = defaultdict(list) |
|
82 | 82 | _update_with_GET(params, GET) |
|
83 |
lbl = _(' |
|
|
83 | lbl = _('Show white space') | |
|
84 | 84 | ig_ws = get_ignore_ws(fileid, GET) |
|
85 | 85 | ln_ctx = get_line_ctx(fileid, GET) |
|
86 | 86 | # global option |
|
87 | 87 | if fileid is None: |
|
88 | 88 | if ig_ws is None: |
|
89 | 89 | params['ignorews'] += [1] |
|
90 |
lbl = _(' |
|
|
90 | lbl = _('Ignore white space') | |
|
91 | 91 | ctx_key = 'context' |
|
92 | 92 | ctx_val = ln_ctx |
|
93 | 93 | # per file options |
|
94 | 94 | else: |
|
95 | 95 | if ig_ws is None: |
|
96 | 96 | params[fileid] += ['WS:1'] |
|
97 |
lbl = _(' |
|
|
97 | lbl = _('Ignore white space') | |
|
98 | 98 | |
|
99 | 99 | ctx_key = fileid |
|
100 | 100 | ctx_val = 'C:%s' % ln_ctx |
@@ -124,7 +124,7 b' def get_line_ctx(fid, GET):' | |||
|
124 | 124 | |
|
125 | 125 | try: |
|
126 | 126 | return int(retval) |
|
127 | except: | |
|
127 | except Exception: | |
|
128 | 128 | return 3 |
|
129 | 129 | |
|
130 | 130 | |
@@ -203,8 +203,8 b' class ChangesetController(BaseRepoContro' | |||
|
203 | 203 | |
|
204 | 204 | except (RepositoryError, ChangesetDoesNotExistError, Exception), e: |
|
205 | 205 | log.error(traceback.format_exc()) |
|
206 |
h.flash(str(e), category=' |
|
|
207 | return redirect(url('home')) | |
|
206 | h.flash(str(e), category='error') | |
|
207 | raise HTTPNotFound() | |
|
208 | 208 | |
|
209 | 209 | c.changes = OrderedDict() |
|
210 | 210 | |
@@ -329,7 +329,7 b' class ChangesetController(BaseRepoContro' | |||
|
329 | 329 | text = text or (_('Status change -> %s') |
|
330 | 330 | % ChangesetStatus.get_status_lbl(status)) |
|
331 | 331 | |
|
332 | comm = ChangesetCommentsModel().create( | |
|
332 | c.co = comm = ChangesetCommentsModel().create( | |
|
333 | 333 | text=text, |
|
334 | 334 | repo=c.rhodecode_db_repo.repo_id, |
|
335 | 335 | user=c.rhodecode_user.user_id, |
@@ -371,12 +371,11 b' class ChangesetController(BaseRepoContro' | |||
|
371 | 371 | if not request.environ.get('HTTP_X_PARTIAL_XHR'): |
|
372 | 372 | return redirect(h.url('changeset_home', repo_name=repo_name, |
|
373 | 373 | revision=revision)) |
|
374 | ||
|
374 | #only ajax below | |
|
375 | 375 | data = { |
|
376 | 376 | 'target_id': h.safeid(h.safe_unicode(request.POST.get('f_path'))), |
|
377 | 377 | } |
|
378 | 378 | if comm: |
|
379 | c.co = comm | |
|
380 | 379 | data.update(comm.get_dict()) |
|
381 | 380 | data.update({'rendered_text': |
|
382 | 381 | render('changeset/changeset_comment_block.html')}) |
@@ -3,7 +3,7 b'' | |||
|
3 | 3 | rhodecode.controllers.compare |
|
4 | 4 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
5 | 5 | |
|
6 |
compare controller for pylons show |
|
|
6 | compare controller for pylons showing differences between two | |
|
7 | 7 | repos, branches, bookmarks or tips |
|
8 | 8 | |
|
9 | 9 | :created_on: May 6, 2012 |
@@ -40,7 +40,6 b' from rhodecode.lib import diffs' | |||
|
40 | 40 | from rhodecode.model.db import Repository |
|
41 | 41 | from rhodecode.model.pull_request import PullRequestModel |
|
42 | 42 | from webob.exc import HTTPBadRequest |
|
43 | from rhodecode.lib.utils2 import str2bool | |
|
44 | 43 | from rhodecode.lib.diffs import LimitedDiffContainer |
|
45 | 44 | from rhodecode.lib.vcs.backends.base import EmptyChangeset |
|
46 | 45 | |
@@ -84,80 +83,85 b' class CompareController(BaseRepoControll' | |||
|
84 | 83 | raise HTTPBadRequest() |
|
85 | 84 | |
|
86 | 85 | def index(self, org_ref_type, org_ref, other_ref_type, other_ref): |
|
87 | ||
|
86 | # org_ref will be evaluated in org_repo | |
|
88 | 87 | org_repo = c.rhodecode_db_repo.repo_name |
|
89 | 88 | org_ref = (org_ref_type, org_ref) |
|
89 | # other_ref will be evaluated in other_repo | |
|
90 | 90 | other_ref = (other_ref_type, other_ref) |
|
91 | other_repo = request.GET.get('repo', org_repo) | |
|
92 | incoming_changesets = str2bool(request.GET.get('bundle', False)) | |
|
93 | c.fulldiff = fulldiff = request.GET.get('fulldiff') | |
|
94 | rev_start = request.GET.get('rev_start') | |
|
95 | rev_end = request.GET.get('rev_end') | |
|
91 | other_repo = request.GET.get('other_repo', org_repo) | |
|
92 | # If merge is True: | |
|
93 | # Show what org would get if merged with other: | |
|
94 | # List changesets that are ancestors of other but not of org. | |
|
95 | # New changesets in org is thus ignored. | |
|
96 | # Diff will be from common ancestor, and merges of org to other will thus be ignored. | |
|
97 | # If merge is False: | |
|
98 | # Make a raw diff from org to other, no matter if related or not. | |
|
99 | # Changesets in one and not in the other will be ignored | |
|
100 | merge = bool(request.GET.get('merge')) | |
|
101 | # fulldiff disables cut_off_limit | |
|
102 | c.fulldiff = request.GET.get('fulldiff') | |
|
103 | # partial uses compare_cs.html template directly | |
|
104 | partial = request.environ.get('HTTP_X_PARTIAL_XHR') | |
|
105 | # as_form puts hidden input field with changeset revisions | |
|
106 | c.as_form = partial and request.GET.get('as_form') | |
|
107 | # swap url for compare_diff page - never partial and never as_form | |
|
108 | c.swap_url = h.url('compare_url', | |
|
109 | repo_name=other_repo, | |
|
110 | org_ref_type=other_ref[0], org_ref=other_ref[1], | |
|
111 | other_repo=org_repo, | |
|
112 | other_ref_type=org_ref[0], other_ref=org_ref[1], | |
|
113 | merge=merge or '') | |
|
96 | 114 | |
|
97 | c.swap_url = h.url('compare_url', repo_name=other_repo, | |
|
98 | org_ref_type=other_ref[0], org_ref=other_ref[1], | |
|
99 | other_ref_type=org_ref[0], other_ref=org_ref[1], | |
|
100 | repo=org_repo, as_form=request.GET.get('as_form'), | |
|
101 | bundle=incoming_changesets) | |
|
115 | org_repo = Repository.get_by_repo_name(org_repo) | |
|
116 | other_repo = Repository.get_by_repo_name(other_repo) | |
|
102 | 117 | |
|
103 | c.org_repo = org_repo = Repository.get_by_repo_name(org_repo) | |
|
104 | c.other_repo = other_repo = Repository.get_by_repo_name(other_repo) | |
|
105 | ||
|
106 | if c.org_repo is None: | |
|
118 | if org_repo is None: | |
|
107 | 119 | log.error('Could not find org repo %s' % org_repo) |
|
108 | 120 | raise HTTPNotFound |
|
109 |
if |
|
|
121 | if other_repo is None: | |
|
110 | 122 | log.error('Could not find other repo %s' % other_repo) |
|
111 | 123 | raise HTTPNotFound |
|
112 | 124 | |
|
113 |
if |
|
|
125 | if org_repo != other_repo and h.is_git(org_repo): | |
|
114 | 126 | log.error('compare of two remote repos not available for GIT REPOS') |
|
115 | 127 | raise HTTPNotFound |
|
116 | 128 | |
|
117 |
if |
|
|
129 | if org_repo.scm_instance.alias != other_repo.scm_instance.alias: | |
|
118 | 130 | log.error('compare of two different kind of remote repos not available') |
|
119 | 131 | raise HTTPNotFound |
|
120 | 132 | |
|
121 | partial = request.environ.get('HTTP_X_PARTIAL_XHR') | |
|
122 | 133 | self.__get_cs_or_redirect(rev=org_ref, repo=org_repo, partial=partial) |
|
123 | 134 | self.__get_cs_or_redirect(rev=other_ref, repo=other_repo, partial=partial) |
|
124 | 135 | |
|
125 | if rev_start and rev_end: | |
|
126 | #replace our org_ref with given CS | |
|
127 | org_ref = ('rev', rev_start) | |
|
128 | other_ref = ('rev', rev_end) | |
|
136 | c.org_repo = org_repo | |
|
137 | c.other_repo = other_repo | |
|
138 | c.org_ref = org_ref[1] | |
|
139 | c.other_ref = other_ref[1] | |
|
140 | c.org_ref_type = org_ref[0] | |
|
141 | c.other_ref_type = other_ref[0] | |
|
129 | 142 | |
|
130 |
c.cs_ranges, |
|
|
131 |
|
|
|
132 | ) | |
|
143 | c.cs_ranges, c.ancestor = PullRequestModel().get_compare_data( | |
|
144 | org_repo, org_ref, other_repo, other_ref, merge) | |
|
133 | 145 | |
|
134 | 146 | c.statuses = c.rhodecode_db_repo.statuses([x.raw_id for x in |
|
135 | 147 | c.cs_ranges]) |
|
136 | c.target_repo = c.repo_name | |
|
137 | # defines that we need hidden inputs with changesets | |
|
138 | c.as_form = request.GET.get('as_form', False) | |
|
139 | 148 | if partial: |
|
149 | assert c.ancestor | |
|
140 | 150 | return render('compare/compare_cs.html') |
|
141 | 151 | |
|
142 | c.org_ref = org_ref[1] | |
|
143 | c.other_ref = other_ref[1] | |
|
152 | if c.ancestor: | |
|
153 | assert merge | |
|
154 | # case we want a simple diff without incoming changesets, | |
|
155 | # previewing what will be merged. | |
|
156 | # Make the diff on the other repo (which is known to have other_ref) | |
|
157 | log.debug('Using ancestor %s as org_ref instead of %s' | |
|
158 | % (c.ancestor, org_ref)) | |
|
159 | org_ref = ('rev', c.ancestor) | |
|
160 | org_repo = other_repo | |
|
144 | 161 | |
|
145 | if not incoming_changesets and c.cs_ranges and c.org_repo != c.other_repo: | |
|
146 | # case we want a simple diff without incoming changesets, just | |
|
147 | # for review purposes. Make the diff on the forked repo, with | |
|
148 | # revision that is common ancestor | |
|
149 | _org_ref = org_ref | |
|
150 | org_ref = ('rev', getattr(c.cs_ranges[0].parents[0] | |
|
151 | if c.cs_ranges[0].parents | |
|
152 | else EmptyChangeset(), 'raw_id')) | |
|
153 | log.debug('Changed org_ref from %s to %s' % (_org_ref, org_ref)) | |
|
154 | other_repo = org_repo | |
|
162 | diff_limit = self.cut_off_limit if not c.fulldiff else None | |
|
155 | 163 | |
|
156 | diff_limit = self.cut_off_limit if not fulldiff else None | |
|
157 | ||
|
158 | _diff = diffs.differ(org_repo, org_ref, other_repo, other_ref, | |
|
159 | discovery_data, | |
|
160 | remote_compare=incoming_changesets) | |
|
164 | _diff = diffs.differ(org_repo, org_ref, other_repo, other_ref) | |
|
161 | 165 | |
|
162 | 166 | diff_processor = diffs.DiffProcessor(_diff or '', format='gitdiff', |
|
163 | 167 | diff_limit=diff_limit) |
@@ -91,7 +91,7 b' class ErrorController(BaseController):' | |||
|
91 | 91 | [400, 401, 403, 404, 500]''' |
|
92 | 92 | try: |
|
93 | 93 | code = int(code) |
|
94 | except: | |
|
94 | except Exception: | |
|
95 | 95 | code = 500 |
|
96 | 96 | |
|
97 | 97 | if code == 400: |
@@ -88,9 +88,8 b' class FeedController(BaseRepoController)' | |||
|
88 | 88 | |
|
89 | 89 | def __get_desc(self, cs): |
|
90 | 90 | desc_msg = [] |
|
91 | desc_msg.append('%s %s %s<br/>' % (h.person(cs.author), | |
|
92 | _('commited on'), | |
|
93 | h.fmt_date(cs.date))) | |
|
91 | desc_msg.append((_('%s committed on %s') | |
|
92 | % (h.person(cs.author), h.fmt_date(cs.date))) + '<br/>') | |
|
94 | 93 | #branches, tags, bookmarks |
|
95 | 94 | if cs.branch: |
|
96 | 95 | desc_msg.append('branch: %s<br/>' % cs.branch) |
@@ -103,7 +102,7 b' class FeedController(BaseRepoController)' | |||
|
103 | 102 | # rev link |
|
104 | 103 | _url = url('changeset_home', repo_name=cs.repository.name, |
|
105 | 104 | revision=cs.raw_id, qualified=True) |
|
106 |
desc_msg.append('changese |
|
|
105 | desc_msg.append('changeset: <a href="%s">%s</a>' % (_url, cs.raw_id[:8])) | |
|
107 | 106 | |
|
108 | 107 | desc_msg.append('<pre>') |
|
109 | 108 | desc_msg.append(cs.message) |
@@ -27,6 +27,7 b' import os' | |||
|
27 | 27 | import logging |
|
28 | 28 | import traceback |
|
29 | 29 | import tempfile |
|
30 | import shutil | |
|
30 | 31 | |
|
31 | 32 | from pylons import request, response, tmpl_context as c, url |
|
32 | 33 | from pylons.i18n.translation import _ |
@@ -55,6 +56,7 b' from rhodecode.model.db import Repositor' | |||
|
55 | 56 | |
|
56 | 57 | from rhodecode.controllers.changeset import anchor_url, _ignorews_url,\ |
|
57 | 58 | _context_url, get_line_ctx, get_ignore_ws |
|
59 | from webob.exc import HTTPNotFound | |
|
58 | 60 | |
|
59 | 61 | |
|
60 | 62 | log = logging.getLogger(__name__) |
@@ -83,14 +85,14 b' class FilesController(BaseRepoController' | |||
|
83 | 85 | url_ = url('files_add_home', |
|
84 | 86 | repo_name=c.repo_name, |
|
85 | 87 | revision=0, f_path='') |
|
86 |
add_new = |
|
|
88 | add_new = h.link_to(_('Click here to add new file'), url_) | |
|
87 | 89 | h.flash(h.literal(_('There are no files yet %s') % add_new), |
|
88 | 90 | category='warning') |
|
89 | 91 | redirect(h.url('summary_home', repo_name=repo_name)) |
|
90 | 92 | |
|
91 | except RepositoryError, e: | |
|
92 |
h.flash(str(e), category=' |
|
|
93 | redirect(h.url('files_home', repo_name=repo_name, revision='tip')) | |
|
93 | except RepositoryError, e: # including ChangesetDoesNotExistError | |
|
94 | h.flash(str(e), category='error') | |
|
95 | raise HTTPNotFound() | |
|
94 | 96 | |
|
95 | 97 | def __get_filenode_or_redirect(self, repo_name, cs, path): |
|
96 | 98 | """ |
@@ -107,9 +109,8 b' class FilesController(BaseRepoController' | |||
|
107 | 109 | if file_node.is_dir(): |
|
108 | 110 | raise RepositoryError('given path is a directory') |
|
109 | 111 | except RepositoryError, e: |
|
110 |
h.flash(str(e), category=' |
|
|
111 | redirect(h.url('files_home', repo_name=repo_name, | |
|
112 | revision=cs.raw_id)) | |
|
112 | h.flash(str(e), category='error') | |
|
113 | raise HTTPNotFound() | |
|
113 | 114 | |
|
114 | 115 | return file_node |
|
115 | 116 | |
@@ -121,13 +122,12 b' class FilesController(BaseRepoController' | |||
|
121 | 122 | post_revision = request.POST.get('at_rev', None) |
|
122 | 123 | if post_revision: |
|
123 | 124 | cs = self.__get_cs_or_redirect(post_revision, repo_name) |
|
124 | redirect(url('files_home', repo_name=c.repo_name, | |
|
125 | revision=cs.raw_id, f_path=f_path)) | |
|
126 | 125 | |
|
127 | 126 | c.changeset = self.__get_cs_or_redirect(revision, repo_name) |
|
128 | 127 | c.branch = request.GET.get('branch', None) |
|
129 | 128 | c.f_path = f_path |
|
130 | 129 | c.annotate = annotate |
|
130 | c.changeset = self.__get_cs_or_redirect(revision, repo_name) | |
|
131 | 131 | cur_rev = c.changeset.revision |
|
132 | 132 | |
|
133 | 133 | # prev link |
@@ -160,6 +160,9 b' class FilesController(BaseRepoController' | |||
|
160 | 160 | c.file_changeset = (c.changeset |
|
161 | 161 | if c.changeset.revision < file_last_cs.revision |
|
162 | 162 | else file_last_cs) |
|
163 | #determine if we're on branch head | |
|
164 | _branches = c.rhodecode_repo.branches | |
|
165 | c.on_branch_head = revision in _branches.keys() + _branches.values() | |
|
163 | 166 | _hist = [] |
|
164 | 167 | c.file_history = [] |
|
165 | 168 | if c.load_full_history: |
@@ -171,9 +174,8 b' class FilesController(BaseRepoController' | |||
|
171 | 174 | else: |
|
172 | 175 | c.authors = c.file_history = [] |
|
173 | 176 | except RepositoryError, e: |
|
174 |
h.flash(str(e), category=' |
|
|
175 | redirect(h.url('files_home', repo_name=repo_name, | |
|
176 | revision='tip')) | |
|
177 | h.flash(str(e), category='error') | |
|
178 | raise HTTPNotFound() | |
|
177 | 179 | |
|
178 | 180 | if request.environ.get('HTTP_X_PARTIAL_XHR'): |
|
179 | 181 | return render('files/files_ypjax.html') |
@@ -260,7 +262,7 b' class FilesController(BaseRepoController' | |||
|
260 | 262 | @LoginRequired() |
|
261 | 263 | @HasRepoPermissionAnyDecorator('repository.write', 'repository.admin') |
|
262 | 264 | def edit(self, repo_name, revision, f_path): |
|
263 | repo = Repository.get_by_repo_name(repo_name) | |
|
265 | repo = c.rhodecode_db_repo | |
|
264 | 266 | if repo.enable_locking and repo.locked[0]: |
|
265 | 267 | h.flash(_('This repository is has been locked by %s on %s') |
|
266 | 268 | % (h.person_by_id(repo.locked[0]), |
@@ -269,6 +271,17 b' class FilesController(BaseRepoController' | |||
|
269 | 271 | return redirect(h.url('files_home', |
|
270 | 272 | repo_name=repo_name, revision='tip')) |
|
271 | 273 | |
|
274 | # check if revision is a branch identifier- basically we cannot | |
|
275 | # create multiple heads via file editing | |
|
276 | _branches = repo.scm_instance.branches | |
|
277 | # check if revision is a branch name or branch hash | |
|
278 | if revision not in _branches.keys() + _branches.values(): | |
|
279 | h.flash(_('You can only edit files with revision ' | |
|
280 | 'being a valid branch '), category='warning') | |
|
281 | return redirect(h.url('files_home', | |
|
282 | repo_name=repo_name, revision='tip', | |
|
283 | f_path=f_path)) | |
|
284 | ||
|
272 | 285 | r_post = request.POST |
|
273 | 286 | |
|
274 | 287 | c.cs = self.__get_cs_or_redirect(revision, repo_name) |
@@ -277,7 +290,7 b' class FilesController(BaseRepoController' | |||
|
277 | 290 | if c.file.is_binary: |
|
278 | 291 | return redirect(url('files_home', repo_name=c.repo_name, |
|
279 | 292 | revision=c.cs.raw_id, f_path=f_path)) |
|
280 | ||
|
293 | c.default_message = _('Edited file %s via RhodeCode') % (f_path) | |
|
281 | 294 | c.f_path = f_path |
|
282 | 295 | |
|
283 | 296 | if r_post: |
@@ -289,20 +302,17 b' class FilesController(BaseRepoController' | |||
|
289 | 302 | mode = detect_mode(first_line, 0) |
|
290 | 303 | content = convert_line_endings(r_post.get('content'), mode) |
|
291 | 304 | |
|
292 |
message = r_post.get('message') or |
|
|
293 | % (f_path)) | |
|
305 | message = r_post.get('message') or c.default_message | |
|
294 | 306 | author = self.rhodecode_user.full_contact |
|
295 | 307 | |
|
296 | 308 | if content == old_content: |
|
297 | h.flash(_('No changes'), | |
|
298 | category='warning') | |
|
309 | h.flash(_('No changes'), category='warning') | |
|
299 | 310 | return redirect(url('changeset_home', repo_name=c.repo_name, |
|
300 | 311 | revision='tip')) |
|
301 | ||
|
302 | 312 | try: |
|
303 | 313 | self.scm_model.commit_change(repo=c.rhodecode_repo, |
|
304 | 314 | repo_name=repo_name, cs=c.cs, |
|
305 | user=self.rhodecode_user, | |
|
315 | user=self.rhodecode_user.user_id, | |
|
306 | 316 | author=author, message=message, |
|
307 | 317 | content=content, f_path=f_path) |
|
308 | 318 | h.flash(_('Successfully committed to %s') % f_path, |
@@ -334,26 +344,22 b' class FilesController(BaseRepoController' | |||
|
334 | 344 | redirect_after=False) |
|
335 | 345 | if c.cs is None: |
|
336 | 346 | c.cs = EmptyChangeset(alias=c.rhodecode_repo.alias) |
|
337 | ||
|
347 | c.default_message = (_('Added file via RhodeCode')) | |
|
338 | 348 | c.f_path = f_path |
|
339 | 349 | |
|
340 | 350 | if r_post: |
|
341 | 351 | unix_mode = 0 |
|
342 | 352 | content = convert_line_endings(r_post.get('content'), unix_mode) |
|
343 | 353 | |
|
344 |
message = r_post.get('message') or |
|
|
345 | % (f_path)) | |
|
354 | message = r_post.get('message') or c.default_message | |
|
355 | filename = r_post.get('filename') | |
|
346 | 356 | location = r_post.get('location') |
|
347 | filename = r_post.get('filename') | |
|
348 | 357 | file_obj = r_post.get('upload_file', None) |
|
349 | 358 | |
|
350 | 359 | if file_obj is not None and hasattr(file_obj, 'filename'): |
|
351 | 360 | filename = file_obj.filename |
|
352 | 361 | content = file_obj.file |
|
353 | 362 | |
|
354 | node_path = os.path.join(location, filename) | |
|
355 | author = self.rhodecode_user.full_contact | |
|
356 | ||
|
357 | 363 | if not content: |
|
358 | 364 | h.flash(_('No content'), category='warning') |
|
359 | 365 | return redirect(url('changeset_home', repo_name=c.repo_name, |
@@ -362,16 +368,26 b' class FilesController(BaseRepoController' | |||
|
362 | 368 | h.flash(_('No filename'), category='warning') |
|
363 | 369 | return redirect(url('changeset_home', repo_name=c.repo_name, |
|
364 | 370 | revision='tip')) |
|
371 | if location.startswith('/') or location.startswith('.') or '../' in location: | |
|
372 | h.flash(_('Location must be relative path and must not ' | |
|
373 | 'contain .. in path'), category='warning') | |
|
374 | return redirect(url('changeset_home', repo_name=c.repo_name, | |
|
375 | revision='tip')) | |
|
376 | if location: | |
|
377 | location = os.path.normpath(location) | |
|
378 | filename = os.path.basename(filename) | |
|
379 | node_path = os.path.join(location, filename) | |
|
380 | author = self.rhodecode_user.full_contact | |
|
365 | 381 | |
|
366 | 382 | try: |
|
367 | 383 | self.scm_model.create_node(repo=c.rhodecode_repo, |
|
368 | 384 | repo_name=repo_name, cs=c.cs, |
|
369 | user=self.rhodecode_user, | |
|
385 | user=self.rhodecode_user.user_id, | |
|
370 | 386 | author=author, message=message, |
|
371 | 387 | content=content, f_path=node_path) |
|
372 | 388 | h.flash(_('Successfully committed to %s') % node_path, |
|
373 | 389 | category='success') |
|
374 | except NodeAlreadyExistsError, e: | |
|
390 | except (NodeError, NodeAlreadyExistsError), e: | |
|
375 | 391 | h.flash(_(e), category='error') |
|
376 | 392 | except Exception: |
|
377 | 393 | log.error(traceback.format_exc()) |
@@ -400,8 +416,8 b' class FilesController(BaseRepoController' | |||
|
400 | 416 | |
|
401 | 417 | try: |
|
402 | 418 | dbrepo = RepoModel().get_by_repo_name(repo_name) |
|
403 |
if dbrepo.enable_downloads |
|
|
404 |
return _(' |
|
|
419 | if not dbrepo.enable_downloads: | |
|
420 | return _('Downloads disabled') | |
|
405 | 421 | |
|
406 | 422 | if c.rhodecode_repo.alias == 'hg': |
|
407 | 423 | # patch and reset hooks section of UI config to not run any |
@@ -417,11 +433,40 b' class FilesController(BaseRepoController' | |||
|
417 | 433 | return _('Empty repository') |
|
418 | 434 | except (ImproperArchiveTypeError, KeyError): |
|
419 | 435 | return _('Unknown archive type') |
|
436 | # archive cache | |
|
437 | from rhodecode import CONFIG | |
|
438 | rev_name = cs.raw_id[:12] | |
|
439 | archive_name = '%s-%s%s' % (safe_str(repo_name.replace('/', '_')), | |
|
440 | safe_str(rev_name), ext) | |
|
420 | 441 | |
|
421 | fd, archive = tempfile.mkstemp() | |
|
422 | t = open(archive, 'wb') | |
|
423 | cs.fill_archive(stream=t, kind=fileformat, subrepos=subrepos) | |
|
424 | t.close() | |
|
442 | use_cached_archive = False # defines if we use cached version of archive | |
|
443 | archive_cache_enabled = CONFIG.get('archive_cache_dir') | |
|
444 | if not subrepos and archive_cache_enabled: | |
|
445 | #check if we it's ok to write | |
|
446 | if not os.path.isdir(CONFIG['archive_cache_dir']): | |
|
447 | os.makedirs(CONFIG['archive_cache_dir']) | |
|
448 | cached_archive_path = os.path.join(CONFIG['archive_cache_dir'], archive_name) | |
|
449 | if os.path.isfile(cached_archive_path): | |
|
450 | log.debug('Found cached archive in %s' % cached_archive_path) | |
|
451 | fd, archive = None, cached_archive_path | |
|
452 | use_cached_archive = True | |
|
453 | else: | |
|
454 | log.debug('Archive %s is not yet cached' % (archive_name)) | |
|
455 | ||
|
456 | if not use_cached_archive: | |
|
457 | #generate new archive | |
|
458 | try: | |
|
459 | fd, archive = tempfile.mkstemp() | |
|
460 | t = open(archive, 'wb') | |
|
461 | log.debug('Creating new temp archive in %s' % archive) | |
|
462 | cs.fill_archive(stream=t, kind=fileformat, subrepos=subrepos) | |
|
463 | if archive_cache_enabled: | |
|
464 | #if we generated the archive and use cache rename that | |
|
465 | log.debug('Storing new archive in %s' % cached_archive_path) | |
|
466 | shutil.move(archive, cached_archive_path) | |
|
467 | archive = cached_archive_path | |
|
468 | finally: | |
|
469 | t.close() | |
|
425 | 470 | |
|
426 | 471 | def get_chunked_archive(archive): |
|
427 | 472 | stream = open(archive, 'rb') |
@@ -429,13 +474,15 b' class FilesController(BaseRepoController' | |||
|
429 | 474 | data = stream.read(16 * 1024) |
|
430 | 475 | if not data: |
|
431 | 476 | stream.close() |
|
432 | os.close(fd) | |
|
433 |
os. |
|
|
477 | if fd: # fd means we used temporary file | |
|
478 | os.close(fd) | |
|
479 | if not archive_cache_enabled: | |
|
480 | log.debug('Destroing temp archive %s' % archive) | |
|
481 | os.remove(archive) | |
|
434 | 482 | break |
|
435 | 483 | yield data |
|
436 | 484 | |
|
437 |
response.content_disposition = str('attachment; filename=%s |
|
|
438 | % (repo_name, revision[:12], ext)) | |
|
485 | response.content_disposition = str('attachment; filename=%s' % (archive_name)) | |
|
439 | 486 | response.content_type = str(content_type) |
|
440 | 487 | return get_chunked_archive(archive) |
|
441 | 488 | |
@@ -474,6 +521,9 b' class FilesController(BaseRepoController' | |||
|
474 | 521 | c.changeset_1 = c.rhodecode_repo.get_changeset(diff1) |
|
475 | 522 | try: |
|
476 | 523 | node1 = c.changeset_1.get_node(f_path) |
|
524 | if node1.is_dir(): | |
|
525 | raise NodeError('%s path is a %s not a file' | |
|
526 | % (node1, type(node1))) | |
|
477 | 527 | except NodeDoesNotExistError: |
|
478 | 528 | c.changeset_1 = EmptyChangeset(cs=diff1, |
|
479 | 529 | revision=c.changeset_1.revision, |
@@ -487,6 +537,9 b' class FilesController(BaseRepoController' | |||
|
487 | 537 | c.changeset_2 = c.rhodecode_repo.get_changeset(diff2) |
|
488 | 538 | try: |
|
489 | 539 | node2 = c.changeset_2.get_node(f_path) |
|
540 | if node2.is_dir(): | |
|
541 | raise NodeError('%s path is a %s not a file' | |
|
542 | % (node2, type(node2))) | |
|
490 | 543 | except NodeDoesNotExistError: |
|
491 | 544 | c.changeset_2 = EmptyChangeset(cs=diff2, |
|
492 | 545 | revision=c.changeset_2.revision, |
@@ -38,10 +38,11 b' from rhodecode.lib.auth import LoginRequ' | |||
|
38 | 38 | NotAnonymous, HasRepoPermissionAny, HasPermissionAllDecorator,\ |
|
39 | 39 | HasPermissionAnyDecorator |
|
40 | 40 | from rhodecode.lib.base import BaseRepoController, render |
|
41 | from rhodecode.model.db import Repository, RepoGroup, UserFollowing, User | |
|
41 | from rhodecode.model.db import Repository, RepoGroup, UserFollowing, User,\ | |
|
42 | RhodeCodeUi | |
|
42 | 43 | from rhodecode.model.repo import RepoModel |
|
43 | 44 | from rhodecode.model.forms import RepoForkForm |
|
44 | from rhodecode.model.scm import ScmModel | |
|
45 | from rhodecode.model.scm import ScmModel, GroupList | |
|
45 | 46 | from rhodecode.lib.utils2 import safe_int |
|
46 | 47 | |
|
47 | 48 | log = logging.getLogger(__name__) |
@@ -54,7 +55,9 b' class ForksController(BaseRepoController' | |||
|
54 | 55 | super(ForksController, self).__before__() |
|
55 | 56 | |
|
56 | 57 | def __load_defaults(self): |
|
57 | c.repo_groups = RepoGroup.groups_choices(check_perms=True) | |
|
58 | acl_groups = GroupList(RepoGroup.query().all(), | |
|
59 | perm_set=['group.write', 'group.admin']) | |
|
60 | c.repo_groups = RepoGroup.groups_choices(groups=acl_groups) | |
|
58 | 61 | c.repo_groups_choices = map(lambda k: unicode(k[0]), c.repo_groups) |
|
59 | 62 | choices, c.landing_revs = ScmModel().get_repo_landing_revs() |
|
60 | 63 | c.landing_revs_choices = choices |
@@ -93,9 +96,16 b' class ForksController(BaseRepoController' | |||
|
93 | 96 | c.stats_percentage = '%.2f' % ((float((last_rev)) / |
|
94 | 97 | c.repo_last_rev) * 100) |
|
95 | 98 | |
|
99 | c.can_update = RhodeCodeUi.get_by_key(RhodeCodeUi.HOOK_UPDATE).ui_active | |
|
100 | ||
|
96 | 101 | defaults = RepoModel()._get_defaults(repo_name) |
|
102 | # alter the description to indicate a fork | |
|
103 | defaults['description'] = ('fork of repository: %s \n%s' | |
|
104 | % (defaults['repo_name'], | |
|
105 | defaults['description'])) | |
|
97 | 106 | # add suffix to fork |
|
98 | 107 | defaults['repo_name'] = '%s-fork' % defaults['repo_name'] |
|
108 | ||
|
99 | 109 | return defaults |
|
100 | 110 | |
|
101 | 111 | @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', |
@@ -152,11 +162,18 b' class ForksController(BaseRepoController' | |||
|
152 | 162 | try: |
|
153 | 163 | form_result = _form.to_python(dict(request.POST)) |
|
154 | 164 | |
|
165 | # an approximation that is better than nothing | |
|
166 | if not RhodeCodeUi.get_by_key(RhodeCodeUi.HOOK_UPDATE).ui_active: | |
|
167 | form_result['update_after_clone'] = False | |
|
168 | ||
|
155 | 169 | # create fork is done sometimes async on celery, db transaction |
|
156 | 170 | # management is handled there. |
|
157 | 171 | RepoModel().create_fork(form_result, self.rhodecode_user.user_id) |
|
158 | h.flash(_('forked %s repository as %s') \ | |
|
159 |
|
|
|
172 | fork_url = h.link_to(form_result['repo_name_full'], | |
|
173 | h.url('summary_home', repo_name=form_result['repo_name_full'])) | |
|
174 | ||
|
175 | h.flash(h.literal(_('Forked repository %s as %s') \ | |
|
176 | % (repo_name, fork_url)), | |
|
160 | 177 | category='success') |
|
161 | 178 | except formencode.Invalid, errors: |
|
162 | 179 | c.new_repo = errors.value['repo_name'] |
@@ -172,4 +189,4 b' class ForksController(BaseRepoController' | |||
|
172 | 189 | h.flash(_('An error occurred during repository forking %s') % |
|
173 | 190 | repo_name, category='error') |
|
174 | 191 | |
|
175 | return redirect(url('home')) | |
|
192 | return redirect(h.url('summary_home', repo_name=repo_name)) |
@@ -52,7 +52,7 b' class HomeController(BaseController):' | |||
|
52 | 52 | c.groups = self.scm_model.get_repos_groups() |
|
53 | 53 | c.group = None |
|
54 | 54 | |
|
55 |
if c.visual.lightweight_dashboard |
|
|
55 | if not c.visual.lightweight_dashboard: | |
|
56 | 56 | c.repos_list = self.scm_model.get_repos() |
|
57 | 57 | ## lightweight version of dashboard |
|
58 | 58 | else: |
@@ -81,7 +81,7 b' class HomeController(BaseController):' | |||
|
81 | 81 | def branch_tag_switcher(self, repo_name): |
|
82 | 82 | if request.is_xhr: |
|
83 | 83 | c.rhodecode_db_repo = Repository.get_by_repo_name(c.repo_name) |
|
84 |
|
|
|
85 | return render('/switch_to_list.html') | |
|
86 | else: | |
|
87 |
|
|
|
84 | if c.rhodecode_db_repo: | |
|
85 | c.rhodecode_repo = c.rhodecode_db_repo.scm_instance | |
|
86 | return render('/switch_to_list.html') | |
|
87 | raise HTTPBadRequest() |
@@ -207,7 +207,7 b' class JournalController(BaseController):' | |||
|
207 | 207 | #filter |
|
208 | 208 | try: |
|
209 | 209 | journal = _journal_filter(journal, c.search_term) |
|
210 | except: | |
|
210 | except Exception: | |
|
211 | 211 | # we want this to crash for now |
|
212 | 212 | raise |
|
213 | 213 | journal = journal.filter(filtering_criterion)\ |
@@ -231,7 +231,7 b' class JournalController(BaseController):' | |||
|
231 | 231 | self.rhodecode_user.user_id) |
|
232 | 232 | Session.commit() |
|
233 | 233 | return 'ok' |
|
234 | except: | |
|
234 | except Exception: | |
|
235 | 235 | raise HTTPBadRequest() |
|
236 | 236 | |
|
237 | 237 | repo_id = request.POST.get('follows_repo_id') |
@@ -241,7 +241,7 b' class JournalController(BaseController):' | |||
|
241 | 241 | self.rhodecode_user.user_id) |
|
242 | 242 | Session.commit() |
|
243 | 243 | return 'ok' |
|
244 | except: | |
|
244 | except Exception: | |
|
245 | 245 | raise HTTPBadRequest() |
|
246 | 246 | |
|
247 | 247 | log.debug('token mismatch %s vs %s' % (cur_token, token)) |
@@ -76,7 +76,7 b' class LoginController(BaseController):' | |||
|
76 | 76 | Session().commit() |
|
77 | 77 | |
|
78 | 78 | # If they want to be remembered, update the cookie |
|
79 |
if c.form_result['remember'] |
|
|
79 | if c.form_result['remember']: | |
|
80 | 80 | _year = (datetime.datetime.now() + |
|
81 | 81 | datetime.timedelta(seconds=60 * 60 * 24 * 365)) |
|
82 | 82 | session._set_cookie_expires(_year) |
@@ -38,6 +38,7 b' from rhodecode.lib.compat import json' | |||
|
38 | 38 | from rhodecode.lib.base import BaseRepoController, render |
|
39 | 39 | from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator,\ |
|
40 | 40 | NotAnonymous |
|
41 | from rhodecode.lib.helpers import Page | |
|
41 | 42 | from rhodecode.lib import helpers as h |
|
42 | 43 | from rhodecode.lib import diffs |
|
43 | 44 | from rhodecode.lib.utils import action_logger, jsonify |
@@ -52,6 +53,8 b' from rhodecode.model.repo import RepoMod' | |||
|
52 | 53 | from rhodecode.model.comment import ChangesetCommentsModel |
|
53 | 54 | from rhodecode.model.changeset_status import ChangesetStatusModel |
|
54 | 55 | from rhodecode.model.forms import PullRequestForm |
|
56 | from mercurial import scmutil | |
|
57 | from rhodecode.lib.utils2 import safe_int | |
|
55 | 58 | |
|
56 | 59 | log = logging.getLogger(__name__) |
|
57 | 60 | |
@@ -67,34 +70,68 b' class PullrequestsController(BaseRepoCon' | |||
|
67 | 70 | c.users_array = repo_model.get_users_js() |
|
68 | 71 | c.users_groups_array = repo_model.get_users_groups_js() |
|
69 | 72 | |
|
70 | def _get_repo_refs(self, repo): | |
|
71 | hist_l = [] | |
|
73 | def _get_repo_refs(self, repo, rev=None, branch_rev=None): | |
|
74 | """return a structure with repo's interesting changesets, suitable for | |
|
75 | the selectors in pullrequest.html""" | |
|
72 | 76 | |
|
73 | branches_group = ([('branch:%s:%s' % (k, v), k) for | |
|
74 | k, v in repo.branches.iteritems()], _("Branches")) | |
|
75 | bookmarks_group = ([('book:%s:%s' % (k, v), k) for | |
|
76 | k, v in repo.bookmarks.iteritems()], _("Bookmarks")) | |
|
77 | tags_group = ([('tag:%s:%s' % (k, v), k) for | |
|
78 | k, v in repo.tags.iteritems()], _("Tags")) | |
|
79 | ||
|
80 | hist_l.append(bookmarks_group) | |
|
81 | hist_l.append(branches_group) | |
|
82 | hist_l.append(tags_group) | |
|
77 | # list named branches that has been merged to this named branch - it should probably merge back | |
|
78 | peers = [] | |
|
79 | if branch_rev: | |
|
80 | # not restricting to merge() would also get branch point and be better | |
|
81 | # (especially because it would get the branch point) ... but is currently too expensive | |
|
82 | revs = ["sort(parents(branch(id('%s')) and merge()) - branch(id('%s')))" % | |
|
83 | (branch_rev, branch_rev)] | |
|
84 | otherbranches = {} | |
|
85 | for i in scmutil.revrange(repo._repo, revs): | |
|
86 | cs = repo.get_changeset(i) | |
|
87 | otherbranches[cs.branch] = cs.raw_id | |
|
88 | for branch, node in otherbranches.iteritems(): | |
|
89 | selected = 'branch:%s:%s' % (branch, node) | |
|
90 | peers.append((selected, branch)) | |
|
83 | 91 | |
|
84 | return hist_l | |
|
92 | selected = None | |
|
93 | branches = [] | |
|
94 | for branch, branchrev in repo.branches.iteritems(): | |
|
95 | n = 'branch:%s:%s' % (branch, branchrev) | |
|
96 | branches.append((n, branch)) | |
|
97 | if rev == branchrev: | |
|
98 | selected = n | |
|
99 | bookmarks = [] | |
|
100 | for bookmark, bookmarkrev in repo.bookmarks.iteritems(): | |
|
101 | n = 'book:%s:%s' % (bookmark, bookmarkrev) | |
|
102 | bookmarks.append((n, bookmark)) | |
|
103 | if rev == bookmarkrev: | |
|
104 | selected = n | |
|
105 | tags = [] | |
|
106 | for tag, tagrev in repo.tags.iteritems(): | |
|
107 | n = 'tag:%s:%s' % (tag, tagrev) | |
|
108 | tags.append((n, tag)) | |
|
109 | if rev == tagrev and tag != 'tip': # tip is not a real tag - and its branch is better | |
|
110 | selected = n | |
|
85 | 111 | |
|
86 | def _get_default_rev(self, repo): | |
|
87 | """ | |
|
88 | Get's default revision to do compare on pull request | |
|
112 | # prio 1: rev was selected as existing entry above | |
|
89 | 113 | |
|
90 | :param repo: | |
|
91 | """ | |
|
92 | repo = repo.scm_instance | |
|
93 | if 'default' in repo.branches: | |
|
94 | return 'default' | |
|
95 | else: | |
|
96 | #if repo doesn't have default branch return first found | |
|
97 | return repo.branches.keys()[0] | |
|
114 | # prio 2: create special entry for rev; rev _must_ be used | |
|
115 | specials = [] | |
|
116 | if rev and selected is None: | |
|
117 | selected = 'rev:%s:%s' % (rev, rev) | |
|
118 | specials = [(selected, '%s: %s' % (_("Changeset"), rev[:12]))] | |
|
119 | ||
|
120 | # prio 3: most recent peer branch | |
|
121 | if peers and not selected: | |
|
122 | selected = peers[0][0][0] | |
|
123 | ||
|
124 | # prio 4: tip revision | |
|
125 | if not selected: | |
|
126 | selected = 'tag:tip:%s' % repo.tags['tip'] | |
|
127 | ||
|
128 | groups = [(specials, _("Special")), | |
|
129 | (peers, _("Peer branches")), | |
|
130 | (bookmarks, _("Bookmarks")), | |
|
131 | (branches, _("Branches")), | |
|
132 | (tags, _("Tags")), | |
|
133 | ] | |
|
134 | return [g for g in groups if g[0]], selected | |
|
98 | 135 | |
|
99 | 136 | def _get_is_allowed_change_status(self, pull_request): |
|
100 | 137 | owner = self.rhodecode_user.user_id == pull_request.user_id |
@@ -105,6 +142,15 b' class PullrequestsController(BaseRepoCon' | |||
|
105 | 142 | def show_all(self, repo_name): |
|
106 | 143 | c.pull_requests = PullRequestModel().get_all(repo_name) |
|
107 | 144 | c.repo_name = repo_name |
|
145 | p = safe_int(request.params.get('page', 1), 1) | |
|
146 | ||
|
147 | c.pullrequests_pager = Page(c.pull_requests, page=p, items_per_page=10) | |
|
148 | ||
|
149 | c.pullrequest_data = render('/pullrequests/pullrequest_data.html') | |
|
150 | ||
|
151 | if request.environ.get('HTTP_X_PARTIAL_XHR'): | |
|
152 | return c.pullrequest_data | |
|
153 | ||
|
108 | 154 | return render('/pullrequests/pullrequest_show_all.html') |
|
109 | 155 | |
|
110 | 156 | @NotAnonymous() |
@@ -122,59 +168,51 b' class PullrequestsController(BaseRepoCon' | |||
|
122 | 168 | category='warning') |
|
123 | 169 | redirect(url('summary_home', repo_name=org_repo.repo_name)) |
|
124 | 170 | |
|
171 | org_rev = request.GET.get('rev_end') | |
|
172 | # rev_start is not directly useful - its parent could however be used | |
|
173 | # as default for other and thus give a simple compare view | |
|
174 | #other_rev = request.POST.get('rev_start') | |
|
175 | ||
|
176 | c.org_repos = [] | |
|
177 | c.org_repos.append((org_repo.repo_name, org_repo.repo_name)) | |
|
178 | c.default_org_repo = org_repo.repo_name | |
|
179 | c.org_refs, c.default_org_ref = self._get_repo_refs(org_repo.scm_instance, org_rev) | |
|
180 | ||
|
181 | c.other_repos = [] | |
|
125 | 182 | other_repos_info = {} |
|
126 | 183 | |
|
127 | c.org_refs = self._get_repo_refs(c.rhodecode_repo) | |
|
128 | c.org_repos = [] | |
|
129 | c.other_repos = [] | |
|
130 |
c.or |
|
|
131 | org_repo.user.username, c.repo_name)) | |
|
132 | ) | |
|
133 | ||
|
134 | # add org repo to other so we can open pull request agains itself | |
|
135 | c.other_repos.extend(c.org_repos) | |
|
136 | ||
|
137 | c.default_pull_request = org_repo.repo_name # repo name pre-selected | |
|
138 | c.default_pull_request_rev = self._get_default_rev(org_repo) # revision pre-selected | |
|
139 | c.default_revs = self._get_repo_refs(org_repo.scm_instance) | |
|
140 | #add orginal repo | |
|
141 | other_repos_info[org_repo.repo_name] = { | |
|
142 | 'gravatar': h.gravatar_url(org_repo.user.email, 24), | |
|
143 | 'description': org_repo.description, | |
|
144 | 'revs': h.select('other_ref', '', c.default_revs, class_='refs') | |
|
145 | } | |
|
146 | ||
|
147 | #gather forks and add to this list | |
|
148 | for fork in org_repo.forks: | |
|
149 | c.other_repos.append((fork.repo_name, '%s/%s' % ( | |
|
150 | fork.user.username, fork.repo_name)) | |
|
151 | ) | |
|
152 | other_repos_info[fork.repo_name] = { | |
|
153 | 'gravatar': h.gravatar_url(fork.user.email, 24), | |
|
154 | 'description': fork.description, | |
|
155 | 'revs': h.select('other_ref', '', | |
|
156 | self._get_repo_refs(fork.scm_instance), | |
|
157 | class_='refs') | |
|
158 | } | |
|
159 | #add parents of this fork also, but only if it's not empty | |
|
160 | if org_repo.parent and org_repo.parent.scm_instance.revisions: | |
|
161 | c.default_pull_request = org_repo.parent.repo_name | |
|
162 | c.default_pull_request_rev = self._get_default_rev(org_repo.parent) | |
|
163 | c.default_revs = self._get_repo_refs(org_repo.parent.scm_instance) | |
|
164 | c.other_repos.append((org_repo.parent.repo_name, '%s/%s' % ( | |
|
165 | org_repo.parent.user.username, | |
|
166 | org_repo.parent.repo_name)) | |
|
167 | ) | |
|
168 | other_repos_info[org_repo.parent.repo_name] = { | |
|
169 | 'gravatar': h.gravatar_url(org_repo.parent.user.email, 24), | |
|
170 | 'description': org_repo.parent.description, | |
|
171 | 'revs': h.select('other_ref', '', | |
|
172 | self._get_repo_refs(org_repo.parent.scm_instance), | |
|
173 | class_='refs') | |
|
184 | def add_other_repo(repo, branch_rev=None): | |
|
185 | if repo.repo_name in other_repos_info: # shouldn't happen | |
|
186 | return | |
|
187 | c.other_repos.append((repo.repo_name, repo.repo_name)) | |
|
188 | other_refs, selected_other_ref = self._get_repo_refs(repo.scm_instance, branch_rev=branch_rev) | |
|
189 | other_repos_info[repo.repo_name] = { | |
|
190 | 'user': dict(user_id=repo.user.user_id, | |
|
191 | username=repo.user.username, | |
|
192 | firstname=repo.user.firstname, | |
|
193 | lastname=repo.user.lastname, | |
|
194 | gravatar_link=h.gravatar_url(repo.user.email, 14)), | |
|
195 | 'description': repo.description.split('\n', 1)[0], | |
|
196 | 'revs': h.select('other_ref', selected_other_ref, other_refs, class_='refs') | |
|
174 | 197 | } |
|
175 | 198 | |
|
199 | # add org repo to other so we can open pull request against peer branches on itself | |
|
200 | add_other_repo(org_repo, branch_rev=org_rev) | |
|
201 | c.default_other_repo = org_repo.repo_name | |
|
202 | ||
|
203 | # gather forks and add to this list ... even though it is rare to | |
|
204 | # request forks to pull from their parent | |
|
205 | for fork in org_repo.forks: | |
|
206 | add_other_repo(fork) | |
|
207 | ||
|
208 | # add parents of this fork also, but only if it's not empty | |
|
209 | if org_repo.parent and org_repo.parent.scm_instance.revisions: | |
|
210 | add_other_repo(org_repo.parent) | |
|
211 | c.default_other_repo = org_repo.parent.repo_name | |
|
212 | ||
|
213 | c.default_other_repo_info = other_repos_info[c.default_other_repo] | |
|
176 | 214 | c.other_repos_info = json.dumps(other_repos_info) |
|
177 | c.review_members = [org_repo.user] | |
|
215 | ||
|
178 | 216 | return render('/pullrequests/pullrequest.html') |
|
179 | 217 | |
|
180 | 218 | @NotAnonymous() |
@@ -189,29 +227,18 b' class PullrequestsController(BaseRepoCon' | |||
|
189 | 227 | elif errors.error_dict.get('pullrequest_title'): |
|
190 | 228 | msg = _('Pull request requires a title with min. 3 chars') |
|
191 | 229 | else: |
|
192 |
msg = _(' |
|
|
230 | msg = _('Error creating pull request') | |
|
193 | 231 | |
|
194 | 232 | h.flash(msg, 'error') |
|
195 | 233 | return redirect(url('pullrequest_home', repo_name=repo_name)) |
|
196 | 234 | |
|
197 | 235 | org_repo = _form['org_repo'] |
|
198 |
org_ref = _form[' |
|
|
236 | org_ref = 'rev:merge:%s' % _form['merge_rev'] | |
|
199 | 237 | other_repo = _form['other_repo'] |
|
200 |
other_ref = _form[' |
|
|
238 | other_ref = 'rev:ancestor:%s' % _form['ancestor_rev'] | |
|
201 | 239 | revisions = _form['revisions'] |
|
202 | 240 | reviewers = _form['review_members'] |
|
203 | 241 | |
|
204 | # if we have cherry picked pull request we don't care what is in | |
|
205 | # org_ref/other_ref | |
|
206 | rev_start = request.POST.get('rev_start') | |
|
207 | rev_end = request.POST.get('rev_end') | |
|
208 | ||
|
209 | if rev_start and rev_end: | |
|
210 | # this is swapped to simulate that rev_end is a revision from | |
|
211 | # parent of the fork | |
|
212 | org_ref = 'rev:%s:%s' % (rev_end, rev_end) | |
|
213 | other_ref = 'rev:%s:%s' % (rev_start, rev_start) | |
|
214 | ||
|
215 | 242 | title = _form['pullrequest_title'] |
|
216 | 243 | description = _form['pullrequest_desc'] |
|
217 | 244 | |
@@ -269,9 +296,6 b' class PullrequestsController(BaseRepoCon' | |||
|
269 | 296 | :param pull_request: |
|
270 | 297 | :type pull_request: |
|
271 | 298 | """ |
|
272 | rev_start = request.GET.get('rev_start') | |
|
273 | rev_end = request.GET.get('rev_end') | |
|
274 | ||
|
275 | 299 | org_repo = pull_request.org_repo |
|
276 | 300 | (org_ref_type, |
|
277 | 301 | org_ref_name, |
@@ -283,7 +307,7 b' class PullrequestsController(BaseRepoCon' | |||
|
283 | 307 | other_ref_rev) = pull_request.other_ref.split(':') |
|
284 | 308 | |
|
285 | 309 | # despite opening revisions for bookmarks/branches/tags, we always |
|
286 | # convert this to rev to prevent changes after book or branch change | |
|
310 | # convert this to rev to prevent changes after bookmark or branch change | |
|
287 | 311 | org_ref = ('rev', org_ref_rev) |
|
288 | 312 | other_ref = ('rev', other_ref_rev) |
|
289 | 313 | |
@@ -294,17 +318,12 b' class PullrequestsController(BaseRepoCon' | |||
|
294 | 318 | |
|
295 | 319 | c.cs_ranges = [org_repo.get_changeset(x) for x in pull_request.revisions] |
|
296 | 320 | |
|
297 | other_ref = ('rev', getattr(c.cs_ranges[0].parents[0] | |
|
298 | if c.cs_ranges[0].parents | |
|
299 | else EmptyChangeset(), 'raw_id')) | |
|
300 | ||
|
301 | 321 | c.statuses = org_repo.statuses([x.raw_id for x in c.cs_ranges]) |
|
302 | c.target_repo = other_repo.repo_name | |
|
303 | # defines that we need hidden inputs with changesets | |
|
304 | c.as_form = request.GET.get('as_form', False) | |
|
305 | 322 | |
|
306 | 323 | c.org_ref = org_ref[1] |
|
324 | c.org_ref_type = org_ref[0] | |
|
307 | 325 | c.other_ref = other_ref[1] |
|
326 | c.other_ref_type = other_ref[0] | |
|
308 | 327 | |
|
309 | 328 | diff_limit = self.cut_off_limit if not fulldiff else None |
|
310 | 329 | |
@@ -386,7 +405,7 b' class PullrequestsController(BaseRepoCon' | |||
|
386 | 405 | |
|
387 | 406 | try: |
|
388 | 407 | cur_status = c.statuses[c.pull_request.revisions[0]][0] |
|
389 | except: | |
|
408 | except Exception: | |
|
390 | 409 | log.error(traceback.format_exc()) |
|
391 | 410 | cur_status = 'undefined' |
|
392 | 411 | if c.pull_request.is_closed() and 0: |
@@ -398,6 +417,8 b' class PullrequestsController(BaseRepoCon' | |||
|
398 | 417 | ) |
|
399 | 418 | c.changeset_statuses = ChangesetStatus.STATUSES |
|
400 | 419 | |
|
420 | c.as_form = False | |
|
421 | c.ancestor = None # there is one - but right here we don't know which | |
|
401 | 422 | return render('/pullrequests/pullrequest_show.html') |
|
402 | 423 | |
|
403 | 424 | @NotAnonymous() |
@@ -410,11 +431,15 b' class PullrequestsController(BaseRepoCon' | |||
|
410 | 431 | status = request.POST.get('changeset_status') |
|
411 | 432 | change_status = request.POST.get('change_changeset_status') |
|
412 | 433 | text = request.POST.get('text') |
|
434 | close_pr = request.POST.get('save_close') | |
|
413 | 435 | |
|
414 | 436 | allowed_to_change_status = self._get_is_allowed_change_status(pull_request) |
|
415 | 437 | if status and change_status and allowed_to_change_status: |
|
416 |
|
|
|
438 | _def = (_('Status change -> %s') | |
|
417 | 439 | % ChangesetStatus.get_status_lbl(status)) |
|
440 | if close_pr: | |
|
441 | _def = _('Closing with') + ' ' + _def | |
|
442 | text = text or _def | |
|
418 | 443 | comm = ChangesetCommentsModel().create( |
|
419 | 444 | text=text, |
|
420 | 445 | repo=c.rhodecode_db_repo.repo_id, |
@@ -423,7 +448,9 b' class PullrequestsController(BaseRepoCon' | |||
|
423 | 448 | f_path=request.POST.get('f_path'), |
|
424 | 449 | line_no=request.POST.get('line'), |
|
425 | 450 | status_change=(ChangesetStatus.get_status_lbl(status) |
|
426 | if status and change_status and allowed_to_change_status else None) | |
|
451 | if status and change_status | |
|
452 | and allowed_to_change_status else None), | |
|
453 | closing_pr=close_pr | |
|
427 | 454 | ) |
|
428 | 455 | |
|
429 | 456 | action_logger(self.rhodecode_user, |
@@ -441,7 +468,7 b' class PullrequestsController(BaseRepoCon' | |||
|
441 | 468 | pull_request=pull_request_id |
|
442 | 469 | ) |
|
443 | 470 | |
|
444 |
if |
|
|
471 | if close_pr: | |
|
445 | 472 | if status in ['rejected', 'approved']: |
|
446 | 473 | PullRequestModel().close_pull_request(pull_request_id) |
|
447 | 474 | action_logger(self.rhodecode_user, |
@@ -29,7 +29,7 b' from pylons.i18n.translation import _' | |||
|
29 | 29 | from pylons import request, config, tmpl_context as c |
|
30 | 30 | |
|
31 | 31 | from rhodecode.lib.auth import LoginRequired |
|
32 | from rhodecode.lib.base import BaseController, render | |
|
32 | from rhodecode.lib.base import BaseRepoController, render | |
|
33 | 33 | from rhodecode.lib.indexers import CHGSETS_SCHEMA, SCHEMA, CHGSET_IDX_NAME, \ |
|
34 | 34 | IDX_NAME, WhooshResultWrapper |
|
35 | 35 | |
@@ -46,14 +46,14 b' from rhodecode.lib.utils2 import safe_st' | |||
|
46 | 46 | log = logging.getLogger(__name__) |
|
47 | 47 | |
|
48 | 48 | |
|
49 | class SearchController(BaseController): | |
|
49 | class SearchController(BaseRepoController): | |
|
50 | 50 | |
|
51 | 51 | @LoginRequired() |
|
52 | 52 | def __before__(self): |
|
53 | 53 | super(SearchController, self).__before__() |
|
54 | 54 | |
|
55 |
def index(self, |
|
|
56 |
c.repo_name = |
|
|
55 | def index(self, repo_name=None): | |
|
56 | c.repo_name = repo_name | |
|
57 | 57 | c.formated_results = [] |
|
58 | 58 | c.runtime = '' |
|
59 | 59 | c.cur_query = request.GET.get('q', None) |
@@ -30,20 +30,23 b' import urllib' | |||
|
30 | 30 | from time import mktime |
|
31 | 31 | from datetime import timedelta, date |
|
32 | 32 | from urlparse import urlparse |
|
33 | from rhodecode.lib.compat import product | |
|
34 | ||
|
35 | from rhodecode.lib.vcs.exceptions import ChangesetError, EmptyRepositoryError, \ | |
|
36 | NodeDoesNotExistError | |
|
37 | 33 | |
|
38 | 34 | from pylons import tmpl_context as c, request, url, config |
|
39 | 35 | from pylons.i18n.translation import _ |
|
36 | from webob.exc import HTTPBadRequest | |
|
40 | 37 | |
|
41 | 38 | from beaker.cache import cache_region, region_invalidate |
|
42 | 39 | |
|
40 | from rhodecode.lib import helpers as h | |
|
41 | from rhodecode.lib.compat import product | |
|
42 | from rhodecode.lib.vcs.exceptions import ChangesetError, EmptyRepositoryError, \ | |
|
43 | NodeDoesNotExistError | |
|
43 | 44 | from rhodecode.config.conf import ALL_READMES, ALL_EXTS, LANGUAGES_EXTENSIONS_MAP |
|
44 | 45 | from rhodecode.model.db import Statistics, CacheInvalidation |
|
45 |
from rhodecode.lib.utils |
|
|
46 | from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator | |
|
46 | from rhodecode.lib.utils import jsonify | |
|
47 | from rhodecode.lib.utils2 import safe_unicode, safe_str | |
|
48 | from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator,\ | |
|
49 | NotAnonymous | |
|
47 | 50 | from rhodecode.lib.base import BaseRepoController, render |
|
48 | 51 | from rhodecode.lib.vcs.backends.base import EmptyChangeset |
|
49 | 52 | from rhodecode.lib.markup_renderer import MarkupRenderer |
@@ -70,8 +73,6 b' class SummaryController(BaseRepoControll' | |||
|
70 | 73 | |
|
71 | 74 | def index(self, repo_name): |
|
72 | 75 | c.dbrepo = dbrepo = c.rhodecode_db_repo |
|
73 | c.following = self.scm_model.is_following_repo(repo_name, | |
|
74 | self.rhodecode_user.user_id) | |
|
75 | 76 | |
|
76 | 77 | def url_generator(**kw): |
|
77 | 78 | return url('shortlog_home', repo_name=repo_name, size=10, **kw) |
@@ -101,10 +102,10 b' class SummaryController(BaseRepoControll' | |||
|
101 | 102 | 'pass': password, |
|
102 | 103 | 'scheme': parsed_url.scheme, |
|
103 | 104 | 'netloc': parsed_url.netloc, |
|
104 | 'path': decoded_path | |
|
105 | 'path': urllib.quote(safe_str(decoded_path)) | |
|
105 | 106 | } |
|
106 | 107 | |
|
107 | uri = uri_tmpl % uri_dict | |
|
108 | uri = (uri_tmpl % uri_dict) | |
|
108 | 109 | # generate another clone url by id |
|
109 | 110 | uri_dict.update( |
|
110 | 111 | {'path': decoded_path.replace(repo_name, '_%s' % c.dbrepo.repo_id)} |
@@ -138,7 +139,9 b' class SummaryController(BaseRepoControll' | |||
|
138 | 139 | if dbrepo.enable_statistics: |
|
139 | 140 | c.show_stats = True |
|
140 | 141 | c.no_data_msg = _('No data loaded yet') |
|
141 | run_task(get_commits_stats, c.dbrepo.repo_name, ts_min_y, ts_max_y) | |
|
142 | recurse_limit = 500 # don't recurse more than 500 times when parsing | |
|
143 | run_task(get_commits_stats, c.dbrepo.repo_name, ts_min_y, | |
|
144 | ts_max_y, recurse_limit) | |
|
142 | 145 | else: |
|
143 | 146 | c.show_stats = False |
|
144 | 147 | c.no_data_msg = _('Statistics are disabled for this repository') |
@@ -186,6 +189,14 b' class SummaryController(BaseRepoControll' | |||
|
186 | 189 | self.__get_readme_data(c.rhodecode_db_repo) |
|
187 | 190 | return render('summary/summary.html') |
|
188 | 191 | |
|
192 | @NotAnonymous() | |
|
193 | @jsonify | |
|
194 | def repo_size(self, repo_name): | |
|
195 | if request.is_xhr: | |
|
196 | return c.rhodecode_db_repo._repo_size() | |
|
197 | else: | |
|
198 | raise HTTPBadRequest() | |
|
199 | ||
|
189 | 200 | def __get_readme_data(self, db_repo): |
|
190 | 201 | repo_name = db_repo.repo_name |
|
191 | 202 |
|
1 | NO CONTENT: modified file, binary diff hidden |
This diff has been collapsed as it changes many lines, (4015 lines changed) Show them Hide them | |||
@@ -7,7 +7,7 b' msgid ""' | |||
|
7 | 7 | msgstr "" |
|
8 | 8 | "Project-Id-Version: rhodecode 0.1\n" |
|
9 | 9 | "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" |
|
10 |
"POT-Creation-Date: 201 |
|
|
10 | "POT-Creation-Date: 2013-04-05 10:19-0700\n" | |
|
11 | 11 | "PO-Revision-Date: 2011-02-25 19:13+0100\n" |
|
12 | 12 | "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" |
|
13 | 13 | "Language-Team: en <LL@li.org>\n" |
@@ -22,11 +22,11 b' msgid "All Branches"' | |||
|
22 | 22 | msgstr "" |
|
23 | 23 | |
|
24 | 24 | #: rhodecode/controllers/changeset.py:83 |
|
25 |
msgid " |
|
|
25 | msgid "Show white space" | |
|
26 | 26 | msgstr "" |
|
27 | 27 | |
|
28 | 28 | #: rhodecode/controllers/changeset.py:90 rhodecode/controllers/changeset.py:97 |
|
29 |
msgid " |
|
|
29 | msgid "Ignore white space" | |
|
30 | 30 | msgstr "" |
|
31 | 31 | |
|
32 | 32 | #: rhodecode/controllers/changeset.py:163 |
@@ -34,20 +34,20 b' msgstr ""' | |||
|
34 | 34 | msgid "%s line context" |
|
35 | 35 | msgstr "" |
|
36 | 36 | |
|
37 |
#: rhodecode/controllers/changeset.py:3 |
|
|
38 |
#: rhodecode/controllers/pullrequests.py:4 |
|
|
37 | #: rhodecode/controllers/changeset.py:329 | |
|
38 | #: rhodecode/controllers/pullrequests.py:438 | |
|
39 | 39 | #, python-format |
|
40 | 40 | msgid "Status change -> %s" |
|
41 | 41 | msgstr "" |
|
42 | 42 | |
|
43 |
#: rhodecode/controllers/changeset.py:3 |
|
|
43 | #: rhodecode/controllers/changeset.py:360 | |
|
44 | 44 | msgid "" |
|
45 | "Changing status on a changeset associated witha closed pull request is " | |
|
45 | "Changing status on a changeset associated with a closed pull request is " | |
|
46 | 46 | "not allowed" |
|
47 | 47 | msgstr "" |
|
48 | 48 | |
|
49 |
#: rhodecode/controllers/compare.py:7 |
|
|
50 |
#: rhodecode/controllers/pullrequests.py:1 |
|
|
49 | #: rhodecode/controllers/compare.py:74 | |
|
50 | #: rhodecode/controllers/pullrequests.py:167 | |
|
51 | 51 | #: rhodecode/controllers/shortlog.py:100 |
|
52 | 52 | msgid "There are no changesets yet" |
|
53 | 53 | msgstr "" |
@@ -89,156 +89,187 b' msgid "%s %s feed"' | |||
|
89 | 89 | msgstr "" |
|
90 | 90 | |
|
91 | 91 | #: rhodecode/controllers/feed.py:86 |
|
92 |
#: rhodecode/templates/changeset/changeset.html:13 |
|
|
93 |
#: rhodecode/templates/changeset/changeset.html:14 |
|
|
94 |
#: rhodecode/templates/compare/compare_diff.html: |
|
|
95 |
#: rhodecode/templates/compare/compare_diff.html: |
|
|
96 |
#: rhodecode/templates/pullrequests/pullrequest_show.html: |
|
|
97 |
#: rhodecode/templates/pullrequests/pullrequest_show.html:15 |
|
|
92 | #: rhodecode/templates/changeset/changeset.html:134 | |
|
93 | #: rhodecode/templates/changeset/changeset.html:146 | |
|
94 | #: rhodecode/templates/compare/compare_diff.html:58 | |
|
95 | #: rhodecode/templates/compare/compare_diff.html:69 | |
|
96 | #: rhodecode/templates/pullrequests/pullrequest_show.html:131 | |
|
97 | #: rhodecode/templates/pullrequests/pullrequest_show.html:195 | |
|
98 | 98 | msgid "Changeset was too big and was cut off..." |
|
99 | 99 | msgstr "" |
|
100 | 100 | |
|
101 |
#: rhodecode/controllers/feed.py:9 |
|
|
102 | msgid "commited on" | |
|
103 | msgstr "" | |
|
104 | ||
|
105 | #: rhodecode/controllers/files.py:86 | |
|
106 | msgid "click here to add new file" | |
|
107 | msgstr "" | |
|
108 | ||
|
109 | #: rhodecode/controllers/files.py:87 | |
|
101 | #: rhodecode/controllers/feed.py:91 | |
|
102 | #, python-format | |
|
103 | msgid "%s committed on %s" | |
|
104 | msgstr "" | |
|
105 | ||
|
106 | #: rhodecode/controllers/files.py:88 | |
|
107 | msgid "Click here to add new file" | |
|
108 | msgstr "" | |
|
109 | ||
|
110 | #: rhodecode/controllers/files.py:89 | |
|
110 | 111 | #, python-format |
|
111 | 112 | msgid "There are no files yet %s" |
|
112 | 113 | msgstr "" |
|
113 | 114 | |
|
114 |
#: rhodecode/controllers/files.py:26 |
|
|
115 | #: rhodecode/controllers/files.py:267 rhodecode/controllers/files.py:335 | |
|
115 | 116 | #, python-format |
|
116 | 117 | msgid "This repository is has been locked by %s on %s" |
|
117 | 118 | msgstr "" |
|
118 | 119 | |
|
119 |
#: rhodecode/controllers/files.py:29 |
|
|
120 | #: rhodecode/controllers/files.py:279 | |
|
121 | msgid "You can only edit files with revision being a valid branch " | |
|
122 | msgstr "" | |
|
123 | ||
|
124 | #: rhodecode/controllers/files.py:293 | |
|
120 | 125 | #, python-format |
|
121 | msgid "Edited %s via RhodeCode" | |
|
122 | msgstr "" | |
|
123 | ||
|
124 |
#: rhodecode/controllers/files.py: |
|
|
126 | msgid "Edited file %s via RhodeCode" | |
|
127 | msgstr "" | |
|
128 | ||
|
129 | #: rhodecode/controllers/files.py:309 | |
|
125 | 130 | msgid "No changes" |
|
126 | 131 | msgstr "" |
|
127 | 132 | |
|
128 |
#: rhodecode/controllers/files.py:3 |
|
|
133 | #: rhodecode/controllers/files.py:318 rhodecode/controllers/files.py:388 | |
|
129 | 134 | #, python-format |
|
130 | 135 | msgid "Successfully committed to %s" |
|
131 | 136 | msgstr "" |
|
132 | 137 | |
|
133 |
#: rhodecode/controllers/files.py:3 |
|
|
138 | #: rhodecode/controllers/files.py:323 rhodecode/controllers/files.py:394 | |
|
134 | 139 | msgid "Error occurred during commit" |
|
135 | 140 | msgstr "" |
|
136 | 141 | |
|
137 |
#: rhodecode/controllers/files.py:34 |
|
|
138 | #, python-format | |
|
139 | msgid "Added %s via RhodeCode" | |
|
140 | msgstr "" | |
|
141 | ||
|
142 | #: rhodecode/controllers/files.py:358 | |
|
142 | #: rhodecode/controllers/files.py:347 | |
|
143 | msgid "Added file via RhodeCode" | |
|
144 | msgstr "" | |
|
145 | ||
|
146 | #: rhodecode/controllers/files.py:364 | |
|
143 | 147 | msgid "No content" |
|
144 | 148 | msgstr "" |
|
145 | 149 | |
|
146 |
#: rhodecode/controllers/files.py:36 |
|
|
150 | #: rhodecode/controllers/files.py:368 | |
|
147 | 151 | msgid "No filename" |
|
148 | 152 | msgstr "" |
|
149 | 153 | |
|
150 |
#: rhodecode/controllers/files.py: |
|
|
151 | msgid "downloads disabled" | |
|
152 | msgstr "" | |
|
153 | ||
|
154 |
#: rhodecode/controllers/files.py:4 |
|
|
154 | #: rhodecode/controllers/files.py:372 | |
|
155 | msgid "Location must be relative path and must not contain .. in path" | |
|
156 | msgstr "" | |
|
157 | ||
|
158 | #: rhodecode/controllers/files.py:420 | |
|
159 | msgid "Downloads disabled" | |
|
160 | msgstr "" | |
|
161 | ||
|
162 | #: rhodecode/controllers/files.py:431 | |
|
155 | 163 | #, python-format |
|
156 | 164 | msgid "Unknown revision %s" |
|
157 | 165 | msgstr "" |
|
158 | 166 | |
|
159 |
#: rhodecode/controllers/files.py:4 |
|
|
167 | #: rhodecode/controllers/files.py:433 | |
|
160 | 168 | msgid "Empty repository" |
|
161 | 169 | msgstr "" |
|
162 | 170 | |
|
163 |
#: rhodecode/controllers/files.py:4 |
|
|
171 | #: rhodecode/controllers/files.py:435 | |
|
164 | 172 | msgid "Unknown archive type" |
|
165 | 173 | msgstr "" |
|
166 | 174 | |
|
167 |
#: rhodecode/controllers/files.py: |
|
|
168 |
#: rhodecode/templates/changeset/changeset_range.html: |
|
|
169 | #: rhodecode/templates/changeset/changeset_range.html:31 | |
|
175 | #: rhodecode/controllers/files.py:617 | |
|
176 | #: rhodecode/templates/changeset/changeset_range.html:9 | |
|
170 | 177 | msgid "Changesets" |
|
171 | 178 | msgstr "" |
|
172 | 179 | |
|
173 |
#: rhodecode/controllers/files.py: |
|
|
174 |
#: rhodecode/controllers/summary.py:2 |
|
|
180 | #: rhodecode/controllers/files.py:618 rhodecode/controllers/pullrequests.py:131 | |
|
181 | #: rhodecode/controllers/summary.py:247 rhodecode/model/scm.py:606 | |
|
182 | #: rhodecode/templates/switch_to_list.html:3 | |
|
183 | #: rhodecode/templates/branches/branches.html:10 | |
|
175 | 184 | msgid "Branches" |
|
176 | 185 | msgstr "" |
|
177 | 186 | |
|
178 |
#: rhodecode/controllers/files.py: |
|
|
179 |
#: rhodecode/controllers/summary.py:2 |
|
|
187 | #: rhodecode/controllers/files.py:619 rhodecode/controllers/pullrequests.py:132 | |
|
188 | #: rhodecode/controllers/summary.py:248 rhodecode/model/scm.py:617 | |
|
189 | #: rhodecode/templates/switch_to_list.html:15 | |
|
190 | #: rhodecode/templates/shortlog/shortlog_data.html:10 | |
|
191 | #: rhodecode/templates/tags/tags.html:10 | |
|
180 | 192 | msgid "Tags" |
|
181 | 193 | msgstr "" |
|
182 | 194 | |
|
183 |
#: rhodecode/controllers/forks.py:15 |
|
|
195 | #: rhodecode/controllers/forks.py:175 | |
|
184 | 196 | #, python-format |
|
185 |
msgid " |
|
|
186 | msgstr "" | |
|
187 | ||
|
188 |
#: rhodecode/controllers/forks.py:1 |
|
|
197 | msgid "Forked repository %s as %s" | |
|
198 | msgstr "" | |
|
199 | ||
|
200 | #: rhodecode/controllers/forks.py:189 | |
|
189 | 201 | #, python-format |
|
190 | 202 | msgid "An error occurred during repository forking %s" |
|
191 | 203 | msgstr "" |
|
192 | 204 | |
|
193 |
#: rhodecode/controllers/journal.py:2 |
|
|
205 | #: rhodecode/controllers/journal.py:275 rhodecode/controllers/journal.py:318 | |
|
194 | 206 | msgid "public journal" |
|
195 | 207 | msgstr "" |
|
196 | 208 | |
|
197 |
#: rhodecode/controllers/journal.py:2 |
|
|
198 | #: rhodecode/templates/base/base.html:232 | |
|
209 | #: rhodecode/controllers/journal.py:279 rhodecode/controllers/journal.py:322 | |
|
199 | 210 | #: rhodecode/templates/journal/journal.html:12 |
|
200 | 211 | msgid "journal" |
|
201 | 212 | msgstr "" |
|
202 | 213 | |
|
203 |
#: rhodecode/controllers/login.py:1 |
|
|
204 |
msgid "You have successfully registered into |
|
|
205 | msgstr "" | |
|
206 | ||
|
207 |
#: rhodecode/controllers/login.py:1 |
|
|
214 | #: rhodecode/controllers/login.py:138 | |
|
215 | msgid "You have successfully registered into RhodeCode" | |
|
216 | msgstr "" | |
|
217 | ||
|
218 | #: rhodecode/controllers/login.py:159 | |
|
208 | 219 | msgid "Your password reset link was sent" |
|
209 | 220 | msgstr "" |
|
210 | 221 | |
|
211 |
#: rhodecode/controllers/login.py:1 |
|
|
222 | #: rhodecode/controllers/login.py:179 | |
|
212 | 223 | msgid "" |
|
213 | 224 | "Your password reset was successful, new password has been sent to your " |
|
214 | 225 | "email" |
|
215 | 226 | msgstr "" |
|
216 | 227 | |
|
217 |
#: rhodecode/controllers/pullrequests.py: |
|
|
228 | #: rhodecode/controllers/pullrequests.py:118 | |
|
229 | #: rhodecode/templates/changeset/changeset.html:10 | |
|
230 | #: rhodecode/templates/email_templates/changeset_comment.html:15 | |
|
231 | msgid "Changeset" | |
|
232 | msgstr "" | |
|
233 | ||
|
234 | #: rhodecode/controllers/pullrequests.py:128 | |
|
235 | msgid "Special" | |
|
236 | msgstr "" | |
|
237 | ||
|
238 | #: rhodecode/controllers/pullrequests.py:129 | |
|
239 | msgid "Peer branches" | |
|
240 | msgstr "" | |
|
241 | ||
|
242 | #: rhodecode/controllers/pullrequests.py:130 rhodecode/model/scm.py:612 | |
|
243 | #: rhodecode/templates/switch_to_list.html:28 | |
|
244 | #: rhodecode/templates/bookmarks/bookmarks.html:10 | |
|
218 | 245 | msgid "Bookmarks" |
|
219 | 246 | msgstr "" |
|
220 | 247 | |
|
221 |
#: rhodecode/controllers/pullrequests.py: |
|
|
248 | #: rhodecode/controllers/pullrequests.py:228 | |
|
222 | 249 | msgid "Pull request requires a title with min. 3 chars" |
|
223 | 250 | msgstr "" |
|
224 | 251 | |
|
225 |
#: rhodecode/controllers/pullrequests.py: |
|
|
226 |
msgid " |
|
|
227 | msgstr "" | |
|
228 | ||
|
229 |
#: rhodecode/controllers/pullrequests.py:2 |
|
|
252 | #: rhodecode/controllers/pullrequests.py:230 | |
|
253 | msgid "Error creating pull request" | |
|
254 | msgstr "" | |
|
255 | ||
|
256 | #: rhodecode/controllers/pullrequests.py:251 | |
|
230 | 257 | msgid "Successfully opened new pull request" |
|
231 | 258 | msgstr "" |
|
232 | 259 | |
|
233 |
#: rhodecode/controllers/pullrequests.py:2 |
|
|
260 | #: rhodecode/controllers/pullrequests.py:254 | |
|
234 | 261 | msgid "Error occurred during sending pull request" |
|
235 | 262 | msgstr "" |
|
236 | 263 | |
|
237 |
#: rhodecode/controllers/pullrequests.py:2 |
|
|
264 | #: rhodecode/controllers/pullrequests.py:287 | |
|
238 | 265 | msgid "Successfully deleted pull request" |
|
239 | 266 | msgstr "" |
|
240 | 267 | |
|
241 |
#: rhodecode/controllers/pullrequests.py:4 |
|
|
268 | #: rhodecode/controllers/pullrequests.py:441 | |
|
269 | msgid "Closing with" | |
|
270 | msgstr "" | |
|
271 | ||
|
272 | #: rhodecode/controllers/pullrequests.py:478 | |
|
242 | 273 | msgid "Closing pull request on other statuses than rejected or approved forbidden" |
|
243 | 274 | msgstr "" |
|
244 | 275 | |
@@ -254,55 +285,12 b' msgstr ""' | |||
|
254 | 285 | msgid "An error occurred during this search operation" |
|
255 | 286 | msgstr "" |
|
256 | 287 | |
|
257 |
#: rhodecode/controllers/s |
|
|
258 | #: rhodecode/controllers/admin/repos.py:272 | |
|
259 | #, python-format | |
|
260 | msgid "Repository %s updated successfully" | |
|
261 | msgstr "" | |
|
262 | ||
|
263 | #: rhodecode/controllers/settings.py:137 | |
|
264 | #: rhodecode/controllers/admin/repos.py:290 | |
|
265 | #, python-format | |
|
266 | msgid "error occurred during update of repository %s" | |
|
267 | msgstr "" | |
|
268 | ||
|
269 | #: rhodecode/controllers/settings.py:162 | |
|
270 | #: rhodecode/controllers/admin/repos.py:315 | |
|
271 | #, python-format | |
|
272 | msgid "deleted repository %s" | |
|
273 | msgstr "" | |
|
274 | ||
|
275 | #: rhodecode/controllers/settings.py:166 | |
|
276 | #: rhodecode/controllers/admin/repos.py:325 | |
|
277 | #: rhodecode/controllers/admin/repos.py:331 | |
|
278 | #, python-format | |
|
279 | msgid "An error occurred during deletion of %s" | |
|
280 | msgstr "" | |
|
281 | ||
|
282 | #: rhodecode/controllers/settings.py:185 | |
|
283 | msgid "unlocked" | |
|
284 | msgstr "" | |
|
285 | ||
|
286 | #: rhodecode/controllers/settings.py:188 | |
|
287 | msgid "locked" | |
|
288 | msgstr "" | |
|
289 | ||
|
290 | #: rhodecode/controllers/settings.py:190 | |
|
291 | #, python-format | |
|
292 | msgid "Repository has been %s" | |
|
293 | msgstr "" | |
|
294 | ||
|
295 | #: rhodecode/controllers/settings.py:194 | |
|
296 | #: rhodecode/controllers/admin/repos.py:423 | |
|
297 | msgid "An error occurred during unlocking" | |
|
298 | msgstr "" | |
|
299 | ||
|
300 | #: rhodecode/controllers/summary.py:140 | |
|
288 | #: rhodecode/controllers/summary.py:141 | |
|
301 | 289 | msgid "No data loaded yet" |
|
302 | 290 | msgstr "" |
|
303 | 291 | |
|
304 |
#: rhodecode/controllers/summary.py:14 |
|
|
305 |
#: rhodecode/templates/summary/summary.html:1 |
|
|
292 | #: rhodecode/controllers/summary.py:147 | |
|
293 | #: rhodecode/templates/summary/summary.html:149 | |
|
306 | 294 | msgid "Statistics are disabled for this repository" |
|
307 | 295 | msgstr "" |
|
308 | 296 | |
@@ -311,7 +299,7 b' msgid "Default settings updated successf' | |||
|
311 | 299 | msgstr "" |
|
312 | 300 | |
|
313 | 301 | #: rhodecode/controllers/admin/defaults.py:110 |
|
314 |
msgid " |
|
|
302 | msgid "Error occurred during update of defaults" | |
|
315 | 303 | msgstr "" |
|
316 | 304 | |
|
317 | 305 | #: rhodecode/controllers/admin/ldap_settings.py:50 |
@@ -359,7 +347,7 b' msgid "START_TLS on LDAP connection"' | |||
|
359 | 347 | msgstr "" |
|
360 | 348 | |
|
361 | 349 | #: rhodecode/controllers/admin/ldap_settings.py:126 |
|
362 |
msgid "L |
|
|
350 | msgid "LDAP settings updated successfully" | |
|
363 | 351 | msgstr "" |
|
364 | 352 | |
|
365 | 353 | #: rhodecode/controllers/admin/ldap_settings.py:130 |
@@ -367,533 +355,616 b' msgid "Unable to activate ldap. The \\"py' | |||
|
367 | 355 | msgstr "" |
|
368 | 356 | |
|
369 | 357 | #: rhodecode/controllers/admin/ldap_settings.py:147 |
|
370 |
msgid " |
|
|
371 | msgstr "" | |
|
372 | ||
|
373 | #: rhodecode/controllers/admin/permissions.py:59 | |
|
374 | #: rhodecode/controllers/admin/permissions.py:63 | |
|
375 | msgid "None" | |
|
358 | msgid "Error occurred during update of ldap settings" | |
|
376 | 359 | msgstr "" |
|
377 | 360 | |
|
378 | 361 | #: rhodecode/controllers/admin/permissions.py:60 |
|
379 | 362 | #: rhodecode/controllers/admin/permissions.py:64 |
|
380 |
msgid " |
|
|
363 | msgid "None" | |
|
381 | 364 | msgstr "" |
|
382 | 365 | |
|
383 | 366 | #: rhodecode/controllers/admin/permissions.py:61 |
|
384 | 367 | #: rhodecode/controllers/admin/permissions.py:65 |
|
385 |
msgid " |
|
|
368 | msgid "Read" | |
|
386 | 369 | msgstr "" |
|
387 | 370 | |
|
388 | 371 | #: rhodecode/controllers/admin/permissions.py:62 |
|
389 | 372 | #: rhodecode/controllers/admin/permissions.py:66 |
|
373 | msgid "Write" | |
|
374 | msgstr "" | |
|
375 | ||
|
376 | #: rhodecode/controllers/admin/permissions.py:63 | |
|
377 | #: rhodecode/controllers/admin/permissions.py:67 | |
|
390 | 378 | #: rhodecode/templates/admin/defaults/defaults.html:9 |
|
391 | 379 | #: rhodecode/templates/admin/ldap/ldap.html:9 |
|
392 | 380 | #: rhodecode/templates/admin/permissions/permissions.html:9 |
|
393 |
#: rhodecode/templates/admin/repos/repo_add.html: |
|
|
394 |
#: rhodecode/templates/admin/repos/repo_ |
|
|
381 | #: rhodecode/templates/admin/repos/repo_add.html:10 | |
|
382 | #: rhodecode/templates/admin/repos/repo_add.html:14 | |
|
395 | 383 | #: rhodecode/templates/admin/repos/repos.html:9 |
|
396 |
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html: |
|
|
397 |
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html: |
|
|
398 |
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:1 |
|
|
384 | #: rhodecode/templates/admin/repos_groups/repos_groups_add.html:9 | |
|
385 | #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:9 | |
|
386 | #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:11 | |
|
387 | #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:13 | |
|
399 | 388 | #: rhodecode/templates/admin/settings/hooks.html:9 |
|
400 | 389 | #: rhodecode/templates/admin/settings/settings.html:9 |
|
401 | 390 | #: rhodecode/templates/admin/users/user_add.html:8 |
|
402 | 391 | #: rhodecode/templates/admin/users/user_edit.html:9 |
|
403 |
#: rhodecode/templates/admin/users/user_edit.html:1 |
|
|
392 | #: rhodecode/templates/admin/users/user_edit.html:133 | |
|
404 | 393 | #: rhodecode/templates/admin/users/users.html:9 |
|
394 | #: rhodecode/templates/admin/users/users.html:85 | |
|
405 | 395 | #: rhodecode/templates/admin/users_groups/users_group_add.html:8 |
|
406 | 396 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:9 |
|
407 | 397 | #: rhodecode/templates/admin/users_groups/users_groups.html:9 |
|
408 |
#: rhodecode/templates/base/base.html: |
|
|
409 |
#: rhodecode/templates/base/base.html:3 |
|
|
410 |
#: rhodecode/templates/base/base.html: |
|
|
411 |
#: rhodecode/templates/base/base.html:3 |
|
|
398 | #: rhodecode/templates/base/base.html:292 | |
|
399 | #: rhodecode/templates/base/base.html:293 | |
|
400 | #: rhodecode/templates/base/base.html:299 | |
|
401 | #: rhodecode/templates/base/base.html:300 | |
|
412 | 402 | msgid "Admin" |
|
413 | 403 | msgstr "" |
|
414 | 404 | |
|
415 |
#: rhodecode/controllers/admin/permissions.py: |
|
|
416 | msgid "disabled" | |
|
417 | msgstr "" | |
|
418 | ||
|
419 | #: rhodecode/controllers/admin/permissions.py:71 | |
|
420 | msgid "allowed with manual account activation" | |
|
421 | msgstr "" | |
|
422 | ||
|
423 | #: rhodecode/controllers/admin/permissions.py:73 | |
|
424 | msgid "allowed with automatic account activation" | |
|
425 | msgstr "" | |
|
426 | ||
|
427 | #: rhodecode/controllers/admin/permissions.py:75 | |
|
428 | #: rhodecode/controllers/admin/permissions.py:78 | |
|
429 | msgid "Disabled" | |
|
430 | msgstr "" | |
|
431 | ||
|
405 | #: rhodecode/controllers/admin/permissions.py:70 | |
|
432 | 406 | #: rhodecode/controllers/admin/permissions.py:76 |
|
433 | 407 | #: rhodecode/controllers/admin/permissions.py:79 |
|
408 | msgid "Disabled" | |
|
409 | msgstr "" | |
|
410 | ||
|
411 | #: rhodecode/controllers/admin/permissions.py:72 | |
|
412 | msgid "Allowed with manual account activation" | |
|
413 | msgstr "" | |
|
414 | ||
|
415 | #: rhodecode/controllers/admin/permissions.py:74 | |
|
416 | msgid "Allowed with automatic account activation" | |
|
417 | msgstr "" | |
|
418 | ||
|
419 | #: rhodecode/controllers/admin/permissions.py:77 | |
|
420 | #: rhodecode/controllers/admin/permissions.py:80 | |
|
434 | 421 | msgid "Enabled" |
|
435 | 422 | msgstr "" |
|
436 | 423 | |
|
437 |
#: rhodecode/controllers/admin/permissions.py:12 |
|
|
424 | #: rhodecode/controllers/admin/permissions.py:128 | |
|
438 | 425 | msgid "Default permissions updated successfully" |
|
439 | 426 | msgstr "" |
|
440 | 427 | |
|
441 |
#: rhodecode/controllers/admin/permissions.py:1 |
|
|
442 |
msgid " |
|
|
443 | msgstr "" | |
|
444 | ||
|
445 |
#: rhodecode/controllers/admin/repos.py:12 |
|
|
428 | #: rhodecode/controllers/admin/permissions.py:142 | |
|
429 | msgid "Error occurred during update of permissions" | |
|
430 | msgstr "" | |
|
431 | ||
|
432 | #: rhodecode/controllers/admin/repos.py:127 | |
|
446 | 433 | msgid "--REMOVE FORK--" |
|
447 | 434 | msgstr "" |
|
448 | 435 | |
|
449 |
#: rhodecode/controllers/admin/repos.py:1 |
|
|
436 | #: rhodecode/controllers/admin/repos.py:168 | |
|
437 | #, python-format | |
|
438 | msgid "Created repository %s from %s" | |
|
439 | msgstr "" | |
|
440 | ||
|
441 | #: rhodecode/controllers/admin/repos.py:174 | |
|
450 | 442 | #, python-format |
|
451 |
msgid " |
|
|
452 | msgstr "" | |
|
453 | ||
|
454 |
#: rhodecode/controllers/admin/repos.py:19 |
|
|
443 | msgid "Created repository %s" | |
|
444 | msgstr "" | |
|
445 | ||
|
446 | #: rhodecode/controllers/admin/repos.py:197 | |
|
447 | #, python-format | |
|
448 | msgid "Error creating repository %s" | |
|
449 | msgstr "" | |
|
450 | ||
|
451 | #: rhodecode/controllers/admin/repos.py:266 | |
|
452 | #, python-format | |
|
453 | msgid "Repository %s updated successfully" | |
|
454 | msgstr "" | |
|
455 | ||
|
456 | #: rhodecode/controllers/admin/repos.py:284 | |
|
455 | 457 | #, python-format |
|
456 |
msgid " |
|
|
457 | msgstr "" | |
|
458 | ||
|
459 |
#: rhodecode/controllers/admin/repos.py: |
|
|
458 | msgid "Error occurred during update of repository %s" | |
|
459 | msgstr "" | |
|
460 | ||
|
461 | #: rhodecode/controllers/admin/repos.py:311 | |
|
462 | #: rhodecode/controllers/api/api.py:877 | |
|
460 | 463 | #, python-format |
|
461 | msgid "error occurred during creation of repository %s" | |
|
462 | msgstr "" | |
|
463 | ||
|
464 |
#: rhodecode/controllers/admin/repos.py:3 |
|
|
464 | msgid "Detached %s forks" | |
|
465 | msgstr "" | |
|
466 | ||
|
467 | #: rhodecode/controllers/admin/repos.py:314 | |
|
468 | #: rhodecode/controllers/api/api.py:879 | |
|
469 | #, python-format | |
|
470 | msgid "Deleted %s forks" | |
|
471 | msgstr "" | |
|
472 | ||
|
473 | #: rhodecode/controllers/admin/repos.py:319 | |
|
474 | #, python-format | |
|
475 | msgid "Deleted repository %s" | |
|
476 | msgstr "" | |
|
477 | ||
|
478 | #: rhodecode/controllers/admin/repos.py:322 | |
|
465 | 479 | #, python-format |
|
466 | 480 | msgid "Cannot delete %s it still contains attached forks" |
|
467 | 481 | msgstr "" |
|
468 | 482 | |
|
469 |
#: rhodecode/controllers/admin/repos.py:3 |
|
|
483 | #: rhodecode/controllers/admin/repos.py:327 | |
|
484 | #, python-format | |
|
485 | msgid "An error occurred during deletion of %s" | |
|
486 | msgstr "" | |
|
487 | ||
|
488 | #: rhodecode/controllers/admin/repos.py:365 | |
|
489 | msgid "Repository permissions updated" | |
|
490 | msgstr "" | |
|
491 | ||
|
492 | #: rhodecode/controllers/admin/repos.py:384 | |
|
470 | 493 | msgid "An error occurred during deletion of repository user" |
|
471 | 494 | msgstr "" |
|
472 | 495 | |
|
473 | #: rhodecode/controllers/admin/repos.py:368 | |
|
474 | msgid "An error occurred during deletion of repository users groups" | |
|
475 | msgstr "" | |
|
476 | ||
|
477 | #: rhodecode/controllers/admin/repos.py:386 | |
|
478 | msgid "An error occurred during deletion of repository stats" | |
|
479 | msgstr "" | |
|
480 | ||
|
481 | 496 | #: rhodecode/controllers/admin/repos.py:403 |
|
497 | msgid "An error occurred during deletion of repository user groups" | |
|
498 | msgstr "" | |
|
499 | ||
|
500 | #: rhodecode/controllers/admin/repos.py:421 | |
|
501 | msgid "An error occurred during deletion of repository stats" | |
|
502 | msgstr "" | |
|
503 | ||
|
504 | #: rhodecode/controllers/admin/repos.py:438 | |
|
482 | 505 | msgid "An error occurred during cache invalidation" |
|
483 | 506 | msgstr "" |
|
484 | 507 | |
|
485 |
#: rhodecode/controllers/admin/repos.py:4 |
|
|
508 | #: rhodecode/controllers/admin/repos.py:458 | |
|
509 | #: rhodecode/controllers/admin/repos.py:485 | |
|
510 | msgid "An error occurred during unlocking" | |
|
511 | msgstr "" | |
|
512 | ||
|
513 | #: rhodecode/controllers/admin/repos.py:476 | |
|
514 | msgid "Unlocked" | |
|
515 | msgstr "" | |
|
516 | ||
|
517 | #: rhodecode/controllers/admin/repos.py:479 | |
|
518 | msgid "Locked" | |
|
519 | msgstr "" | |
|
520 | ||
|
521 | #: rhodecode/controllers/admin/repos.py:481 | |
|
522 | #, python-format | |
|
523 | msgid "Repository has been %s" | |
|
524 | msgstr "" | |
|
525 | ||
|
526 | #: rhodecode/controllers/admin/repos.py:505 | |
|
486 | 527 | msgid "Updated repository visibility in public journal" |
|
487 | 528 | msgstr "" |
|
488 | 529 | |
|
489 |
#: rhodecode/controllers/admin/repos.py: |
|
|
530 | #: rhodecode/controllers/admin/repos.py:509 | |
|
490 | 531 | msgid "An error occurred during setting this repository in public journal" |
|
491 | 532 | msgstr "" |
|
492 | 533 | |
|
493 |
#: rhodecode/controllers/admin/repos.py: |
|
|
534 | #: rhodecode/controllers/admin/repos.py:514 rhodecode/model/validators.py:302 | |
|
494 | 535 | msgid "Token mismatch" |
|
495 | 536 | msgstr "" |
|
496 | 537 | |
|
497 |
#: rhodecode/controllers/admin/repos.py: |
|
|
538 | #: rhodecode/controllers/admin/repos.py:527 | |
|
498 | 539 | msgid "Pulled from remote location" |
|
499 | 540 | msgstr "" |
|
500 | 541 | |
|
501 |
#: rhodecode/controllers/admin/repos.py: |
|
|
542 | #: rhodecode/controllers/admin/repos.py:529 | |
|
502 | 543 | msgid "An error occurred during pull from remote location" |
|
503 | 544 | msgstr "" |
|
504 | 545 | |
|
505 |
#: rhodecode/controllers/admin/repos.py: |
|
|
546 | #: rhodecode/controllers/admin/repos.py:545 | |
|
506 | 547 | msgid "Nothing" |
|
507 | 548 | msgstr "" |
|
508 | 549 | |
|
509 |
#: rhodecode/controllers/admin/repos.py: |
|
|
550 | #: rhodecode/controllers/admin/repos.py:547 | |
|
510 | 551 | #, python-format |
|
511 | 552 | msgid "Marked repo %s as fork of %s" |
|
512 | 553 | msgstr "" |
|
513 | 554 | |
|
514 |
#: rhodecode/controllers/admin/repos.py: |
|
|
555 | #: rhodecode/controllers/admin/repos.py:551 | |
|
515 | 556 | msgid "An error occurred during this operation" |
|
516 | 557 | msgstr "" |
|
517 | 558 | |
|
518 |
#: rhodecode/controllers/admin/repos |
|
|
559 | #: rhodecode/controllers/admin/repos.py:590 | |
|
560 | msgid "An error occurred during creation of field" | |
|
561 | msgstr "" | |
|
562 | ||
|
563 | #: rhodecode/controllers/admin/repos.py:604 | |
|
564 | msgid "An error occurred during removal of field" | |
|
565 | msgstr "" | |
|
566 | ||
|
567 | #: rhodecode/controllers/admin/repos_groups.py:145 | |
|
519 | 568 | #, python-format |
|
520 |
msgid " |
|
|
521 | msgstr "" | |
|
522 | ||
|
523 |
#: rhodecode/controllers/admin/repos_groups.py:1 |
|
|
569 | msgid "Created repository group %s" | |
|
570 | msgstr "" | |
|
571 | ||
|
572 | #: rhodecode/controllers/admin/repos_groups.py:157 | |
|
524 | 573 | #, python-format |
|
525 |
msgid " |
|
|
526 | msgstr "" | |
|
527 | ||
|
528 |
#: rhodecode/controllers/admin/repos_groups.py: |
|
|
574 | msgid "Error occurred during creation of repository group %s" | |
|
575 | msgstr "" | |
|
576 | ||
|
577 | #: rhodecode/controllers/admin/repos_groups.py:214 | |
|
578 | #: rhodecode/controllers/admin/repos_groups.py:286 | |
|
579 | msgid "Cannot revoke permission for yourself as admin" | |
|
580 | msgstr "" | |
|
581 | ||
|
582 | #: rhodecode/controllers/admin/repos_groups.py:220 | |
|
529 | 583 | #, python-format |
|
530 |
msgid " |
|
|
531 | msgstr "" | |
|
532 | ||
|
533 |
#: rhodecode/controllers/admin/repos_groups.py: |
|
|
584 | msgid "Updated repository group %s" | |
|
585 | msgstr "" | |
|
586 | ||
|
587 | #: rhodecode/controllers/admin/repos_groups.py:235 | |
|
534 | 588 | #, python-format |
|
535 |
msgid " |
|
|
536 | msgstr "" | |
|
537 | ||
|
538 |
#: rhodecode/controllers/admin/repos_groups.py: |
|
|
589 | msgid "Error occurred during update of repository group %s" | |
|
590 | msgstr "" | |
|
591 | ||
|
592 | #: rhodecode/controllers/admin/repos_groups.py:253 | |
|
539 | 593 | #, python-format |
|
540 | 594 | msgid "This group contains %s repositores and cannot be deleted" |
|
541 | 595 | msgstr "" |
|
542 | 596 | |
|
543 |
#: rhodecode/controllers/admin/repos_groups.py:2 |
|
|
597 | #: rhodecode/controllers/admin/repos_groups.py:260 | |
|
598 | #, python-format | |
|
599 | msgid "This group contains %s subgroups and cannot be deleted" | |
|
600 | msgstr "" | |
|
601 | ||
|
602 | #: rhodecode/controllers/admin/repos_groups.py:266 | |
|
544 | 603 | #, python-format |
|
545 |
msgid " |
|
|
546 | msgstr "" | |
|
547 | ||
|
548 |
#: rhodecode/controllers/admin/repos_groups.py:21 |
|
|
549 | msgid "Cannot delete this group it still contains subgroups" | |
|
550 | msgstr "" | |
|
551 | ||
|
552 | #: rhodecode/controllers/admin/repos_groups.py:217 | |
|
553 | #: rhodecode/controllers/admin/repos_groups.py:222 | |
|
604 | msgid "Removed repository group %s" | |
|
605 | msgstr "" | |
|
606 | ||
|
607 | #: rhodecode/controllers/admin/repos_groups.py:271 | |
|
554 | 608 | #, python-format |
|
555 |
msgid " |
|
|
556 | msgstr "" | |
|
557 | ||
|
558 |
#: rhodecode/controllers/admin/repos_groups.py:2 |
|
|
609 | msgid "Error occurred during deletion of repos group %s" | |
|
610 | msgstr "" | |
|
611 | ||
|
612 | #: rhodecode/controllers/admin/repos_groups.py:297 | |
|
559 | 613 | msgid "An error occurred during deletion of group user" |
|
560 | 614 | msgstr "" |
|
561 | 615 | |
|
562 |
#: rhodecode/controllers/admin/repos_groups.py: |
|
|
563 |
msgid "An error occurred during deletion of group user |
|
|
564 | msgstr "" | |
|
565 | ||
|
566 |
#: rhodecode/controllers/admin/settings.py:12 |
|
|
616 | #: rhodecode/controllers/admin/repos_groups.py:318 | |
|
617 | msgid "An error occurred during deletion of group user groups" | |
|
618 | msgstr "" | |
|
619 | ||
|
620 | #: rhodecode/controllers/admin/settings.py:126 | |
|
567 | 621 | #, python-format |
|
568 |
msgid "Repositories successfully rescanned added: %s |
|
|
569 | msgstr "" | |
|
570 | ||
|
571 |
#: rhodecode/controllers/admin/settings.py:13 |
|
|
622 | msgid "Repositories successfully rescanned added: %s ; removed: %s" | |
|
623 | msgstr "" | |
|
624 | ||
|
625 | #: rhodecode/controllers/admin/settings.py:135 | |
|
572 | 626 | msgid "Whoosh reindex task scheduled" |
|
573 | 627 | msgstr "" |
|
574 | 628 | |
|
575 | #: rhodecode/controllers/admin/settings.py:162 | |
|
576 | msgid "Updated application settings" | |
|
577 | msgstr "" | |
|
578 | ||
|
579 | 629 | #: rhodecode/controllers/admin/settings.py:166 |
|
580 | #: rhodecode/controllers/admin/settings.py:299 | |
|
581 | msgid "error occurred during updating application settings" | |
|
582 | msgstr "" | |
|
583 | ||
|
584 |
#: rhodecode/controllers/admin/settings.py: |
|
|
630 | msgid "Updated application settings" | |
|
631 | msgstr "" | |
|
632 | ||
|
633 | #: rhodecode/controllers/admin/settings.py:170 | |
|
634 | #: rhodecode/controllers/admin/settings.py:301 | |
|
635 | msgid "Error occurred during updating application settings" | |
|
636 | msgstr "" | |
|
637 | ||
|
638 | #: rhodecode/controllers/admin/settings.py:216 | |
|
585 | 639 | msgid "Updated visualisation settings" |
|
586 | 640 | msgstr "" |
|
587 | 641 | |
|
588 |
#: rhodecode/controllers/admin/settings.py:2 |
|
|
589 |
msgid " |
|
|
590 | msgstr "" | |
|
591 | ||
|
592 |
#: rhodecode/controllers/admin/settings.py:29 |
|
|
642 | #: rhodecode/controllers/admin/settings.py:221 | |
|
643 | msgid "Error occurred during updating visualisation settings" | |
|
644 | msgstr "" | |
|
645 | ||
|
646 | #: rhodecode/controllers/admin/settings.py:297 | |
|
593 | 647 | msgid "Updated VCS settings" |
|
594 | 648 | msgstr "" |
|
595 | 649 | |
|
596 |
#: rhodecode/controllers/admin/settings.py:3 |
|
|
650 | #: rhodecode/controllers/admin/settings.py:311 | |
|
597 | 651 | msgid "Added new hook" |
|
598 | 652 | msgstr "" |
|
599 | 653 | |
|
600 |
#: rhodecode/controllers/admin/settings.py:32 |
|
|
654 | #: rhodecode/controllers/admin/settings.py:323 | |
|
601 | 655 | msgid "Updated hooks" |
|
602 | 656 | msgstr "" |
|
603 | 657 | |
|
604 |
#: rhodecode/controllers/admin/settings.py:32 |
|
|
605 |
msgid " |
|
|
606 | msgstr "" | |
|
607 | ||
|
608 |
#: rhodecode/controllers/admin/settings.py:34 |
|
|
658 | #: rhodecode/controllers/admin/settings.py:327 | |
|
659 | msgid "Error occurred during hook creation" | |
|
660 | msgstr "" | |
|
661 | ||
|
662 | #: rhodecode/controllers/admin/settings.py:346 | |
|
609 | 663 | msgid "Email task created" |
|
610 | 664 | msgstr "" |
|
611 | 665 | |
|
612 |
#: rhodecode/controllers/admin/settings.py: |
|
|
666 | #: rhodecode/controllers/admin/settings.py:410 | |
|
613 | 667 | msgid "You can't edit this user since it's crucial for entire application" |
|
614 | 668 | msgstr "" |
|
615 | 669 | |
|
616 |
#: rhodecode/controllers/admin/settings.py:4 |
|
|
670 | #: rhodecode/controllers/admin/settings.py:452 | |
|
617 | 671 | msgid "Your account was updated successfully" |
|
618 | 672 | msgstr "" |
|
619 | 673 | |
|
620 |
#: rhodecode/controllers/admin/settings.py:4 |
|
|
621 |
#: rhodecode/controllers/admin/users.py:19 |
|
|
674 | #: rhodecode/controllers/admin/settings.py:467 | |
|
675 | #: rhodecode/controllers/admin/users.py:198 | |
|
622 | 676 | #, python-format |
|
623 |
msgid " |
|
|
677 | msgid "Error occurred during update of user %s" | |
|
624 | 678 | msgstr "" |
|
625 | 679 | |
|
626 | 680 | #: rhodecode/controllers/admin/users.py:130 |
|
627 | 681 | #, python-format |
|
628 |
msgid " |
|
|
682 | msgid "Created user %s" | |
|
629 | 683 | msgstr "" |
|
630 | 684 | |
|
631 | 685 | #: rhodecode/controllers/admin/users.py:142 |
|
632 | 686 | #, python-format |
|
633 |
msgid " |
|
|
687 | msgid "Error occurred during creation of user %s" | |
|
634 | 688 | msgstr "" |
|
635 | 689 | |
|
636 | 690 | #: rhodecode/controllers/admin/users.py:176 |
|
637 | 691 | msgid "User updated successfully" |
|
638 | 692 | msgstr "" |
|
639 | 693 | |
|
640 |
#: rhodecode/controllers/admin/users.py:21 |
|
|
641 |
msgid " |
|
|
642 | msgstr "" | |
|
643 | ||
|
644 |
#: rhodecode/controllers/admin/users.py:21 |
|
|
694 | #: rhodecode/controllers/admin/users.py:214 | |
|
695 | msgid "Successfully deleted user" | |
|
696 | msgstr "" | |
|
697 | ||
|
698 | #: rhodecode/controllers/admin/users.py:219 | |
|
645 | 699 | msgid "An error occurred during deletion of user" |
|
646 | 700 | msgstr "" |
|
647 | 701 | |
|
648 |
#: rhodecode/controllers/admin/users.py:23 |
|
|
702 | #: rhodecode/controllers/admin/users.py:233 | |
|
649 | 703 | msgid "You can't edit this user" |
|
650 | 704 | msgstr "" |
|
651 | 705 | |
|
652 |
#: rhodecode/controllers/admin/users.py:27 |
|
|
706 | #: rhodecode/controllers/admin/users.py:276 | |
|
653 | 707 | msgid "Granted 'repository create' permission to user" |
|
654 | 708 | msgstr "" |
|
655 | 709 | |
|
656 |
#: rhodecode/controllers/admin/users.py:2 |
|
|
710 | #: rhodecode/controllers/admin/users.py:281 | |
|
657 | 711 | msgid "Revoked 'repository create' permission to user" |
|
658 | 712 | msgstr "" |
|
659 | 713 | |
|
660 |
#: rhodecode/controllers/admin/users.py:28 |
|
|
714 | #: rhodecode/controllers/admin/users.py:287 | |
|
661 | 715 | msgid "Granted 'repository fork' permission to user" |
|
662 | 716 | msgstr "" |
|
663 | 717 | |
|
664 |
#: rhodecode/controllers/admin/users.py:2 |
|
|
718 | #: rhodecode/controllers/admin/users.py:292 | |
|
665 | 719 | msgid "Revoked 'repository fork' permission to user" |
|
666 | 720 | msgstr "" |
|
667 | 721 | |
|
668 |
#: rhodecode/controllers/admin/users.py:29 |
|
|
669 |
#: rhodecode/controllers/admin/users_groups.py:2 |
|
|
722 | #: rhodecode/controllers/admin/users.py:298 | |
|
723 | #: rhodecode/controllers/admin/users_groups.py:281 | |
|
670 | 724 | msgid "An error occurred during permissions saving" |
|
671 | 725 | msgstr "" |
|
672 | 726 | |
|
673 |
#: rhodecode/controllers/admin/users.py:3 |
|
|
727 | #: rhodecode/controllers/admin/users.py:312 | |
|
674 | 728 | #, python-format |
|
675 | 729 | msgid "Added email %s to user" |
|
676 | 730 | msgstr "" |
|
677 | 731 | |
|
678 |
#: rhodecode/controllers/admin/users.py:31 |
|
|
732 | #: rhodecode/controllers/admin/users.py:318 | |
|
679 | 733 | msgid "An error occurred during email saving" |
|
680 | 734 | msgstr "" |
|
681 | 735 | |
|
682 |
#: rhodecode/controllers/admin/users.py:32 |
|
|
736 | #: rhodecode/controllers/admin/users.py:328 | |
|
683 | 737 | msgid "Removed email from user" |
|
684 | 738 | msgstr "" |
|
685 | 739 | |
|
740 | #: rhodecode/controllers/admin/users.py:341 | |
|
741 | #, python-format | |
|
742 | msgid "Added ip %s to user" | |
|
743 | msgstr "" | |
|
744 | ||
|
745 | #: rhodecode/controllers/admin/users.py:347 | |
|
746 | msgid "An error occurred during ip saving" | |
|
747 | msgstr "" | |
|
748 | ||
|
749 | #: rhodecode/controllers/admin/users.py:359 | |
|
750 | msgid "Removed ip from user" | |
|
751 | msgstr "" | |
|
752 | ||
|
686 | 753 | #: rhodecode/controllers/admin/users_groups.py:86 |
|
687 | 754 | #, python-format |
|
688 |
msgid " |
|
|
755 | msgid "Created user group %s" | |
|
689 | 756 | msgstr "" |
|
690 | 757 | |
|
691 | 758 | #: rhodecode/controllers/admin/users_groups.py:97 |
|
692 | 759 | #, python-format |
|
693 |
msgid " |
|
|
694 | msgstr "" | |
|
695 | ||
|
696 |
#: rhodecode/controllers/admin/users_groups.py:16 |
|
|
760 | msgid "Error occurred during creation of user group %s" | |
|
761 | msgstr "" | |
|
762 | ||
|
763 | #: rhodecode/controllers/admin/users_groups.py:166 | |
|
697 | 764 | #, python-format |
|
698 |
msgid " |
|
|
699 | msgstr "" | |
|
700 | ||
|
701 |
#: rhodecode/controllers/admin/users_groups.py:18 |
|
|
765 | msgid "Updated user group %s" | |
|
766 | msgstr "" | |
|
767 | ||
|
768 | #: rhodecode/controllers/admin/users_groups.py:188 | |
|
702 | 769 | #, python-format |
|
703 |
msgid " |
|
|
704 | msgstr "" | |
|
705 | ||
|
706 |
#: rhodecode/controllers/admin/users_groups.py:20 |
|
|
707 |
msgid " |
|
|
708 | msgstr "" | |
|
709 | ||
|
710 |
#: rhodecode/controllers/admin/users_groups.py:20 |
|
|
711 |
msgid "An error occurred during deletion of user |
|
|
712 | msgstr "" | |
|
713 | ||
|
714 |
#: rhodecode/controllers/admin/users_groups.py:25 |
|
|
715 |
msgid "Granted 'repository create' permission to user |
|
|
716 | msgstr "" | |
|
717 | ||
|
718 |
#: rhodecode/controllers/admin/users_groups.py:26 |
|
|
719 |
msgid "Revoked 'repository create' permission to user |
|
|
720 | msgstr "" | |
|
721 | ||
|
722 |
#: rhodecode/controllers/admin/users_groups.py:2 |
|
|
723 |
msgid "Granted 'repository fork' permission to user |
|
|
724 | msgstr "" | |
|
725 | ||
|
726 |
#: rhodecode/controllers/admin/users_groups.py:27 |
|
|
727 |
msgid "Revoked 'repository fork' permission to user |
|
|
728 | msgstr "" | |
|
729 | ||
|
730 |
#: rhodecode/lib/auth.py: |
|
|
770 | msgid "Error occurred during update of user group %s" | |
|
771 | msgstr "" | |
|
772 | ||
|
773 | #: rhodecode/controllers/admin/users_groups.py:205 | |
|
774 | msgid "Successfully deleted user group" | |
|
775 | msgstr "" | |
|
776 | ||
|
777 | #: rhodecode/controllers/admin/users_groups.py:210 | |
|
778 | msgid "An error occurred during deletion of user group" | |
|
779 | msgstr "" | |
|
780 | ||
|
781 | #: rhodecode/controllers/admin/users_groups.py:259 | |
|
782 | msgid "Granted 'repository create' permission to user group" | |
|
783 | msgstr "" | |
|
784 | ||
|
785 | #: rhodecode/controllers/admin/users_groups.py:264 | |
|
786 | msgid "Revoked 'repository create' permission to user group" | |
|
787 | msgstr "" | |
|
788 | ||
|
789 | #: rhodecode/controllers/admin/users_groups.py:270 | |
|
790 | msgid "Granted 'repository fork' permission to user group" | |
|
791 | msgstr "" | |
|
792 | ||
|
793 | #: rhodecode/controllers/admin/users_groups.py:275 | |
|
794 | msgid "Revoked 'repository fork' permission to user group" | |
|
795 | msgstr "" | |
|
796 | ||
|
797 | #: rhodecode/lib/auth.py:530 | |
|
798 | #, python-format | |
|
799 | msgid "IP %s not allowed" | |
|
800 | msgstr "" | |
|
801 | ||
|
802 | #: rhodecode/lib/auth.py:579 | |
|
731 | 803 | msgid "You need to be a registered user to perform this action" |
|
732 | 804 | msgstr "" |
|
733 | 805 | |
|
734 |
#: rhodecode/lib/auth.py: |
|
|
806 | #: rhodecode/lib/auth.py:620 | |
|
735 | 807 | msgid "You need to be a signed in to view this page" |
|
736 | 808 | msgstr "" |
|
737 | 809 | |
|
738 |
#: rhodecode/lib/diffs.py: |
|
|
739 |
msgid " |
|
|
740 | msgstr "" | |
|
741 | ||
|
742 |
#: rhodecode/lib/diffs.py: |
|
|
810 | #: rhodecode/lib/diffs.py:66 | |
|
811 | msgid "Binary file" | |
|
812 | msgstr "" | |
|
813 | ||
|
814 | #: rhodecode/lib/diffs.py:82 | |
|
743 | 815 | msgid "Changeset was too big and was cut off, use diff menu to display this diff" |
|
744 | 816 | msgstr "" |
|
745 | 817 | |
|
746 |
#: rhodecode/lib/diffs.py: |
|
|
818 | #: rhodecode/lib/diffs.py:92 | |
|
747 | 819 | msgid "No changes detected" |
|
748 | 820 | msgstr "" |
|
749 | 821 | |
|
750 |
#: rhodecode/lib/helpers.py:3 |
|
|
822 | #: rhodecode/lib/helpers.py:394 | |
|
751 | 823 | #, python-format |
|
752 | 824 | msgid "%a, %d %b %Y %H:%M:%S" |
|
753 | 825 | msgstr "" |
|
754 | 826 | |
|
755 |
#: rhodecode/lib/helpers.py: |
|
|
827 | #: rhodecode/lib/helpers.py:506 | |
|
756 | 828 | msgid "True" |
|
757 | 829 | msgstr "" |
|
758 | 830 | |
|
759 |
#: rhodecode/lib/helpers.py: |
|
|
831 | #: rhodecode/lib/helpers.py:509 | |
|
760 | 832 | msgid "False" |
|
761 | 833 | msgstr "" |
|
762 | 834 | |
|
763 |
#: rhodecode/lib/helpers.py:5 |
|
|
835 | #: rhodecode/lib/helpers.py:547 | |
|
764 | 836 | #, python-format |
|
765 | 837 | msgid "Deleted branch: %s" |
|
766 | 838 | msgstr "" |
|
767 | 839 | |
|
768 |
#: rhodecode/lib/helpers.py:5 |
|
|
840 | #: rhodecode/lib/helpers.py:550 | |
|
769 | 841 | #, python-format |
|
770 | 842 | msgid "Created tag: %s" |
|
771 | 843 | msgstr "" |
|
772 | 844 | |
|
773 |
#: rhodecode/lib/helpers.py:5 |
|
|
845 | #: rhodecode/lib/helpers.py:563 | |
|
774 | 846 | msgid "Changeset not found" |
|
775 | 847 | msgstr "" |
|
776 | 848 | |
|
777 | #: rhodecode/lib/helpers.py:589 | |
|
778 | #, python-format | |
|
779 | msgid "Show all combined changesets %s->%s" | |
|
780 | msgstr "" | |
|
781 | ||
|
782 | #: rhodecode/lib/helpers.py:595 | |
|
783 | msgid "compare view" | |
|
784 | msgstr "" | |
|
785 | ||
|
786 | 849 | #: rhodecode/lib/helpers.py:615 |
|
787 | msgid "and" | |
|
788 | msgstr "" | |
|
789 | ||
|
790 | #: rhodecode/lib/helpers.py:616 | |
|
791 | 850 | #, python-format |
|
792 | msgid "%s more" | |
|
793 | msgstr "" | |
|
794 | ||
|
795 | #: rhodecode/lib/helpers.py:617 rhodecode/templates/changelog/changelog.html:51 | |
|
796 |
msgid " |
|
|
851 | msgid "Show all combined changesets %s->%s" | |
|
852 | msgstr "" | |
|
853 | ||
|
854 | #: rhodecode/lib/helpers.py:621 | |
|
855 | msgid "compare view" | |
|
797 | 856 | msgstr "" |
|
798 | 857 | |
|
799 | 858 | #: rhodecode/lib/helpers.py:641 |
|
859 | msgid "and" | |
|
860 | msgstr "" | |
|
861 | ||
|
862 | #: rhodecode/lib/helpers.py:642 | |
|
863 | #, python-format | |
|
864 | msgid "%s more" | |
|
865 | msgstr "" | |
|
866 | ||
|
867 | #: rhodecode/lib/helpers.py:643 rhodecode/templates/changelog/changelog.html:44 | |
|
868 | msgid "revisions" | |
|
869 | msgstr "" | |
|
870 | ||
|
871 | #: rhodecode/lib/helpers.py:667 | |
|
800 | 872 | #, python-format |
|
801 | 873 | msgid "fork name %s" |
|
802 | 874 | msgstr "" |
|
803 | 875 | |
|
804 | #: rhodecode/lib/helpers.py:658 | |
|
805 | #: rhodecode/templates/pullrequests/pullrequest_show.html:4 | |
|
806 | #: rhodecode/templates/pullrequests/pullrequest_show.html:12 | |
|
807 | #, python-format | |
|
808 | msgid "Pull request #%s" | |
|
809 | msgstr "" | |
|
810 | ||
|
811 | #: rhodecode/lib/helpers.py:664 | |
|
812 | msgid "[deleted] repository" | |
|
813 | msgstr "" | |
|
814 | ||
|
815 | #: rhodecode/lib/helpers.py:666 rhodecode/lib/helpers.py:676 | |
|
816 | msgid "[created] repository" | |
|
817 | msgstr "" | |
|
818 | ||
|
819 | #: rhodecode/lib/helpers.py:668 | |
|
820 | msgid "[created] repository as fork" | |
|
821 | msgstr "" | |
|
822 | ||
|
823 | #: rhodecode/lib/helpers.py:670 rhodecode/lib/helpers.py:678 | |
|
824 | msgid "[forked] repository" | |
|
825 | msgstr "" | |
|
826 | ||
|
827 | #: rhodecode/lib/helpers.py:672 rhodecode/lib/helpers.py:680 | |
|
828 | msgid "[updated] repository" | |
|
829 | msgstr "" | |
|
830 | ||
|
831 | #: rhodecode/lib/helpers.py:674 | |
|
832 | msgid "[delete] repository" | |
|
833 | msgstr "" | |
|
834 | ||
|
835 | #: rhodecode/lib/helpers.py:682 | |
|
836 | msgid "[created] user" | |
|
837 | msgstr "" | |
|
838 | ||
|
839 | 876 | #: rhodecode/lib/helpers.py:684 |
|
840 | msgid "[updated] user" | |
|
841 | msgstr "" | |
|
842 | ||
|
843 | #: rhodecode/lib/helpers.py:686 | |
|
844 | msgid "[created] users group" | |
|
845 | msgstr "" | |
|
846 | ||
|
847 | #: rhodecode/lib/helpers.py:688 | |
|
848 | msgid "[updated] users group" | |
|
877 | #: rhodecode/templates/pullrequests/pullrequest_show.html:8 | |
|
878 | #, python-format | |
|
879 | msgid "Pull request #%s" | |
|
849 | 880 | msgstr "" |
|
850 | 881 | |
|
851 | 882 | #: rhodecode/lib/helpers.py:690 |
|
852 |
msgid "[ |
|
|
853 | msgstr "" | |
|
854 | ||
|
855 | #: rhodecode/lib/helpers.py:692 | |
|
856 |
msgid "[c |
|
|
883 | msgid "[deleted] repository" | |
|
884 | msgstr "" | |
|
885 | ||
|
886 | #: rhodecode/lib/helpers.py:692 rhodecode/lib/helpers.py:702 | |
|
887 | msgid "[created] repository" | |
|
857 | 888 | msgstr "" |
|
858 | 889 | |
|
859 | 890 | #: rhodecode/lib/helpers.py:694 |
|
860 |
msgid "[c |
|
|
861 | msgstr "" | |
|
862 | ||
|
863 | #: rhodecode/lib/helpers.py:696 | |
|
864 |
msgid "[ |
|
|
865 | msgstr "" | |
|
866 | ||
|
867 | #: rhodecode/lib/helpers.py:698 | |
|
868 |
msgid "[ |
|
|
891 | msgid "[created] repository as fork" | |
|
892 | msgstr "" | |
|
893 | ||
|
894 | #: rhodecode/lib/helpers.py:696 rhodecode/lib/helpers.py:704 | |
|
895 | msgid "[forked] repository" | |
|
896 | msgstr "" | |
|
897 | ||
|
898 | #: rhodecode/lib/helpers.py:698 rhodecode/lib/helpers.py:706 | |
|
899 | msgid "[updated] repository" | |
|
869 | 900 | msgstr "" |
|
870 | 901 | |
|
871 | 902 | #: rhodecode/lib/helpers.py:700 |
|
903 | msgid "[delete] repository" | |
|
904 | msgstr "" | |
|
905 | ||
|
906 | #: rhodecode/lib/helpers.py:708 | |
|
907 | msgid "[created] user" | |
|
908 | msgstr "" | |
|
909 | ||
|
910 | #: rhodecode/lib/helpers.py:710 | |
|
911 | msgid "[updated] user" | |
|
912 | msgstr "" | |
|
913 | ||
|
914 | #: rhodecode/lib/helpers.py:712 | |
|
915 | msgid "[created] user group" | |
|
916 | msgstr "" | |
|
917 | ||
|
918 | #: rhodecode/lib/helpers.py:714 | |
|
919 | msgid "[updated] user group" | |
|
920 | msgstr "" | |
|
921 | ||
|
922 | #: rhodecode/lib/helpers.py:716 | |
|
923 | msgid "[commented] on revision in repository" | |
|
924 | msgstr "" | |
|
925 | ||
|
926 | #: rhodecode/lib/helpers.py:718 | |
|
927 | msgid "[commented] on pull request for" | |
|
928 | msgstr "" | |
|
929 | ||
|
930 | #: rhodecode/lib/helpers.py:720 | |
|
931 | msgid "[closed] pull request for" | |
|
932 | msgstr "" | |
|
933 | ||
|
934 | #: rhodecode/lib/helpers.py:722 | |
|
935 | msgid "[pushed] into" | |
|
936 | msgstr "" | |
|
937 | ||
|
938 | #: rhodecode/lib/helpers.py:724 | |
|
939 | msgid "[committed via RhodeCode] into repository" | |
|
940 | msgstr "" | |
|
941 | ||
|
942 | #: rhodecode/lib/helpers.py:726 | |
|
872 | 943 | msgid "[pulled from remote] into repository" |
|
873 | 944 | msgstr "" |
|
874 | 945 | |
|
875 |
#: rhodecode/lib/helpers.py:7 |
|
|
946 | #: rhodecode/lib/helpers.py:728 | |
|
876 | 947 | msgid "[pulled] from" |
|
877 | 948 | msgstr "" |
|
878 | 949 | |
|
879 |
#: rhodecode/lib/helpers.py:70 |
|
|
950 | #: rhodecode/lib/helpers.py:730 | |
|
880 | 951 | msgid "[started following] repository" |
|
881 | 952 | msgstr "" |
|
882 | 953 | |
|
883 |
#: rhodecode/lib/helpers.py:7 |
|
|
954 | #: rhodecode/lib/helpers.py:732 | |
|
884 | 955 | msgid "[stopped following] repository" |
|
885 | 956 | msgstr "" |
|
886 | 957 | |
|
887 |
#: rhodecode/lib/helpers.py: |
|
|
958 | #: rhodecode/lib/helpers.py:910 | |
|
888 | 959 | #, python-format |
|
889 | 960 | msgid " and %s more" |
|
890 | 961 | msgstr "" |
|
891 | 962 | |
|
892 |
#: rhodecode/lib/helpers.py: |
|
|
963 | #: rhodecode/lib/helpers.py:914 | |
|
893 | 964 | msgid "No Files" |
|
894 | 965 | msgstr "" |
|
895 | 966 | |
|
896 |
#: rhodecode/lib/helpers.py:11 |
|
|
967 | #: rhodecode/lib/helpers.py:1198 | |
|
897 | 968 | #, python-format |
|
898 | 969 | msgid "" |
|
899 | 970 | "%s repository is not mapped to db perhaps it was created or renamed from " |
@@ -901,165 +972,225 b' msgid ""' | |||
|
901 | 972 | "repositories" |
|
902 | 973 | msgstr "" |
|
903 | 974 | |
|
904 |
#: rhodecode/lib/u |
|
|
975 | #: rhodecode/lib/unionrepo.py:193 | |
|
976 | msgid "cannot create new union repository" | |
|
977 | msgstr "" | |
|
978 | ||
|
979 | #: rhodecode/lib/utils2.py:411 | |
|
905 | 980 | #, python-format |
|
906 | 981 | msgid "%d year" |
|
907 | 982 | msgid_plural "%d years" |
|
908 | 983 | msgstr[0] "" |
|
909 | 984 | msgstr[1] "" |
|
910 | 985 | |
|
911 |
#: rhodecode/lib/utils2.py:4 |
|
|
986 | #: rhodecode/lib/utils2.py:412 | |
|
912 | 987 | #, python-format |
|
913 | 988 | msgid "%d month" |
|
914 | 989 | msgid_plural "%d months" |
|
915 | 990 | msgstr[0] "" |
|
916 | 991 | msgstr[1] "" |
|
917 | 992 | |
|
918 |
#: rhodecode/lib/utils2.py:4 |
|
|
993 | #: rhodecode/lib/utils2.py:413 | |
|
919 | 994 | #, python-format |
|
920 | 995 | msgid "%d day" |
|
921 | 996 | msgid_plural "%d days" |
|
922 | 997 | msgstr[0] "" |
|
923 | 998 | msgstr[1] "" |
|
924 | 999 | |
|
925 |
#: rhodecode/lib/utils2.py:4 |
|
|
1000 | #: rhodecode/lib/utils2.py:414 | |
|
926 | 1001 | #, python-format |
|
927 | 1002 | msgid "%d hour" |
|
928 | 1003 | msgid_plural "%d hours" |
|
929 | 1004 | msgstr[0] "" |
|
930 | 1005 | msgstr[1] "" |
|
931 | 1006 | |
|
932 |
#: rhodecode/lib/utils2.py:4 |
|
|
1007 | #: rhodecode/lib/utils2.py:415 | |
|
933 | 1008 | #, python-format |
|
934 | 1009 | msgid "%d minute" |
|
935 | 1010 | msgid_plural "%d minutes" |
|
936 | 1011 | msgstr[0] "" |
|
937 | 1012 | msgstr[1] "" |
|
938 | 1013 | |
|
939 |
#: rhodecode/lib/utils2.py:4 |
|
|
1014 | #: rhodecode/lib/utils2.py:416 | |
|
940 | 1015 | #, python-format |
|
941 | 1016 | msgid "%d second" |
|
942 | 1017 | msgid_plural "%d seconds" |
|
943 | 1018 | msgstr[0] "" |
|
944 | 1019 | msgstr[1] "" |
|
945 | 1020 | |
|
946 |
#: rhodecode/lib/utils2.py:42 |
|
|
1021 | #: rhodecode/lib/utils2.py:432 | |
|
947 | 1022 | #, python-format |
|
948 | 1023 | msgid "in %s" |
|
949 | 1024 | msgstr "" |
|
950 | 1025 | |
|
951 | #: rhodecode/lib/utils2.py:426 | |
|
952 | #, python-format | |
|
953 | msgid "%s ago" | |
|
954 | msgstr "" | |
|
955 | ||
|
956 | #: rhodecode/lib/utils2.py:428 | |
|
957 | #, python-format | |
|
958 | msgid "in %s and %s" | |
|
959 | msgstr "" | |
|
960 | ||
|
961 | #: rhodecode/lib/utils2.py:431 | |
|
962 | #, python-format | |
|
963 | msgid "%s and %s ago" | |
|
964 | msgstr "" | |
|
965 | ||
|
966 | 1026 | #: rhodecode/lib/utils2.py:434 |
|
1027 | #, python-format | |
|
1028 | msgid "%s ago" | |
|
1029 | msgstr "" | |
|
1030 | ||
|
1031 | #: rhodecode/lib/utils2.py:436 | |
|
1032 | #, python-format | |
|
1033 | msgid "in %s and %s" | |
|
1034 | msgstr "" | |
|
1035 | ||
|
1036 | #: rhodecode/lib/utils2.py:439 | |
|
1037 | #, python-format | |
|
1038 | msgid "%s and %s ago" | |
|
1039 | msgstr "" | |
|
1040 | ||
|
1041 | #: rhodecode/lib/utils2.py:442 | |
|
967 | 1042 | msgid "just now" |
|
968 | 1043 | msgstr "" |
|
969 | 1044 | |
|
970 | #: rhodecode/lib/celerylib/tasks.py:270 | |
|
971 | msgid "password reset link" | |
|
972 | msgstr "" | |
|
973 | ||
|
974 | #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1163 rhodecode/model/db.py:1183 | |
|
1045 | #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1163 | |
|
1046 | #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1183 | |
|
1047 | #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1289 rhodecode/model/db.py:1388 | |
|
975 | 1048 | msgid "Repository no access" |
|
976 | 1049 | msgstr "" |
|
977 | 1050 | |
|
978 |
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1164 |
|
|
1051 | #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1164 | |
|
1052 | #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1184 | |
|
1053 | #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1290 rhodecode/model/db.py:1389 | |
|
979 | 1054 | msgid "Repository read access" |
|
980 | 1055 | msgstr "" |
|
981 | 1056 | |
|
982 |
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1165 |
|
|
1057 | #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1165 | |
|
1058 | #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1185 | |
|
1059 | #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1291 rhodecode/model/db.py:1390 | |
|
983 | 1060 | msgid "Repository write access" |
|
984 | 1061 | msgstr "" |
|
985 | 1062 | |
|
986 |
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1166 |
|
|
1063 | #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1166 | |
|
1064 | #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1186 | |
|
1065 | #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1292 rhodecode/model/db.py:1391 | |
|
987 | 1066 | msgid "Repository admin access" |
|
988 | 1067 | msgstr "" |
|
989 | 1068 | |
|
990 |
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1168 |
|
|
1069 | #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1168 | |
|
1070 | #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1188 | |
|
1071 | #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1294 | |
|
991 | 1072 | msgid "Repositories Group no access" |
|
992 | 1073 | msgstr "" |
|
993 | 1074 | |
|
994 |
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1169 |
|
|
1075 | #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1169 | |
|
1076 | #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1189 | |
|
1077 | #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1295 | |
|
995 | 1078 | msgid "Repositories Group read access" |
|
996 | 1079 | msgstr "" |
|
997 | 1080 | |
|
998 |
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1170 |
|
|
1081 | #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1170 | |
|
1082 | #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1190 | |
|
1083 | #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1296 | |
|
999 | 1084 | msgid "Repositories Group write access" |
|
1000 | 1085 | msgstr "" |
|
1001 | 1086 | |
|
1002 |
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1171 |
|
|
1087 | #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1171 | |
|
1088 | #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1191 | |
|
1089 | #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1297 | |
|
1003 | 1090 | msgid "Repositories Group admin access" |
|
1004 | 1091 | msgstr "" |
|
1005 | 1092 | |
|
1006 |
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1173 |
|
|
1093 | #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1173 | |
|
1094 | #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1193 | |
|
1095 | #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1299 rhodecode/model/db.py:1398 | |
|
1007 | 1096 | msgid "RhodeCode Administrator" |
|
1008 | 1097 | msgstr "" |
|
1009 | 1098 | |
|
1010 |
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1174 |
|
|
1099 | #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1174 | |
|
1100 | #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1194 | |
|
1101 | #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1300 rhodecode/model/db.py:1399 | |
|
1011 | 1102 | msgid "Repository creation disabled" |
|
1012 | 1103 | msgstr "" |
|
1013 | 1104 | |
|
1014 |
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1175 |
|
|
1105 | #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1175 | |
|
1106 | #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1195 | |
|
1107 | #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1301 rhodecode/model/db.py:1400 | |
|
1015 | 1108 | msgid "Repository creation enabled" |
|
1016 | 1109 | msgstr "" |
|
1017 | 1110 | |
|
1018 |
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1176 |
|
|
1111 | #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1176 | |
|
1112 | #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1196 | |
|
1113 | #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1302 rhodecode/model/db.py:1401 | |
|
1019 | 1114 | msgid "Repository forking disabled" |
|
1020 | 1115 | msgstr "" |
|
1021 | 1116 | |
|
1022 |
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1177 |
|
|
1117 | #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1177 | |
|
1118 | #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1197 | |
|
1119 | #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1303 rhodecode/model/db.py:1402 | |
|
1023 | 1120 | msgid "Repository forking enabled" |
|
1024 | 1121 | msgstr "" |
|
1025 | 1122 | |
|
1026 |
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1178 |
|
|
1123 | #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1178 | |
|
1124 | #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1198 | |
|
1125 | #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1304 rhodecode/model/db.py:1403 | |
|
1027 | 1126 | msgid "Register disabled" |
|
1028 | 1127 | msgstr "" |
|
1029 | 1128 | |
|
1030 |
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1179 |
|
|
1129 | #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1179 | |
|
1130 | #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1199 | |
|
1131 | #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1305 rhodecode/model/db.py:1404 | |
|
1031 | 1132 | msgid "Register new user with RhodeCode with manual activation" |
|
1032 | 1133 | msgstr "" |
|
1033 | 1134 | |
|
1034 |
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1182 |
|
|
1135 | #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1182 | |
|
1136 | #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1202 | |
|
1137 | #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1308 rhodecode/model/db.py:1407 | |
|
1035 | 1138 | msgid "Register new user with RhodeCode with auto activation" |
|
1036 | 1139 | msgstr "" |
|
1037 | 1140 | |
|
1038 |
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1623 |
|
|
1141 | #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1623 | |
|
1142 | #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1643 | |
|
1143 | #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1749 rhodecode/model/db.py:1838 | |
|
1039 | 1144 | msgid "Not Reviewed" |
|
1040 | 1145 | msgstr "" |
|
1041 | 1146 | |
|
1042 |
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1624 |
|
|
1147 | #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1624 | |
|
1148 | #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1644 | |
|
1149 | #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1750 rhodecode/model/db.py:1839 | |
|
1043 | 1150 | msgid "Approved" |
|
1044 | 1151 | msgstr "" |
|
1045 | 1152 | |
|
1046 |
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1625 |
|
|
1153 | #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1625 | |
|
1154 | #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1645 | |
|
1155 | #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1751 rhodecode/model/db.py:1840 | |
|
1047 | 1156 | msgid "Rejected" |
|
1048 | 1157 | msgstr "" |
|
1049 | 1158 | |
|
1050 |
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1626 |
|
|
1159 | #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1626 | |
|
1160 | #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1646 | |
|
1161 | #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1752 rhodecode/model/db.py:1841 | |
|
1051 | 1162 | msgid "Under Review" |
|
1052 | 1163 | msgstr "" |
|
1053 | 1164 | |
|
1054 |
#: rhodecode/model/comment.py: |
|
|
1165 | #: rhodecode/model/comment.py:75 | |
|
1055 | 1166 | #, python-format |
|
1056 | 1167 | msgid "on line %s" |
|
1057 | 1168 | msgstr "" |
|
1058 | 1169 | |
|
1059 |
#: rhodecode/model/comment.py: |
|
|
1170 | #: rhodecode/model/comment.py:219 | |
|
1060 | 1171 | msgid "[Mention]" |
|
1061 | 1172 | msgstr "" |
|
1062 | 1173 | |
|
1174 | #: rhodecode/model/db.py:1252 | |
|
1175 | msgid "top level" | |
|
1176 | msgstr "" | |
|
1177 | ||
|
1178 | #: rhodecode/model/db.py:1393 | |
|
1179 | msgid "Repository group no access" | |
|
1180 | msgstr "" | |
|
1181 | ||
|
1182 | #: rhodecode/model/db.py:1394 | |
|
1183 | msgid "Repository group read access" | |
|
1184 | msgstr "" | |
|
1185 | ||
|
1186 | #: rhodecode/model/db.py:1395 | |
|
1187 | msgid "Repository group write access" | |
|
1188 | msgstr "" | |
|
1189 | ||
|
1190 | #: rhodecode/model/db.py:1396 | |
|
1191 | msgid "Repository group admin access" | |
|
1192 | msgstr "" | |
|
1193 | ||
|
1063 | 1194 | #: rhodecode/model/forms.py:43 |
|
1064 | 1195 | msgid "Please enter a login" |
|
1065 | 1196 | msgstr "" |
@@ -1078,204 +1209,237 b' msgstr ""' | |||
|
1078 | 1209 | msgid "Enter %(min)i characters or more" |
|
1079 | 1210 | msgstr "" |
|
1080 | 1211 | |
|
1081 | #: rhodecode/model/notification.py:220 | |
|
1082 | #, python-format | |
|
1083 | msgid "commented on commit at %(when)s" | |
|
1084 | msgstr "" | |
|
1085 | ||
|
1086 | #: rhodecode/model/notification.py:221 | |
|
1087 | #, python-format | |
|
1088 | msgid "sent message at %(when)s" | |
|
1089 | msgstr "" | |
|
1090 | ||
|
1091 | #: rhodecode/model/notification.py:222 | |
|
1092 | #, python-format | |
|
1093 | msgid "mentioned you at %(when)s" | |
|
1094 | msgstr "" | |
|
1095 | ||
|
1096 | #: rhodecode/model/notification.py:223 | |
|
1097 | #, python-format | |
|
1098 | msgid "registered in RhodeCode at %(when)s" | |
|
1099 | msgstr "" | |
|
1100 | ||
|
1101 | 1212 | #: rhodecode/model/notification.py:224 |
|
1102 | 1213 | #, python-format |
|
1103 |
msgid " |
|
|
1214 | msgid "%(user)s commented on changeset at %(when)s" | |
|
1104 | 1215 | msgstr "" |
|
1105 | 1216 | |
|
1106 | 1217 | #: rhodecode/model/notification.py:225 |
|
1107 | 1218 | #, python-format |
|
1108 |
msgid " |
|
|
1109 | msgstr "" | |
|
1110 | ||
|
1111 |
#: rhodecode/model/ |
|
|
1219 | msgid "%(user)s sent message at %(when)s" | |
|
1220 | msgstr "" | |
|
1221 | ||
|
1222 | #: rhodecode/model/notification.py:226 | |
|
1223 | #, python-format | |
|
1224 | msgid "%(user)s mentioned you at %(when)s" | |
|
1225 | msgstr "" | |
|
1226 | ||
|
1227 | #: rhodecode/model/notification.py:227 | |
|
1228 | #, python-format | |
|
1229 | msgid "%(user)s registered in RhodeCode at %(when)s" | |
|
1230 | msgstr "" | |
|
1231 | ||
|
1232 | #: rhodecode/model/notification.py:228 | |
|
1112 | 1233 | #, python-format |
|
1113 |
msgid "%(user)s |
|
|
1114 | msgstr "" | |
|
1115 | ||
|
1116 |
#: rhodecode/model/ |
|
|
1234 | msgid "%(user)s opened new pull request at %(when)s" | |
|
1235 | msgstr "" | |
|
1236 | ||
|
1237 | #: rhodecode/model/notification.py:229 | |
|
1238 | #, python-format | |
|
1239 | msgid "%(user)s commented on pull request at %(when)s" | |
|
1240 | msgstr "" | |
|
1241 | ||
|
1242 | #: rhodecode/model/pull_request.py:104 | |
|
1243 | #, python-format | |
|
1244 | msgid "%(user)s wants you to review pull request #%(pr_id)s: %(pr_title)s" | |
|
1245 | msgstr "" | |
|
1246 | ||
|
1247 | #: rhodecode/model/scm.py:598 | |
|
1117 | 1248 | msgid "latest tip" |
|
1118 | 1249 | msgstr "" |
|
1119 | 1250 | |
|
1120 | 1251 | #: rhodecode/model/user.py:232 |
|
1121 |
msgid " |
|
|
1252 | msgid "New user registration" | |
|
1122 | 1253 | msgstr "" |
|
1123 | 1254 | |
|
1124 | 1255 | #: rhodecode/model/user.py:257 rhodecode/model/user.py:281 |
|
1256 | msgid "You can't Edit this user since it's crucial for entire application" | |
|
1257 | msgstr "" | |
|
1258 | ||
|
1125 | 1259 | #: rhodecode/model/user.py:303 |
|
1126 | msgid "You can't Edit this user since it's crucial for entire application" | |
|
1127 | msgstr "" | |
|
1128 | ||
|
1129 | #: rhodecode/model/user.py:327 | |
|
1130 | 1260 | msgid "You can't remove this user since it's crucial for entire application" |
|
1131 | 1261 | msgstr "" |
|
1132 | 1262 | |
|
1133 |
#: rhodecode/model/user.py:3 |
|
|
1263 | #: rhodecode/model/user.py:309 | |
|
1134 | 1264 | #, python-format |
|
1135 | 1265 | msgid "" |
|
1136 | 1266 | "user \"%s\" still owns %s repositories and cannot be removed. Switch " |
|
1137 | 1267 | "owners or remove those repositories. %s" |
|
1138 | 1268 | msgstr "" |
|
1139 | 1269 | |
|
1140 | #: rhodecode/model/validators.py:36 rhodecode/model/validators.py:37 | |
|
1270 | #: rhodecode/model/user.py:334 | |
|
1271 | msgid "Password reset link" | |
|
1272 | msgstr "" | |
|
1273 | ||
|
1274 | #: rhodecode/model/user.py:366 | |
|
1275 | msgid "Your new password" | |
|
1276 | msgstr "" | |
|
1277 | ||
|
1278 | #: rhodecode/model/user.py:367 | |
|
1279 | #, python-format | |
|
1280 | msgid "Your new RhodeCode password:%s" | |
|
1281 | msgstr "" | |
|
1282 | ||
|
1283 | #: rhodecode/model/validators.py:38 rhodecode/model/validators.py:39 | |
|
1141 | 1284 | msgid "Value cannot be an empty list" |
|
1142 | 1285 | msgstr "" |
|
1143 | 1286 | |
|
1144 | #: rhodecode/model/validators.py:83 | |
|
1145 | #, python-format | |
|
1146 | msgid "Username \"%(username)s\" already exists" | |
|
1147 | msgstr "" | |
|
1148 | ||
|
1149 | 1287 | #: rhodecode/model/validators.py:85 |
|
1150 | 1288 | #, python-format |
|
1151 |
msgid "Username \"%(username)s\" |
|
|
1289 | msgid "Username \"%(username)s\" already exists" | |
|
1152 | 1290 | msgstr "" |
|
1153 | 1291 | |
|
1154 | 1292 | #: rhodecode/model/validators.py:87 |
|
1293 | #, python-format | |
|
1294 | msgid "Username \"%(username)s\" is forbidden" | |
|
1295 | msgstr "" | |
|
1296 | ||
|
1297 | #: rhodecode/model/validators.py:89 | |
|
1155 | 1298 | msgid "" |
|
1156 | 1299 | "Username may only contain alphanumeric characters underscores, periods or" |
|
1157 | 1300 | " dashes and must begin with alphanumeric character" |
|
1158 | 1301 | msgstr "" |
|
1159 | 1302 | |
|
1160 |
#: rhodecode/model/validators.py:11 |
|
|
1303 | #: rhodecode/model/validators.py:117 | |
|
1161 | 1304 | #, python-format |
|
1162 | 1305 | msgid "Username %(username)s is not valid" |
|
1163 | 1306 | msgstr "" |
|
1164 | 1307 | |
|
1165 |
#: rhodecode/model/validators.py:13 |
|
|
1166 |
msgid "Invalid user |
|
|
1167 | msgstr "" | |
|
1168 | ||
|
1169 | #: rhodecode/model/validators.py:135 | |
|
1170 | #, python-format | |
|
1171 | msgid "Users group \"%(usersgroup)s\" already exists" | |
|
1308 | #: rhodecode/model/validators.py:136 | |
|
1309 | msgid "Invalid user group name" | |
|
1172 | 1310 | msgstr "" |
|
1173 | 1311 | |
|
1174 | 1312 | #: rhodecode/model/validators.py:137 |
|
1313 | #, python-format | |
|
1314 | msgid "User group \"%(usergroup)s\" already exists" | |
|
1315 | msgstr "" | |
|
1316 | ||
|
1317 | #: rhodecode/model/validators.py:139 | |
|
1175 | 1318 | msgid "" |
|
1176 |
"user |
|
|
1319 | "user group name may only contain alphanumeric characters underscores, " | |
|
1177 | 1320 | "periods or dashes and must begin with alphanumeric character" |
|
1178 | 1321 | msgstr "" |
|
1179 | 1322 | |
|
1180 |
#: rhodecode/model/validators.py:17 |
|
|
1323 | #: rhodecode/model/validators.py:177 | |
|
1181 | 1324 | msgid "Cannot assign this group as parent" |
|
1182 | 1325 | msgstr "" |
|
1183 | 1326 | |
|
1184 | #: rhodecode/model/validators.py:176 | |
|
1185 | #, python-format | |
|
1186 | msgid "Group \"%(group_name)s\" already exists" | |
|
1187 | msgstr "" | |
|
1188 | ||
|
1189 | 1327 | #: rhodecode/model/validators.py:178 |
|
1190 | 1328 | #, python-format |
|
1329 | msgid "Group \"%(group_name)s\" already exists" | |
|
1330 | msgstr "" | |
|
1331 | ||
|
1332 | #: rhodecode/model/validators.py:180 | |
|
1333 | #, python-format | |
|
1191 | 1334 | msgid "Repository with name \"%(group_name)s\" already exists" |
|
1192 | 1335 | msgstr "" |
|
1193 | 1336 | |
|
1194 |
#: rhodecode/model/validators.py:23 |
|
|
1337 | #: rhodecode/model/validators.py:238 | |
|
1195 | 1338 | msgid "Invalid characters (non-ascii) in password" |
|
1196 | 1339 | msgstr "" |
|
1197 | 1340 | |
|
1198 |
#: rhodecode/model/validators.py:25 |
|
|
1341 | #: rhodecode/model/validators.py:253 | |
|
1199 | 1342 | msgid "Passwords do not match" |
|
1200 | 1343 | msgstr "" |
|
1201 | 1344 | |
|
1202 | #: rhodecode/model/validators.py:268 | |
|
1203 | msgid "invalid password" | |
|
1204 | msgstr "" | |
|
1205 | ||
|
1206 | #: rhodecode/model/validators.py:269 | |
|
1207 | msgid "invalid user name" | |
|
1208 | msgstr "" | |
|
1209 | ||
|
1210 | 1345 | #: rhodecode/model/validators.py:270 |
|
1346 | msgid "invalid password" | |
|
1347 | msgstr "" | |
|
1348 | ||
|
1349 | #: rhodecode/model/validators.py:271 | |
|
1350 | msgid "invalid user name" | |
|
1351 | msgstr "" | |
|
1352 | ||
|
1353 | #: rhodecode/model/validators.py:272 | |
|
1211 | 1354 | msgid "Your account is disabled" |
|
1212 | 1355 | msgstr "" |
|
1213 | 1356 | |
|
1214 | #: rhodecode/model/validators.py:314 | |
|
1215 | #, python-format | |
|
1216 | msgid "Repository name %(repo)s is disallowed" | |
|
1217 | msgstr "" | |
|
1218 | ||
|
1219 | 1357 | #: rhodecode/model/validators.py:316 |
|
1220 | 1358 | #, python-format |
|
1359 | msgid "Repository name %(repo)s is disallowed" | |
|
1360 | msgstr "" | |
|
1361 | ||
|
1362 | #: rhodecode/model/validators.py:318 | |
|
1363 | #, python-format | |
|
1221 | 1364 | msgid "Repository named %(repo)s already exists" |
|
1222 | 1365 | msgstr "" |
|
1223 | 1366 | |
|
1224 | #: rhodecode/model/validators.py:317 | |
|
1225 | #, python-format | |
|
1226 | msgid "Repository \"%(repo)s\" already exists in group \"%(group)s\"" | |
|
1227 | msgstr "" | |
|
1228 | ||
|
1229 | 1367 | #: rhodecode/model/validators.py:319 |
|
1230 | 1368 | #, python-format |
|
1231 |
msgid "Repositor |
|
|
1232 | msgstr "" | |
|
1233 | ||
|
1234 |
#: rhodecode/model/validators.py: |
|
|
1369 | msgid "Repository \"%(repo)s\" already exists in group \"%(group)s\"" | |
|
1370 | msgstr "" | |
|
1371 | ||
|
1372 | #: rhodecode/model/validators.py:321 | |
|
1373 | #, python-format | |
|
1374 | msgid "Repository group with name \"%(repo)s\" already exists" | |
|
1375 | msgstr "" | |
|
1376 | ||
|
1377 | #: rhodecode/model/validators.py:438 | |
|
1235 | 1378 | msgid "invalid clone url" |
|
1236 | 1379 | msgstr "" |
|
1237 | 1380 | |
|
1238 |
#: rhodecode/model/validators.py:43 |
|
|
1381 | #: rhodecode/model/validators.py:439 | |
|
1239 | 1382 | msgid "Invalid clone url, provide a valid clone http(s)/svn+http(s) url" |
|
1240 | 1383 | msgstr "" |
|
1241 | 1384 | |
|
1242 |
#: rhodecode/model/validators.py:4 |
|
|
1385 | #: rhodecode/model/validators.py:464 | |
|
1243 | 1386 | msgid "Fork have to be the same type as parent" |
|
1244 | 1387 | msgstr "" |
|
1245 | 1388 | |
|
1246 |
#: rhodecode/model/validators.py:47 |
|
|
1389 | #: rhodecode/model/validators.py:479 | |
|
1247 | 1390 | msgid "You don't have permissions to create repository in this group" |
|
1248 | 1391 | msgstr "" |
|
1249 | 1392 | |
|
1250 |
#: rhodecode/model/validators.py:4 |
|
|
1251 | msgid "This username or users group name is not valid" | |
|
1252 | msgstr "" | |
|
1253 | ||
|
1254 |
#: rhodecode/model/validators.py:5 |
|
|
1393 | #: rhodecode/model/validators.py:481 | |
|
1394 | msgid "no permission to create repository in root location" | |
|
1395 | msgstr "" | |
|
1396 | ||
|
1397 | #: rhodecode/model/validators.py:518 | |
|
1398 | msgid "You don't have permissions to create a group in this location" | |
|
1399 | msgstr "" | |
|
1400 | ||
|
1401 | #: rhodecode/model/validators.py:557 | |
|
1402 | msgid "This username or user group name is not valid" | |
|
1403 | msgstr "" | |
|
1404 | ||
|
1405 | #: rhodecode/model/validators.py:650 | |
|
1255 | 1406 | msgid "This is not a valid path" |
|
1256 | 1407 | msgstr "" |
|
1257 | 1408 | |
|
1258 |
#: rhodecode/model/validators.py:6 |
|
|
1409 | #: rhodecode/model/validators.py:665 | |
|
1259 | 1410 | msgid "This e-mail address is already taken" |
|
1260 | 1411 | msgstr "" |
|
1261 | 1412 | |
|
1262 |
#: rhodecode/model/validators.py:6 |
|
|
1413 | #: rhodecode/model/validators.py:685 | |
|
1263 | 1414 | #, python-format |
|
1264 | 1415 | msgid "e-mail \"%(email)s\" does not exist." |
|
1265 | 1416 | msgstr "" |
|
1266 | 1417 | |
|
1267 |
#: rhodecode/model/validators.py: |
|
|
1418 | #: rhodecode/model/validators.py:722 | |
|
1268 | 1419 | msgid "" |
|
1269 | 1420 | "The LDAP Login attribute of the CN must be specified - this is the name " |
|
1270 | 1421 | "of the attribute that is equivalent to \"username\"" |
|
1271 | 1422 | msgstr "" |
|
1272 | 1423 | |
|
1273 |
#: rhodecode/model/validators.py: |
|
|
1424 | #: rhodecode/model/validators.py:735 | |
|
1274 | 1425 | #, python-format |
|
1275 | 1426 | msgid "Revisions %(revs)s are already part of pull request or have set status" |
|
1276 | 1427 | msgstr "" |
|
1277 | 1428 | |
|
1278 | #: rhodecode/templates/index.html:3 | |
|
1429 | #: rhodecode/model/validators.py:767 | |
|
1430 | msgid "Please enter a valid IPv4 or IpV6 address" | |
|
1431 | msgstr "" | |
|
1432 | ||
|
1433 | #: rhodecode/model/validators.py:768 | |
|
1434 | #, python-format | |
|
1435 | msgid "The network size (bits) must be within the range of 0-32 (not %(bits)r)" | |
|
1436 | msgstr "" | |
|
1437 | ||
|
1438 | #: rhodecode/model/validators.py:800 | |
|
1439 | msgid "Key name can only consist of letters, underscore, dash or numbers" | |
|
1440 | msgstr "" | |
|
1441 | ||
|
1442 | #: rhodecode/templates/index.html:5 | |
|
1279 | 1443 | msgid "Dashboard" |
|
1280 | 1444 | msgstr "" |
|
1281 | 1445 | |
@@ -1284,205 +1448,226 b' msgstr ""' | |||
|
1284 | 1448 | #: rhodecode/templates/admin/repos/repos.html:9 |
|
1285 | 1449 | #: rhodecode/templates/admin/users/user_edit_my_account.html:31 |
|
1286 | 1450 | #: rhodecode/templates/admin/users/users.html:9 |
|
1287 |
#: rhodecode/templates/bookmarks/bookmarks.html: |
|
|
1451 | #: rhodecode/templates/bookmarks/bookmarks.html:9 | |
|
1288 | 1452 | #: rhodecode/templates/branches/branches.html:9 |
|
1289 | 1453 | #: rhodecode/templates/journal/journal.html:9 |
|
1290 |
#: rhodecode/templates/journal/journal.html:4 |
|
|
1291 |
#: rhodecode/templates/ |
|
|
1454 | #: rhodecode/templates/journal/journal.html:46 | |
|
1455 | #: rhodecode/templates/journal/journal.html:47 | |
|
1456 | #: rhodecode/templates/tags/tags.html:9 | |
|
1292 | 1457 | msgid "quick filter..." |
|
1293 | 1458 | msgstr "" |
|
1294 | 1459 | |
|
1295 | 1460 | #: rhodecode/templates/index_base.html:6 |
|
1296 | 1461 | #: rhodecode/templates/admin/repos/repos.html:9 |
|
1297 | #: rhodecode/templates/base/base.html:233 | |
|
1298 | 1462 | msgid "repositories" |
|
1299 | 1463 | msgstr "" |
|
1300 | 1464 | |
|
1301 | 1465 | #: rhodecode/templates/index_base.html:13 |
|
1302 |
#: rhodecode/templates/index_base.html:1 |
|
|
1466 | #: rhodecode/templates/index_base.html:18 | |
|
1467 | #: rhodecode/templates/admin/repos/repo_add.html:5 | |
|
1303 | 1468 | #: rhodecode/templates/admin/repos/repos.html:21 |
|
1304 | msgid "ADD REPOSITORY" | |
|
1305 | msgstr "" | |
|
1306 | ||
|
1307 |
#: rhodecode/templates/index_base.html: |
|
|
1308 |
#: rhodecode/templates/index_base.html: |
|
|
1309 |
#: rhodecode/templates/admin/repos_groups/repos_groups_ |
|
|
1310 | #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:32 | |
|
1311 | #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:33 | |
|
1312 | #: rhodecode/templates/admin/users_groups/users_group_add.html:32 | |
|
1313 |
#: rhodecode/templates/ |
|
|
1314 |
msgid " |
|
|
1315 | msgstr "" | |
|
1316 | ||
|
1317 |
#: rhodecode/templates/index_base.html: |
|
|
1318 | #: rhodecode/templates/index_base.html:72 | |
|
1319 | #: rhodecode/templates/index_base.html:138 | |
|
1320 | #: rhodecode/templates/index_base.html:176 | |
|
1321 | #: rhodecode/templates/index_base.html:266 | |
|
1322 | #: rhodecode/templates/admin/repos/repo_add_base.html:56 | |
|
1323 | #: rhodecode/templates/admin/repos/repo_edit.html:75 | |
|
1324 | #: rhodecode/templates/admin/repos/repos.html:72 | |
|
1325 | #: rhodecode/templates/admin/repos_groups/repos_groups_add.html:41 | |
|
1326 | #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:41 | |
|
1327 | #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:34 | |
|
1328 | #: rhodecode/templates/forks/fork.html:59 | |
|
1329 | #: rhodecode/templates/settings/repo_settings.html:66 | |
|
1330 | #: rhodecode/templates/summary/summary.html:114 | |
|
1331 | msgid "Description" | |
|
1469 | msgid "Add repository" | |
|
1470 | msgstr "" | |
|
1471 | ||
|
1472 | #: rhodecode/templates/index_base.html:15 | |
|
1473 | #: rhodecode/templates/index_base.html:20 | |
|
1474 | #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:31 | |
|
1475 | msgid "Add group" | |
|
1476 | msgstr "" | |
|
1477 | ||
|
1478 | #: rhodecode/templates/index_base.html:27 | |
|
1479 | msgid "Edit group" | |
|
1480 | msgstr "" | |
|
1481 | ||
|
1482 | #: rhodecode/templates/index_base.html:27 | |
|
1483 | msgid "You have admin right to this group, and can edit it" | |
|
1332 | 1484 | msgstr "" |
|
1333 | 1485 | |
|
1334 | 1486 | #: rhodecode/templates/index_base.html:40 |
|
1335 |
#: rhodecode/templates/ |
|
|
1336 | msgid "Repositories group" | |
|
1337 | msgstr "" | |
|
1338 | ||
|
1339 |
#: rhodecode/templates/ |
|
|
1340 |
#: rhodecode/templates/ |
|
|
1341 |
#: rhodecode/templates/ |
|
|
1487 | #: rhodecode/templates/index_base.html:140 | |
|
1488 | #: rhodecode/templates/admin/repos_groups/repos_groups_add.html:33 | |
|
1489 | #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:38 | |
|
1490 | #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:43 | |
|
1491 | #: rhodecode/templates/admin/users_groups/users_group_add.html:32 | |
|
1492 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:33 | |
|
1493 | #: rhodecode/templates/admin/users_groups/users_groups.html:34 | |
|
1494 | msgid "Group name" | |
|
1495 | msgstr "" | |
|
1496 | ||
|
1497 | #: rhodecode/templates/index_base.html:41 | |
|
1498 | #: rhodecode/templates/index_base.html:83 | |
|
1499 | #: rhodecode/templates/index_base.html:142 | |
|
1500 | #: rhodecode/templates/index_base.html:180 | |
|
1501 | #: rhodecode/templates/index_base.html:270 | |
|
1502 | #: rhodecode/templates/admin/repos/repo_add_base.html:56 | |
|
1503 | #: rhodecode/templates/admin/repos/repo_edit.html:75 | |
|
1504 | #: rhodecode/templates/admin/repos/repos.html:73 | |
|
1505 | #: rhodecode/templates/admin/repos_groups/repos_groups_add.html:42 | |
|
1506 | #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:47 | |
|
1507 | #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:44 | |
|
1508 | #: rhodecode/templates/forks/fork.html:56 | |
|
1509 | #: rhodecode/templates/pullrequests/pullrequest.html:101 | |
|
1510 | #: rhodecode/templates/summary/summary.html:106 | |
|
1511 | msgid "Description" | |
|
1512 | msgstr "" | |
|
1513 | ||
|
1514 | #: rhodecode/templates/index_base.html:51 | |
|
1515 | #: rhodecode/templates/admin/permissions/permissions.html:55 | |
|
1516 | #: rhodecode/templates/admin/repos/repo_add_base.html:29 | |
|
1517 | #: rhodecode/templates/admin/repos/repo_edit.html:49 | |
|
1518 | #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:57 | |
|
1519 | #: rhodecode/templates/forks/fork.html:47 | |
|
1520 | msgid "Repository group" | |
|
1521 | msgstr "" | |
|
1522 | ||
|
1523 | #: rhodecode/templates/index_base.html:82 | |
|
1524 | #: rhodecode/templates/index_base.html:178 | |
|
1525 | #: rhodecode/templates/index_base.html:268 | |
|
1342 | 1526 | #: rhodecode/templates/admin/repos/repo_add_base.html:9 |
|
1343 | 1527 | #: rhodecode/templates/admin/repos/repo_edit.html:32 |
|
1344 |
#: rhodecode/templates/admin/repos/repos.html:7 |
|
|
1345 |
#: rhodecode/templates/admin/users/user_edit.html:1 |
|
|
1346 |
#: rhodecode/templates/ |
|
|
1347 | #: rhodecode/templates/admin/users/user_edit_my_account.html:180 | |
|
1348 | #: rhodecode/templates/admin/users/user_edit_my_account.html:216 | |
|
1349 | #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:6 | |
|
1350 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:184 | |
|
1351 | #: rhodecode/templates/bookmarks/bookmarks.html:36 | |
|
1528 | #: rhodecode/templates/admin/repos/repos.html:71 | |
|
1529 | #: rhodecode/templates/admin/users/user_edit_my_account.html:172 | |
|
1530 | #: rhodecode/templates/base/perms_summary.html:14 | |
|
1531 | #: rhodecode/templates/bookmarks/bookmarks.html:34 | |
|
1352 | 1532 | #: rhodecode/templates/bookmarks/bookmarks_data.html:6 |
|
1353 |
#: rhodecode/templates/branches/branches.html: |
|
|
1533 | #: rhodecode/templates/branches/branches.html:47 | |
|
1354 | 1534 | #: rhodecode/templates/branches/branches_data.html:6 |
|
1355 | 1535 | #: rhodecode/templates/files/files_browser.html:47 |
|
1356 |
#: rhodecode/templates/journal/journal.html: |
|
|
1357 |
#: rhodecode/templates/journal/journal.html: |
|
|
1358 |
#: rhodecode/templates/ |
|
|
1359 |
#: rhodecode/templates/s |
|
|
1360 |
#: rhodecode/templates/ |
|
|
1361 | #: rhodecode/templates/summary/summary.html:132 | |
|
1362 | #: rhodecode/templates/tags/tags.html:51 | |
|
1536 | #: rhodecode/templates/journal/journal.html:193 | |
|
1537 | #: rhodecode/templates/journal/journal.html:296 | |
|
1538 | #: rhodecode/templates/summary/summary.html:55 | |
|
1539 | #: rhodecode/templates/summary/summary.html:124 | |
|
1540 | #: rhodecode/templates/tags/tags.html:48 | |
|
1363 | 1541 | #: rhodecode/templates/tags/tags_data.html:6 |
|
1364 | 1542 | msgid "Name" |
|
1365 | 1543 | msgstr "" |
|
1366 | 1544 | |
|
1367 |
#: rhodecode/templates/index_base.html: |
|
|
1545 | #: rhodecode/templates/index_base.html:84 | |
|
1368 | 1546 | msgid "Last change" |
|
1369 | 1547 | msgstr "" |
|
1370 | 1548 | |
|
1371 |
#: rhodecode/templates/index_base.html: |
|
|
1372 |
#: rhodecode/templates/index_base.html:1 |
|
|
1373 |
#: rhodecode/templates/ |
|
|
1374 |
#: rhodecode/templates/ |
|
|
1549 | #: rhodecode/templates/index_base.html:85 | |
|
1550 | #: rhodecode/templates/index_base.html:183 | |
|
1551 | #: rhodecode/templates/index_base.html:273 | |
|
1552 | #: rhodecode/templates/admin/repos/repos.html:74 | |
|
1553 | #: rhodecode/templates/admin/users/user_edit_my_account.html:174 | |
|
1554 | #: rhodecode/templates/journal/journal.html:195 | |
|
1555 | #: rhodecode/templates/journal/journal.html:298 | |
|
1375 | 1556 | msgid "Tip" |
|
1376 | 1557 | msgstr "" |
|
1377 | 1558 | |
|
1378 |
#: rhodecode/templates/index_base.html: |
|
|
1379 |
#: rhodecode/templates/index_base.html:18 |
|
|
1380 |
#: rhodecode/templates/index_base.html:2 |
|
|
1559 | #: rhodecode/templates/index_base.html:86 | |
|
1560 | #: rhodecode/templates/index_base.html:185 | |
|
1561 | #: rhodecode/templates/index_base.html:275 | |
|
1381 | 1562 | #: rhodecode/templates/admin/repos/repo_edit.html:121 |
|
1382 |
#: rhodecode/templates/admin/repos/repos.html:7 |
|
|
1563 | #: rhodecode/templates/admin/repos/repos.html:76 | |
|
1383 | 1564 | msgid "Owner" |
|
1384 | 1565 | msgstr "" |
|
1385 | 1566 | |
|
1386 |
#: rhodecode/templates/index_base.html:7 |
|
|
1387 | #: rhodecode/templates/summary/summary.html:48 | |
|
1388 | #: rhodecode/templates/summary/summary.html:51 | |
|
1389 | msgid "RSS" | |
|
1390 | msgstr "" | |
|
1391 | ||
|
1392 | #: rhodecode/templates/index_base.html:77 | |
|
1567 | #: rhodecode/templates/index_base.html:87 | |
|
1393 | 1568 | msgid "Atom" |
|
1394 | 1569 | msgstr "" |
|
1395 | 1570 | |
|
1396 |
#: rhodecode/templates/index_base.html:1 |
|
|
1397 |
#: rhodecode/templates/index_base.html:20 |
|
|
1398 |
#: rhodecode/templates/index_base.html:29 |
|
|
1399 |
#: rhodecode/templates/admin/repos/repos.html:9 |
|
|
1400 |
#: rhodecode/templates/admin/users/user_edit_my_account.html: |
|
|
1571 | #: rhodecode/templates/index_base.html:171 | |
|
1572 | #: rhodecode/templates/index_base.html:209 | |
|
1573 | #: rhodecode/templates/index_base.html:296 | |
|
1574 | #: rhodecode/templates/admin/repos/repos.html:97 | |
|
1575 | #: rhodecode/templates/admin/users/user_edit_my_account.html:196 | |
|
1401 | 1576 | #: rhodecode/templates/admin/users/users.html:107 |
|
1402 |
#: rhodecode/templates/bookmarks/bookmarks.html: |
|
|
1403 |
#: rhodecode/templates/branches/branches.html:7 |
|
|
1404 |
#: rhodecode/templates/journal/journal.html:2 |
|
|
1405 |
#: rhodecode/templates/ |
|
|
1577 | #: rhodecode/templates/bookmarks/bookmarks.html:58 | |
|
1578 | #: rhodecode/templates/branches/branches.html:73 | |
|
1579 | #: rhodecode/templates/journal/journal.html:217 | |
|
1580 | #: rhodecode/templates/journal/journal.html:320 | |
|
1581 | #: rhodecode/templates/tags/tags.html:74 | |
|
1406 | 1582 | msgid "Click to sort ascending" |
|
1407 | 1583 | msgstr "" |
|
1408 | 1584 | |
|
1409 |
#: rhodecode/templates/index_base.html:1 |
|
|
1410 |
#: rhodecode/templates/index_base.html:20 |
|
|
1411 |
#: rhodecode/templates/index_base.html:29 |
|
|
1412 |
#: rhodecode/templates/admin/repos/repos.html:9 |
|
|
1413 |
#: rhodecode/templates/admin/users/user_edit_my_account.html: |
|
|
1585 | #: rhodecode/templates/index_base.html:172 | |
|
1586 | #: rhodecode/templates/index_base.html:210 | |
|
1587 | #: rhodecode/templates/index_base.html:297 | |
|
1588 | #: rhodecode/templates/admin/repos/repos.html:98 | |
|
1589 | #: rhodecode/templates/admin/users/user_edit_my_account.html:197 | |
|
1414 | 1590 | #: rhodecode/templates/admin/users/users.html:108 |
|
1415 |
#: rhodecode/templates/bookmarks/bookmarks.html: |
|
|
1416 |
#: rhodecode/templates/branches/branches.html:7 |
|
|
1417 |
#: rhodecode/templates/journal/journal.html:2 |
|
|
1418 |
#: rhodecode/templates/ |
|
|
1591 | #: rhodecode/templates/bookmarks/bookmarks.html:59 | |
|
1592 | #: rhodecode/templates/branches/branches.html:74 | |
|
1593 | #: rhodecode/templates/journal/journal.html:218 | |
|
1594 | #: rhodecode/templates/journal/journal.html:321 | |
|
1595 | #: rhodecode/templates/tags/tags.html:75 | |
|
1419 | 1596 | msgid "Click to sort descending" |
|
1420 | 1597 | msgstr "" |
|
1421 | 1598 | |
|
1422 |
#: rhodecode/templates/index_base.html:1 |
|
|
1423 |
#: rhodecode/templates/index_base.html:2 |
|
|
1599 | #: rhodecode/templates/index_base.html:181 | |
|
1600 | #: rhodecode/templates/index_base.html:271 | |
|
1424 | 1601 | msgid "Last Change" |
|
1425 | 1602 | msgstr "" |
|
1426 | 1603 | |
|
1427 | #: rhodecode/templates/index_base.html:209 | |
|
1428 | #: rhodecode/templates/index_base.html:293 | |
|
1429 | #: rhodecode/templates/admin/repos/repos.html:96 | |
|
1430 | #: rhodecode/templates/admin/users/user_edit_my_account.html:204 | |
|
1431 | #: rhodecode/templates/admin/users/users.html:109 | |
|
1432 | #: rhodecode/templates/bookmarks/bookmarks.html:62 | |
|
1433 | #: rhodecode/templates/branches/branches.html:78 | |
|
1434 | #: rhodecode/templates/journal/journal.html:223 | |
|
1435 | #: rhodecode/templates/tags/tags.html:79 | |
|
1436 | msgid "No records found." | |
|
1437 | msgstr "" | |
|
1438 | ||
|
1439 | #: rhodecode/templates/index_base.html:210 | |
|
1440 | #: rhodecode/templates/index_base.html:294 | |
|
1441 | #: rhodecode/templates/admin/repos/repos.html:97 | |
|
1442 | #: rhodecode/templates/admin/users/user_edit_my_account.html:205 | |
|
1443 | #: rhodecode/templates/admin/users/users.html:110 | |
|
1444 | #: rhodecode/templates/bookmarks/bookmarks.html:63 | |
|
1445 | #: rhodecode/templates/branches/branches.html:79 | |
|
1446 | #: rhodecode/templates/journal/journal.html:224 | |
|
1447 | #: rhodecode/templates/tags/tags.html:80 | |
|
1448 | msgid "Data error." | |
|
1449 | msgstr "" | |
|
1450 | ||
|
1451 | 1604 | #: rhodecode/templates/index_base.html:211 |
|
1452 |
#: rhodecode/templates/ |
|
|
1453 |
#: rhodecode/templates/admin/ |
|
|
1454 |
#: rhodecode/templates/admin/users/user |
|
|
1605 | #: rhodecode/templates/admin/repos/repos.html:99 | |
|
1606 | #: rhodecode/templates/admin/users/user_edit_my_account.html:198 | |
|
1607 | #: rhodecode/templates/admin/users/users.html:109 | |
|
1608 | #: rhodecode/templates/bookmarks/bookmarks.html:60 | |
|
1609 | #: rhodecode/templates/branches/branches.html:75 | |
|
1610 | #: rhodecode/templates/journal/journal.html:219 | |
|
1611 | #: rhodecode/templates/journal/journal.html:322 | |
|
1612 | #: rhodecode/templates/tags/tags.html:76 | |
|
1613 | msgid "No records found." | |
|
1614 | msgstr "" | |
|
1615 | ||
|
1616 | #: rhodecode/templates/index_base.html:212 | |
|
1617 | #: rhodecode/templates/index_base.html:299 | |
|
1618 | #: rhodecode/templates/admin/repos/repos.html:100 | |
|
1619 | #: rhodecode/templates/admin/users/user_edit_my_account.html:199 | |
|
1620 | #: rhodecode/templates/admin/users/users.html:110 | |
|
1621 | #: rhodecode/templates/bookmarks/bookmarks.html:61 | |
|
1622 | #: rhodecode/templates/branches/branches.html:76 | |
|
1623 | #: rhodecode/templates/journal/journal.html:220 | |
|
1624 | #: rhodecode/templates/journal/journal.html:323 | |
|
1625 | #: rhodecode/templates/tags/tags.html:77 | |
|
1626 | msgid "Data error." | |
|
1627 | msgstr "" | |
|
1628 | ||
|
1629 | #: rhodecode/templates/index_base.html:213 | |
|
1630 | #: rhodecode/templates/index_base.html:300 | |
|
1631 | #: rhodecode/templates/admin/repos/repos.html:101 | |
|
1632 | #: rhodecode/templates/admin/users/user_edit_my_account.html:58 | |
|
1633 | #: rhodecode/templates/admin/users/user_edit_my_account.html:200 | |
|
1455 | 1634 | #: rhodecode/templates/admin/users/users.html:111 |
|
1456 |
#: rhodecode/templates/bookmarks/bookmarks.html:6 |
|
|
1457 |
#: rhodecode/templates/branches/branches.html: |
|
|
1458 |
#: rhodecode/templates/journal/journal.html: |
|
|
1459 |
#: rhodecode/templates/journal/journal.html: |
|
|
1460 |
#: rhodecode/templates/tags/tags.html:8 |
|
|
1635 | #: rhodecode/templates/bookmarks/bookmarks.html:62 | |
|
1636 | #: rhodecode/templates/branches/branches.html:77 | |
|
1637 | #: rhodecode/templates/journal/journal.html:221 | |
|
1638 | #: rhodecode/templates/journal/journal.html:324 | |
|
1639 | #: rhodecode/templates/tags/tags.html:78 | |
|
1461 | 1640 | msgid "Loading..." |
|
1462 | 1641 | msgstr "" |
|
1463 | 1642 | |
|
1464 | #: rhodecode/templates/login.html:5 rhodecode/templates/login.html:54 | |
|
1465 | msgid "Sign In" | |
|
1643 | #: rhodecode/templates/index_base.html:298 | |
|
1644 | msgid "No repositories found." | |
|
1645 | msgstr "" | |
|
1646 | ||
|
1647 | #: rhodecode/templates/login.html:5 rhodecode/templates/base/base.html:227 | |
|
1648 | msgid "Log In" | |
|
1466 | 1649 | msgstr "" |
|
1467 | 1650 | |
|
1468 | 1651 | #: rhodecode/templates/login.html:21 |
|
1469 | msgid "Sign In to" | |
|
1652 | #, python-format | |
|
1653 | msgid "Log In to %s" | |
|
1470 | 1654 | msgstr "" |
|
1471 | 1655 | |
|
1472 | 1656 | #: rhodecode/templates/login.html:31 rhodecode/templates/register.html:20 |
|
1473 | 1657 | #: rhodecode/templates/admin/admin_log.html:5 |
|
1474 | 1658 | #: rhodecode/templates/admin/users/user_add.html:32 |
|
1475 |
#: rhodecode/templates/admin/users/user_edit.html:5 |
|
|
1476 |
#: rhodecode/templates/admin/users/user_edit_my_account_form.html: |
|
|
1477 |
#: rhodecode/templates/ |
|
|
1478 |
#: rhodecode/templates/ |
|
|
1659 | #: rhodecode/templates/admin/users/user_edit.html:57 | |
|
1660 | #: rhodecode/templates/admin/users/user_edit_my_account_form.html:31 | |
|
1661 | #: rhodecode/templates/admin/users/users.html:77 | |
|
1662 | #: rhodecode/templates/base/base.html:203 | |
|
1663 | #: rhodecode/templates/summary/summary.html:123 | |
|
1479 | 1664 | msgid "Username" |
|
1480 | 1665 | msgstr "" |
|
1481 | 1666 | |
|
1482 | 1667 | #: rhodecode/templates/login.html:40 rhodecode/templates/register.html:29 |
|
1483 | 1668 | #: rhodecode/templates/admin/ldap/ldap.html:46 |
|
1484 | 1669 | #: rhodecode/templates/admin/users/user_add.html:41 |
|
1485 |
#: rhodecode/templates/base/base.html: |
|
|
1670 | #: rhodecode/templates/base/base.html:212 | |
|
1486 | 1671 | msgid "Password" |
|
1487 | 1672 | msgstr "" |
|
1488 | 1673 | |
@@ -1490,16 +1675,20 b' msgstr ""' | |||
|
1490 | 1675 | msgid "Remember me" |
|
1491 | 1676 | msgstr "" |
|
1492 | 1677 | |
|
1678 | #: rhodecode/templates/login.html:54 | |
|
1679 | msgid "Sign In" | |
|
1680 | msgstr "" | |
|
1681 | ||
|
1493 | 1682 | #: rhodecode/templates/login.html:60 |
|
1494 | 1683 | msgid "Forgot your password ?" |
|
1495 | 1684 | msgstr "" |
|
1496 | 1685 | |
|
1497 |
#: rhodecode/templates/login.html:63 rhodecode/templates/base/base.html: |
|
|
1686 | #: rhodecode/templates/login.html:63 rhodecode/templates/base/base.html:223 | |
|
1498 | 1687 | msgid "Don't have an account ?" |
|
1499 | 1688 | msgstr "" |
|
1500 | 1689 | |
|
1501 | 1690 | #: rhodecode/templates/password_reset.html:5 |
|
1502 |
msgid " |
|
|
1691 | msgid "Password Reset" | |
|
1503 | 1692 | msgstr "" |
|
1504 | 1693 | |
|
1505 | 1694 | #: rhodecode/templates/password_reset.html:11 |
@@ -1532,23 +1721,23 b' msgstr ""' | |||
|
1532 | 1721 | |
|
1533 | 1722 | #: rhodecode/templates/register.html:47 |
|
1534 | 1723 | #: rhodecode/templates/admin/users/user_add.html:59 |
|
1535 |
#: rhodecode/templates/admin/users/user_edit.html:9 |
|
|
1536 |
#: rhodecode/templates/admin/users/user_edit_my_account_form.html: |
|
|
1724 | #: rhodecode/templates/admin/users/user_edit.html:97 | |
|
1725 | #: rhodecode/templates/admin/users/user_edit_my_account_form.html:62 | |
|
1537 | 1726 | msgid "First Name" |
|
1538 | 1727 | msgstr "" |
|
1539 | 1728 | |
|
1540 | 1729 | #: rhodecode/templates/register.html:56 |
|
1541 | 1730 | #: rhodecode/templates/admin/users/user_add.html:68 |
|
1542 |
#: rhodecode/templates/admin/users/user_edit.html: |
|
|
1543 |
#: rhodecode/templates/admin/users/user_edit_my_account_form.html: |
|
|
1731 | #: rhodecode/templates/admin/users/user_edit.html:106 | |
|
1732 | #: rhodecode/templates/admin/users/user_edit_my_account_form.html:71 | |
|
1544 | 1733 | msgid "Last Name" |
|
1545 | 1734 | msgstr "" |
|
1546 | 1735 | |
|
1547 | 1736 | #: rhodecode/templates/register.html:65 |
|
1548 | 1737 | #: rhodecode/templates/admin/users/user_add.html:77 |
|
1549 |
#: rhodecode/templates/admin/users/user_edit.html:1 |
|
|
1550 |
#: rhodecode/templates/admin/users/user_edit_my_account_form.html: |
|
|
1551 |
#: rhodecode/templates/summary/summary.html:1 |
|
|
1738 | #: rhodecode/templates/admin/users/user_edit.html:115 | |
|
1739 | #: rhodecode/templates/admin/users/user_edit_my_account_form.html:80 | |
|
1740 | #: rhodecode/templates/summary/summary.html:125 | |
|
1552 | 1741 | msgid "Email" |
|
1553 | 1742 | msgstr "" |
|
1554 | 1743 | |
@@ -1560,44 +1749,31 b' msgstr ""' | |||
|
1560 | 1749 | msgid "Your account must wait for activation by administrator" |
|
1561 | 1750 | msgstr "" |
|
1562 | 1751 | |
|
1563 |
#: rhodecode/templates/repo_switcher_list.html:1 |
|
|
1752 | #: rhodecode/templates/repo_switcher_list.html:10 | |
|
1564 | 1753 | #: rhodecode/templates/admin/defaults/defaults.html:44 |
|
1565 | 1754 | #: rhodecode/templates/admin/repos/repo_add_base.html:65 |
|
1566 | 1755 | #: rhodecode/templates/admin/repos/repo_edit.html:85 |
|
1567 |
#: rhodecode/templates/ |
|
|
1756 | #: rhodecode/templates/data_table/_dt_elements.html:61 | |
|
1757 | #: rhodecode/templates/summary/summary.html:77 | |
|
1568 | 1758 | msgid "Private repository" |
|
1569 | 1759 | msgstr "" |
|
1570 | 1760 | |
|
1571 |
#: rhodecode/templates/repo_switcher_list.html:1 |
|
|
1761 | #: rhodecode/templates/repo_switcher_list.html:12 | |
|
1762 | #: rhodecode/templates/data_table/_dt_elements.html:63 | |
|
1763 | #: rhodecode/templates/summary/summary.html:79 | |
|
1572 | 1764 | msgid "Public repository" |
|
1573 | 1765 | msgstr "" |
|
1574 | 1766 | |
|
1575 | #: rhodecode/templates/switch_to_list.html:3 | |
|
1576 | #: rhodecode/templates/branches/branches.html:14 | |
|
1577 | msgid "branches" | |
|
1578 | msgstr "" | |
|
1579 | ||
|
1580 | 1767 | #: rhodecode/templates/switch_to_list.html:10 |
|
1581 | 1768 | #: rhodecode/templates/branches/branches_data.html:57 |
|
1582 | 1769 | msgid "There are no branches yet" |
|
1583 | 1770 | msgstr "" |
|
1584 | 1771 | |
|
1585 | #: rhodecode/templates/switch_to_list.html:15 | |
|
1586 | #: rhodecode/templates/shortlog/shortlog_data.html:10 | |
|
1587 | #: rhodecode/templates/tags/tags.html:15 | |
|
1588 | msgid "tags" | |
|
1589 | msgstr "" | |
|
1590 | ||
|
1591 | 1772 | #: rhodecode/templates/switch_to_list.html:22 |
|
1592 | 1773 | #: rhodecode/templates/tags/tags_data.html:38 |
|
1593 | 1774 | msgid "There are no tags yet" |
|
1594 | 1775 | msgstr "" |
|
1595 | 1776 | |
|
1596 | #: rhodecode/templates/switch_to_list.html:28 | |
|
1597 | #: rhodecode/templates/bookmarks/bookmarks.html:15 | |
|
1598 | msgid "bookmarks" | |
|
1599 | msgstr "" | |
|
1600 | ||
|
1601 | 1777 | #: rhodecode/templates/switch_to_list.html:35 |
|
1602 | 1778 | #: rhodecode/templates/bookmarks/bookmarks_data.html:32 |
|
1603 | 1779 | msgid "There are no bookmarks yet" |
@@ -1605,6 +1781,7 b' msgstr ""' | |||
|
1605 | 1781 | |
|
1606 | 1782 | #: rhodecode/templates/admin/admin.html:5 |
|
1607 | 1783 | #: rhodecode/templates/admin/admin.html:13 |
|
1784 | #: rhodecode/templates/base/base.html:68 | |
|
1608 | 1785 | msgid "Admin journal" |
|
1609 | 1786 | msgstr "" |
|
1610 | 1787 | |
@@ -1626,11 +1803,13 b' msgstr[0] ""' | |||
|
1626 | 1803 | msgstr[1] "" |
|
1627 | 1804 | |
|
1628 | 1805 | #: rhodecode/templates/admin/admin_log.html:6 |
|
1629 |
#: rhodecode/templates/admin/repos/repos.html:7 |
|
|
1630 | #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:8 | |
|
1631 |
#: rhodecode/templates/admin/users/user_edit_my_account |
|
|
1632 |
#: rhodecode/templates/ |
|
|
1633 |
#: rhodecode/templates/ |
|
|
1806 | #: rhodecode/templates/admin/repos/repos.html:77 | |
|
1807 | #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:46 | |
|
1808 | #: rhodecode/templates/admin/users/user_edit_my_account.html:176 | |
|
1809 | #: rhodecode/templates/admin/users/users.html:87 | |
|
1810 | #: rhodecode/templates/admin/users_groups/users_groups.html:37 | |
|
1811 | #: rhodecode/templates/journal/journal.html:197 | |
|
1812 | #: rhodecode/templates/journal/journal.html:300 | |
|
1634 | 1813 | msgid "Action" |
|
1635 | 1814 | msgstr "" |
|
1636 | 1815 | |
@@ -1640,11 +1819,11 b' msgid "Repository"' | |||
|
1640 | 1819 | msgstr "" |
|
1641 | 1820 | |
|
1642 | 1821 | #: rhodecode/templates/admin/admin_log.html:8 |
|
1643 |
#: rhodecode/templates/bookmarks/bookmarks.html:3 |
|
|
1822 | #: rhodecode/templates/bookmarks/bookmarks.html:35 | |
|
1644 | 1823 | #: rhodecode/templates/bookmarks/bookmarks_data.html:7 |
|
1645 |
#: rhodecode/templates/branches/branches.html: |
|
|
1824 | #: rhodecode/templates/branches/branches.html:48 | |
|
1646 | 1825 | #: rhodecode/templates/branches/branches_data.html:7 |
|
1647 |
#: rhodecode/templates/tags/tags.html: |
|
|
1826 | #: rhodecode/templates/tags/tags.html:49 | |
|
1648 | 1827 | #: rhodecode/templates/tags/tags_data.html:7 |
|
1649 | 1828 | msgid "Date" |
|
1650 | 1829 | msgstr "" |
@@ -1663,6 +1842,7 b' msgid "Repositories defaults"' | |||
|
1663 | 1842 | msgstr "" |
|
1664 | 1843 | |
|
1665 | 1844 | #: rhodecode/templates/admin/defaults/defaults.html:11 |
|
1845 | #: rhodecode/templates/base/base.html:75 | |
|
1666 | 1846 | msgid "Defaults" |
|
1667 | 1847 | msgstr "" |
|
1668 | 1848 | |
@@ -1675,8 +1855,7 b' msgstr ""' | |||
|
1675 | 1855 | #: rhodecode/templates/admin/defaults/defaults.html:48 |
|
1676 | 1856 | #: rhodecode/templates/admin/repos/repo_add_base.html:69 |
|
1677 | 1857 | #: rhodecode/templates/admin/repos/repo_edit.html:89 |
|
1678 |
#: rhodecode/templates/forks/fork.html: |
|
|
1679 | #: rhodecode/templates/settings/repo_settings.html:80 | |
|
1858 | #: rhodecode/templates/forks/fork.html:69 | |
|
1680 | 1859 | msgid "" |
|
1681 | 1860 | "Private repositories are only visible to people explicitly added as " |
|
1682 | 1861 | "collaborators." |
@@ -1704,7 +1883,7 b' msgstr ""' | |||
|
1704 | 1883 | |
|
1705 | 1884 | #: rhodecode/templates/admin/defaults/defaults.html:75 |
|
1706 | 1885 | #: rhodecode/templates/admin/repos/repo_edit.html:112 |
|
1707 |
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html: |
|
|
1886 | #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:72 | |
|
1708 | 1887 | msgid "Enable locking" |
|
1709 | 1888 | msgstr "" |
|
1710 | 1889 | |
@@ -1715,14 +1894,18 b' msgstr ""' | |||
|
1715 | 1894 | |
|
1716 | 1895 | #: rhodecode/templates/admin/defaults/defaults.html:84 |
|
1717 | 1896 | #: rhodecode/templates/admin/ldap/ldap.html:89 |
|
1718 |
#: rhodecode/templates/admin/ |
|
|
1719 |
#: rhodecode/templates/admin/repos |
|
|
1897 | #: rhodecode/templates/admin/permissions/permissions.html:92 | |
|
1898 | #: rhodecode/templates/admin/repos/repo_edit.html:148 | |
|
1899 | #: rhodecode/templates/admin/repos/repo_edit.html:173 | |
|
1900 | #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:80 | |
|
1720 | 1901 | #: rhodecode/templates/admin/settings/hooks.html:73 |
|
1721 |
#: rhodecode/templates/admin/users/user_ |
|
|
1722 |
#: rhodecode/templates/admin/users/user_edit.html:1 |
|
|
1723 |
#: rhodecode/templates/admin/users/user_edit |
|
|
1902 | #: rhodecode/templates/admin/users/user_add.html:94 | |
|
1903 | #: rhodecode/templates/admin/users/user_edit.html:140 | |
|
1904 | #: rhodecode/templates/admin/users/user_edit.html:185 | |
|
1905 | #: rhodecode/templates/admin/users/user_edit_my_account_form.html:88 | |
|
1906 | #: rhodecode/templates/admin/users_groups/users_group_add.html:49 | |
|
1907 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:90 | |
|
1724 | 1908 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:135 |
|
1725 | #: rhodecode/templates/settings/repo_settings.html:94 | |
|
1726 | 1909 | msgid "Save" |
|
1727 | 1910 | msgstr "" |
|
1728 | 1911 | |
@@ -1731,7 +1914,9 b' msgid "LDAP administration"' | |||
|
1731 | 1914 | msgstr "" |
|
1732 | 1915 | |
|
1733 | 1916 | #: rhodecode/templates/admin/ldap/ldap.html:11 |
|
1734 | msgid "Ldap" | |
|
1917 | #: rhodecode/templates/admin/users/users.html:86 | |
|
1918 | #: rhodecode/templates/base/base.html:74 | |
|
1919 | msgid "LDAP" | |
|
1735 | 1920 | msgstr "" |
|
1736 | 1921 | |
|
1737 | 1922 | #: rhodecode/templates/admin/ldap/ldap.html:28 |
@@ -1813,8 +1998,7 b' msgid "Comments"' | |||
|
1813 | 1998 | msgstr "" |
|
1814 | 1999 | |
|
1815 | 2000 | #: rhodecode/templates/admin/notifications/notifications.html:31 |
|
1816 | #: rhodecode/templates/base/base.html:267 | |
|
1817 | #: rhodecode/templates/base/base.html:269 | |
|
2001 | #: rhodecode/templates/pullrequests/pullrequest_show_all.html:8 | |
|
1818 | 2002 | msgid "Pull requests" |
|
1819 | 2003 | msgstr "" |
|
1820 | 2004 | |
@@ -1832,6 +2016,7 b' msgid "Show notification"' | |||
|
1832 | 2016 | msgstr "" |
|
1833 | 2017 | |
|
1834 | 2018 | #: rhodecode/templates/admin/notifications/show_notification.html:9 |
|
2019 | #: rhodecode/templates/base/base.html:241 | |
|
1835 | 2020 | msgid "Notifications" |
|
1836 | 2021 | msgstr "" |
|
1837 | 2022 | |
@@ -1840,11 +2025,12 b' msgid "Permissions administration"' | |||
|
1840 | 2025 | msgstr "" |
|
1841 | 2026 | |
|
1842 | 2027 | #: rhodecode/templates/admin/permissions/permissions.html:11 |
|
1843 |
#: rhodecode/templates/admin/repos/repo_edit.html:1 |
|
|
1844 |
#: rhodecode/templates/admin/repos |
|
|
1845 |
#: rhodecode/templates/admin/ |
|
|
2028 | #: rhodecode/templates/admin/repos/repo_edit.html:158 | |
|
2029 | #: rhodecode/templates/admin/repos/repo_edit.html:165 | |
|
2030 | #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:64 | |
|
2031 | #: rhodecode/templates/admin/users/user_edit.html:150 | |
|
1846 | 2032 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:100 |
|
1847 |
#: rhodecode/templates/ |
|
|
2033 | #: rhodecode/templates/base/base.html:73 | |
|
1848 | 2034 | msgid "Permissions" |
|
1849 | 2035 | msgstr "" |
|
1850 | 2036 | |
@@ -1858,30 +2044,21 b' msgstr ""' | |||
|
1858 | 2044 | |
|
1859 | 2045 | #: rhodecode/templates/admin/permissions/permissions.html:49 |
|
1860 | 2046 | msgid "" |
|
1861 |
"All default permissions on each repository will be reset to cho |
|
|
2047 | "All default permissions on each repository will be reset to chosen " | |
|
1862 | 2048 | "permission, note that all custom default permission on repositories will " |
|
1863 | 2049 | "be lost" |
|
1864 | 2050 | msgstr "" |
|
1865 | 2051 | |
|
1866 | 2052 | #: rhodecode/templates/admin/permissions/permissions.html:50 |
|
1867 | 2053 | #: rhodecode/templates/admin/permissions/permissions.html:63 |
|
1868 |
msgid " |
|
|
1869 | msgstr "" | |
|
1870 | ||
|
1871 | #: rhodecode/templates/admin/permissions/permissions.html:55 | |
|
1872 | #: rhodecode/templates/admin/repos/repo_add_base.html:29 | |
|
1873 | #: rhodecode/templates/admin/repos/repo_edit.html:49 | |
|
1874 | #: rhodecode/templates/admin/repos_groups/repos_groups.html:4 | |
|
1875 | #: rhodecode/templates/forks/fork.html:50 | |
|
1876 | #: rhodecode/templates/settings/repo_settings.html:48 | |
|
1877 | msgid "Repository group" | |
|
2054 | msgid "Overwrite existing settings" | |
|
1878 | 2055 | msgstr "" |
|
1879 | 2056 | |
|
1880 | 2057 | #: rhodecode/templates/admin/permissions/permissions.html:62 |
|
1881 | 2058 | msgid "" |
|
1882 |
"All default permissions on each repository group will be reset to cho |
|
|
1883 |
" |
|
|
1884 |
" |
|
|
2059 | "All default permissions on each repository group will be reset to chosen " | |
|
2060 | "permission, note that all custom default permission on repository groups " | |
|
2061 | "will be lost" | |
|
1885 | 2062 | msgstr "" |
|
1886 | 2063 | |
|
1887 | 2064 | #: rhodecode/templates/admin/permissions/permissions.html:69 |
@@ -1896,40 +2073,95 b' msgstr ""' | |||
|
1896 | 2073 | msgid "Repository forking" |
|
1897 | 2074 | msgstr "" |
|
1898 | 2075 | |
|
1899 |
#: rhodecode/templates/admin/permissions/permissions.html:9 |
|
|
1900 |
#: rhodecode/templates/admin/ |
|
|
1901 | msgid "set" | |
|
1902 | msgstr "" | |
|
1903 | ||
|
1904 |
#: rhodecode/templates/admin/repos |
|
|
1905 |
#: rhodecode/templates/admin/ |
|
|
1906 | msgid "Add repository" | |
|
1907 | msgstr "" | |
|
1908 | ||
|
1909 |
#: rhodecode/templates/admin/ |
|
|
1910 |
#: rhodecode/templates/admin/r |
|
|
1911 |
#: rhodecode/templates/admin/ |
|
|
2076 | #: rhodecode/templates/admin/permissions/permissions.html:93 | |
|
2077 | #: rhodecode/templates/admin/permissions/permissions.html:154 | |
|
2078 | #: rhodecode/templates/admin/repos/repo_edit.html:149 | |
|
2079 | #: rhodecode/templates/admin/repos/repo_edit.html:174 | |
|
2080 | #: rhodecode/templates/admin/repos/repo_edit.html:388 | |
|
2081 | #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:81 | |
|
2082 | #: rhodecode/templates/admin/settings/settings.html:115 | |
|
2083 | #: rhodecode/templates/admin/settings/settings.html:187 | |
|
2084 | #: rhodecode/templates/admin/settings/settings.html:278 | |
|
2085 | #: rhodecode/templates/admin/users/user_edit.html:141 | |
|
2086 | #: rhodecode/templates/admin/users/user_edit.html:186 | |
|
2087 | #: rhodecode/templates/admin/users/user_edit.html:235 | |
|
2088 | #: rhodecode/templates/admin/users/user_edit.html:283 | |
|
2089 | #: rhodecode/templates/admin/users/user_edit_my_account_form.html:89 | |
|
2090 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:136 | |
|
2091 | #: rhodecode/templates/files/files_add.html:80 | |
|
2092 | #: rhodecode/templates/files/files_edit.html:66 | |
|
2093 | #: rhodecode/templates/pullrequests/pullrequest.html:110 | |
|
2094 | msgid "Reset" | |
|
2095 | msgstr "" | |
|
2096 | ||
|
2097 | #: rhodecode/templates/admin/permissions/permissions.html:103 | |
|
2098 | msgid "Default User Permissions" | |
|
2099 | msgstr "" | |
|
2100 | ||
|
2101 | #: rhodecode/templates/admin/permissions/permissions.html:113 | |
|
2102 | #: rhodecode/templates/admin/users/user_edit.html:244 | |
|
2103 | msgid "Allowed IP addresses" | |
|
2104 | msgstr "" | |
|
2105 | ||
|
2106 | #: rhodecode/templates/admin/permissions/permissions.html:127 | |
|
2107 | #: rhodecode/templates/admin/repos/repo_edit.html:347 | |
|
2108 | #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:70 | |
|
2109 | #: rhodecode/templates/admin/users/user_edit.html:212 | |
|
2110 | #: rhodecode/templates/admin/users/user_edit.html:257 | |
|
2111 | #: rhodecode/templates/admin/users_groups/users_groups.html:46 | |
|
2112 | #: rhodecode/templates/data_table/_dt_elements.html:122 | |
|
2113 | #: rhodecode/templates/data_table/_dt_elements.html:130 | |
|
2114 | msgid "delete" | |
|
2115 | msgstr "" | |
|
2116 | ||
|
2117 | #: rhodecode/templates/admin/permissions/permissions.html:128 | |
|
2118 | #: rhodecode/templates/admin/users/user_edit.html:258 | |
|
2119 | #, fuzzy, python-format | |
|
2120 | msgid "Confirm to delete this ip: %s" | |
|
2121 | msgstr "" | |
|
2122 | ||
|
2123 | #: rhodecode/templates/admin/permissions/permissions.html:134 | |
|
2124 | #: rhodecode/templates/admin/users/user_edit.html:264 | |
|
2125 | msgid "All IP addresses are allowed" | |
|
2126 | msgstr "" | |
|
2127 | ||
|
2128 | #: rhodecode/templates/admin/permissions/permissions.html:145 | |
|
2129 | #: rhodecode/templates/admin/users/user_edit.html:275 | |
|
2130 | msgid "New ip address" | |
|
2131 | msgstr "" | |
|
2132 | ||
|
2133 | #: rhodecode/templates/admin/permissions/permissions.html:153 | |
|
2134 | #: rhodecode/templates/admin/repos/repo_add_base.html:73 | |
|
2135 | #: rhodecode/templates/admin/repos/repo_edit.html:387 | |
|
2136 | #: rhodecode/templates/admin/users/user_edit.html:234 | |
|
2137 | #: rhodecode/templates/admin/users/user_edit.html:282 | |
|
2138 | msgid "Add" | |
|
2139 | msgstr "" | |
|
2140 | ||
|
2141 | #: rhodecode/templates/admin/repos/repo_add.html:12 | |
|
2142 | #: rhodecode/templates/admin/repos/repo_add.html:16 | |
|
2143 | #: rhodecode/templates/base/base.html:69 rhodecode/templates/base/base.html:103 | |
|
2144 | #: rhodecode/templates/base/base.html:263 | |
|
1912 | 2145 | msgid "Repositories" |
|
1913 | 2146 | msgstr "" |
|
1914 | 2147 | |
|
1915 |
#: rhodecode/templates/admin/repos/repo_add.html:1 |
|
|
1916 |
msgid " |
|
|
2148 | #: rhodecode/templates/admin/repos/repo_add.html:19 | |
|
2149 | msgid "Add new" | |
|
1917 | 2150 | msgstr "" |
|
1918 | 2151 | |
|
1919 | 2152 | #: rhodecode/templates/admin/repos/repo_add_base.html:20 |
|
1920 |
#: rhodecode/templates/summary/summary.html: |
|
|
1921 |
#: rhodecode/templates/summary/summary.html: |
|
|
2153 | #: rhodecode/templates/summary/summary.html:96 | |
|
2154 | #: rhodecode/templates/summary/summary.html:97 | |
|
1922 | 2155 | msgid "Clone from" |
|
1923 | 2156 | msgstr "" |
|
1924 | 2157 | |
|
1925 | 2158 | #: rhodecode/templates/admin/repos/repo_add_base.html:24 |
|
1926 | 2159 | #: rhodecode/templates/admin/repos/repo_edit.html:44 |
|
1927 | #: rhodecode/templates/settings/repo_settings.html:43 | |
|
1928 | 2160 | msgid "Optional http[s] url from which repository should be cloned." |
|
1929 | 2161 | msgstr "" |
|
1930 | 2162 | |
|
1931 | 2163 | #: rhodecode/templates/admin/repos/repo_add_base.html:33 |
|
1932 |
#: rhodecode/templates/forks/fork.html:5 |
|
|
2164 | #: rhodecode/templates/forks/fork.html:51 | |
|
1933 | 2165 | msgid "Optionaly select a group to put this repository into." |
|
1934 | 2166 | msgstr "" |
|
1935 | 2167 | |
@@ -1939,57 +2171,39 b' msgstr ""' | |||
|
1939 | 2171 | |
|
1940 | 2172 | #: rhodecode/templates/admin/repos/repo_add_base.html:47 |
|
1941 | 2173 | #: rhodecode/templates/admin/repos/repo_edit.html:66 |
|
1942 |
#: rhodecode/templates/forks/fork.html: |
|
|
1943 | #: rhodecode/templates/settings/repo_settings.html:57 | |
|
2174 | #: rhodecode/templates/forks/fork.html:38 | |
|
1944 | 2175 | msgid "Landing revision" |
|
1945 | 2176 | msgstr "" |
|
1946 | 2177 | |
|
1947 | 2178 | #: rhodecode/templates/admin/repos/repo_add_base.html:51 |
|
1948 | 2179 | #: rhodecode/templates/admin/repos/repo_edit.html:70 |
|
1949 |
#: rhodecode/templates/forks/fork.html:4 |
|
|
1950 | #: rhodecode/templates/settings/repo_settings.html:61 | |
|
2180 | #: rhodecode/templates/forks/fork.html:42 | |
|
1951 | 2181 | msgid "Default revision for files page, downloads, whoosh and readme" |
|
1952 | 2182 | msgstr "" |
|
1953 | 2183 | |
|
1954 | 2184 | #: rhodecode/templates/admin/repos/repo_add_base.html:60 |
|
1955 | 2185 | #: rhodecode/templates/admin/repos/repo_edit.html:79 |
|
1956 |
#: rhodecode/templates/forks/fork.html:6 |
|
|
1957 | #: rhodecode/templates/settings/repo_settings.html:70 | |
|
2186 | #: rhodecode/templates/forks/fork.html:60 | |
|
1958 | 2187 | msgid "Keep it short and to the point. Use a README file for longer descriptions." |
|
1959 | 2188 | msgstr "" |
|
1960 | 2189 | |
|
1961 |
#: rhodecode/templates/admin/repos/repo_ |
|
|
1962 | msgid "add" | |
|
1963 | msgstr "" | |
|
1964 | ||
|
1965 | #: rhodecode/templates/admin/repos/repo_add_create_repository.html:9 | |
|
1966 | msgid "add new repository" | |
|
1967 | msgstr "" | |
|
1968 | ||
|
1969 | #: rhodecode/templates/admin/repos/repo_edit.html:5 | |
|
2190 | #: rhodecode/templates/admin/repos/repo_edit.html:8 | |
|
1970 | 2191 | msgid "Edit repository" |
|
1971 | 2192 | msgstr "" |
|
1972 | 2193 | |
|
1973 |
#: rhodecode/templates/admin/repos/repo_edit.html:1 |
|
|
1974 |
#: rhodecode/templates/admin/ |
|
|
1975 |
#: rhodecode/templates/admin/ |
|
|
1976 | #: rhodecode/templates/admin/users/user_edit.html:230 | |
|
1977 | #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:28 | |
|
1978 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:13 | |
|
1979 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:207 | |
|
1980 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:209 | |
|
1981 | #: rhodecode/templates/files/files_source.html:29 | |
|
1982 | #: rhodecode/templates/journal/journal_page_repos.html:29 | |
|
1983 | msgid "edit" | |
|
2194 | #: rhodecode/templates/admin/repos/repo_edit.html:12 | |
|
2195 | #: rhodecode/templates/admin/settings/hooks.html:9 | |
|
2196 | #: rhodecode/templates/admin/settings/settings.html:11 | |
|
2197 | #: rhodecode/templates/base/base.html:76 rhodecode/templates/base/base.html:121 | |
|
2198 | #: rhodecode/templates/summary/summary.html:212 | |
|
2199 | msgid "Settings" | |
|
1984 | 2200 | msgstr "" |
|
1985 | 2201 | |
|
1986 | 2202 | #: rhodecode/templates/admin/repos/repo_edit.html:40 |
|
1987 | #: rhodecode/templates/settings/repo_settings.html:39 | |
|
1988 | 2203 | msgid "Clone uri" |
|
1989 | 2204 | msgstr "" |
|
1990 | 2205 | |
|
1991 | 2206 | #: rhodecode/templates/admin/repos/repo_edit.html:53 |
|
1992 | #: rhodecode/templates/settings/repo_settings.html:52 | |
|
1993 | 2207 | msgid "Optional select a group to put this repository into." |
|
1994 | 2208 | msgstr "" |
|
1995 | 2209 | |
@@ -1997,175 +2211,204 b' msgstr ""' | |||
|
1997 | 2211 | msgid "Change owner of this repository." |
|
1998 | 2212 | msgstr "" |
|
1999 | 2213 | |
|
2000 |
#: rhodecode/templates/admin/repos/repo_edit.html:14 |
|
|
2001 | #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:75 | |
|
2002 | #: rhodecode/templates/admin/settings/settings.html:113 | |
|
2003 | #: rhodecode/templates/admin/settings/settings.html:179 | |
|
2004 |
#: rhodecode/templates/admin/ |
|
|
2005 | #: rhodecode/templates/admin/users/user_edit.html:134 | |
|
2006 | #: rhodecode/templates/admin/users/user_edit.html:179 | |
|
2007 | #: rhodecode/templates/admin/users/user_edit.html:282 | |
|
2008 | #: rhodecode/templates/admin/users/user_edit_my_account_form.html:80 | |
|
2009 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:136 | |
|
2010 | #: rhodecode/templates/files/files_add.html:82 | |
|
2011 | #: rhodecode/templates/files/files_edit.html:68 | |
|
2012 | #: rhodecode/templates/pullrequests/pullrequest.html:124 | |
|
2013 | #: rhodecode/templates/settings/repo_settings.html:95 | |
|
2014 | msgid "Reset" | |
|
2015 | msgstr "" | |
|
2016 | ||
|
2017 | #: rhodecode/templates/admin/repos/repo_edit.html:152 | |
|
2018 | msgid "Administration" | |
|
2019 | msgstr "" | |
|
2020 | ||
|
2021 | #: rhodecode/templates/admin/repos/repo_edit.html:155 | |
|
2214 | #: rhodecode/templates/admin/repos/repo_edit.html:184 | |
|
2215 | msgid "Advanced settings" | |
|
2216 | msgstr "" | |
|
2217 | ||
|
2218 | #: rhodecode/templates/admin/repos/repo_edit.html:187 | |
|
2022 | 2219 | msgid "Statistics" |
|
2023 | 2220 | msgstr "" |
|
2024 | 2221 | |
|
2025 |
#: rhodecode/templates/admin/repos/repo_edit.html:1 |
|
|
2222 | #: rhodecode/templates/admin/repos/repo_edit.html:191 | |
|
2026 | 2223 | msgid "Reset current statistics" |
|
2027 | 2224 | msgstr "" |
|
2028 | 2225 | |
|
2029 |
#: rhodecode/templates/admin/repos/repo_edit.html:1 |
|
|
2226 | #: rhodecode/templates/admin/repos/repo_edit.html:191 | |
|
2030 | 2227 | msgid "Confirm to remove current statistics" |
|
2031 | 2228 | msgstr "" |
|
2032 | 2229 | |
|
2033 |
#: rhodecode/templates/admin/repos/repo_edit.html:1 |
|
|
2230 | #: rhodecode/templates/admin/repos/repo_edit.html:194 | |
|
2034 | 2231 | msgid "Fetched to rev" |
|
2035 | 2232 | msgstr "" |
|
2036 | 2233 | |
|
2037 |
#: rhodecode/templates/admin/repos/repo_edit.html:1 |
|
|
2234 | #: rhodecode/templates/admin/repos/repo_edit.html:195 | |
|
2038 | 2235 | msgid "Stats gathered" |
|
2039 | 2236 | msgstr "" |
|
2040 | 2237 | |
|
2041 | #: rhodecode/templates/admin/repos/repo_edit.html:171 | |
|
2042 | msgid "Remote" | |
|
2043 | msgstr "" | |
|
2044 | ||
|
2045 | #: rhodecode/templates/admin/repos/repo_edit.html:175 | |
|
2046 | msgid "Pull changes from remote location" | |
|
2047 | msgstr "" | |
|
2048 | ||
|
2049 | #: rhodecode/templates/admin/repos/repo_edit.html:175 | |
|
2050 | msgid "Confirm to pull changes from remote side" | |
|
2051 | msgstr "" | |
|
2052 | ||
|
2053 | #: rhodecode/templates/admin/repos/repo_edit.html:186 | |
|
2054 | msgid "Cache" | |
|
2055 | msgstr "" | |
|
2056 | ||
|
2057 | #: rhodecode/templates/admin/repos/repo_edit.html:190 | |
|
2058 | msgid "Invalidate repository cache" | |
|
2059 | msgstr "" | |
|
2060 | ||
|
2061 | #: rhodecode/templates/admin/repos/repo_edit.html:190 | |
|
2062 | msgid "Confirm to invalidate repository cache" | |
|
2063 | msgstr "" | |
|
2064 | ||
|
2065 | #: rhodecode/templates/admin/repos/repo_edit.html:193 | |
|
2066 | msgid "" | |
|
2067 | "Manually invalidate cache for this repository. On first access repository" | |
|
2068 | " will be cached again" | |
|
2069 | msgstr "" | |
|
2070 | ||
|
2071 | #: rhodecode/templates/admin/repos/repo_edit.html:198 | |
|
2072 | msgid "List of cached values" | |
|
2073 | msgstr "" | |
|
2074 | ||
|
2075 | #: rhodecode/templates/admin/repos/repo_edit.html:201 | |
|
2076 | msgid "Prefix" | |
|
2077 | msgstr "" | |
|
2078 | ||
|
2079 | #: rhodecode/templates/admin/repos/repo_edit.html:202 | |
|
2080 | msgid "Key" | |
|
2081 | msgstr "" | |
|
2082 | ||
|
2083 | 2238 | #: rhodecode/templates/admin/repos/repo_edit.html:203 |
|
2084 | #: rhodecode/templates/admin/users/user_add.html:86 | |
|
2085 | #: rhodecode/templates/admin/users/user_edit.html:117 | |
|
2086 | #: rhodecode/templates/admin/users_groups/users_group_add.html:41 | |
|
2087 |
#: rhodecode/templates/admin/ |
|
|
2088 | msgid "Active" | |
|
2239 | msgid "Remote" | |
|
2240 | msgstr "" | |
|
2241 | ||
|
2242 | #: rhodecode/templates/admin/repos/repo_edit.html:207 | |
|
2243 | msgid "Pull changes from remote location" | |
|
2244 | msgstr "" | |
|
2245 | ||
|
2246 | #: rhodecode/templates/admin/repos/repo_edit.html:207 | |
|
2247 | msgid "Confirm to pull changes from remote side" | |
|
2089 | 2248 | msgstr "" |
|
2090 | 2249 | |
|
2091 | 2250 | #: rhodecode/templates/admin/repos/repo_edit.html:218 |
|
2092 | #: rhodecode/templates/base/base.html:331 | |
|
2093 | #: rhodecode/templates/base/base.html:333 | |
|
2094 | #: rhodecode/templates/base/base.html:335 | |
|
2251 | msgid "Cache" | |
|
2252 | msgstr "" | |
|
2253 | ||
|
2254 | #: rhodecode/templates/admin/repos/repo_edit.html:222 | |
|
2255 | msgid "Invalidate repository cache" | |
|
2256 | msgstr "" | |
|
2257 | ||
|
2258 | #: rhodecode/templates/admin/repos/repo_edit.html:222 | |
|
2259 | msgid "Confirm to invalidate repository cache" | |
|
2260 | msgstr "" | |
|
2261 | ||
|
2262 | #: rhodecode/templates/admin/repos/repo_edit.html:225 | |
|
2263 | msgid "" | |
|
2264 | "Manually invalidate cache for this repository. On first access repository" | |
|
2265 | " will be cached again" | |
|
2266 | msgstr "" | |
|
2267 | ||
|
2268 | #: rhodecode/templates/admin/repos/repo_edit.html:230 | |
|
2269 | msgid "List of cached values" | |
|
2270 | msgstr "" | |
|
2271 | ||
|
2272 | #: rhodecode/templates/admin/repos/repo_edit.html:233 | |
|
2273 | msgid "Prefix" | |
|
2274 | msgstr "" | |
|
2275 | ||
|
2276 | #: rhodecode/templates/admin/repos/repo_edit.html:234 | |
|
2277 | msgid "Key" | |
|
2278 | msgstr "" | |
|
2279 | ||
|
2280 | #: rhodecode/templates/admin/repos/repo_edit.html:235 | |
|
2281 | #: rhodecode/templates/admin/users/user_add.html:86 | |
|
2282 | #: rhodecode/templates/admin/users/user_edit.html:124 | |
|
2283 | #: rhodecode/templates/admin/users/users.html:84 | |
|
2284 | #: rhodecode/templates/admin/users_groups/users_group_add.html:41 | |
|
2285 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:42 | |
|
2286 | #: rhodecode/templates/admin/users_groups/users_groups.html:36 | |
|
2287 | msgid "Active" | |
|
2288 | msgstr "" | |
|
2289 | ||
|
2290 | #: rhodecode/templates/admin/repos/repo_edit.html:250 | |
|
2291 | #: rhodecode/templates/base/base.html:280 | |
|
2292 | #: rhodecode/templates/base/base.html:281 | |
|
2095 | 2293 | msgid "Public journal" |
|
2096 | 2294 | msgstr "" |
|
2097 | 2295 | |
|
2098 |
#: rhodecode/templates/admin/repos/repo_edit.html:2 |
|
|
2296 | #: rhodecode/templates/admin/repos/repo_edit.html:256 | |
|
2099 | 2297 | msgid "Remove from public journal" |
|
2100 | 2298 | msgstr "" |
|
2101 | 2299 | |
|
2102 |
#: rhodecode/templates/admin/repos/repo_edit.html:2 |
|
|
2300 | #: rhodecode/templates/admin/repos/repo_edit.html:258 | |
|
2103 | 2301 | msgid "Add to public journal" |
|
2104 | 2302 | msgstr "" |
|
2105 | 2303 | |
|
2106 |
#: rhodecode/templates/admin/repos/repo_edit.html:23 |
|
|
2304 | #: rhodecode/templates/admin/repos/repo_edit.html:263 | |
|
2107 | 2305 | msgid "" |
|
2108 | 2306 | "All actions made on this repository will be accessible to everyone in " |
|
2109 | 2307 | "public journal" |
|
2110 | 2308 | msgstr "" |
|
2111 | 2309 | |
|
2112 |
#: rhodecode/templates/admin/repos/repo_edit.html:2 |
|
|
2310 | #: rhodecode/templates/admin/repos/repo_edit.html:270 | |
|
2113 | 2311 | msgid "Locking" |
|
2114 | 2312 | msgstr "" |
|
2115 | 2313 | |
|
2116 |
#: rhodecode/templates/admin/repos/repo_edit.html:2 |
|
|
2314 | #: rhodecode/templates/admin/repos/repo_edit.html:275 | |
|
2117 | 2315 | msgid "Unlock locked repo" |
|
2118 | 2316 | msgstr "" |
|
2119 | 2317 | |
|
2120 |
#: rhodecode/templates/admin/repos/repo_edit.html:2 |
|
|
2318 | #: rhodecode/templates/admin/repos/repo_edit.html:275 | |
|
2121 | 2319 | msgid "Confirm to unlock repository" |
|
2122 | 2320 | msgstr "" |
|
2123 | 2321 | |
|
2124 |
#: rhodecode/templates/admin/repos/repo_edit.html:2 |
|
|
2322 | #: rhodecode/templates/admin/repos/repo_edit.html:278 | |
|
2125 | 2323 | msgid "lock repo" |
|
2126 | 2324 | msgstr "" |
|
2127 | 2325 | |
|
2128 | #: rhodecode/templates/admin/repos/repo_edit.html:246 | |
|
2129 | msgid "Confirm to lock repository" | |
|
2130 | msgstr "" | |
|
2131 | ||
|
2132 | #: rhodecode/templates/admin/repos/repo_edit.html:247 | |
|
2133 | msgid "Repository is not locked" | |
|
2134 | msgstr "" | |
|
2135 | ||
|
2136 | #: rhodecode/templates/admin/repos/repo_edit.html:252 | |
|
2137 | msgid "Force locking on repository. Works only when anonymous access is disabled" | |
|
2138 | msgstr "" | |
|
2139 | ||
|
2140 | #: rhodecode/templates/admin/repos/repo_edit.html:259 | |
|
2141 | msgid "Set as fork of" | |
|
2142 | msgstr "" | |
|
2143 | ||
|
2144 | #: rhodecode/templates/admin/repos/repo_edit.html:268 | |
|
2145 | msgid "Manually set this repository as a fork of another from the list" | |
|
2146 | msgstr "" | |
|
2147 | ||
|
2148 | #: rhodecode/templates/admin/repos/repo_edit.html:274 | |
|
2149 | #: rhodecode/templates/changeset/changeset_file_comment.html:26 | |
|
2150 | msgid "Delete" | |
|
2151 | msgstr "" | |
|
2152 | ||
|
2153 | 2326 | #: rhodecode/templates/admin/repos/repo_edit.html:278 |
|
2154 | #: rhodecode/templates/settings/repo_settings.html:115 | |
|
2327 | msgid "Confirm to lock repository" | |
|
2328 | msgstr "" | |
|
2329 | ||
|
2330 | #: rhodecode/templates/admin/repos/repo_edit.html:279 | |
|
2331 | msgid "Repository is not locked" | |
|
2332 | msgstr "" | |
|
2333 | ||
|
2334 | #: rhodecode/templates/admin/repos/repo_edit.html:284 | |
|
2335 | msgid "Force locking on repository. Works only when anonymous access is disabled" | |
|
2336 | msgstr "" | |
|
2337 | ||
|
2338 | #: rhodecode/templates/admin/repos/repo_edit.html:291 | |
|
2339 | msgid "Set as fork of" | |
|
2340 | msgstr "" | |
|
2341 | ||
|
2342 | #: rhodecode/templates/admin/repos/repo_edit.html:296 | |
|
2343 | msgid "set" | |
|
2344 | msgstr "" | |
|
2345 | ||
|
2346 | #: rhodecode/templates/admin/repos/repo_edit.html:300 | |
|
2347 | msgid "Manually set this repository as a fork of another from the list" | |
|
2348 | msgstr "" | |
|
2349 | ||
|
2350 | #: rhodecode/templates/admin/repos/repo_edit.html:306 | |
|
2351 | #: rhodecode/templates/changeset/changeset_file_comment.html:41 | |
|
2352 | msgid "Delete" | |
|
2353 | msgstr "" | |
|
2354 | ||
|
2355 | #: rhodecode/templates/admin/repos/repo_edit.html:315 | |
|
2155 | 2356 | msgid "Remove this repository" |
|
2156 | 2357 | msgstr "" |
|
2157 | 2358 | |
|
2158 |
#: rhodecode/templates/admin/repos/repo_edit.html: |
|
|
2159 | #: rhodecode/templates/settings/repo_settings.html:115 | |
|
2359 | #: rhodecode/templates/admin/repos/repo_edit.html:315 | |
|
2160 | 2360 | msgid "Confirm to delete this repository" |
|
2161 | 2361 | msgstr "" |
|
2162 | 2362 | |
|
2163 |
#: rhodecode/templates/admin/repos/repo_edit.html: |
|
|
2164 | #: rhodecode/templates/settings/repo_settings.html:119 | |
|
2363 | #: rhodecode/templates/admin/repos/repo_edit.html:317 | |
|
2364 | #, python-format | |
|
2365 | msgid "this repository has %s fork" | |
|
2366 | msgid_plural "this repository has %s forks" | |
|
2367 | msgstr[0] "" | |
|
2368 | msgstr[1] "" | |
|
2369 | ||
|
2370 | #: rhodecode/templates/admin/repos/repo_edit.html:318 | |
|
2371 | msgid "Detach forks" | |
|
2372 | msgstr "" | |
|
2373 | ||
|
2374 | #: rhodecode/templates/admin/repos/repo_edit.html:319 | |
|
2375 | msgid "Delete forks" | |
|
2376 | msgstr "" | |
|
2377 | ||
|
2378 | #: rhodecode/templates/admin/repos/repo_edit.html:322 | |
|
2165 | 2379 | msgid "" |
|
2166 | 2380 | "This repository will be renamed in a special way in order to be " |
|
2167 |
"unaccesible for RhodeCode and VCS systems. If you need fully delete it |
|
|
2168 | "from file system please do it manually" | |
|
2381 | "unaccesible for RhodeCode and VCS systems. If you need to fully delete it" | |
|
2382 | " from file system please do it manually" | |
|
2383 | msgstr "" | |
|
2384 | ||
|
2385 | #: rhodecode/templates/admin/repos/repo_edit.html:336 | |
|
2386 | msgid "Extra fields" | |
|
2387 | msgstr "" | |
|
2388 | ||
|
2389 | #: rhodecode/templates/admin/repos/repo_edit.html:348 | |
|
2390 | #, fuzzy, python-format | |
|
2391 | msgid "Confirm to delete this field: %s" | |
|
2392 | msgstr "" | |
|
2393 | ||
|
2394 | #: rhodecode/templates/admin/repos/repo_edit.html:362 | |
|
2395 | msgid "New field key" | |
|
2396 | msgstr "" | |
|
2397 | ||
|
2398 | #: rhodecode/templates/admin/repos/repo_edit.html:370 | |
|
2399 | msgid "New field label" | |
|
2400 | msgstr "" | |
|
2401 | ||
|
2402 | #: rhodecode/templates/admin/repos/repo_edit.html:373 | |
|
2403 | msgid "Enter short label" | |
|
2404 | msgstr "" | |
|
2405 | ||
|
2406 | #: rhodecode/templates/admin/repos/repo_edit.html:379 | |
|
2407 | msgid "New field description" | |
|
2408 | msgstr "" | |
|
2409 | ||
|
2410 | #: rhodecode/templates/admin/repos/repo_edit.html:382 | |
|
2411 | msgid "Enter description of a field" | |
|
2169 | 2412 | msgstr "" |
|
2170 | 2413 | |
|
2171 | 2414 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:3 |
@@ -2185,8 +2428,6 b' msgstr ""' | |||
|
2185 | 2428 | |
|
2186 | 2429 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:6 |
|
2187 | 2430 | #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:6 |
|
2188 | #: rhodecode/templates/admin/users/users.html:85 | |
|
2189 | #: rhodecode/templates/base/base.html:229 | |
|
2190 | 2431 | msgid "admin" |
|
2191 | 2432 | msgstr "" |
|
2192 | 2433 | |
@@ -2196,78 +2437,58 b' msgid "member"' | |||
|
2196 | 2437 | msgstr "" |
|
2197 | 2438 | |
|
2198 | 2439 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:16 |
|
2199 | #: rhodecode/templates/data_table/_dt_elements.html:67 | |
|
2200 | #: rhodecode/templates/journal/journal.html:95 | |
|
2201 | #: rhodecode/templates/summary/summary.html:85 | |
|
2202 | 2440 | msgid "private repository" |
|
2203 | 2441 | msgstr "" |
|
2204 | 2442 | |
|
2205 | 2443 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:19 |
|
2206 | 2444 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:28 |
|
2207 |
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html: |
|
|
2445 | #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:20 | |
|
2446 | #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:35 | |
|
2208 | 2447 | msgid "default" |
|
2209 | 2448 | msgstr "" |
|
2210 | 2449 | |
|
2211 | 2450 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:33 |
|
2212 | 2451 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:58 |
|
2213 |
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:2 |
|
|
2214 |
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html: |
|
|
2452 | #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:25 | |
|
2453 | #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:55 | |
|
2215 | 2454 | msgid "revoke" |
|
2216 | 2455 | msgstr "" |
|
2217 | 2456 | |
|
2218 | 2457 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:83 |
|
2219 |
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html: |
|
|
2458 | #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:80 | |
|
2220 | 2459 | msgid "Add another member" |
|
2221 | 2460 | msgstr "" |
|
2222 | 2461 | |
|
2223 | 2462 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:97 |
|
2224 |
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html: |
|
|
2463 | #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:100 | |
|
2225 | 2464 | msgid "Failed to remove user" |
|
2226 | 2465 | msgstr "" |
|
2227 | 2466 | |
|
2228 | 2467 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:112 |
|
2229 |
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:1 |
|
|
2230 |
msgid "Failed to remove user |
|
|
2468 | #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:116 | |
|
2469 | msgid "Failed to remove user group" | |
|
2231 | 2470 | msgstr "" |
|
2232 | 2471 | |
|
2233 | 2472 | #: rhodecode/templates/admin/repos/repos.html:5 |
|
2234 | 2473 | msgid "Repositories administration" |
|
2235 | 2474 | msgstr "" |
|
2236 | 2475 | |
|
2237 |
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html: |
|
|
2476 | #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:86 | |
|
2238 | 2477 | msgid "apply to children" |
|
2239 | 2478 | msgstr "" |
|
2240 | 2479 | |
|
2241 |
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:7 |
|
|
2480 | #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:87 | |
|
2242 | 2481 | msgid "" |
|
2243 | "Set or revoke permission to all children of that group, including " | |
|
2244 | "repositories and other groups" | |
|
2482 | "Set or revoke permission to all children of that group, including non-" | |
|
2483 | "private repositories and other groups" | |
|
2484 | msgstr "" | |
|
2485 | ||
|
2486 | #: rhodecode/templates/admin/repos_groups/repos_groups.html:4 | |
|
2487 | #, python-format | |
|
2488 | msgid "%s Group Dashboard" | |
|
2245 | 2489 | msgstr "" |
|
2246 | 2490 | |
|
2247 | 2491 | #: rhodecode/templates/admin/repos_groups/repos_groups.html:9 |
|
2248 | #: rhodecode/templates/base/base.html:122 | |
|
2249 | #: rhodecode/templates/base/base.html:313 | |
|
2250 | #: rhodecode/templates/base/base.html:315 | |
|
2251 | #: rhodecode/templates/base/base.html:317 | |
|
2252 | #: rhodecode/templates/bookmarks/bookmarks.html:11 | |
|
2253 | #: rhodecode/templates/branches/branches.html:10 | |
|
2254 | #: rhodecode/templates/changelog/changelog.html:10 | |
|
2255 | #: rhodecode/templates/changeset/changeset.html:10 | |
|
2256 | #: rhodecode/templates/changeset/changeset_range.html:9 | |
|
2257 | #: rhodecode/templates/compare/compare_diff.html:9 | |
|
2258 | #: rhodecode/templates/files/file_diff.html:8 | |
|
2259 | #: rhodecode/templates/files/files.html:8 | |
|
2260 | #: rhodecode/templates/files/files_add.html:15 | |
|
2261 | #: rhodecode/templates/files/files_edit.html:15 | |
|
2262 | #: rhodecode/templates/followers/followers.html:9 | |
|
2263 | #: rhodecode/templates/forks/fork.html:9 rhodecode/templates/forks/forks.html:9 | |
|
2264 | #: rhodecode/templates/pullrequests/pullrequest.html:8 | |
|
2265 | #: rhodecode/templates/pullrequests/pullrequest_show.html:8 | |
|
2266 | #: rhodecode/templates/pullrequests/pullrequest_show_all.html:8 | |
|
2267 | #: rhodecode/templates/settings/repo_settings.html:9 | |
|
2268 | #: rhodecode/templates/shortlog/shortlog.html:10 | |
|
2269 | #: rhodecode/templates/summary/summary.html:8 | |
|
2270 | #: rhodecode/templates/tags/tags.html:11 | |
|
2271 | 2492 | msgid "Home" |
|
2272 | 2493 | msgstr "" |
|
2273 | 2494 | |
@@ -2276,80 +2497,78 b' msgid "with"' | |||
|
2276 | 2497 | msgstr "" |
|
2277 | 2498 | |
|
2278 | 2499 | #: rhodecode/templates/admin/repos_groups/repos_groups_add.html:5 |
|
2279 | msgid "Add repos group" | |
|
2280 | msgstr "" | |
|
2281 | ||
|
2282 |
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:1 |
|
|
2283 |
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:1 |
|
|
2284 | msgid "Repos groups" | |
|
2285 | msgstr "" | |
|
2286 | ||
|
2287 | #: rhodecode/templates/admin/repos_groups/repos_groups_add.html:12 | |
|
2288 | msgid "add new repos group" | |
|
2289 | msgstr "" | |
|
2290 | ||
|
2291 | #: rhodecode/templates/admin/repos_groups/repos_groups_add.html:50 | |
|
2292 | #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:50 | |
|
2500 | msgid "Add repository group" | |
|
2501 | msgstr "" | |
|
2502 | ||
|
2503 | #: rhodecode/templates/admin/repos_groups/repos_groups_add.html:11 | |
|
2504 | #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:11 | |
|
2505 | #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:16 | |
|
2506 | #: rhodecode/templates/base/base.html:70 rhodecode/templates/base/base.html:82 | |
|
2507 | msgid "Repository groups" | |
|
2508 | msgstr "" | |
|
2509 | ||
|
2510 | #: rhodecode/templates/admin/repos_groups/repos_groups_add.html:13 | |
|
2511 | msgid "Add new repository group" | |
|
2512 | msgstr "" | |
|
2513 | ||
|
2514 | #: rhodecode/templates/admin/repos_groups/repos_groups_add.html:51 | |
|
2515 | #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:56 | |
|
2293 | 2516 | msgid "Group parent" |
|
2294 | 2517 | msgstr "" |
|
2295 | 2518 | |
|
2296 |
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:5 |
|
|
2297 | #: rhodecode/templates/admin/users/user_add.html:94 | |
|
2298 | #: rhodecode/templates/admin/users_groups/users_group_add.html:49 | |
|
2299 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:90 | |
|
2300 | #: rhodecode/templates/pullrequests/pullrequest_show.html:131 | |
|
2519 | #: rhodecode/templates/admin/repos_groups/repos_groups_add.html:59 | |
|
2301 | 2520 | msgid "save" |
|
2302 | 2521 | msgstr "" |
|
2303 | 2522 | |
|
2304 | 2523 | #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:5 |
|
2305 | msgid "Edit repos group" | |
|
2306 | msgstr "" | |
|
2307 | ||
|
2308 |
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:1 |
|
|
2309 | msgid "edit repos group" | |
|
2310 | msgstr "" | |
|
2311 | ||
|
2312 | #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:70 | |
|
2524 | msgid "Edit repository group" | |
|
2525 | msgstr "" | |
|
2526 | ||
|
2527 | #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:13 | |
|
2528 | #, python-format | |
|
2529 | msgid "Edit repository group %s" | |
|
2530 | msgstr "" | |
|
2531 | ||
|
2532 | #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:27 | |
|
2533 | msgid "Add child group" | |
|
2534 | msgstr "" | |
|
2535 | ||
|
2536 | #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:76 | |
|
2313 | 2537 | msgid "" |
|
2314 | 2538 | "Enable lock-by-pulling on group. This option will be applied to all other" |
|
2315 | 2539 | " groups and repositories inside" |
|
2316 | 2540 | msgstr "" |
|
2317 | 2541 | |
|
2318 | 2542 | #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:5 |
|
2319 |
msgid "Repositor |
|
|
2320 | msgstr "" | |
|
2321 | ||
|
2322 |
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html: |
|
|
2323 | msgid "ADD NEW GROUP" | |
|
2324 | msgstr "" | |
|
2325 | ||
|
2326 | #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:35 | |
|
2543 | msgid "Repository groups administration" | |
|
2544 | msgstr "" | |
|
2545 | ||
|
2546 | #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:45 | |
|
2327 | 2547 | msgid "Number of toplevel repositories" |
|
2328 | 2548 | msgstr "" |
|
2329 | 2549 | |
|
2330 |
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html: |
|
|
2331 | #: rhodecode/templates/admin/users/users.html:87 | |
|
2332 | #: rhodecode/templates/admin/users_groups/users_groups.html:35 | |
|
2333 | msgid "action" | |
|
2334 | msgstr "" | |
|
2335 | ||
|
2336 | #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:55 | |
|
2337 |
#: rhodecode/templates/ |
|
|
2338 | #: rhodecode/templates/admin/users_groups/users_groups.html:44 | |
|
2339 | #: rhodecode/templates/data_table/_dt_elements.html:7 | |
|
2340 | #: rhodecode/templates/data_table/_dt_elements.html:121 | |
|
2341 | msgid "delete" | |
|
2342 | msgstr "" | |
|
2343 | ||
|
2344 | #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:55 | |
|
2550 | #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:64 | |
|
2551 | msgid "Edit" | |
|
2552 | msgstr "" | |
|
2553 | ||
|
2554 | #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:65 | |
|
2555 | #: rhodecode/templates/base/perms_summary.html:29 | |
|
2556 | #: rhodecode/templates/base/perms_summary.html:48 | |
|
2557 | #: rhodecode/templates/base/perms_summary.html:50 | |
|
2558 | #: rhodecode/templates/data_table/_dt_elements.html:116 | |
|
2559 | #: rhodecode/templates/data_table/_dt_elements.html:117 | |
|
2560 | msgid "edit" | |
|
2561 | msgstr "" | |
|
2562 | ||
|
2563 | #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:70 | |
|
2345 | 2564 | #, python-format |
|
2346 | 2565 | msgid "Confirm to delete this group: %s with %s repository" |
|
2347 | 2566 | msgid_plural "Confirm to delete this group: %s with %s repositories" |
|
2348 | 2567 | msgstr[0] "" |
|
2349 | 2568 | msgstr[1] "" |
|
2350 | 2569 | |
|
2351 |
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html: |
|
|
2352 |
msgid "There are no repositor |
|
|
2570 | #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:78 | |
|
2571 | msgid "There are no repository groups yet" | |
|
2353 | 2572 | msgstr "" |
|
2354 | 2573 | |
|
2355 | 2574 | #: rhodecode/templates/admin/settings/hooks.html:5 |
@@ -2357,12 +2576,6 b' msgstr ""' | |||
|
2357 | 2576 | msgid "Settings administration" |
|
2358 | 2577 | msgstr "" |
|
2359 | 2578 | |
|
2360 | #: rhodecode/templates/admin/settings/hooks.html:9 | |
|
2361 | #: rhodecode/templates/admin/settings/settings.html:9 | |
|
2362 | #: rhodecode/templates/settings/repo_settings.html:13 | |
|
2363 | msgid "Settings" | |
|
2364 | msgstr "" | |
|
2365 | ||
|
2366 | 2579 | #: rhodecode/templates/admin/settings/hooks.html:24 |
|
2367 | 2580 | msgid "Built in hooks - read only" |
|
2368 | 2581 | msgstr "" |
@@ -2379,205 +2592,210 b' msgstr ""' | |||
|
2379 | 2592 | msgid "Failed to remove hook" |
|
2380 | 2593 | msgstr "" |
|
2381 | 2594 | |
|
2382 |
#: rhodecode/templates/admin/settings/settings.html:2 |
|
|
2595 | #: rhodecode/templates/admin/settings/settings.html:26 | |
|
2383 | 2596 | msgid "Remap and rescan repositories" |
|
2384 | 2597 | msgstr "" |
|
2385 | 2598 | |
|
2386 |
#: rhodecode/templates/admin/settings/settings.html:3 |
|
|
2387 |
msgid " |
|
|
2388 | msgstr "" | |
|
2389 | ||
|
2390 |
#: rhodecode/templates/admin/settings/settings.html: |
|
|
2599 | #: rhodecode/templates/admin/settings/settings.html:34 | |
|
2600 | msgid "Rescan option" | |
|
2601 | msgstr "" | |
|
2602 | ||
|
2603 | #: rhodecode/templates/admin/settings/settings.html:40 | |
|
2391 | 2604 | msgid "" |
|
2392 | 2605 | "In case a repository was deleted from filesystem and there are leftovers " |
|
2393 | 2606 | "in the database check this option to scan obsolete data in database and " |
|
2394 | 2607 | "remove it." |
|
2395 | 2608 | msgstr "" |
|
2396 | 2609 | |
|
2397 | #: rhodecode/templates/admin/settings/settings.html:39 | |
|
2398 | msgid "destroy old data" | |
|
2399 | msgstr "" | |
|
2400 | ||
|
2401 | 2610 | #: rhodecode/templates/admin/settings/settings.html:41 |
|
2611 | msgid "Destroy old data" | |
|
2612 | msgstr "" | |
|
2613 | ||
|
2614 | #: rhodecode/templates/admin/settings/settings.html:43 | |
|
2402 | 2615 | msgid "" |
|
2403 | 2616 | "Rescan repositories location for new repositories. Also deletes obsolete " |
|
2404 | 2617 | "if `destroy` flag is checked " |
|
2405 | 2618 | msgstr "" |
|
2406 | 2619 | |
|
2407 |
#: rhodecode/templates/admin/settings/settings.html:4 |
|
|
2620 | #: rhodecode/templates/admin/settings/settings.html:48 | |
|
2408 | 2621 | msgid "Rescan repositories" |
|
2409 | 2622 | msgstr "" |
|
2410 | 2623 | |
|
2411 |
#: rhodecode/templates/admin/settings/settings.html:5 |
|
|
2624 | #: rhodecode/templates/admin/settings/settings.html:54 | |
|
2412 | 2625 | msgid "Whoosh indexing" |
|
2413 | 2626 | msgstr "" |
|
2414 | 2627 | |
|
2415 |
#: rhodecode/templates/admin/settings/settings.html:6 |
|
|
2416 |
msgid " |
|
|
2417 | msgstr "" | |
|
2418 | ||
|
2419 |
#: rhodecode/templates/admin/settings/settings.html:6 |
|
|
2420 |
msgid " |
|
|
2421 | msgstr "" | |
|
2422 | ||
|
2423 |
#: rhodecode/templates/admin/settings/settings.html:7 |
|
|
2628 | #: rhodecode/templates/admin/settings/settings.html:62 | |
|
2629 | msgid "Index build option" | |
|
2630 | msgstr "" | |
|
2631 | ||
|
2632 | #: rhodecode/templates/admin/settings/settings.html:67 | |
|
2633 | msgid "Build from scratch" | |
|
2634 | msgstr "" | |
|
2635 | ||
|
2636 | #: rhodecode/templates/admin/settings/settings.html:73 | |
|
2424 | 2637 | msgid "Reindex" |
|
2425 | 2638 | msgstr "" |
|
2426 | 2639 | |
|
2427 |
#: rhodecode/templates/admin/settings/settings.html:7 |
|
|
2640 | #: rhodecode/templates/admin/settings/settings.html:79 | |
|
2428 | 2641 | msgid "Global application settings" |
|
2429 | 2642 | msgstr "" |
|
2430 | 2643 | |
|
2431 |
#: rhodecode/templates/admin/settings/settings.html:8 |
|
|
2432 | msgid "Application name" | |
|
2433 | msgstr "" | |
|
2434 | ||
|
2435 |
#: rhodecode/templates/admin/settings/settings.html:9 |
|
|
2436 | msgid "Realm text" | |
|
2437 | msgstr "" | |
|
2438 | ||
|
2439 |
#: rhodecode/templates/admin/settings/settings.html:10 |
|
|
2440 | msgid "GA code" | |
|
2441 | msgstr "" | |
|
2442 | ||
|
2443 |
#: rhodecode/templates/admin/settings/settings.html:11 |
|
|
2444 |
#: rhodecode/templates/admin/settings/settings.html:1 |
|
|
2445 |
#: rhodecode/templates/admin/settings/settings.html:2 |
|
|
2644 | #: rhodecode/templates/admin/settings/settings.html:88 | |
|
2645 | msgid "Site branding" | |
|
2646 | msgstr "" | |
|
2647 | ||
|
2648 | #: rhodecode/templates/admin/settings/settings.html:97 | |
|
2649 | msgid "HTTP authentication realm" | |
|
2650 | msgstr "" | |
|
2651 | ||
|
2652 | #: rhodecode/templates/admin/settings/settings.html:106 | |
|
2653 | msgid "Google Analytics code" | |
|
2654 | msgstr "" | |
|
2655 | ||
|
2656 | #: rhodecode/templates/admin/settings/settings.html:114 | |
|
2657 | #: rhodecode/templates/admin/settings/settings.html:186 | |
|
2658 | #: rhodecode/templates/admin/settings/settings.html:277 | |
|
2446 | 2659 | msgid "Save settings" |
|
2447 | 2660 | msgstr "" |
|
2448 | 2661 | |
|
2449 |
#: rhodecode/templates/admin/settings/settings.html:11 |
|
|
2662 | #: rhodecode/templates/admin/settings/settings.html:121 | |
|
2450 | 2663 | msgid "Visualisation settings" |
|
2451 | 2664 | msgstr "" |
|
2452 | 2665 | |
|
2453 |
#: rhodecode/templates/admin/settings/settings.html:12 |
|
|
2666 | #: rhodecode/templates/admin/settings/settings.html:129 | |
|
2454 | 2667 | msgid "General" |
|
2455 | 2668 | msgstr "" |
|
2456 | 2669 | |
|
2457 |
#: rhodecode/templates/admin/settings/settings.html:13 |
|
|
2670 | #: rhodecode/templates/admin/settings/settings.html:134 | |
|
2458 | 2671 | msgid "Use lightweight dashboard" |
|
2459 | 2672 | msgstr "" |
|
2460 | 2673 | |
|
2461 |
#: rhodecode/templates/admin/settings/settings.html:1 |
|
|
2674 | #: rhodecode/templates/admin/settings/settings.html:140 | |
|
2675 | msgid "Use repository extra fields" | |
|
2676 | msgstr "" | |
|
2677 | ||
|
2678 | #: rhodecode/templates/admin/settings/settings.html:147 | |
|
2462 | 2679 | msgid "Icons" |
|
2463 | 2680 | msgstr "" |
|
2464 | 2681 | |
|
2465 |
#: rhodecode/templates/admin/settings/settings.html:1 |
|
|
2682 | #: rhodecode/templates/admin/settings/settings.html:152 | |
|
2466 | 2683 | msgid "Show public repo icon on repositories" |
|
2467 | 2684 | msgstr "" |
|
2468 | 2685 | |
|
2469 |
#: rhodecode/templates/admin/settings/settings.html:1 |
|
|
2686 | #: rhodecode/templates/admin/settings/settings.html:156 | |
|
2470 | 2687 | msgid "Show private repo icon on repositories" |
|
2471 | 2688 | msgstr "" |
|
2472 | 2689 | |
|
2473 |
#: rhodecode/templates/admin/settings/settings.html:1 |
|
|
2690 | #: rhodecode/templates/admin/settings/settings.html:163 | |
|
2474 | 2691 | msgid "Meta-Tagging" |
|
2475 | 2692 | msgstr "" |
|
2476 | 2693 | |
|
2477 |
#: rhodecode/templates/admin/settings/settings.html:16 |
|
|
2694 | #: rhodecode/templates/admin/settings/settings.html:168 | |
|
2478 | 2695 | msgid "Stylify recognised metatags:" |
|
2479 | 2696 | msgstr "" |
|
2480 | 2697 | |
|
2481 |
#: rhodecode/templates/admin/settings/settings.html:1 |
|
|
2698 | #: rhodecode/templates/admin/settings/settings.html:195 | |
|
2482 | 2699 | msgid "VCS settings" |
|
2483 | 2700 | msgstr "" |
|
2484 | 2701 | |
|
2485 |
#: rhodecode/templates/admin/settings/settings.html: |
|
|
2702 | #: rhodecode/templates/admin/settings/settings.html:204 | |
|
2486 | 2703 | msgid "Web" |
|
2487 | 2704 | msgstr "" |
|
2488 | 2705 | |
|
2489 |
#: rhodecode/templates/admin/settings/settings.html:20 |
|
|
2490 |
msgid " |
|
|
2491 | msgstr "" | |
|
2492 | ||
|
2493 |
#: rhodecode/templates/admin/settings/settings.html:2 |
|
|
2706 | #: rhodecode/templates/admin/settings/settings.html:209 | |
|
2707 | msgid "Require SSL for vcs operations" | |
|
2708 | msgstr "" | |
|
2709 | ||
|
2710 | #: rhodecode/templates/admin/settings/settings.html:211 | |
|
2494 | 2711 | msgid "" |
|
2495 | 2712 | "RhodeCode will require SSL for pushing or pulling. If SSL is missing it " |
|
2496 | 2713 | "will return HTTP Error 406: Not Acceptable" |
|
2497 | 2714 | msgstr "" |
|
2498 | 2715 | |
|
2499 |
#: rhodecode/templates/admin/settings/settings.html:2 |
|
|
2716 | #: rhodecode/templates/admin/settings/settings.html:217 | |
|
2500 | 2717 | msgid "Hooks" |
|
2501 | 2718 | msgstr "" |
|
2502 | 2719 | |
|
2503 | #: rhodecode/templates/admin/settings/settings.html:214 | |
|
2504 | msgid "Update repository after push (hg update)" | |
|
2505 | msgstr "" | |
|
2506 | ||
|
2507 | #: rhodecode/templates/admin/settings/settings.html:218 | |
|
2508 | msgid "Show repository size after push" | |
|
2509 | msgstr "" | |
|
2510 | ||
|
2511 | 2720 | #: rhodecode/templates/admin/settings/settings.html:222 |
|
2512 | msgid "Log user push commands" | |
|
2721 | msgid "Update repository after push (hg update)" | |
|
2513 | 2722 | msgstr "" |
|
2514 | 2723 | |
|
2515 | 2724 | #: rhodecode/templates/admin/settings/settings.html:226 |
|
2516 | msgid "Log user pull commands" | |
|
2725 | msgid "Show repository size after push" | |
|
2517 | 2726 | msgstr "" |
|
2518 | 2727 | |
|
2519 | 2728 | #: rhodecode/templates/admin/settings/settings.html:230 |
|
2520 | msgid "advanced setup" | |
|
2521 | msgstr "" | |
|
2522 | ||
|
2523 |
#: rhodecode/templates/admin/settings/settings.html:23 |
|
|
2729 | msgid "Log user push commands" | |
|
2730 | msgstr "" | |
|
2731 | ||
|
2732 | #: rhodecode/templates/admin/settings/settings.html:234 | |
|
2733 | msgid "Log user pull commands" | |
|
2734 | msgstr "" | |
|
2735 | ||
|
2736 | #: rhodecode/templates/admin/settings/settings.html:238 | |
|
2737 | msgid "Advanced setup" | |
|
2738 | msgstr "" | |
|
2739 | ||
|
2740 | #: rhodecode/templates/admin/settings/settings.html:243 | |
|
2524 | 2741 | msgid "Mercurial Extensions" |
|
2525 | 2742 | msgstr "" |
|
2526 | 2743 | |
|
2527 |
#: rhodecode/templates/admin/settings/settings.html:24 |
|
|
2528 |
msgid "largefiles extension |
|
|
2529 | msgstr "" | |
|
2530 | ||
|
2531 |
#: rhodecode/templates/admin/settings/settings.html:2 |
|
|
2532 |
msgid "hgsubversion extension |
|
|
2533 | msgstr "" | |
|
2534 | ||
|
2535 |
#: rhodecode/templates/admin/settings/settings.html:24 |
|
|
2744 | #: rhodecode/templates/admin/settings/settings.html:248 | |
|
2745 | msgid "Enable largefiles extension" | |
|
2746 | msgstr "" | |
|
2747 | ||
|
2748 | #: rhodecode/templates/admin/settings/settings.html:252 | |
|
2749 | msgid "Enable hgsubversion extension" | |
|
2750 | msgstr "" | |
|
2751 | ||
|
2752 | #: rhodecode/templates/admin/settings/settings.html:254 | |
|
2536 | 2753 | msgid "" |
|
2537 |
"Requires hgsubversion library installed. Allows clon |
|
|
2754 | "Requires hgsubversion library installed. Allows cloning from svn remote " | |
|
2538 | 2755 | "locations" |
|
2539 | 2756 | msgstr "" |
|
2540 | 2757 | |
|
2541 |
#: rhodecode/templates/admin/settings/settings.html:2 |
|
|
2758 | #: rhodecode/templates/admin/settings/settings.html:264 | |
|
2542 | 2759 | msgid "Repositories location" |
|
2543 | 2760 | msgstr "" |
|
2544 | 2761 | |
|
2545 |
#: rhodecode/templates/admin/settings/settings.html:26 |
|
|
2762 | #: rhodecode/templates/admin/settings/settings.html:269 | |
|
2546 | 2763 | msgid "" |
|
2547 | 2764 | "This a crucial application setting. If you are really sure you need to " |
|
2548 | 2765 | "change this, you must restart application in order to make this setting " |
|
2549 | 2766 | "take effect. Click this label to unlock." |
|
2550 | 2767 | msgstr "" |
|
2551 | 2768 | |
|
2552 |
#: rhodecode/templates/admin/settings/settings.html:2 |
|
|
2553 |
#: rhodecode/templates/base/base.html: |
|
|
2554 |
msgid " |
|
|
2555 | msgstr "" | |
|
2556 | ||
|
2557 |
#: rhodecode/templates/admin/settings/settings.html:2 |
|
|
2769 | #: rhodecode/templates/admin/settings/settings.html:270 | |
|
2770 | #: rhodecode/templates/base/base.html:131 | |
|
2771 | msgid "Unlock" | |
|
2772 | msgstr "" | |
|
2773 | ||
|
2774 | #: rhodecode/templates/admin/settings/settings.html:272 | |
|
2558 | 2775 | msgid "" |
|
2559 | 2776 | "Location where repositories are stored. After changing this value a " |
|
2560 | 2777 | "restart, and rescan is required" |
|
2561 | 2778 | msgstr "" |
|
2562 | 2779 | |
|
2563 |
#: rhodecode/templates/admin/settings/settings.html:2 |
|
|
2780 | #: rhodecode/templates/admin/settings/settings.html:292 | |
|
2564 | 2781 | msgid "Test Email" |
|
2565 | 2782 | msgstr "" |
|
2566 | 2783 | |
|
2567 |
#: rhodecode/templates/admin/settings/settings.html: |
|
|
2784 | #: rhodecode/templates/admin/settings/settings.html:300 | |
|
2568 | 2785 | msgid "Email to" |
|
2569 | 2786 | msgstr "" |
|
2570 | 2787 | |
|
2571 | #: rhodecode/templates/admin/settings/settings.html:299 | |
|
2572 | msgid "Send" | |
|
2573 | msgstr "" | |
|
2574 | ||
|
2575 | #: rhodecode/templates/admin/settings/settings.html:305 | |
|
2576 | msgid "System Info and Packages" | |
|
2577 | msgstr "" | |
|
2578 | ||
|
2579 | 2788 | #: rhodecode/templates/admin/settings/settings.html:308 |
|
2580 |
msgid " |
|
|
2789 | msgid "Send" | |
|
2790 | msgstr "" | |
|
2791 | ||
|
2792 | #: rhodecode/templates/admin/settings/settings.html:314 | |
|
2793 | msgid "System Info and Packages" | |
|
2794 | msgstr "" | |
|
2795 | ||
|
2796 | #: rhodecode/templates/admin/settings/settings.html:317 | |
|
2797 | #: rhodecode/templates/changelog/changelog.html:42 | |
|
2798 | msgid "Show" | |
|
2581 | 2799 | msgstr "" |
|
2582 | 2800 | |
|
2583 | 2801 | #: rhodecode/templates/admin/users/user_add.html:5 |
@@ -2586,11 +2804,13 b' msgstr ""' | |||
|
2586 | 2804 | |
|
2587 | 2805 | #: rhodecode/templates/admin/users/user_add.html:10 |
|
2588 | 2806 | #: rhodecode/templates/admin/users/user_edit.html:11 |
|
2807 | #: rhodecode/templates/base/base.html:71 | |
|
2589 | 2808 | msgid "Users" |
|
2590 | 2809 | msgstr "" |
|
2591 | 2810 | |
|
2592 | 2811 | #: rhodecode/templates/admin/users/user_add.html:12 |
|
2593 | msgid "add new user" | |
|
2812 | #: rhodecode/templates/admin/users/users.html:23 | |
|
2813 | msgid "Add new user" | |
|
2594 | 2814 | msgstr "" |
|
2595 | 2815 | |
|
2596 | 2816 | #: rhodecode/templates/admin/users/user_add.html:50 |
@@ -2601,6 +2821,12 b' msgstr ""' | |||
|
2601 | 2821 | msgid "Edit user" |
|
2602 | 2822 | msgstr "" |
|
2603 | 2823 | |
|
2824 | #: rhodecode/templates/admin/users/user_edit.html:13 | |
|
2825 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:13 | |
|
2826 | #, python-format | |
|
2827 | msgid "Edit %s" | |
|
2828 | msgstr "" | |
|
2829 | ||
|
2604 | 2830 | #: rhodecode/templates/admin/users/user_edit.html:34 |
|
2605 | 2831 | #: rhodecode/templates/admin/users/user_edit_my_account_form.html:10 |
|
2606 | 2832 | msgid "Change your avatar at" |
@@ -2616,26 +2842,31 b' msgstr ""' | |||
|
2616 | 2842 | msgid "API key" |
|
2617 | 2843 | msgstr "" |
|
2618 | 2844 | |
|
2619 |
#: rhodecode/templates/admin/users/user_edit.html: |
|
|
2845 | #: rhodecode/templates/admin/users/user_edit.html:50 | |
|
2846 | #: rhodecode/templates/admin/users/user_edit_my_account_form.html:25 | |
|
2847 | msgid "Current IP" | |
|
2848 | msgstr "" | |
|
2849 | ||
|
2850 | #: rhodecode/templates/admin/users/user_edit.html:70 | |
|
2620 | 2851 | msgid "LDAP DN" |
|
2621 | 2852 | msgstr "" |
|
2622 | 2853 | |
|
2623 |
#: rhodecode/templates/admin/users/user_edit.html:7 |
|
|
2624 |
#: rhodecode/templates/admin/users/user_edit_my_account_form.html: |
|
|
2854 | #: rhodecode/templates/admin/users/user_edit.html:79 | |
|
2855 | #: rhodecode/templates/admin/users/user_edit_my_account_form.html:44 | |
|
2625 | 2856 | msgid "New password" |
|
2626 | 2857 | msgstr "" |
|
2627 | 2858 | |
|
2628 |
#: rhodecode/templates/admin/users/user_edit.html:8 |
|
|
2629 |
#: rhodecode/templates/admin/users/user_edit_my_account_form.html: |
|
|
2859 | #: rhodecode/templates/admin/users/user_edit.html:88 | |
|
2860 | #: rhodecode/templates/admin/users/user_edit_my_account_form.html:53 | |
|
2630 | 2861 | msgid "New password confirmation" |
|
2631 | 2862 | msgstr "" |
|
2632 | 2863 | |
|
2633 |
#: rhodecode/templates/admin/users/user_edit.html:15 |
|
|
2864 | #: rhodecode/templates/admin/users/user_edit.html:158 | |
|
2634 | 2865 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:108 |
|
2635 | 2866 | msgid "Inherit default permissions" |
|
2636 | 2867 | msgstr "" |
|
2637 | 2868 | |
|
2638 |
#: rhodecode/templates/admin/users/user_edit.html:1 |
|
|
2869 | #: rhodecode/templates/admin/users/user_edit.html:163 | |
|
2639 | 2870 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:113 |
|
2640 | 2871 | #, python-format |
|
2641 | 2872 | msgid "" |
@@ -2643,53 +2874,31 b' msgid ""' | |||
|
2643 | 2874 | "options does not have any action" |
|
2644 | 2875 | msgstr "" |
|
2645 | 2876 | |
|
2646 |
#: rhodecode/templates/admin/users/user_edit.html:16 |
|
|
2877 | #: rhodecode/templates/admin/users/user_edit.html:169 | |
|
2647 | 2878 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:119 |
|
2648 | 2879 | msgid "Create repositories" |
|
2649 | 2880 | msgstr "" |
|
2650 | 2881 | |
|
2651 |
#: rhodecode/templates/admin/users/user_edit.html:17 |
|
|
2882 | #: rhodecode/templates/admin/users/user_edit.html:177 | |
|
2652 | 2883 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:127 |
|
2653 | 2884 | msgid "Fork repositories" |
|
2654 | 2885 | msgstr "" |
|
2655 | 2886 | |
|
2656 |
#: rhodecode/templates/admin/users/user_edit.html: |
|
|
2657 | #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:22 | |
|
2658 | #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:39 | |
|
2659 | msgid "Nothing here yet" | |
|
2660 | msgstr "" | |
|
2661 | ||
|
2662 | #: rhodecode/templates/admin/users/user_edit.html:197 | |
|
2663 | #: rhodecode/templates/admin/users/user_edit_my_account.html:60 | |
|
2664 | #: rhodecode/templates/admin/users/user_edit_my_account.html:217 | |
|
2665 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:185 | |
|
2666 | msgid "Permission" | |
|
2667 | msgstr "" | |
|
2668 | ||
|
2669 | #: rhodecode/templates/admin/users/user_edit.html:198 | |
|
2670 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:186 | |
|
2671 | msgid "Edit Permission" | |
|
2672 | msgstr "" | |
|
2673 | ||
|
2674 | #: rhodecode/templates/admin/users/user_edit.html:247 | |
|
2887 | #: rhodecode/templates/admin/users/user_edit.html:200 | |
|
2675 | 2888 | msgid "Email addresses" |
|
2676 | 2889 | msgstr "" |
|
2677 | 2890 | |
|
2678 |
#: rhodecode/templates/admin/users/user_edit.html:2 |
|
|
2891 | #: rhodecode/templates/admin/users/user_edit.html:213 | |
|
2679 | 2892 | #, python-format |
|
2680 | 2893 | msgid "Confirm to delete this email: %s" |
|
2681 | 2894 | msgstr "" |
|
2682 | 2895 | |
|
2683 |
#: rhodecode/templates/admin/users/user_edit.html:27 |
|
|
2896 | #: rhodecode/templates/admin/users/user_edit.html:227 | |
|
2684 | 2897 | msgid "New email address" |
|
2685 | 2898 | msgstr "" |
|
2686 | 2899 | |
|
2687 | #: rhodecode/templates/admin/users/user_edit.html:281 | |
|
2688 | msgid "Add" | |
|
2689 | msgstr "" | |
|
2690 | ||
|
2691 | 2900 | #: rhodecode/templates/admin/users/user_edit_my_account.html:5 |
|
2692 |
#: rhodecode/templates/base/base.html: |
|
|
2901 | #: rhodecode/templates/base/base.html:242 | |
|
2693 | 2902 | msgid "My account" |
|
2694 | 2903 | msgstr "" |
|
2695 | 2904 | |
@@ -2702,7 +2911,7 b' msgid "My permissions"' | |||
|
2702 | 2911 | msgstr "" |
|
2703 | 2912 | |
|
2704 | 2913 | #: rhodecode/templates/admin/users/user_edit_my_account.html:38 |
|
2705 |
#: rhodecode/templates/journal/journal.html:4 |
|
|
2914 | #: rhodecode/templates/journal/journal.html:54 | |
|
2706 | 2915 | msgid "My repos" |
|
2707 | 2916 | msgstr "" |
|
2708 | 2917 | |
@@ -2710,132 +2919,97 b' msgstr ""' | |||
|
2710 | 2919 | msgid "My pull requests" |
|
2711 | 2920 | msgstr "" |
|
2712 | 2921 | |
|
2713 | #: rhodecode/templates/admin/users/user_edit_my_account.html:45 | |
|
2714 | msgid "Add repo" | |
|
2715 | msgstr "" | |
|
2716 | ||
|
2717 | 2922 | #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:2 |
|
2923 | #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:4 | |
|
2924 | msgid "Show closed pull requests" | |
|
2925 | msgstr "" | |
|
2926 | ||
|
2927 | #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:6 | |
|
2718 | 2928 | msgid "Opened by me" |
|
2719 | 2929 | msgstr "" |
|
2720 | 2930 | |
|
2721 | #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:10 | |
|
2722 | #, python-format | |
|
2723 | msgid "Pull request #%s opened on %s" | |
|
2724 | msgstr "" | |
|
2725 | ||
|
2726 | 2931 | #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:15 |
|
2932 | #, python-format | |
|
2933 | msgid "Pull request #%s opened on %s" | |
|
2934 | msgstr "" | |
|
2935 | ||
|
2936 | #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:17 | |
|
2937 | #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:45 | |
|
2938 | #: rhodecode/templates/pullrequests/pullrequest_data.html:7 | |
|
2939 | #: rhodecode/templates/pullrequests/pullrequest_show.html:27 | |
|
2940 | #: rhodecode/templates/pullrequests/pullrequest_show.html:42 | |
|
2941 | msgid "Closed" | |
|
2942 | msgstr "" | |
|
2943 | ||
|
2944 | #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:23 | |
|
2727 | 2945 | msgid "Confirm to delete this pull request" |
|
2728 | 2946 | msgstr "" |
|
2729 | 2947 | |
|
2730 |
#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html: |
|
|
2948 | #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:30 | |
|
2949 | #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:51 | |
|
2950 | msgid "Nothing here yet" | |
|
2951 | msgstr "" | |
|
2952 | ||
|
2953 | #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:34 | |
|
2731 | 2954 | msgid "I participate in" |
|
2732 | 2955 | msgstr "" |
|
2733 | 2956 | |
|
2734 |
#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html: |
|
|
2735 |
#: rhodecode/templates/pullrequests/pullrequest_ |
|
|
2957 | #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:42 | |
|
2958 | #: rhodecode/templates/pullrequests/pullrequest_data.html:11 | |
|
2736 | 2959 | #, python-format |
|
2737 | 2960 | msgid "Pull request #%s opened by %s on %s" |
|
2738 | 2961 | msgstr "" |
|
2739 | 2962 | |
|
2740 | #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:7 | |
|
2741 | #: rhodecode/templates/bookmarks/bookmarks.html:40 | |
|
2742 | #: rhodecode/templates/bookmarks/bookmarks_data.html:9 | |
|
2743 | #: rhodecode/templates/branches/branches.html:54 | |
|
2744 | #: rhodecode/templates/branches/branches_data.html:9 | |
|
2745 | #: rhodecode/templates/journal/journal_page_repos.html:8 | |
|
2746 | #: rhodecode/templates/tags/tags.html:55 | |
|
2747 | #: rhodecode/templates/tags/tags_data.html:9 | |
|
2748 | msgid "Revision" | |
|
2749 | msgstr "" | |
|
2750 | ||
|
2751 | #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:28 | |
|
2752 | #: rhodecode/templates/journal/journal_page_repos.html:29 | |
|
2753 | msgid "private" | |
|
2754 | msgstr "" | |
|
2755 | ||
|
2756 | #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:31 | |
|
2757 | #: rhodecode/templates/data_table/_dt_elements.html:7 | |
|
2758 | #: rhodecode/templates/journal/journal_page_repos.html:32 | |
|
2759 | #, python-format | |
|
2760 | msgid "Confirm to delete this repository: %s" | |
|
2761 | msgstr "" | |
|
2762 | ||
|
2763 | #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:38 | |
|
2764 | #: rhodecode/templates/journal/journal_page_repos.html:42 | |
|
2765 | msgid "No repositories yet" | |
|
2766 | msgstr "" | |
|
2767 | ||
|
2768 | #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:40 | |
|
2769 | #: rhodecode/templates/journal/journal_page_repos.html:44 | |
|
2770 | msgid "create one now" | |
|
2771 | msgstr "" | |
|
2772 | ||
|
2773 | 2963 | #: rhodecode/templates/admin/users/users.html:5 |
|
2774 | 2964 | msgid "Users administration" |
|
2775 | 2965 | msgstr "" |
|
2776 | 2966 | |
|
2777 | 2967 | #: rhodecode/templates/admin/users/users.html:9 |
|
2778 | #: rhodecode/templates/base/base.html:235 | |
|
2779 | 2968 | msgid "users" |
|
2780 | 2969 | msgstr "" |
|
2781 | 2970 | |
|
2782 | #: rhodecode/templates/admin/users/users.html:23 | |
|
2783 | msgid "ADD NEW USER" | |
|
2784 | msgstr "" | |
|
2785 | ||
|
2786 | #: rhodecode/templates/admin/users/users.html:77 | |
|
2787 | msgid "username" | |
|
2788 | msgstr "" | |
|
2789 | ||
|
2790 | 2971 | #: rhodecode/templates/admin/users/users.html:80 |
|
2791 |
msgid " |
|
|
2972 | msgid "Firstname" | |
|
2792 | 2973 | msgstr "" |
|
2793 | 2974 | |
|
2794 | 2975 | #: rhodecode/templates/admin/users/users.html:81 |
|
2795 |
msgid " |
|
|
2976 | msgid "Lastname" | |
|
2796 | 2977 | msgstr "" |
|
2797 | 2978 | |
|
2798 | 2979 | #: rhodecode/templates/admin/users/users.html:82 |
|
2799 |
msgid " |
|
|
2800 | msgstr "" | |
|
2801 | ||
|
2802 | #: rhodecode/templates/admin/users/users.html:84 | |
|
2803 | #: rhodecode/templates/admin/users_groups/users_groups.html:34 | |
|
2804 | msgid "active" | |
|
2805 | msgstr "" | |
|
2806 | ||
|
2807 | #: rhodecode/templates/admin/users/users.html:86 | |
|
2808 | #: rhodecode/templates/base/base.html:238 | |
|
2809 | msgid "ldap" | |
|
2980 | msgid "Last login" | |
|
2810 | 2981 | msgstr "" |
|
2811 | 2982 | |
|
2812 | 2983 | #: rhodecode/templates/admin/users_groups/users_group_add.html:5 |
|
2813 |
msgid "Add user |
|
|
2984 | msgid "Add user group" | |
|
2814 | 2985 | msgstr "" |
|
2815 | 2986 | |
|
2816 | 2987 | #: rhodecode/templates/admin/users_groups/users_group_add.html:10 |
|
2817 |
#: rhodecode/templates/admin/users_groups/users_groups.html: |
|
|
2818 | msgid "Users groups" | |
|
2988 | #: rhodecode/templates/admin/users_groups/users_groups.html:11 | |
|
2989 | #: rhodecode/templates/base/base.html:72 | |
|
2990 | msgid "User groups" | |
|
2819 | 2991 | msgstr "" |
|
2820 | 2992 | |
|
2821 | 2993 | #: rhodecode/templates/admin/users_groups/users_group_add.html:12 |
|
2822 | msgid "add new users group" | |
|
2994 | #: rhodecode/templates/admin/users_groups/users_groups.html:25 | |
|
2995 | msgid "Add new user group" | |
|
2823 | 2996 | msgstr "" |
|
2824 | 2997 | |
|
2825 | 2998 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:5 |
|
2826 |
msgid "Edit user |
|
|
2999 | msgid "Edit user group" | |
|
2827 | 3000 | msgstr "" |
|
2828 | 3001 | |
|
2829 | 3002 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:11 |
|
2830 |
msgid "User |
|
|
3003 | msgid "UserGroups" | |
|
2831 | 3004 | msgstr "" |
|
2832 | 3005 | |
|
2833 | 3006 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:50 |
|
3007 | #: rhodecode/templates/admin/users_groups/users_groups.html:35 | |
|
2834 | 3008 | msgid "Members" |
|
2835 | 3009 | msgstr "" |
|
2836 | 3010 | |
|
2837 | 3011 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:58 |
|
2838 |
msgid "Cho |
|
|
3012 | msgid "Chosen group members" | |
|
2839 | 3013 | msgstr "" |
|
2840 | 3014 | |
|
2841 | 3015 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:61 |
@@ -2850,262 +3024,261 b' msgstr ""' | |||
|
2850 | 3024 | msgid "Add all elements" |
|
2851 | 3025 | msgstr "" |
|
2852 | 3026 | |
|
2853 |
#: rhodecode/templates/admin/users_groups/users_group_edit.html:1 |
|
|
3027 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:150 | |
|
2854 | 3028 | msgid "Group members" |
|
2855 | 3029 | msgstr "" |
|
2856 | 3030 | |
|
2857 |
#: rhodecode/templates/admin/users_groups/users_group_edit.html:16 |
|
|
3031 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:167 | |
|
2858 | 3032 | msgid "No members yet" |
|
2859 | 3033 | msgstr "" |
|
2860 | 3034 | |
|
2861 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:171 | |
|
2862 | msgid "Permissions defined for this group" | |
|
2863 | msgstr "" | |
|
2864 | ||
|
2865 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:178 | |
|
2866 | msgid "No permissions set yet" | |
|
2867 | msgstr "" | |
|
2868 | ||
|
2869 | 3035 | #: rhodecode/templates/admin/users_groups/users_groups.html:5 |
|
2870 |
msgid "User |
|
|
2871 | msgstr "" | |
|
2872 | ||
|
2873 |
#: rhodecode/templates/admin/users_groups/users_groups.html: |
|
|
2874 | msgid "ADD NEW USER GROUP" | |
|
2875 | msgstr "" | |
|
2876 | ||
|
2877 | #: rhodecode/templates/admin/users_groups/users_groups.html:32 | |
|
2878 | msgid "group name" | |
|
2879 | msgstr "" | |
|
2880 | ||
|
2881 | #: rhodecode/templates/admin/users_groups/users_groups.html:33 | |
|
2882 | #: rhodecode/templates/base/root.html:46 | |
|
2883 | msgid "members" | |
|
2884 | msgstr "" | |
|
2885 | ||
|
2886 | #: rhodecode/templates/admin/users_groups/users_groups.html:45 | |
|
2887 | #, python-format | |
|
2888 | msgid "Confirm to delete this users group: %s" | |
|
2889 | msgstr "" | |
|
2890 | ||
|
2891 | #: rhodecode/templates/base/base.html:41 | |
|
3036 | msgid "User groups administration" | |
|
3037 | msgstr "" | |
|
3038 | ||
|
3039 | #: rhodecode/templates/admin/users_groups/users_groups.html:47 | |
|
3040 | #, fuzzy, python-format | |
|
3041 | msgid "Confirm to delete this user group: %s" | |
|
3042 | msgstr "" | |
|
3043 | ||
|
3044 | #: rhodecode/templates/base/base.html:42 | |
|
2892 | 3045 | msgid "Submit a bug" |
|
2893 | 3046 | msgstr "" |
|
2894 | 3047 | |
|
2895 |
#: rhodecode/templates/base/base.html: |
|
|
2896 | msgid "Login to your account" | |
|
2897 | msgstr "" | |
|
2898 | ||
|
2899 |
#: rhodecode/templates/ |
|
|
2900 | msgid "Forgot password ?" | |
|
2901 | msgstr "" | |
|
2902 | ||
|
2903 | #: rhodecode/templates/base/base.html:107 | |
|
2904 | msgid "Log In" | |
|
3048 | #: rhodecode/templates/base/base.html:108 | |
|
3049 | #: rhodecode/templates/data_table/_dt_elements.html:9 | |
|
3050 | #: rhodecode/templates/data_table/_dt_elements.html:11 | |
|
3051 | #: rhodecode/templates/data_table/_dt_elements.html:13 | |
|
3052 | #: rhodecode/templates/pullrequests/pullrequest_show.html:81 | |
|
3053 | #: rhodecode/templates/summary/summary.html:8 | |
|
3054 | msgid "Summary" | |
|
3055 | msgstr "" | |
|
3056 | ||
|
3057 | #: rhodecode/templates/base/base.html:109 | |
|
3058 | #: rhodecode/templates/changelog/changelog.html:11 | |
|
3059 | #: rhodecode/templates/data_table/_dt_elements.html:17 | |
|
3060 | #: rhodecode/templates/data_table/_dt_elements.html:19 | |
|
3061 | #: rhodecode/templates/data_table/_dt_elements.html:21 | |
|
3062 | msgid "Changelog" | |
|
3063 | msgstr "" | |
|
3064 | ||
|
3065 | #: rhodecode/templates/base/base.html:110 | |
|
3066 | #: rhodecode/templates/data_table/_dt_elements.html:25 | |
|
3067 | #: rhodecode/templates/data_table/_dt_elements.html:27 | |
|
3068 | #: rhodecode/templates/data_table/_dt_elements.html:29 | |
|
3069 | #: rhodecode/templates/files/files.html:12 | |
|
3070 | msgid "Files" | |
|
3071 | msgstr "" | |
|
3072 | ||
|
3073 | #: rhodecode/templates/base/base.html:112 | |
|
3074 | msgid "Switch To" | |
|
3075 | msgstr "" | |
|
3076 | ||
|
3077 | #: rhodecode/templates/base/base.html:114 | |
|
3078 | #: rhodecode/templates/base/base.html:267 | |
|
3079 | msgid "loading..." | |
|
2905 | 3080 | msgstr "" |
|
2906 | 3081 | |
|
2907 | 3082 | #: rhodecode/templates/base/base.html:118 |
|
2908 |
msgid " |
|
|
2909 | msgstr "" | |
|
2910 | ||
|
2911 |
#: rhodecode/templates/base/base.html:12 |
|
|
2912 |
#: rhodecode/templates/ |
|
|
2913 | #: rhodecode/templates/base/base.html:324 | |
|
2914 | #: rhodecode/templates/base/base.html:326 | |
|
2915 | #: rhodecode/templates/journal/journal.html:4 | |
|
2916 |
#: rhodecode/templates/ |
|
|
2917 | msgid "Journal" | |
|
2918 | msgstr "" | |
|
2919 | ||
|
2920 |
#: rhodecode/templates/base/base.html:12 |
|
|
2921 | msgid "Log Out" | |
|
2922 | msgstr "" | |
|
2923 | ||
|
2924 | #: rhodecode/templates/base/base.html:144 | |
|
2925 | msgid "Switch repository" | |
|
2926 | msgstr "" | |
|
2927 | ||
|
2928 | #: rhodecode/templates/base/base.html:146 | |
|
2929 | msgid "Products" | |
|
2930 | msgstr "" | |
|
2931 | ||
|
2932 | #: rhodecode/templates/base/base.html:152 | |
|
2933 | #: rhodecode/templates/base/base.html:182 rhodecode/templates/base/root.html:47 | |
|
2934 | msgid "loading..." | |
|
2935 | msgstr "" | |
|
2936 | ||
|
2937 | #: rhodecode/templates/base/base.html:158 | |
|
2938 | #: rhodecode/templates/base/base.html:160 | |
|
2939 |
#: rhodecode/templates/base/base.html:1 |
|
|
2940 | #: rhodecode/templates/data_table/_dt_elements.html:15 | |
|
2941 | #: rhodecode/templates/data_table/_dt_elements.html:17 | |
|
2942 | #: rhodecode/templates/data_table/_dt_elements.html:19 | |
|
2943 | msgid "Summary" | |
|
2944 | msgstr "" | |
|
2945 | ||
|
2946 | #: rhodecode/templates/base/base.html:166 | |
|
2947 | #: rhodecode/templates/base/base.html:168 | |
|
2948 | #: rhodecode/templates/base/base.html:170 | |
|
2949 | #: rhodecode/templates/changelog/changelog.html:15 | |
|
2950 | #: rhodecode/templates/data_table/_dt_elements.html:23 | |
|
2951 | #: rhodecode/templates/data_table/_dt_elements.html:25 | |
|
2952 | #: rhodecode/templates/data_table/_dt_elements.html:27 | |
|
2953 | msgid "Changelog" | |
|
2954 | msgstr "" | |
|
2955 | ||
|
2956 | #: rhodecode/templates/base/base.html:175 | |
|
2957 | #: rhodecode/templates/base/base.html:177 | |
|
2958 | #: rhodecode/templates/base/base.html:179 | |
|
2959 | msgid "Switch to" | |
|
2960 | msgstr "" | |
|
2961 | ||
|
2962 | #: rhodecode/templates/base/base.html:186 | |
|
2963 | #: rhodecode/templates/base/base.html:188 | |
|
2964 | #: rhodecode/templates/base/base.html:190 | |
|
2965 | #: rhodecode/templates/data_table/_dt_elements.html:31 | |
|
3083 | msgid "Options" | |
|
3084 | msgstr "" | |
|
3085 | ||
|
3086 | #: rhodecode/templates/base/base.html:124 | |
|
3087 | #: rhodecode/templates/forks/forks_data.html:21 | |
|
3088 | msgid "Compare fork" | |
|
3089 | msgstr "" | |
|
3090 | ||
|
3091 | #: rhodecode/templates/base/base.html:126 | |
|
3092 | msgid "Lightweight changelog" | |
|
3093 | msgstr "" | |
|
3094 | ||
|
3095 | #: rhodecode/templates/base/base.html:127 | |
|
3096 | #: rhodecode/templates/base/base.html:287 | |
|
3097 | #: rhodecode/templates/search/search.html:14 | |
|
3098 | #: rhodecode/templates/search/search.html:54 | |
|
3099 | msgid "Search" | |
|
3100 | msgstr "" | |
|
3101 | ||
|
3102 | #: rhodecode/templates/base/base.html:133 | |
|
3103 | msgid "Lock" | |
|
3104 | msgstr "" | |
|
3105 | ||
|
3106 | #: rhodecode/templates/base/base.html:141 | |
|
3107 | msgid "Follow" | |
|
3108 | msgstr "" | |
|
3109 | ||
|
3110 | #: rhodecode/templates/base/base.html:142 | |
|
3111 | msgid "Unfollow" | |
|
3112 | msgstr "" | |
|
3113 | ||
|
3114 | #: rhodecode/templates/base/base.html:145 | |
|
2966 | 3115 | #: rhodecode/templates/data_table/_dt_elements.html:33 |
|
2967 | 3116 | #: rhodecode/templates/data_table/_dt_elements.html:35 |
|
2968 | msgid "Files" | |
|
2969 | msgstr "" | |
|
2970 | ||
|
2971 | #: rhodecode/templates/base/base.html:195 | |
|
2972 | #: rhodecode/templates/base/base.html:199 | |
|
2973 | msgid "Options" | |
|
2974 | msgstr "" | |
|
2975 | ||
|
2976 | #: rhodecode/templates/base/base.html:204 | |
|
2977 | #: rhodecode/templates/base/base.html:206 | |
|
2978 | msgid "repository settings" | |
|
2979 | msgstr "" | |
|
2980 | ||
|
2981 | #: rhodecode/templates/base/base.html:210 | |
|
2982 |
#: rhodecode/templates/ |
|
|
2983 | #: rhodecode/templates/forks/fork.html:13 | |
|
2984 | msgid "fork" | |
|
2985 | msgstr "" | |
|
2986 | ||
|
2987 | #: rhodecode/templates/base/base.html:212 rhodecode/templates/base/root.html:50 | |
|
2988 | #: rhodecode/templates/changelog/changelog.html:43 | |
|
2989 | msgid "Open new pull request" | |
|
2990 | msgstr "" | |
|
2991 | ||
|
2992 | #: rhodecode/templates/base/base.html:215 | |
|
2993 | #: rhodecode/templates/forks/forks_data.html:21 | |
|
2994 | msgid "Compare fork" | |
|
2995 | msgstr "" | |
|
2996 | ||
|
2997 | #: rhodecode/templates/base/base.html:217 | |
|
2998 | msgid "search" | |
|
2999 | msgstr "" | |
|
3000 | ||
|
3001 | #: rhodecode/templates/base/base.html:223 | |
|
3002 | msgid "lock" | |
|
3003 | msgstr "" | |
|
3004 | ||
|
3005 | #: rhodecode/templates/base/base.html:234 | |
|
3006 | msgid "repositories groups" | |
|
3007 | msgstr "" | |
|
3008 | ||
|
3009 | #: rhodecode/templates/base/base.html:236 | |
|
3010 | msgid "users groups" | |
|
3011 | msgstr "" | |
|
3012 | ||
|
3013 | #: rhodecode/templates/base/base.html:237 | |
|
3014 | msgid "permissions" | |
|
3015 | msgstr "" | |
|
3016 | ||
|
3017 | #: rhodecode/templates/base/base.html:239 | |
|
3018 | msgid "defaults" | |
|
3019 | msgstr "" | |
|
3020 | ||
|
3021 | #: rhodecode/templates/base/base.html:240 | |
|
3022 | msgid "settings" | |
|
3023 | msgstr "" | |
|
3024 | ||
|
3025 | #: rhodecode/templates/base/base.html:251 | |
|
3026 | #: rhodecode/templates/base/base.html:253 | |
|
3027 | msgid "Followers" | |
|
3028 | msgstr "" | |
|
3029 | ||
|
3030 | #: rhodecode/templates/base/base.html:259 | |
|
3031 | #: rhodecode/templates/base/base.html:261 | |
|
3032 | msgid "Forks" | |
|
3033 | msgstr "" | |
|
3034 | ||
|
3035 | #: rhodecode/templates/base/base.html:340 | |
|
3036 | #: rhodecode/templates/base/base.html:342 | |
|
3037 | #: rhodecode/templates/base/base.html:344 | |
|
3038 | #: rhodecode/templates/search/search.html:52 | |
|
3039 | msgid "Search" | |
|
3040 | msgstr "" | |
|
3041 | ||
|
3042 | #: rhodecode/templates/base/root.html:42 | |
|
3043 | msgid "add another comment" | |
|
3117 | #: rhodecode/templates/data_table/_dt_elements.html:37 | |
|
3118 | #: rhodecode/templates/data_table/_dt_elements.html:74 | |
|
3119 | #: rhodecode/templates/forks/fork.html:9 | |
|
3120 | msgid "Fork" | |
|
3121 | msgstr "" | |
|
3122 | ||
|
3123 | #: rhodecode/templates/base/base.html:147 | |
|
3124 | msgid "Create Pull Request" | |
|
3125 | msgstr "" | |
|
3126 | ||
|
3127 | #: rhodecode/templates/base/base.html:153 | |
|
3128 | msgid "Show Pull Requests" | |
|
3129 | msgstr "" | |
|
3130 | ||
|
3131 | #: rhodecode/templates/base/base.html:153 | |
|
3132 | msgid "Pull Requests" | |
|
3133 | msgstr "" | |
|
3134 | ||
|
3135 | #: rhodecode/templates/base/base.html:190 | |
|
3136 | msgid "Not logged in" | |
|
3137 | msgstr "" | |
|
3138 | ||
|
3139 | #: rhodecode/templates/base/base.html:197 | |
|
3140 | msgid "Login to your account" | |
|
3141 | msgstr "" | |
|
3142 | ||
|
3143 | #: rhodecode/templates/base/base.html:220 | |
|
3144 | msgid "Forgot password ?" | |
|
3145 | msgstr "" | |
|
3146 | ||
|
3147 | #: rhodecode/templates/base/base.html:243 | |
|
3148 | msgid "Log Out" | |
|
3149 | msgstr "" | |
|
3150 | ||
|
3151 | #: rhodecode/templates/base/base.html:262 | |
|
3152 | msgid "Switch repository" | |
|
3153 | msgstr "" | |
|
3154 | ||
|
3155 | #: rhodecode/templates/base/base.html:274 | |
|
3156 | msgid "Show recent activity" | |
|
3157 | msgstr "" | |
|
3158 | ||
|
3159 | #: rhodecode/templates/base/base.html:275 | |
|
3160 | #: rhodecode/templates/journal/journal.html:4 | |
|
3161 | msgid "Journal" | |
|
3162 | msgstr "" | |
|
3163 | ||
|
3164 | #: rhodecode/templates/base/base.html:286 | |
|
3165 | msgid "Search in repositories" | |
|
3166 | msgstr "" | |
|
3167 | ||
|
3168 | #: rhodecode/templates/base/perms_summary.html:8 | |
|
3169 | msgid "No permissions defined yet" | |
|
3170 | msgstr "" | |
|
3171 | ||
|
3172 | #: rhodecode/templates/base/perms_summary.html:15 | |
|
3173 | msgid "Permission" | |
|
3174 | msgstr "" | |
|
3175 | ||
|
3176 | #: rhodecode/templates/base/perms_summary.html:16 | |
|
3177 | msgid "Edit Permission" | |
|
3044 | 3178 | msgstr "" |
|
3045 | 3179 | |
|
3046 | 3180 | #: rhodecode/templates/base/root.html:43 |
|
3047 | #: rhodecode/templates/journal/journal.html:83 | |
|
3048 | #: rhodecode/templates/summary/summary.html:57 | |
|
3049 | msgid "Stop following this repository" | |
|
3181 | #, fuzzy | |
|
3182 | msgid "Add another comment" | |
|
3050 | 3183 | msgstr "" |
|
3051 | 3184 | |
|
3052 | 3185 | #: rhodecode/templates/base/root.html:44 |
|
3053 |
#: rhodecode/templates/ |
|
|
3054 |
msgid "St |
|
|
3186 | #: rhodecode/templates/data_table/_dt_elements.html:140 | |
|
3187 | msgid "Stop following this repository" | |
|
3055 | 3188 | msgstr "" |
|
3056 | 3189 | |
|
3057 | 3190 | #: rhodecode/templates/base/root.html:45 |
|
3191 | msgid "Start following this repository" | |
|
3192 | msgstr "" | |
|
3193 | ||
|
3194 | #: rhodecode/templates/base/root.html:46 | |
|
3058 | 3195 | msgid "Group" |
|
3059 | 3196 | msgstr "" |
|
3060 | 3197 | |
|
3198 | #: rhodecode/templates/base/root.html:47 | |
|
3199 | msgid "members" | |
|
3200 | msgstr "" | |
|
3201 | ||
|
3061 | 3202 | #: rhodecode/templates/base/root.html:48 |
|
3062 | msgid "search truncated" | |
|
3203 | #: rhodecode/templates/pullrequests/pullrequest.html:181 | |
|
3204 | msgid "Loading ..." | |
|
3063 | 3205 | msgstr "" |
|
3064 | 3206 | |
|
3065 | 3207 | #: rhodecode/templates/base/root.html:49 |
|
3066 | msgid "no matching files" | |
|
3208 | msgid "Search truncated" | |
|
3209 | msgstr "" | |
|
3210 | ||
|
3211 | #: rhodecode/templates/base/root.html:50 | |
|
3212 | msgid "No matching files" | |
|
3067 | 3213 | msgstr "" |
|
3068 | 3214 | |
|
3069 | 3215 | #: rhodecode/templates/base/root.html:51 |
|
3070 | msgid "Open new pull request for selected changesets" | |
|
3216 | #: rhodecode/templates/changelog/changelog.html:36 | |
|
3217 | msgid "Open new pull request" | |
|
3071 | 3218 | msgstr "" |
|
3072 | 3219 | |
|
3073 | 3220 | #: rhodecode/templates/base/root.html:52 |
|
3074 | msgid "Show selected changes __S -> __E" | |
|
3221 | msgid "Open new pull request for selected changesets" | |
|
3075 | 3222 | msgstr "" |
|
3076 | 3223 | |
|
3077 | 3224 | #: rhodecode/templates/base/root.html:53 |
|
3225 | msgid "Show selected changesets __S -> __E" | |
|
3226 | msgstr "" | |
|
3227 | ||
|
3228 | #: rhodecode/templates/base/root.html:54 | |
|
3229 | msgid "Show selected changeset __S" | |
|
3230 | msgstr "" | |
|
3231 | ||
|
3232 | #: rhodecode/templates/base/root.html:55 | |
|
3078 | 3233 | msgid "Selection link" |
|
3079 | 3234 | msgstr "" |
|
3080 | 3235 | |
|
3236 | #: rhodecode/templates/base/root.html:56 | |
|
3237 | #: rhodecode/templates/changeset/diff_block.html:8 | |
|
3238 | msgid "Collapse diff" | |
|
3239 | msgstr "" | |
|
3240 | ||
|
3241 | #: rhodecode/templates/base/root.html:57 | |
|
3242 | msgid "Expand diff" | |
|
3243 | msgstr "" | |
|
3244 | ||
|
3081 | 3245 | #: rhodecode/templates/bookmarks/bookmarks.html:5 |
|
3082 | 3246 | #, python-format |
|
3083 | 3247 | msgid "%s Bookmarks" |
|
3084 | 3248 | msgstr "" |
|
3085 | 3249 | |
|
3086 |
#: rhodecode/templates/bookmarks/bookmarks.html:3 |
|
|
3250 | #: rhodecode/templates/bookmarks/bookmarks.html:37 | |
|
3087 | 3251 | #: rhodecode/templates/bookmarks/bookmarks_data.html:8 |
|
3088 |
#: rhodecode/templates/branches/branches.html:5 |
|
|
3252 | #: rhodecode/templates/branches/branches.html:50 | |
|
3089 | 3253 | #: rhodecode/templates/branches/branches_data.html:8 |
|
3090 |
#: rhodecode/templates/ |
|
|
3254 | #: rhodecode/templates/shortlog/shortlog_data.html:8 | |
|
3255 | #: rhodecode/templates/tags/tags.html:51 | |
|
3091 | 3256 | #: rhodecode/templates/tags/tags_data.html:8 |
|
3092 | 3257 | msgid "Author" |
|
3093 | 3258 | msgstr "" |
|
3094 | 3259 | |
|
3260 | #: rhodecode/templates/bookmarks/bookmarks.html:38 | |
|
3261 | #: rhodecode/templates/bookmarks/bookmarks_data.html:9 | |
|
3262 | #: rhodecode/templates/branches/branches.html:51 | |
|
3263 | #: rhodecode/templates/branches/branches_data.html:9 | |
|
3264 | #: rhodecode/templates/shortlog/shortlog_data.html:5 | |
|
3265 | #: rhodecode/templates/tags/tags.html:52 | |
|
3266 | #: rhodecode/templates/tags/tags_data.html:9 | |
|
3267 | msgid "Revision" | |
|
3268 | msgstr "" | |
|
3269 | ||
|
3095 | 3270 | #: rhodecode/templates/branches/branches.html:5 |
|
3096 | 3271 | #, python-format |
|
3097 | 3272 | msgid "%s Branches" |
|
3098 | 3273 | msgstr "" |
|
3099 | 3274 | |
|
3100 |
#: rhodecode/templates/branches/branches.html:2 |
|
|
3275 | #: rhodecode/templates/branches/branches.html:26 | |
|
3101 | 3276 | msgid "Compare branches" |
|
3102 | 3277 | msgstr "" |
|
3103 | 3278 | |
|
3104 |
#: rhodecode/templates/branches/branches.html:5 |
|
|
3279 | #: rhodecode/templates/branches/branches.html:53 | |
|
3105 | 3280 | #: rhodecode/templates/branches/branches_data.html:10 |
|
3106 |
#: rhodecode/templates/ |
|
|
3107 | #: rhodecode/templates/compare/compare_diff.html:13 | |
|
3108 | #: rhodecode/templates/tags/tags.html:57 | |
|
3281 | #: rhodecode/templates/tags/tags.html:54 | |
|
3109 | 3282 | #: rhodecode/templates/tags/tags_data.html:10 |
|
3110 | 3283 | msgid "Compare" |
|
3111 | 3284 | msgstr "" |
@@ -3115,115 +3288,80 b' msgstr ""' | |||
|
3115 | 3288 | msgid "%s Changelog" |
|
3116 | 3289 | msgstr "" |
|
3117 | 3290 | |
|
3118 |
#: rhodecode/templates/changelog/changelog.html:1 |
|
|
3291 | #: rhodecode/templates/changelog/changelog.html:11 | |
|
3119 | 3292 | #, python-format |
|
3120 | 3293 | msgid "showing %d out of %d revision" |
|
3121 | 3294 | msgid_plural "showing %d out of %d revisions" |
|
3122 | 3295 | msgstr[0] "" |
|
3123 | 3296 | msgstr[1] "" |
|
3124 | 3297 | |
|
3125 |
#: rhodecode/templates/changelog/changelog.html:3 |
|
|
3298 | #: rhodecode/templates/changelog/changelog.html:30 | |
|
3126 | 3299 | msgid "Clear selection" |
|
3127 | 3300 | msgstr "" |
|
3128 | 3301 | |
|
3129 |
#: rhodecode/templates/changelog/changelog.html: |
|
|
3302 | #: rhodecode/templates/changelog/changelog.html:33 | |
|
3130 | 3303 | #: rhodecode/templates/forks/forks_data.html:19 |
|
3131 | 3304 | #, python-format |
|
3132 |
msgid " |
|
|
3133 | msgstr "" | |
|
3134 | ||
|
3135 |
#: rhodecode/templates/changelog/changelog.html: |
|
|
3305 | msgid "Compare fork with %s" | |
|
3306 | msgstr "" | |
|
3307 | ||
|
3308 | #: rhodecode/templates/changelog/changelog.html:33 | |
|
3136 | 3309 | msgid "Compare fork with parent" |
|
3137 | 3310 | msgstr "" |
|
3138 | 3311 | |
|
3139 |
#: rhodecode/templates/changelog/changelog.html: |
|
|
3140 | msgid "Show" | |
|
3141 | msgstr "" | |
|
3142 | ||
|
3143 | #: rhodecode/templates/changelog/changelog.html:74 | |
|
3144 |
#: rhodecode/templates/ |
|
|
3145 | msgid "show more" | |
|
3146 | msgstr "" | |
|
3147 | ||
|
3148 | #: rhodecode/templates/changelog/changelog.html:78 | |
|
3149 | msgid "Affected number of files, click to show more details" | |
|
3150 | msgstr "" | |
|
3151 | ||
|
3152 |
#: rhodecode/templates/change |
|
|
3153 | #: rhodecode/templates/changeset/changeset.html:65 | |
|
3154 | #: rhodecode/templates/changeset/changeset_file_comment.html:20 | |
|
3155 | #: rhodecode/templates/changeset/changeset_range.html:46 | |
|
3156 | msgid "Changeset status" | |
|
3157 | msgstr "" | |
|
3158 | ||
|
3159 | #: rhodecode/templates/changelog/changelog.html:94 | |
|
3160 | #: rhodecode/templates/shortlog/shortlog_data.html:20 | |
|
3161 | msgid "Click to open associated pull request" | |
|
3162 | msgstr "" | |
|
3163 | ||
|
3164 | #: rhodecode/templates/changelog/changelog.html:104 | |
|
3165 | msgid "Parent" | |
|
3166 | msgstr "" | |
|
3167 | ||
|
3168 | #: rhodecode/templates/changelog/changelog.html:110 | |
|
3169 | #: rhodecode/templates/changeset/changeset.html:42 | |
|
3170 | msgid "No parents" | |
|
3171 | msgstr "" | |
|
3172 | ||
|
3173 | #: rhodecode/templates/changelog/changelog.html:115 | |
|
3312 | #: rhodecode/templates/changelog/changelog.html:76 | |
|
3313 | #: rhodecode/templates/summary/summary.html:404 | |
|
3314 | msgid "Show more" | |
|
3315 | msgstr "" | |
|
3316 | ||
|
3317 | #: rhodecode/templates/changelog/changelog.html:89 | |
|
3318 | #: rhodecode/templates/changeset/changeset_range.html:86 | |
|
3319 | #, python-format | |
|
3320 | msgid "Bookmark %s" | |
|
3321 | msgstr "" | |
|
3322 | ||
|
3323 | #: rhodecode/templates/changelog/changelog.html:95 | |
|
3324 | #: rhodecode/templates/changeset/changeset.html:111 | |
|
3325 | #: rhodecode/templates/changeset/changeset_range.html:92 | |
|
3326 | #, python-format | |
|
3327 | msgid "Tag %s" | |
|
3328 | msgstr "" | |
|
3329 | ||
|
3330 | #: rhodecode/templates/changelog/changelog.html:100 | |
|
3174 | 3331 | #: rhodecode/templates/changeset/changeset.html:106 |
|
3175 |
#: rhodecode/templates/changeset/changeset_range.html: |
|
|
3176 | msgid "merge" | |
|
3177 | msgstr "" | |
|
3178 | ||
|
3179 | #: rhodecode/templates/changelog/changelog.html:118 | |
|
3180 |
#: rhodecode/templates/change |
|
|
3181 | #: rhodecode/templates/changeset/changeset_range.html:82 | |
|
3182 | #: rhodecode/templates/files/files.html:29 | |
|
3183 | #: rhodecode/templates/files/files_add.html:33 | |
|
3184 | #: rhodecode/templates/files/files_edit.html:33 | |
|
3185 | #: rhodecode/templates/shortlog/shortlog_data.html:9 | |
|
3186 | msgid "branch" | |
|
3187 | msgstr "" | |
|
3188 | ||
|
3189 | #: rhodecode/templates/changelog/changelog.html:124 | |
|
3190 | #: rhodecode/templates/changeset/changeset_range.html:88 | |
|
3191 | msgid "bookmark" | |
|
3192 | msgstr "" | |
|
3193 | ||
|
3194 | #: rhodecode/templates/changelog/changelog.html:130 | |
|
3195 | #: rhodecode/templates/changeset/changeset.html:114 | |
|
3196 | #: rhodecode/templates/changeset/changeset_range.html:94 | |
|
3197 | msgid "tag" | |
|
3198 | msgstr "" | |
|
3199 | ||
|
3200 | #: rhodecode/templates/changelog/changelog.html:301 | |
|
3332 | #: rhodecode/templates/changeset/changeset_range.html:80 | |
|
3333 | #, python-format | |
|
3334 | msgid "Branch %s" | |
|
3335 | msgstr "" | |
|
3336 | ||
|
3337 | #: rhodecode/templates/changelog/changelog.html:258 | |
|
3201 | 3338 | msgid "There are no changes yet" |
|
3202 | 3339 | msgstr "" |
|
3203 | 3340 | |
|
3204 | 3341 | #: rhodecode/templates/changelog/changelog_details.html:4 |
|
3205 |
#: rhodecode/templates/changeset/changeset.html:9 |
|
|
3206 |
msgid " |
|
|
3342 | #: rhodecode/templates/changeset/changeset.html:91 | |
|
3343 | msgid "Removed" | |
|
3207 | 3344 | msgstr "" |
|
3208 | 3345 | |
|
3209 | 3346 | #: rhodecode/templates/changelog/changelog_details.html:5 |
|
3210 |
#: rhodecode/templates/changeset/changeset.html:9 |
|
|
3211 | msgid "changed" | |
|
3347 | #: rhodecode/templates/changeset/changeset.html:92 | |
|
3348 | #, fuzzy | |
|
3349 | msgid "Changed" | |
|
3212 | 3350 | msgstr "" |
|
3213 | 3351 | |
|
3214 | 3352 | #: rhodecode/templates/changelog/changelog_details.html:6 |
|
3215 |
#: rhodecode/templates/changeset/changeset.html:9 |
|
|
3216 |
msgid " |
|
|
3353 | #: rhodecode/templates/changeset/changeset.html:93 | |
|
3354 | msgid "Added" | |
|
3217 | 3355 | msgstr "" |
|
3218 | 3356 | |
|
3219 | 3357 | #: rhodecode/templates/changelog/changelog_details.html:8 |
|
3220 | 3358 | #: rhodecode/templates/changelog/changelog_details.html:9 |
|
3221 | 3359 | #: rhodecode/templates/changelog/changelog_details.html:10 |
|
3222 |
#: rhodecode/templates/changeset/changeset.html:9 |
|
|
3223 |
#: rhodecode/templates/changeset/changeset.html:9 |
|
|
3224 |
#: rhodecode/templates/changeset/changeset.html: |
|
|
3360 | #: rhodecode/templates/changeset/changeset.html:95 | |
|
3361 | #: rhodecode/templates/changeset/changeset.html:96 | |
|
3362 | #: rhodecode/templates/changeset/changeset.html:97 | |
|
3225 | 3363 | #, python-format |
|
3226 |
msgid " |
|
|
3364 | msgid "Affected %s files" | |
|
3227 | 3365 | msgstr "" |
|
3228 | 3366 | |
|
3229 | 3367 | #: rhodecode/templates/changeset/changeset.html:6 |
@@ -3231,112 +3369,144 b' msgstr ""' | |||
|
3231 | 3369 | msgid "%s Changeset" |
|
3232 | 3370 | msgstr "" |
|
3233 | 3371 | |
|
3234 |
#: rhodecode/templates/changeset/changeset.html: |
|
|
3235 |
msgid " |
|
|
3236 | msgstr "" | |
|
3237 | ||
|
3238 |
#: rhodecode/templates/changeset/changeset.html: |
|
|
3372 | #: rhodecode/templates/changeset/changeset.html:39 | |
|
3373 | msgid "No parents" | |
|
3374 | msgstr "" | |
|
3375 | ||
|
3376 | #: rhodecode/templates/changeset/changeset.html:49 | |
|
3239 | 3377 | msgid "No children" |
|
3240 | 3378 | msgstr "" |
|
3241 | 3379 | |
|
3242 |
#: rhodecode/templates/changeset/changeset.html: |
|
|
3243 |
#: rhodecode/templates/changeset/ |
|
|
3244 | msgid "raw diff" | |
|
3245 | msgstr "" | |
|
3246 | ||
|
3247 | #: rhodecode/templates/changeset/changeset.html:71 | |
|
3248 | msgid "patch diff" | |
|
3249 | msgstr "" | |
|
3250 | ||
|
3251 | #: rhodecode/templates/changeset/changeset.html:72 | |
|
3252 | #: rhodecode/templates/changeset/diff_block.html:21 | |
|
3253 | msgid "download diff" | |
|
3254 | msgstr "" | |
|
3255 | ||
|
3256 | #: rhodecode/templates/changeset/changeset.html:76 | |
|
3257 |
#: rhodecode/templates/changeset/changeset |
|
|
3380 | #: rhodecode/templates/changeset/changeset.html:62 | |
|
3381 | #: rhodecode/templates/changeset/changeset_file_comment.html:20 | |
|
3382 | #: rhodecode/templates/changeset/changeset_range.html:44 | |
|
3383 | msgid "Changeset status" | |
|
3384 | msgstr "" | |
|
3385 | ||
|
3386 | #: rhodecode/templates/changeset/changeset.html:67 | |
|
3387 | #: rhodecode/templates/changeset/diff_block.html:23 | |
|
3388 | msgid "Raw diff" | |
|
3389 | msgstr "" | |
|
3390 | ||
|
3391 | #: rhodecode/templates/changeset/changeset.html:68 | |
|
3392 | msgid "Patch diff" | |
|
3393 | msgstr "" | |
|
3394 | ||
|
3395 | #: rhodecode/templates/changeset/changeset.html:69 | |
|
3396 | #: rhodecode/templates/changeset/diff_block.html:24 | |
|
3397 | msgid "Download diff" | |
|
3398 | msgstr "" | |
|
3399 | ||
|
3400 | #: rhodecode/templates/changeset/changeset.html:73 | |
|
3401 | #: rhodecode/templates/changeset/changeset_file_comment.html:97 | |
|
3258 | 3402 | #, python-format |
|
3259 | 3403 | msgid "%d comment" |
|
3260 | 3404 | msgid_plural "%d comments" |
|
3261 | 3405 | msgstr[0] "" |
|
3262 | 3406 | msgstr[1] "" |
|
3263 | 3407 | |
|
3264 |
#: rhodecode/templates/changeset/changeset.html:7 |
|
|
3265 |
#: rhodecode/templates/changeset/changeset_file_comment.html: |
|
|
3408 | #: rhodecode/templates/changeset/changeset.html:73 | |
|
3409 | #: rhodecode/templates/changeset/changeset_file_comment.html:97 | |
|
3266 | 3410 | #, python-format |
|
3267 | 3411 | msgid "(%d inline)" |
|
3268 | 3412 | msgid_plural "(%d inline)" |
|
3269 | 3413 | msgstr[0] "" |
|
3270 | 3414 | msgstr[1] "" |
|
3271 | 3415 | |
|
3272 |
#: rhodecode/templates/changeset/changeset.html:1 |
|
|
3273 |
#: rhodecode/templates/c |
|
|
3274 | #: rhodecode/templates/pullrequests/pullrequest_show.html:76 | |
|
3416 | #: rhodecode/templates/changeset/changeset.html:103 | |
|
3417 | #: rhodecode/templates/changeset/changeset_range.html:77 | |
|
3418 | msgid "merge" | |
|
3419 | msgstr "" | |
|
3420 | ||
|
3421 | #: rhodecode/templates/changeset/changeset.html:119 | |
|
3422 | #: rhodecode/templates/compare/compare_diff.html:40 | |
|
3423 | #: rhodecode/templates/pullrequests/pullrequest_show.html:113 | |
|
3275 | 3424 | #, python-format |
|
3276 | 3425 | msgid "%s file changed" |
|
3277 | 3426 | msgid_plural "%s files changed" |
|
3278 | 3427 | msgstr[0] "" |
|
3279 | 3428 | msgstr[1] "" |
|
3280 | 3429 | |
|
3281 |
#: rhodecode/templates/changeset/changeset.html:12 |
|
|
3282 |
#: rhodecode/templates/compare/compare_diff.html:4 |
|
|
3283 |
#: rhodecode/templates/pullrequests/pullrequest_show.html: |
|
|
3430 | #: rhodecode/templates/changeset/changeset.html:121 | |
|
3431 | #: rhodecode/templates/compare/compare_diff.html:42 | |
|
3432 | #: rhodecode/templates/pullrequests/pullrequest_show.html:115 | |
|
3284 | 3433 | #, python-format |
|
3285 | 3434 | msgid "%s file changed with %s insertions and %s deletions" |
|
3286 | 3435 | msgid_plural "%s files changed with %s insertions and %s deletions" |
|
3287 | 3436 | msgstr[0] "" |
|
3288 | 3437 | msgstr[1] "" |
|
3289 | 3438 | |
|
3290 |
#: rhodecode/templates/changeset/changeset |
|
|
3291 | msgid "Submitting..." | |
|
3292 | msgstr "" | |
|
3293 | ||
|
3294 | #: rhodecode/templates/changeset/changeset_file_comment.html:45 | |
|
3295 | msgid "Commenting on line {1}." | |
|
3296 | msgstr "" | |
|
3297 | ||
|
3298 |
#: rhodecode/templates/changeset/changeset |
|
|
3299 |
#: rhodecode/templates/c |
|
|
3439 | #: rhodecode/templates/changeset/changeset.html:134 | |
|
3440 | #: rhodecode/templates/changeset/changeset.html:146 | |
|
3441 | #: rhodecode/templates/pullrequests/pullrequest_show.html:131 | |
|
3442 | #: rhodecode/templates/pullrequests/pullrequest_show.html:195 | |
|
3443 | msgid "Showing a huge diff might take some time and resources" | |
|
3444 | msgstr "" | |
|
3445 | ||
|
3446 | #: rhodecode/templates/changeset/changeset.html:134 | |
|
3447 | #: rhodecode/templates/changeset/changeset.html:146 | |
|
3448 | #: rhodecode/templates/compare/compare_diff.html:58 | |
|
3449 | #: rhodecode/templates/compare/compare_diff.html:69 | |
|
3450 | #: rhodecode/templates/pullrequests/pullrequest_show.html:131 | |
|
3451 | #: rhodecode/templates/pullrequests/pullrequest_show.html:195 | |
|
3452 | msgid "Show full diff" | |
|
3453 | msgstr "" | |
|
3454 | ||
|
3455 | #: rhodecode/templates/changeset/changeset_file_comment.html:30 | |
|
3300 | 3456 | #, python-format |
|
3301 | msgid "Comments parsed using %s syntax with %s support." | |
|
3302 | msgstr "" | |
|
3303 | ||
|
3304 |
#: rhodecode/templates/changeset/changeset_file_comment.html: |
|
|
3305 | #: rhodecode/templates/changeset/changeset_file_comment.html:123 | |
|
3306 | msgid "Use @username inside this text to send notification to this RhodeCode user" | |
|
3307 | msgstr "" | |
|
3308 | ||
|
3309 |
#: rhodecode/templates/changeset/changeset_file_comment.html:5 |
|
|
3310 | #: rhodecode/templates/changeset/changeset_file_comment.html:143 | |
|
3311 | msgid "Comment" | |
|
3457 | msgid "Status change on pull request #%s" | |
|
3458 | msgstr "" | |
|
3459 | ||
|
3460 | #: rhodecode/templates/changeset/changeset_file_comment.html:32 | |
|
3461 | #, python-format | |
|
3462 | msgid "Comment on pull request #%s" | |
|
3463 | msgstr "" | |
|
3464 | ||
|
3465 | #: rhodecode/templates/changeset/changeset_file_comment.html:57 | |
|
3466 | msgid "Submitting..." | |
|
3312 | 3467 | msgstr "" |
|
3313 | 3468 | |
|
3314 | 3469 | #: rhodecode/templates/changeset/changeset_file_comment.html:60 |
|
3315 | #: rhodecode/templates/changeset/changeset_file_comment.html:71 | |
|
3316 | msgid "Hide" | |
|
3317 | msgstr "" | |
|
3318 | ||
|
3319 |
#: rhodecode/templates/changeset/changeset_file_comment.html: |
|
|
3470 | msgid "Commenting on line {1}." | |
|
3471 | msgstr "" | |
|
3472 | ||
|
3473 | #: rhodecode/templates/changeset/changeset_file_comment.html:61 | |
|
3474 | #: rhodecode/templates/changeset/changeset_file_comment.html:139 | |
|
3475 | #, python-format | |
|
3476 | msgid "Comments parsed using %s syntax with %s support." | |
|
3477 | msgstr "" | |
|
3478 | ||
|
3479 | #: rhodecode/templates/changeset/changeset_file_comment.html:63 | |
|
3480 | #: rhodecode/templates/changeset/changeset_file_comment.html:141 | |
|
3481 | msgid "Use @username inside this text to send notification to this RhodeCode user" | |
|
3482 | msgstr "" | |
|
3483 | ||
|
3484 | #: rhodecode/templates/changeset/changeset_file_comment.html:74 | |
|
3485 | #: rhodecode/templates/changeset/changeset_file_comment.html:161 | |
|
3486 | msgid "Comment" | |
|
3487 | msgstr "" | |
|
3488 | ||
|
3489 | #: rhodecode/templates/changeset/changeset_file_comment.html:75 | |
|
3490 | msgid "Cancel" | |
|
3491 | msgstr "" | |
|
3492 | ||
|
3493 | #: rhodecode/templates/changeset/changeset_file_comment.html:82 | |
|
3320 | 3494 | msgid "You need to be logged in to comment." |
|
3321 | 3495 | msgstr "" |
|
3322 | 3496 | |
|
3323 |
#: rhodecode/templates/changeset/changeset_file_comment.html: |
|
|
3497 | #: rhodecode/templates/changeset/changeset_file_comment.html:82 | |
|
3324 | 3498 | msgid "Login now" |
|
3325 | 3499 | msgstr "" |
|
3326 | 3500 | |
|
3327 |
#: rhodecode/templates/changeset/changeset_file_comment.html: |
|
|
3328 | msgid "Leave a comment" | |
|
3329 | msgstr "" | |
|
3330 | ||
|
3331 |
#: rhodecode/templates/changeset/changeset_file_comment.html:1 |
|
|
3332 | msgid "Check this to change current status of code-review for this changeset" | |
|
3333 | msgstr "" | |
|
3334 | ||
|
3335 |
#: rhodecode/templates/changeset/changeset_file_comment.html:1 |
|
|
3336 | msgid "change status" | |
|
3337 | msgstr "" | |
|
3338 | ||
|
3339 | #: rhodecode/templates/changeset/changeset_file_comment.html:145 | |
|
3501 | #: rhodecode/templates/changeset/changeset_file_comment.html:86 | |
|
3502 | msgid "Hide" | |
|
3503 | msgstr "" | |
|
3504 | ||
|
3505 | #: rhodecode/templates/changeset/changeset_file_comment.html:143 | |
|
3506 | msgid "Change status" | |
|
3507 | msgstr "" | |
|
3508 | ||
|
3509 | #: rhodecode/templates/changeset/changeset_file_comment.html:163 | |
|
3340 | 3510 | msgid "Comment and close" |
|
3341 | 3511 | msgstr "" |
|
3342 | 3512 | |
@@ -3345,97 +3515,118 b' msgstr ""' | |||
|
3345 | 3515 | msgid "%s Changesets" |
|
3346 | 3516 | msgstr "" |
|
3347 | 3517 | |
|
3348 |
#: rhodecode/templates/changeset/changeset_range.html:2 |
|
|
3349 | #: rhodecode/templates/compare/compare_diff.html:29 | |
|
3350 | msgid "Compare View" | |
|
3351 | msgstr "" | |
|
3352 | ||
|
3353 | #: rhodecode/templates/changeset/changeset_range.html:29 | |
|
3354 | msgid "Show combined compare" | |
|
3355 | msgstr "" | |
|
3356 | ||
|
3357 | #: rhodecode/templates/changeset/changeset_range.html:54 | |
|
3518 | #: rhodecode/templates/changeset/changeset_range.html:52 | |
|
3358 | 3519 | msgid "Files affected" |
|
3359 | 3520 | msgstr "" |
|
3360 | 3521 | |
|
3361 |
#: rhodecode/templates/changeset/diff_block.html: |
|
|
3362 |
msgid " |
|
|
3363 | msgstr "" | |
|
3364 | ||
|
3365 |
#: rhodecode/templates/changeset/diff_block.html: |
|
|
3366 |
msgid " |
|
|
3367 | msgstr "" | |
|
3368 | ||
|
3369 |
#: rhodecode/templates/c |
|
|
3522 | #: rhodecode/templates/changeset/diff_block.html:22 | |
|
3523 | msgid "Show full diff for this file" | |
|
3524 | msgstr "" | |
|
3525 | ||
|
3526 | #: rhodecode/templates/changeset/diff_block.html:30 | |
|
3527 | msgid "Show inline comments" | |
|
3528 | msgstr "" | |
|
3529 | ||
|
3530 | #: rhodecode/templates/changeset/diff_block.html:55 | |
|
3531 | msgid "Show file at latest version in this repo" | |
|
3532 | msgstr "" | |
|
3533 | ||
|
3534 | #: rhodecode/templates/changeset/diff_block.html:56 | |
|
3535 | msgid "Show file at initial version in this repo" | |
|
3536 | msgstr "" | |
|
3537 | ||
|
3538 | #: rhodecode/templates/compare/compare_cs.html:4 | |
|
3370 | 3539 | msgid "No changesets" |
|
3371 | 3540 | msgstr "" |
|
3372 | 3541 | |
|
3373 |
#: rhodecode/templates/compare/compare_ |
|
|
3374 | #: rhodecode/templates/pullrequests/pullrequest_show.html:69 | |
|
3542 | #: rhodecode/templates/compare/compare_cs.html:32 | |
|
3543 | msgid "Ancestor" | |
|
3544 | msgstr "" | |
|
3545 | ||
|
3546 | #: rhodecode/templates/compare/compare_diff.html:5 | |
|
3547 | #, fuzzy, python-format | |
|
3548 | msgid "%s Compare" | |
|
3549 | msgstr "" | |
|
3550 | ||
|
3551 | #: rhodecode/templates/compare/compare_diff.html:9 | |
|
3552 | msgid "Compare revisions" | |
|
3553 | msgstr "" | |
|
3554 | ||
|
3555 | #: rhodecode/templates/compare/compare_diff.html:33 | |
|
3556 | #: rhodecode/templates/pullrequests/pullrequest_show.html:106 | |
|
3375 | 3557 | #, python-format |
|
3376 | 3558 | msgid "Showing %s commit" |
|
3377 | 3559 | msgid_plural "Showing %s commits" |
|
3378 | 3560 | msgstr[0] "" |
|
3379 | 3561 | msgstr[1] "" |
|
3380 | 3562 | |
|
3381 |
#: rhodecode/templates/compare/compare_diff.html: |
|
|
3382 |
#: rhodecode/templates/pullrequests/pullrequest_show.html: |
|
|
3563 | #: rhodecode/templates/compare/compare_diff.html:48 | |
|
3564 | #: rhodecode/templates/pullrequests/pullrequest_show.html:121 | |
|
3383 | 3565 | msgid "No files" |
|
3384 | 3566 | msgstr "" |
|
3385 | 3567 | |
|
3386 |
#: rhodecode/templates/ |
|
|
3387 |
#: rhodecode/templates/ |
|
|
3388 | #: rhodecode/templates/data_table/_dt_elements.html:43 | |
|
3389 | msgid "Fork" | |
|
3390 | msgstr "" | |
|
3391 | ||
|
3392 |
#: rhodecode/templates/ |
|
|
3393 | #: rhodecode/templates/journal/journal.html:89 | |
|
3394 | #: rhodecode/templates/summary/summary.html:77 | |
|
3568 | #: rhodecode/templates/compare/compare_diff.html:58 | |
|
3569 | #: rhodecode/templates/compare/compare_diff.html:69 | |
|
3570 | msgid "confirm to show potentially huge diff" | |
|
3571 | msgstr "" | |
|
3572 | ||
|
3573 | #: rhodecode/templates/data_table/_dt_elements.html:54 | |
|
3574 | #: rhodecode/templates/summary/summary.html:69 | |
|
3395 | 3575 | msgid "Mercurial repository" |
|
3396 | 3576 | msgstr "" |
|
3397 | 3577 | |
|
3398 |
#: rhodecode/templates/data_table/_dt_elements.html:6 |
|
|
3399 |
#: rhodecode/templates/ |
|
|
3400 | #: rhodecode/templates/summary/summary.html:80 | |
|
3578 | #: rhodecode/templates/data_table/_dt_elements.html:56 | |
|
3579 | #: rhodecode/templates/summary/summary.html:72 | |
|
3401 | 3580 | msgid "Git repository" |
|
3402 | 3581 | msgstr "" |
|
3403 | 3582 | |
|
3404 |
#: rhodecode/templates/data_table/_dt_elements.html: |
|
|
3405 | #: rhodecode/templates/journal/journal.html:97 | |
|
3406 | #: rhodecode/templates/summary/summary.html:87 | |
|
3407 | msgid "public repository" | |
|
3408 | msgstr "" | |
|
3409 | ||
|
3410 | #: rhodecode/templates/data_table/_dt_elements.html:80 | |
|
3411 | #: rhodecode/templates/summary/summary.html:96 | |
|
3412 | #: rhodecode/templates/summary/summary.html:97 | |
|
3413 | msgid "Fork of" | |
|
3414 | msgstr "" | |
|
3415 | ||
|
3416 | #: rhodecode/templates/data_table/_dt_elements.html:94 | |
|
3583 | #: rhodecode/templates/data_table/_dt_elements.html:74 | |
|
3584 | #, python-format | |
|
3585 | msgid "Fork of %s" | |
|
3586 | msgstr "" | |
|
3587 | ||
|
3588 | #: rhodecode/templates/data_table/_dt_elements.html:88 | |
|
3417 | 3589 | msgid "No changesets yet" |
|
3418 | 3590 | msgstr "" |
|
3419 | 3591 | |
|
3420 |
#: rhodecode/templates/data_table/_dt_elements.html: |
|
|
3421 |
#: rhodecode/templates/data_table/_dt_elements.html: |
|
|
3592 | #: rhodecode/templates/data_table/_dt_elements.html:95 | |
|
3593 | #: rhodecode/templates/data_table/_dt_elements.html:97 | |
|
3422 | 3594 | #, python-format |
|
3423 | 3595 | msgid "Subscribe to %s rss feed" |
|
3424 | 3596 | msgstr "" |
|
3425 | 3597 | |
|
3426 |
#: rhodecode/templates/data_table/_dt_elements.html:10 |
|
|
3427 |
#: rhodecode/templates/data_table/_dt_elements.html:1 |
|
|
3598 | #: rhodecode/templates/data_table/_dt_elements.html:103 | |
|
3599 | #: rhodecode/templates/data_table/_dt_elements.html:105 | |
|
3428 | 3600 | #, python-format |
|
3429 | 3601 | msgid "Subscribe to %s atom feed" |
|
3430 | 3602 | msgstr "" |
|
3431 | 3603 | |
|
3432 | 3604 | #: rhodecode/templates/data_table/_dt_elements.html:122 |
|
3433 | 3605 | #, python-format |
|
3606 | msgid "Confirm to delete this repository: %s" | |
|
3607 | msgstr "" | |
|
3608 | ||
|
3609 | #: rhodecode/templates/data_table/_dt_elements.html:131 | |
|
3610 | #, python-format | |
|
3434 | 3611 | msgid "Confirm to delete this user: %s" |
|
3435 | 3612 | msgstr "" |
|
3436 | 3613 | |
|
3437 |
#: rhodecode/templates/email_templates/changeset_comment.html: |
|
|
3438 | msgid "New status$" | |
|
3614 | #: rhodecode/templates/email_templates/changeset_comment.html:9 | |
|
3615 | #: rhodecode/templates/email_templates/pull_request_comment.html:15 | |
|
3616 | msgid "New status" | |
|
3617 | msgstr "" | |
|
3618 | ||
|
3619 | #: rhodecode/templates/email_templates/changeset_comment.html:11 | |
|
3620 | #: rhodecode/templates/email_templates/pull_request_comment.html:9 | |
|
3621 | msgid "View this comment here" | |
|
3622 | msgstr "" | |
|
3623 | ||
|
3624 | #: rhodecode/templates/email_templates/changeset_comment.html:14 | |
|
3625 | msgid "Repo" | |
|
3626 | msgstr "" | |
|
3627 | ||
|
3628 | #: rhodecode/templates/email_templates/changeset_comment.html:16 | |
|
3629 | msgid "desc" | |
|
3439 | 3630 | msgstr "" |
|
3440 | 3631 | |
|
3441 | 3632 | #: rhodecode/templates/email_templates/main.html:8 |
@@ -3443,19 +3634,20 b' msgid "This is a notification from Rhode' | |||
|
3443 | 3634 | msgstr "" |
|
3444 | 3635 | |
|
3445 | 3636 | #: rhodecode/templates/email_templates/password_reset.html:4 |
|
3446 | msgid "Hello" | |
|
3637 | #, python-format | |
|
3638 | msgid "Hello %s" | |
|
3639 | msgstr "" | |
|
3640 | ||
|
3641 | #: rhodecode/templates/email_templates/password_reset.html:5 | |
|
3642 | msgid "We received a request to create a new password for your account." | |
|
3447 | 3643 | msgstr "" |
|
3448 | 3644 | |
|
3449 | 3645 | #: rhodecode/templates/email_templates/password_reset.html:6 |
|
3450 | msgid "We received a request to create a new password for your account." | |
|
3451 | msgstr "" | |
|
3452 | ||
|
3453 | #: rhodecode/templates/email_templates/password_reset.html:8 | |
|
3454 | 3646 | msgid "You can generate it by clicking following URL" |
|
3455 | 3647 | msgstr "" |
|
3456 | 3648 | |
|
3457 |
#: rhodecode/templates/email_templates/password_reset.html:1 |
|
|
3458 |
msgid "If you did |
|
|
3649 | #: rhodecode/templates/email_templates/password_reset.html:11 | |
|
3650 | msgid "If you did not request new password please ignore this email." | |
|
3459 | 3651 | msgstr "" |
|
3460 | 3652 | |
|
3461 | 3653 | #: rhodecode/templates/email_templates/pull_request.html:4 |
@@ -3466,33 +3658,28 b' msgid ""' | |||
|
3466 | 3658 | msgstr "" |
|
3467 | 3659 | |
|
3468 | 3660 | #: rhodecode/templates/email_templates/pull_request.html:5 |
|
3469 | msgid "title" | |
|
3661 | msgid "View this pull request here" | |
|
3470 | 3662 | msgstr "" |
|
3471 | 3663 | |
|
3472 | 3664 | #: rhodecode/templates/email_templates/pull_request.html:6 |
|
3473 | #: rhodecode/templates/pullrequests/pullrequest.html:115 | |
|
3665 | msgid "title" | |
|
3666 | msgstr "" | |
|
3667 | ||
|
3668 | #: rhodecode/templates/email_templates/pull_request.html:7 | |
|
3474 | 3669 | msgid "description" |
|
3475 | 3670 | msgstr "" |
|
3476 | 3671 | |
|
3477 |
#: rhodecode/templates/email_templates/pull_request.html:1 |
|
|
3672 | #: rhodecode/templates/email_templates/pull_request.html:12 | |
|
3478 | 3673 | msgid "revisions for reviewing" |
|
3479 | 3674 | msgstr "" |
|
3480 | 3675 | |
|
3481 |
#: rhodecode/templates/email_templates/pull_request.html: |
|
|
3482 | msgid "View this pull request here" | |
|
3483 | msgstr "" | |
|
3484 | ||
|
3485 | #: rhodecode/templates/email_templates/pull_request_comment.html:4 | |
|
3676 | #: rhodecode/templates/email_templates/pull_request_comment.html:3 | |
|
3486 | 3677 | #, python-format |
|
3487 |
msgid " |
|
|
3488 | msgstr "" | |
|
3489 | ||
|
3490 |
#: rhodecode/templates/email_templates/pull_request_comment.html:1 |
|
|
3491 | msgid "New status" | |
|
3492 | msgstr "" | |
|
3493 | ||
|
3494 | #: rhodecode/templates/email_templates/pull_request_comment.html:14 | |
|
3495 | msgid "View this comment here" | |
|
3678 | msgid "Pull request #%s for repository %s" | |
|
3679 | msgstr "" | |
|
3680 | ||
|
3681 | #: rhodecode/templates/email_templates/pull_request_comment.html:13 | |
|
3682 | msgid "Closing pull request with status" | |
|
3496 | 3683 | msgstr "" |
|
3497 | 3684 | |
|
3498 | 3685 | #: rhodecode/templates/email_templates/registration.html:4 |
@@ -3503,107 +3690,105 b' msgstr ""' | |||
|
3503 | 3690 | msgid "View this user here" |
|
3504 | 3691 | msgstr "" |
|
3505 | 3692 | |
|
3506 |
#: rhodecode/templates/errors/error_document.html: |
|
|
3693 | #: rhodecode/templates/errors/error_document.html:55 | |
|
3507 | 3694 | #, python-format |
|
3508 | 3695 | msgid "You will be redirected to %s in %s seconds" |
|
3509 | 3696 | msgstr "" |
|
3510 | 3697 | |
|
3511 | 3698 | #: rhodecode/templates/files/file_diff.html:4 |
|
3512 | #, python-format | |
|
3513 |
msgid "%s File |
|
|
3514 | msgstr "" | |
|
3515 | ||
|
3516 |
#: rhodecode/templates/files/file_diff.html: |
|
|
3699 | #, fuzzy, python-format | |
|
3700 | msgid "%s File Diff" | |
|
3701 | msgstr "" | |
|
3702 | ||
|
3703 | #: rhodecode/templates/files/file_diff.html:8 | |
|
3517 | 3704 | msgid "File diff" |
|
3518 | 3705 | msgstr "" |
|
3519 | 3706 | |
|
3520 | 3707 | #: rhodecode/templates/files/files.html:4 |
|
3521 |
#: rhodecode/templates/files/files.html:7 |
|
|
3522 | #, python-format | |
|
3523 |
msgid "%s |
|
|
3524 | msgstr "" | |
|
3525 | ||
|
3526 |
#: rhodecode/templates/files/files.html: |
|
|
3527 |
#: rhodecode/templates/ |
|
|
3528 | msgid "files" | |
|
3708 | #: rhodecode/templates/files/files.html:76 | |
|
3709 | #, fuzzy, python-format | |
|
3710 | msgid "%s Files" | |
|
3711 | msgstr "" | |
|
3712 | ||
|
3713 | #: rhodecode/templates/files/files.html:30 | |
|
3714 | #: rhodecode/templates/files/files_add.html:31 | |
|
3715 | #: rhodecode/templates/files/files_edit.html:31 | |
|
3716 | #: rhodecode/templates/shortlog/shortlog_data.html:9 | |
|
3717 | msgid "Branch" | |
|
3529 | 3718 | msgstr "" |
|
3530 | 3719 | |
|
3531 | 3720 | #: rhodecode/templates/files/files_add.html:4 |
|
3532 | #: rhodecode/templates/files/files_edit.html:4 | |
|
3533 | #, python-format | |
|
3534 | msgid "%s Edit file" | |
|
3721 | #, fuzzy, python-format | |
|
3722 | msgid "%s Files Add" | |
|
3535 | 3723 | msgstr "" |
|
3536 | 3724 | |
|
3537 | 3725 | #: rhodecode/templates/files/files_add.html:19 |
|
3538 |
msgid " |
|
|
3539 | msgstr "" | |
|
3540 | ||
|
3541 |
#: rhodecode/templates/files/files_add.html: |
|
|
3726 | msgid "Add file" | |
|
3727 | msgstr "" | |
|
3728 | ||
|
3729 | #: rhodecode/templates/files/files_add.html:38 | |
|
3730 | #: rhodecode/templates/files/files_browser.html:31 | |
|
3731 | #: rhodecode/templates/shortlog/shortlog_data.html:78 | |
|
3542 | 3732 | msgid "Add new file" |
|
3543 | 3733 | msgstr "" |
|
3544 | 3734 | |
|
3545 |
#: rhodecode/templates/files/files_add.html:4 |
|
|
3735 | #: rhodecode/templates/files/files_add.html:43 | |
|
3546 | 3736 | msgid "File Name" |
|
3547 | 3737 | msgstr "" |
|
3548 | 3738 | |
|
3549 |
#: rhodecode/templates/files/files_add.html:4 |
|
|
3550 |
#: rhodecode/templates/files/files_add.html:5 |
|
|
3739 | #: rhodecode/templates/files/files_add.html:47 | |
|
3740 | #: rhodecode/templates/files/files_add.html:56 | |
|
3551 | 3741 | msgid "or" |
|
3552 | 3742 | msgstr "" |
|
3553 | 3743 | |
|
3554 |
#: rhodecode/templates/files/files_add.html:4 |
|
|
3555 |
#: rhodecode/templates/files/files_add.html:5 |
|
|
3744 | #: rhodecode/templates/files/files_add.html:47 | |
|
3745 | #: rhodecode/templates/files/files_add.html:52 | |
|
3556 | 3746 | msgid "Upload file" |
|
3557 | 3747 | msgstr "" |
|
3558 | 3748 | |
|
3559 |
#: rhodecode/templates/files/files_add.html:5 |
|
|
3749 | #: rhodecode/templates/files/files_add.html:56 | |
|
3560 | 3750 | msgid "Create new file" |
|
3561 | 3751 | msgstr "" |
|
3562 | 3752 | |
|
3563 |
#: rhodecode/templates/files/files_add.html:6 |
|
|
3564 |
#: rhodecode/templates/files/files_edit.html:3 |
|
|
3753 | #: rhodecode/templates/files/files_add.html:61 | |
|
3754 | #: rhodecode/templates/files/files_edit.html:37 | |
|
3565 | 3755 | #: rhodecode/templates/files/files_ypjax.html:3 |
|
3566 | 3756 | msgid "Location" |
|
3567 | 3757 | msgstr "" |
|
3568 | 3758 | |
|
3569 |
#: rhodecode/templates/files/files_add.html:6 |
|
|
3759 | #: rhodecode/templates/files/files_add.html:65 | |
|
3570 | 3760 | msgid "use / to separate directories" |
|
3571 | 3761 | msgstr "" |
|
3572 | 3762 | |
|
3573 |
#: rhodecode/templates/files/files_add.html:7 |
|
|
3574 |
#: rhodecode/templates/files/files_edit.html:6 |
|
|
3763 | #: rhodecode/templates/files/files_add.html:75 | |
|
3764 | #: rhodecode/templates/files/files_edit.html:61 | |
|
3575 | 3765 | #: rhodecode/templates/shortlog/shortlog_data.html:6 |
|
3576 |
msgid " |
|
|
3577 | msgstr "" | |
|
3578 | ||
|
3579 |
#: rhodecode/templates/files/files_add.html: |
|
|
3580 |
#: rhodecode/templates/files/files_edit.html:6 |
|
|
3766 | msgid "Commit message" | |
|
3767 | msgstr "" | |
|
3768 | ||
|
3769 | #: rhodecode/templates/files/files_add.html:79 | |
|
3770 | #: rhodecode/templates/files/files_edit.html:65 | |
|
3581 | 3771 | msgid "Commit changes" |
|
3582 | 3772 | msgstr "" |
|
3583 | 3773 | |
|
3584 | 3774 | #: rhodecode/templates/files/files_browser.html:13 |
|
3585 |
msgid " |
|
|
3775 | msgid "View" | |
|
3586 | 3776 | msgstr "" |
|
3587 | 3777 | |
|
3588 | 3778 | #: rhodecode/templates/files/files_browser.html:14 |
|
3589 |
msgid " |
|
|
3779 | msgid "Previous revision" | |
|
3590 | 3780 | msgstr "" |
|
3591 | 3781 | |
|
3592 | 3782 | #: rhodecode/templates/files/files_browser.html:16 |
|
3593 |
msgid " |
|
|
3783 | msgid "Next revision" | |
|
3594 | 3784 | msgstr "" |
|
3595 | 3785 | |
|
3596 | 3786 | #: rhodecode/templates/files/files_browser.html:23 |
|
3597 |
msgid " |
|
|
3787 | msgid "Follow current branch" | |
|
3598 | 3788 | msgstr "" |
|
3599 | 3789 | |
|
3600 | 3790 | #: rhodecode/templates/files/files_browser.html:27 |
|
3601 |
msgid " |
|
|
3602 | msgstr "" | |
|
3603 | ||
|
3604 | #: rhodecode/templates/files/files_browser.html:31 | |
|
3605 | #: rhodecode/templates/shortlog/shortlog_data.html:78 | |
|
3606 | msgid "add new file" | |
|
3791 | msgid "Search file list" | |
|
3607 | 3792 | msgstr "" |
|
3608 | 3793 | |
|
3609 | 3794 | #: rhodecode/templates/files/files_browser.html:35 |
@@ -3627,34 +3812,39 b' msgid "Last modified"' | |||
|
3627 | 3812 | msgstr "" |
|
3628 | 3813 | |
|
3629 | 3814 | #: rhodecode/templates/files/files_browser.html:52 |
|
3630 | msgid "Last commiter" | |
|
3815 | msgid "Last committer" | |
|
3816 | msgstr "" | |
|
3817 | ||
|
3818 | #: rhodecode/templates/files/files_edit.html:4 | |
|
3819 | #, fuzzy, python-format | |
|
3820 | msgid "%s Files Edit" | |
|
3631 | 3821 | msgstr "" |
|
3632 | 3822 | |
|
3633 | 3823 | #: rhodecode/templates/files/files_edit.html:19 |
|
3634 |
msgid " |
|
|
3824 | msgid "Edit file" | |
|
3825 | msgstr "" | |
|
3826 | ||
|
3827 | #: rhodecode/templates/files/files_edit.html:47 | |
|
3828 | #: rhodecode/templates/files/files_source.html:23 | |
|
3829 | msgid "Show annotation" | |
|
3830 | msgstr "" | |
|
3831 | ||
|
3832 | #: rhodecode/templates/files/files_edit.html:48 | |
|
3833 | #: rhodecode/templates/files/files_source.html:25 | |
|
3834 | #: rhodecode/templates/files/files_source.html:55 | |
|
3835 | msgid "Show as raw" | |
|
3635 | 3836 | msgstr "" |
|
3636 | 3837 | |
|
3637 | 3838 | #: rhodecode/templates/files/files_edit.html:49 |
|
3638 | #: rhodecode/templates/files/files_source.html:23 | |
|
3639 | msgid "show annotation" | |
|
3640 | msgstr "" | |
|
3641 | ||
|
3642 | #: rhodecode/templates/files/files_edit.html:50 | |
|
3643 | #: rhodecode/templates/files/files_source.html:25 | |
|
3644 | #: rhodecode/templates/files/files_source.html:53 | |
|
3645 | msgid "show as raw" | |
|
3646 | msgstr "" | |
|
3647 | ||
|
3648 | #: rhodecode/templates/files/files_edit.html:51 | |
|
3649 | 3839 | #: rhodecode/templates/files/files_source.html:26 |
|
3650 |
msgid " |
|
|
3651 | msgstr "" | |
|
3652 | ||
|
3653 |
#: rhodecode/templates/files/files_edit.html:5 |
|
|
3654 |
msgid " |
|
|
3655 | msgstr "" | |
|
3656 | ||
|
3657 |
#: rhodecode/templates/files/files_edit.html:5 |
|
|
3840 | msgid "Download as raw" | |
|
3841 | msgstr "" | |
|
3842 | ||
|
3843 | #: rhodecode/templates/files/files_edit.html:52 | |
|
3844 | msgid "Source" | |
|
3845 | msgstr "" | |
|
3846 | ||
|
3847 | #: rhodecode/templates/files/files_edit.html:57 | |
|
3658 | 3848 | msgid "Editing file" |
|
3659 | 3849 | msgstr "" |
|
3660 | 3850 | |
@@ -3663,16 +3853,16 b' msgid "History"' | |||
|
3663 | 3853 | msgstr "" |
|
3664 | 3854 | |
|
3665 | 3855 | #: rhodecode/templates/files/files_history_box.html:9 |
|
3666 |
msgid " |
|
|
3856 | msgid "Diff to revision" | |
|
3667 | 3857 | msgstr "" |
|
3668 | 3858 | |
|
3669 | 3859 | #: rhodecode/templates/files/files_history_box.html:10 |
|
3670 | 3860 | #, fuzzy |
|
3671 |
msgid " |
|
|
3861 | msgid "Show at revision" | |
|
3672 | 3862 | msgstr "" |
|
3673 | 3863 | |
|
3674 | 3864 | #: rhodecode/templates/files/files_history_box.html:11 |
|
3675 |
msgid " |
|
|
3865 | msgid "Show full history" | |
|
3676 | 3866 | msgstr "" |
|
3677 | 3867 | |
|
3678 | 3868 | #: rhodecode/templates/files/files_history_box.html:16 |
@@ -3687,15 +3877,28 b' msgid "Load file history"' | |||
|
3687 | 3877 | msgstr "" |
|
3688 | 3878 | |
|
3689 | 3879 | #: rhodecode/templates/files/files_source.html:21 |
|
3690 |
msgid " |
|
|
3691 | msgstr "" | |
|
3692 | ||
|
3693 |
#: rhodecode/templates/files/files_source.html: |
|
|
3880 | msgid "Show source" | |
|
3881 | msgstr "" | |
|
3882 | ||
|
3883 | #: rhodecode/templates/files/files_source.html:29 | |
|
3884 | #, python-format | |
|
3885 | msgid "Edit on branch:%s" | |
|
3886 | msgstr "" | |
|
3887 | ||
|
3888 | #: rhodecode/templates/files/files_source.html:31 | |
|
3889 | msgid "Edit on branch:?" | |
|
3890 | msgstr "" | |
|
3891 | ||
|
3892 | #: rhodecode/templates/files/files_source.html:31 | |
|
3893 | msgid "Editing files allowed only when on branch head revision" | |
|
3894 | msgstr "" | |
|
3895 | ||
|
3896 | #: rhodecode/templates/files/files_source.html:46 | |
|
3694 | 3897 | #, python-format |
|
3695 | 3898 | msgid "Binary file (%s)" |
|
3696 | 3899 | msgstr "" |
|
3697 | 3900 | |
|
3698 |
#: rhodecode/templates/files/files_source.html:5 |
|
|
3901 | #: rhodecode/templates/files/files_source.html:55 | |
|
3699 | 3902 | msgid "File is too big to display" |
|
3700 | 3903 | msgstr "" |
|
3701 | 3904 | |
@@ -3716,8 +3919,10 b' msgstr ""' | |||
|
3716 | 3919 | msgid "%s Followers" |
|
3717 | 3920 | msgstr "" |
|
3718 | 3921 | |
|
3719 |
#: rhodecode/templates/followers/followers.html: |
|
|
3720 | msgid "followers" | |
|
3922 | #: rhodecode/templates/followers/followers.html:9 | |
|
3923 | #: rhodecode/templates/summary/summary.html:183 | |
|
3924 | #: rhodecode/templates/summary/summary.html:184 | |
|
3925 | msgid "Followers" | |
|
3721 | 3926 | msgstr "" |
|
3722 | 3927 | |
|
3723 | 3928 | #: rhodecode/templates/followers/followers_data.html:12 |
@@ -3729,32 +3934,32 b' msgstr ""' | |||
|
3729 | 3934 | msgid "%s Fork" |
|
3730 | 3935 | msgstr "" |
|
3731 | 3936 | |
|
3732 |
#: rhodecode/templates/forks/fork.html: |
|
|
3937 | #: rhodecode/templates/forks/fork.html:28 | |
|
3733 | 3938 | msgid "Fork name" |
|
3734 | 3939 | msgstr "" |
|
3735 | 3940 | |
|
3736 |
#: rhodecode/templates/forks/fork.html:6 |
|
|
3941 | #: rhodecode/templates/forks/fork.html:65 | |
|
3737 | 3942 | msgid "Private" |
|
3738 | 3943 | msgstr "" |
|
3739 | 3944 | |
|
3740 |
#: rhodecode/templates/forks/fork.html:7 |
|
|
3945 | #: rhodecode/templates/forks/fork.html:74 | |
|
3741 | 3946 | msgid "Copy permissions" |
|
3742 | 3947 | msgstr "" |
|
3743 | 3948 | |
|
3744 |
#: rhodecode/templates/forks/fork.html:8 |
|
|
3949 | #: rhodecode/templates/forks/fork.html:78 | |
|
3745 | 3950 | msgid "Copy permissions from forked repository" |
|
3746 | 3951 | msgstr "" |
|
3747 | 3952 | |
|
3748 |
#: rhodecode/templates/forks/fork.html:8 |
|
|
3953 | #: rhodecode/templates/forks/fork.html:84 | |
|
3749 | 3954 | msgid "Update after clone" |
|
3750 | 3955 | msgstr "" |
|
3751 | 3956 | |
|
3752 |
#: rhodecode/templates/forks/fork.html: |
|
|
3957 | #: rhodecode/templates/forks/fork.html:88 | |
|
3753 | 3958 | msgid "Checkout source after making a clone" |
|
3754 | 3959 | msgstr "" |
|
3755 | 3960 | |
|
3756 |
#: rhodecode/templates/forks/fork.html:9 |
|
|
3757 |
msgid " |
|
|
3961 | #: rhodecode/templates/forks/fork.html:93 | |
|
3962 | msgid "Fork this repository" | |
|
3758 | 3963 | msgstr "" |
|
3759 | 3964 | |
|
3760 | 3965 | #: rhodecode/templates/forks/forks.html:5 |
@@ -3762,12 +3967,14 b' msgstr ""' | |||
|
3762 | 3967 | msgid "%s Forks" |
|
3763 | 3968 | msgstr "" |
|
3764 | 3969 | |
|
3765 |
#: rhodecode/templates/forks/forks.html: |
|
|
3766 | msgid "forks" | |
|
3970 | #: rhodecode/templates/forks/forks.html:9 | |
|
3971 | #: rhodecode/templates/summary/summary.html:189 | |
|
3972 | #: rhodecode/templates/summary/summary.html:190 | |
|
3973 | msgid "Forks" | |
|
3767 | 3974 | msgstr "" |
|
3768 | 3975 | |
|
3769 | 3976 | #: rhodecode/templates/forks/forks_data.html:17 |
|
3770 |
msgid " |
|
|
3977 | msgid "Forked" | |
|
3771 | 3978 | msgstr "" |
|
3772 | 3979 | |
|
3773 | 3980 | #: rhodecode/templates/forks/forks_data.html:42 |
@@ -3783,44 +3990,27 b' msgid "RSS journal feed"' | |||
|
3783 | 3990 | msgstr "" |
|
3784 | 3991 | |
|
3785 | 3992 | #: rhodecode/templates/journal/journal.html:32 |
|
3786 | #: rhodecode/templates/pullrequests/pullrequest.html:55 | |
|
3787 | 3993 | msgid "Refresh" |
|
3788 | 3994 | msgstr "" |
|
3789 | 3995 | |
|
3790 | 3996 | #: rhodecode/templates/journal/journal.html:35 |
|
3791 | 3997 | #: rhodecode/templates/journal/public_journal.html:24 |
|
3792 | msgid "RSS feed" | |
|
3793 | msgstr "" | |
|
3794 | ||
|
3795 | #: rhodecode/templates/journal/journal.html:38 | |
|
3796 | #: rhodecode/templates/journal/public_journal.html:27 | |
|
3797 | 3998 | msgid "ATOM feed" |
|
3798 | 3999 | msgstr "" |
|
3799 | 4000 | |
|
3800 |
#: rhodecode/templates/journal/journal.html: |
|
|
4001 | #: rhodecode/templates/journal/journal.html:51 | |
|
3801 | 4002 | msgid "Watched" |
|
3802 | 4003 | msgstr "" |
|
3803 | 4004 | |
|
3804 | #: rhodecode/templates/journal/journal.html:54 | |
|
3805 | msgid "ADD" | |
|
3806 | msgstr "" | |
|
3807 | ||
|
3808 | #: rhodecode/templates/journal/journal.html:77 | |
|
3809 | msgid "following user" | |
|
3810 | msgstr "" | |
|
3811 | ||
|
3812 | #: rhodecode/templates/journal/journal.html:77 | |
|
3813 | msgid "user" | |
|
3814 | msgstr "" | |
|
3815 | ||
|
3816 | #: rhodecode/templates/journal/journal.html:110 | |
|
3817 | msgid "You are not following any users or repositories" | |
|
3818 | msgstr "" | |
|
3819 | ||
|
3820 | 4005 | #: rhodecode/templates/journal/journal_data.html:55 |
|
3821 | 4006 | msgid "No entries yet" |
|
3822 | 4007 | msgstr "" |
|
3823 | 4008 | |
|
4009 | #: rhodecode/templates/journal/public_journal.html:4 | |
|
4010 | #: rhodecode/templates/journal/public_journal.html:21 | |
|
4011 | msgid "Public Journal" | |
|
4012 | msgstr "" | |
|
4013 | ||
|
3824 | 4014 | #: rhodecode/templates/journal/public_journal.html:13 |
|
3825 | 4015 | msgid "ATOM public journal feed" |
|
3826 | 4016 | msgstr "" |
@@ -3829,148 +4019,128 b' msgstr ""' | |||
|
3829 | 4019 | msgid "RSS public journal feed" |
|
3830 | 4020 | msgstr "" |
|
3831 | 4021 | |
|
3832 | #: rhodecode/templates/journal/public_journal.html:21 | |
|
3833 | msgid "Public Journal" | |
|
3834 | msgstr "" | |
|
3835 | ||
|
3836 | 4022 | #: rhodecode/templates/pullrequests/pullrequest.html:4 |
|
3837 |
#: rhodecode/templates/pullrequests/pullrequest.html: |
|
|
4023 | #: rhodecode/templates/pullrequests/pullrequest.html:8 | |
|
3838 | 4024 | msgid "New pull request" |
|
3839 | 4025 | msgstr "" |
|
3840 | 4026 | |
|
3841 |
#: rhodecode/templates/pullrequests/pullrequest.html:5 |
|
|
3842 | msgid "refresh overview" | |
|
3843 | msgstr "" | |
|
3844 | ||
|
3845 | #: rhodecode/templates/pullrequests/pullrequest.html:66 | |
|
4027 | #: rhodecode/templates/pullrequests/pullrequest.html:52 | |
|
3846 | 4028 | msgid "Detailed compare view" |
|
3847 | 4029 | msgstr "" |
|
3848 | 4030 | |
|
3849 |
#: rhodecode/templates/pullrequests/pullrequest.html: |
|
|
3850 |
#: rhodecode/templates/pullrequests/pullrequest_show.html:1 |
|
|
4031 | #: rhodecode/templates/pullrequests/pullrequest.html:56 | |
|
4032 | #: rhodecode/templates/pullrequests/pullrequest_show.html:137 | |
|
3851 | 4033 | msgid "Pull request reviewers" |
|
3852 | 4034 | msgstr "" |
|
3853 | 4035 | |
|
3854 |
#: rhodecode/templates/pullrequests/pullrequest.html: |
|
|
3855 |
#: rhodecode/templates/pullrequests/pullrequest_show.html:1 |
|
|
4036 | #: rhodecode/templates/pullrequests/pullrequest.html:65 | |
|
4037 | #: rhodecode/templates/pullrequests/pullrequest_show.html:149 | |
|
3856 | 4038 | msgid "owner" |
|
3857 | 4039 | msgstr "" |
|
3858 | 4040 | |
|
3859 |
#: rhodecode/templates/pullrequests/pullrequest.html: |
|
|
3860 | #: rhodecode/templates/pullrequests/pullrequest_show.html:127 | |
|
4041 | #: rhodecode/templates/pullrequests/pullrequest.html:77 | |
|
3861 | 4042 | msgid "Add reviewer to this pull request." |
|
3862 | 4043 | msgstr "" |
|
3863 | 4044 | |
|
3864 |
#: rhodecode/templates/pullrequests/pullrequest.html: |
|
|
4045 | #: rhodecode/templates/pullrequests/pullrequest.html:83 | |
|
3865 | 4046 | msgid "Create new pull request" |
|
3866 | 4047 | msgstr "" |
|
3867 | 4048 | |
|
3868 |
#: rhodecode/templates/pullrequests/pullrequest.html: |
|
|
4049 | #: rhodecode/templates/pullrequests/pullrequest.html:92 | |
|
4050 | #: rhodecode/templates/pullrequests/pullrequest_data.html:14 | |
|
3869 | 4051 | #: rhodecode/templates/pullrequests/pullrequest_show.html:25 |
|
3870 | #: rhodecode/templates/pullrequests/pullrequest_show_all.html:33 | |
|
3871 | 4052 | msgid "Title" |
|
3872 | 4053 | msgstr "" |
|
3873 | 4054 | |
|
3874 |
#: rhodecode/templates/pullrequests/pullrequest.html:1 |
|
|
4055 | #: rhodecode/templates/pullrequests/pullrequest.html:109 | |
|
3875 | 4056 | msgid "Send pull request" |
|
3876 | 4057 | msgstr "" |
|
3877 | 4058 | |
|
3878 |
#: rhodecode/templates/pullrequests/pullrequest_show.html: |
|
|
3879 | #, python-format | |
|
3880 | msgid "Closed %s" | |
|
3881 | msgstr "" | |
|
3882 | ||
|
3883 | #: rhodecode/templates/pullrequests/pullrequest_show.html:23 | |
|
4059 | #: rhodecode/templates/pullrequests/pullrequest_show.html:4 | |
|
3884 | 4060 | #, python-format |
|
3885 | msgid "with status %s" | |
|
3886 | msgstr "" | |
|
3887 | ||
|
3888 |
#: rhodecode/templates/pullrequests/pullrequest_show.html:3 |
|
|
3889 |
msgid " |
|
|
3890 | msgstr "" | |
|
3891 | ||
|
3892 |
#: rhodecode/templates/pullrequests/pullrequest_show.html: |
|
|
4061 | msgid "%s Pull Request #%s" | |
|
4062 | msgstr "" | |
|
4063 | ||
|
4064 | #: rhodecode/templates/pullrequests/pullrequest_show.html:35 | |
|
4065 | msgid "Review status" | |
|
4066 | msgstr "" | |
|
4067 | ||
|
4068 | #: rhodecode/templates/pullrequests/pullrequest_show.html:40 | |
|
3893 | 4069 | msgid "Pull request status" |
|
3894 | 4070 | msgstr "" |
|
3895 | 4071 | |
|
3896 |
#: rhodecode/templates/pullrequests/pullrequest_show.html: |
|
|
4072 | #: rhodecode/templates/pullrequests/pullrequest_show.html:53 | |
|
3897 | 4073 | msgid "Still not reviewed by" |
|
3898 | 4074 | msgstr "" |
|
3899 | 4075 | |
|
3900 |
#: rhodecode/templates/pullrequests/pullrequest_show.html: |
|
|
4076 | #: rhodecode/templates/pullrequests/pullrequest_show.html:57 | |
|
3901 | 4077 | #, python-format |
|
3902 | 4078 | msgid "%d reviewer" |
|
3903 | 4079 | msgid_plural "%d reviewers" |
|
3904 | 4080 | msgstr[0] "" |
|
3905 | 4081 | msgstr[1] "" |
|
3906 | 4082 | |
|
3907 |
#: rhodecode/templates/pullrequests/pullrequest_show.html:5 |
|
|
3908 |
msgid " |
|
|
3909 | msgstr "" | |
|
3910 | ||
|
3911 | #: rhodecode/templates/pullrequests/pullrequest_show.html:58 | |
|
3912 | msgid "Created on" | |
|
4083 | #: rhodecode/templates/pullrequests/pullrequest_show.html:59 | |
|
4084 | msgid "Pull request was reviewed by all reviewers" | |
|
3913 | 4085 | msgstr "" |
|
3914 | 4086 | |
|
3915 | 4087 | #: rhodecode/templates/pullrequests/pullrequest_show.html:65 |
|
4088 | msgid "Origin repository" | |
|
4089 | msgstr "" | |
|
4090 | ||
|
4091 | #: rhodecode/templates/pullrequests/pullrequest_show.html:89 | |
|
4092 | msgid "Created on" | |
|
4093 | msgstr "" | |
|
4094 | ||
|
4095 | #: rhodecode/templates/pullrequests/pullrequest_show.html:102 | |
|
3916 | 4096 | msgid "Compare view" |
|
3917 | 4097 | msgstr "" |
|
3918 | 4098 | |
|
3919 |
#: rhodecode/templates/pullrequests/pullrequest_show.html:1 |
|
|
4099 | #: rhodecode/templates/pullrequests/pullrequest_show.html:149 | |
|
3920 | 4100 | #, fuzzy |
|
3921 | 4101 | msgid "reviewer" |
|
3922 | 4102 | msgstr "" |
|
3923 | 4103 | |
|
4104 | #: rhodecode/templates/pullrequests/pullrequest_show.html:164 | |
|
4105 | msgid "Add or remove reviewer to this pull request." | |
|
4106 | msgstr "" | |
|
4107 | ||
|
4108 | #: rhodecode/templates/pullrequests/pullrequest_show.html:168 | |
|
4109 | #, fuzzy | |
|
4110 | msgid "Save changes" | |
|
4111 | msgstr "" | |
|
4112 | ||
|
3924 | 4113 | #: rhodecode/templates/pullrequests/pullrequest_show_all.html:4 |
|
3925 | msgid "all pull requests" | |
|
3926 | msgstr "" | |
|
3927 | ||
|
3928 | #: rhodecode/templates/pullrequests/pullrequest_show_all.html:12 | |
|
3929 | msgid "All pull requests" | |
|
3930 | msgstr "" | |
|
3931 | ||
|
3932 | #: rhodecode/templates/pullrequests/pullrequest_show_all.html:27 | |
|
3933 | msgid "Closed" | |
|
4114 | #, python-format | |
|
4115 | msgid "%s Pull Requests" | |
|
3934 | 4116 | msgstr "" |
|
3935 | 4117 | |
|
3936 | 4118 | #: rhodecode/templates/search/search.html:6 |
|
3937 | #, python-format | |
|
3938 | msgid "Search \"%s\" in repository: %s" | |
|
4119 | msgid "Search repository" | |
|
3939 | 4120 | msgstr "" |
|
3940 | 4121 | |
|
3941 | 4122 | #: rhodecode/templates/search/search.html:8 |
|
3942 | #, python-format | |
|
3943 | msgid "Search \"%s\" in all repositories" | |
|
3944 | msgstr "" | |
|
3945 | ||
|
3946 | #: rhodecode/templates/search/search.html:12 | |
|
3947 | #: rhodecode/templates/search/search.html:32 | |
|
3948 | #, python-format | |
|
3949 | msgid "Search in repository: %s" | |
|
3950 | msgstr "" | |
|
3951 | ||
|
3952 | #: rhodecode/templates/search/search.html:14 | |
|
3953 | #: rhodecode/templates/search/search.html:34 | |
|
4123 | #: rhodecode/templates/search/search.html:16 | |
|
3954 | 4124 | msgid "Search in all repositories" |
|
3955 | 4125 | msgstr "" |
|
3956 | 4126 | |
|
3957 |
#: rhodecode/templates/search/search.html: |
|
|
4127 | #: rhodecode/templates/search/search.html:50 | |
|
3958 | 4128 | msgid "Search term" |
|
3959 | 4129 | msgstr "" |
|
3960 | 4130 | |
|
3961 |
#: rhodecode/templates/search/search.html:6 |
|
|
4131 | #: rhodecode/templates/search/search.html:62 | |
|
3962 | 4132 | msgid "Search in" |
|
3963 | 4133 | msgstr "" |
|
3964 | 4134 | |
|
3965 | #: rhodecode/templates/search/search.html:63 | |
|
3966 | msgid "File contents" | |
|
3967 | msgstr "" | |
|
3968 | ||
|
3969 | #: rhodecode/templates/search/search.html:64 | |
|
3970 | msgid "Commit messages" | |
|
3971 | msgstr "" | |
|
3972 | ||
|
3973 | 4135 | #: rhodecode/templates/search/search.html:65 |
|
4136 | msgid "File contents" | |
|
4137 | msgstr "" | |
|
4138 | ||
|
4139 | #: rhodecode/templates/search/search.html:66 | |
|
4140 | msgid "Commit messages" | |
|
4141 | msgstr "" | |
|
4142 | ||
|
4143 | #: rhodecode/templates/search/search.html:67 | |
|
3974 | 4144 | msgid "File names" |
|
3975 | 4145 | msgstr "" |
|
3976 | 4146 | |
@@ -3980,39 +4150,23 b' msgstr ""' | |||
|
3980 | 4150 | msgid "Permission denied" |
|
3981 | 4151 | msgstr "" |
|
3982 | 4152 | |
|
3983 | #: rhodecode/templates/settings/repo_settings.html:5 | |
|
3984 | #, python-format | |
|
3985 | msgid "%s Settings" | |
|
3986 | msgstr "" | |
|
3987 | ||
|
3988 | #: rhodecode/templates/settings/repo_settings.html:102 | |
|
3989 | msgid "Delete repository" | |
|
3990 | msgstr "" | |
|
3991 | ||
|
3992 | #: rhodecode/templates/settings/repo_settings.html:109 | |
|
3993 | msgid "Remove repo" | |
|
3994 | msgstr "" | |
|
3995 | ||
|
3996 | 4153 | #: rhodecode/templates/shortlog/shortlog.html:5 |
|
3997 | #, python-format | |
|
3998 |
msgid "%s |
|
|
3999 | msgstr "" | |
|
4000 | ||
|
4154 | #, fuzzy, python-format | |
|
4155 | msgid "%s Lightweight Changelog" | |
|
4156 | msgstr "" | |
|
4157 | ||
|
4158 | #: rhodecode/templates/shortlog/shortlog.html:11 | |
|
4001 | 4159 | #: rhodecode/templates/shortlog/shortlog.html:15 |
|
4002 | #: rhodecode/templates/shortlog/shortlog.html:19 | |
|
4003 | msgid "shortlog" | |
|
4004 | msgstr "" | |
|
4005 | ||
|
4006 | #: rhodecode/templates/shortlog/shortlog_data.html:5 | |
|
4007 | msgid "revision" | |
|
4160 | msgid "Lightweight Changelog" | |
|
4008 | 4161 | msgstr "" |
|
4009 | 4162 | |
|
4010 | 4163 | #: rhodecode/templates/shortlog/shortlog_data.html:7 |
|
4011 |
msgid " |
|
|
4012 | msgstr "" | |
|
4013 | ||
|
4014 |
#: rhodecode/templates/shortlog/shortlog_data.html: |
|
|
4015 | msgid "author" | |
|
4164 | msgid "Age" | |
|
4165 | msgstr "" | |
|
4166 | ||
|
4167 | #: rhodecode/templates/shortlog/shortlog_data.html:20 | |
|
4168 | #, python-format | |
|
4169 | msgid "Click to open associated pull request #%s" | |
|
4016 | 4170 | msgstr "" |
|
4017 | 4171 | |
|
4018 | 4172 | #: rhodecode/templates/shortlog/shortlog_data.html:75 |
@@ -4032,156 +4186,165 b' msgstr ""' | |||
|
4032 | 4186 | msgid "%s Summary" |
|
4033 | 4187 | msgstr "" |
|
4034 | 4188 | |
|
4035 |
#: rhodecode/templates/summary/summary.html:1 |
|
|
4036 | msgid "summary" | |
|
4037 | msgstr "" | |
|
4038 | ||
|
4039 | #: rhodecode/templates/summary/summary.html:20 | |
|
4189 | #: rhodecode/templates/summary/summary.html:16 | |
|
4040 | 4190 | #, python-format |
|
4041 |
msgid " |
|
|
4042 | msgstr "" | |
|
4043 | ||
|
4044 |
#: rhodecode/templates/summary/summary.html: |
|
|
4191 | msgid "%s ATOM feed" | |
|
4192 | msgstr "" | |
|
4193 | ||
|
4194 | #: rhodecode/templates/summary/summary.html:17 | |
|
4045 | 4195 | #, python-format |
|
4046 |
msgid " |
|
|
4047 | msgstr "" | |
|
4048 | ||
|
4049 |
#: rhodecode/templates/summary/summary.html: |
|
|
4050 | #: rhodecode/templates/summary/summary.html:52 | |
|
4051 | msgid "ATOM" | |
|
4052 | msgstr "" | |
|
4053 | ||
|
4054 | #: rhodecode/templates/summary/summary.html:70 | |
|
4196 | msgid "%s RSS feed" | |
|
4197 | msgstr "" | |
|
4198 | ||
|
4199 | #: rhodecode/templates/summary/summary.html:62 | |
|
4055 | 4200 | #, python-format |
|
4056 | 4201 | msgid "Repository locked by %s" |
|
4057 | 4202 | msgstr "" |
|
4058 | 4203 | |
|
4059 |
#: rhodecode/templates/summary/summary.html: |
|
|
4204 | #: rhodecode/templates/summary/summary.html:64 | |
|
4060 | 4205 | msgid "Repository unlocked" |
|
4061 | 4206 | msgstr "" |
|
4062 | 4207 | |
|
4063 |
#: rhodecode/templates/summary/summary.html: |
|
|
4208 | #: rhodecode/templates/summary/summary.html:83 | |
|
4064 | 4209 | #, python-format |
|
4065 | 4210 | msgid "Non changable ID %s" |
|
4066 | 4211 | msgstr "" |
|
4067 | 4212 | |
|
4213 | #: rhodecode/templates/summary/summary.html:88 | |
|
4214 | msgid "Public" | |
|
4215 | msgstr "" | |
|
4216 | ||
|
4217 | #: rhodecode/templates/summary/summary.html:88 | |
|
4218 | #: rhodecode/templates/summary/summary.html:89 | |
|
4219 | msgid "Fork of" | |
|
4220 | msgstr "" | |
|
4221 | ||
|
4068 | 4222 | #: rhodecode/templates/summary/summary.html:96 |
|
4069 | msgid "public" | |
|
4070 | msgstr "" | |
|
4071 | ||
|
4072 |
#: rhodecode/templates/summary/summary.html:1 |
|
|
4073 | msgid "remote clone" | |
|
4074 | msgstr "" | |
|
4075 | ||
|
4076 | #: rhodecode/templates/summary/summary.html:125 | |
|
4223 | msgid "Remote clone" | |
|
4224 | msgstr "" | |
|
4225 | ||
|
4226 | #: rhodecode/templates/summary/summary.html:117 | |
|
4077 | 4227 | msgid "Contact" |
|
4078 | 4228 | msgstr "" |
|
4079 | 4229 | |
|
4080 |
#: rhodecode/templates/summary/summary.html:13 |
|
|
4230 | #: rhodecode/templates/summary/summary.html:131 | |
|
4081 | 4231 | msgid "Clone url" |
|
4082 | 4232 | msgstr "" |
|
4083 | 4233 | |
|
4084 |
#: rhodecode/templates/summary/summary.html:1 |
|
|
4234 | #: rhodecode/templates/summary/summary.html:136 | |
|
4085 | 4235 | msgid "Show by Name" |
|
4086 | 4236 | msgstr "" |
|
4087 | 4237 | |
|
4238 | #: rhodecode/templates/summary/summary.html:137 | |
|
4239 | msgid "Show by ID" | |
|
4240 | msgstr "" | |
|
4241 | ||
|
4088 | 4242 | #: rhodecode/templates/summary/summary.html:143 |
|
4089 | msgid "Show by ID" | |
|
4243 | msgid "Trending files" | |
|
4090 | 4244 | msgstr "" |
|
4091 | 4245 | |
|
4092 | 4246 | #: rhodecode/templates/summary/summary.html:151 |
|
4093 | msgid "Trending files" | |
|
4247 | #: rhodecode/templates/summary/summary.html:167 | |
|
4248 | #: rhodecode/templates/summary/summary.html:232 | |
|
4249 | msgid "enable" | |
|
4094 | 4250 | msgstr "" |
|
4095 | 4251 | |
|
4096 | 4252 | #: rhodecode/templates/summary/summary.html:159 |
|
4097 | #: rhodecode/templates/summary/summary.html:175 | |
|
4098 | #: rhodecode/templates/summary/summary.html:203 | |
|
4099 | msgid "enable" | |
|
4100 | msgstr "" | |
|
4101 | ||
|
4102 | #: rhodecode/templates/summary/summary.html:167 | |
|
4103 | 4253 | msgid "Download" |
|
4104 | 4254 | msgstr "" |
|
4105 | 4255 | |
|
4256 | #: rhodecode/templates/summary/summary.html:163 | |
|
4257 | msgid "There are no downloads yet" | |
|
4258 | msgstr "" | |
|
4259 | ||
|
4260 | #: rhodecode/templates/summary/summary.html:165 | |
|
4261 | msgid "Downloads are disabled for this repository" | |
|
4262 | msgstr "" | |
|
4263 | ||
|
4106 | 4264 | #: rhodecode/templates/summary/summary.html:171 |
|
4107 | msgid "There are no downloads yet" | |
|
4108 | msgstr "" | |
|
4109 | ||
|
4110 | #: rhodecode/templates/summary/summary.html:173 | |
|
4111 | msgid "Downloads are disabled for this repository" | |
|
4112 | msgstr "" | |
|
4113 | ||
|
4114 | #: rhodecode/templates/summary/summary.html:179 | |
|
4115 | 4265 | msgid "Download as zip" |
|
4116 | 4266 | msgstr "" |
|
4117 | 4267 | |
|
4118 |
#: rhodecode/templates/summary/summary.html:1 |
|
|
4268 | #: rhodecode/templates/summary/summary.html:174 | |
|
4119 | 4269 | msgid "Check this to download archive with subrepos" |
|
4120 | 4270 | msgstr "" |
|
4121 | 4271 | |
|
4122 |
#: rhodecode/templates/summary/summary.html:1 |
|
|
4272 | #: rhodecode/templates/summary/summary.html:174 | |
|
4123 | 4273 | msgid "with subrepos" |
|
4124 | 4274 | msgstr "" |
|
4125 | 4275 | |
|
4126 |
#: rhodecode/templates/summary/summary.html:19 |
|
|
4276 | #: rhodecode/templates/summary/summary.html:197 | |
|
4277 | msgid "Repository Size" | |
|
4278 | msgstr "" | |
|
4279 | ||
|
4280 | #: rhodecode/templates/summary/summary.html:204 | |
|
4281 | #: rhodecode/templates/summary/summary.html:206 | |
|
4282 | msgid "Feed" | |
|
4283 | msgstr "" | |
|
4284 | ||
|
4285 | #: rhodecode/templates/summary/summary.html:224 | |
|
4127 | 4286 | msgid "Commit activity by day / author" |
|
4128 | 4287 | msgstr "" |
|
4129 | 4288 | |
|
4130 |
#: rhodecode/templates/summary/summary.html:2 |
|
|
4289 | #: rhodecode/templates/summary/summary.html:235 | |
|
4131 | 4290 | msgid "Stats gathered: " |
|
4132 | 4291 | msgstr "" |
|
4133 | 4292 | |
|
4134 |
#: rhodecode/templates/summary/summary.html:2 |
|
|
4135 | msgid "Shortlog" | |
|
4136 | msgstr "" | |
|
4137 | ||
|
4138 |
#: rhodecode/templates/summary/summary.html:2 |
|
|
4293 | #: rhodecode/templates/summary/summary.html:256 | |
|
4294 | msgid "Latest changes" | |
|
4295 | msgstr "" | |
|
4296 | ||
|
4297 | #: rhodecode/templates/summary/summary.html:258 | |
|
4139 | 4298 | msgid "Quick start" |
|
4140 | 4299 | msgstr "" |
|
4141 | 4300 | |
|
4142 |
#: rhodecode/templates/summary/summary.html:2 |
|
|
4301 | #: rhodecode/templates/summary/summary.html:272 | |
|
4143 | 4302 | #, python-format |
|
4144 | 4303 | msgid "Readme file at revision '%s'" |
|
4145 | 4304 | msgstr "" |
|
4146 | 4305 | |
|
4147 |
#: rhodecode/templates/summary/summary.html:2 |
|
|
4306 | #: rhodecode/templates/summary/summary.html:275 | |
|
4148 | 4307 | msgid "Permalink to this readme" |
|
4149 | 4308 | msgstr "" |
|
4150 | 4309 | |
|
4151 |
#: rhodecode/templates/summary/summary.html:3 |
|
|
4310 | #: rhodecode/templates/summary/summary.html:333 | |
|
4152 | 4311 | #, python-format |
|
4153 | 4312 | msgid "Download %s as %s" |
|
4154 | 4313 | msgstr "" |
|
4155 | 4314 | |
|
4156 |
#: rhodecode/templates/summary/summary.html: |
|
|
4315 | #: rhodecode/templates/summary/summary.html:380 | |
|
4316 | msgid "files" | |
|
4317 | msgstr "" | |
|
4318 | ||
|
4319 | #: rhodecode/templates/summary/summary.html:690 | |
|
4157 | 4320 | msgid "commits" |
|
4158 | 4321 | msgstr "" |
|
4159 | 4322 | |
|
4160 |
#: rhodecode/templates/summary/summary.html:6 |
|
|
4323 | #: rhodecode/templates/summary/summary.html:691 | |
|
4161 | 4324 | msgid "files added" |
|
4162 | 4325 | msgstr "" |
|
4163 | 4326 | |
|
4164 |
#: rhodecode/templates/summary/summary.html:6 |
|
|
4327 | #: rhodecode/templates/summary/summary.html:692 | |
|
4165 | 4328 | msgid "files changed" |
|
4166 | 4329 | msgstr "" |
|
4167 | 4330 | |
|
4168 |
#: rhodecode/templates/summary/summary.html:6 |
|
|
4331 | #: rhodecode/templates/summary/summary.html:693 | |
|
4169 | 4332 | msgid "files removed" |
|
4170 | 4333 | msgstr "" |
|
4171 | 4334 | |
|
4172 |
#: rhodecode/templates/summary/summary.html:6 |
|
|
4335 | #: rhodecode/templates/summary/summary.html:695 | |
|
4173 | 4336 | msgid "commit" |
|
4174 | 4337 | msgstr "" |
|
4175 | 4338 | |
|
4176 |
#: rhodecode/templates/summary/summary.html:66 |
|
|
4339 | #: rhodecode/templates/summary/summary.html:696 | |
|
4177 | 4340 | msgid "file added" |
|
4178 | 4341 | msgstr "" |
|
4179 | 4342 | |
|
4180 |
#: rhodecode/templates/summary/summary.html:6 |
|
|
4343 | #: rhodecode/templates/summary/summary.html:697 | |
|
4181 | 4344 | msgid "file changed" |
|
4182 | 4345 | msgstr "" |
|
4183 | 4346 | |
|
4184 |
#: rhodecode/templates/summary/summary.html:6 |
|
|
4347 | #: rhodecode/templates/summary/summary.html:698 | |
|
4185 | 4348 | msgid "file removed" |
|
4186 | 4349 | msgstr "" |
|
4187 | 4350 | |
@@ -4190,23 +4353,7 b' msgstr ""' | |||
|
4190 | 4353 | msgid "%s Tags" |
|
4191 | 4354 | msgstr "" |
|
4192 | 4355 | |
|
4193 |
#: rhodecode/templates/tags/tags.html:2 |
|
|
4356 | #: rhodecode/templates/tags/tags.html:26 | |
|
4194 | 4357 | msgid "Compare tags" |
|
4195 | 4358 | msgstr "" |
|
4196 | 4359 | |
|
4197 | #~ msgid "" | |
|
4198 | #~ "%s repository is not mapped to db" | |
|
4199 | #~ " perhaps it was created or renamed" | |
|
4200 | #~ " from the file system please run " | |
|
4201 | #~ "the application again in order to " | |
|
4202 | #~ "rescan repositories" | |
|
4203 | #~ msgstr "" | |
|
4204 | ||
|
4205 | #~ msgid "" | |
|
4206 | #~ "%s repository is not mapped to db" | |
|
4207 | #~ " perhaps it was moved or renamed " | |
|
4208 | #~ "from the filesystem please run the " | |
|
4209 | #~ "application again in order to rescan " | |
|
4210 | #~ "repositories" | |
|
4211 | #~ msgstr "" | |
|
4212 |
|
1 | NO CONTENT: modified file, binary diff hidden |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file, binary diff hidden |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file, binary diff hidden |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file, binary diff hidden |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file, binary diff hidden |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file, binary diff hidden |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: file renamed from rhodecode/lib/cleanup.py to rhodecode/lib/paster_commands/cleanup.py | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: file renamed from rhodecode/config/rcextensions/make_rcextensions.py to rhodecode/lib/paster_commands/make_rcextensions.py | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: file renamed from rhodecode/config/setup_rhodecode.py to rhodecode/lib/paster_commands/setup_rhodecode.py | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: file renamed from rhodecode/lib/update_repoinfo.py to rhodecode/lib/paster_commands/update_repoinfo.py | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file chmod 100644 => 100755 | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file, binary diff hidden |
|
1 | NO CONTENT: modified file, binary diff hidden |
|
1 | NO CONTENT: modified file, binary diff hidden |
|
1 | NO CONTENT: modified file, binary diff hidden |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file chmod 100644 => 100755 | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file chmod 100644 => 100755 | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: modified file | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: file was removed |
|
1 | NO CONTENT: file was removed |
|
1 | NO CONTENT: file was removed | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: file was removed | |
The requested commit or file is too big and content was truncated. Show full diff |
|
1 | NO CONTENT: file was removed | |
The requested commit or file is too big and content was truncated. Show full diff |
General Comments 0
You need to be logged in to leave comments.
Login now