##// END OF EJS Templates
merge with rc1
marcink -
r3700:3563bb7b merge default
parent child Browse files
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 - Users groups for easier permission management
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 = g654dcno0-9873jhgfreyu
231 #beaker.session.validate_key = 9712sds2212c--zxc123
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 = true
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 users group. This command can be executed only using api_key
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" : "<users group id or name>"
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 users groups. This command can be executed only using
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 users group. This command can be executed only using api_key
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 users group `<groupname>`",
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 users group. If user exists in that group success will be
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" : "<users group id or name>",
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 users group `<groupname>` |
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 users group. If user is not in given group success will
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" : "<users group id or name>",
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 users group <groupname> |
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 to user with admin
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 users group on given repository, or update
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" : "<users group id or name>"
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 users group on given repository.This command can be
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" : "<users group id or name>"
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: No newline at end of file
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 users group permissions can overwrite owner permissions
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 users group on repos groups
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 repositories group
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 users groups
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 choosen prefix
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 <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>
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 * `svn -> hg` cloning requires `hgsubversion` library to be installed.*
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 - remember that each instance needs it's own .ini file and unique
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 No newline at end of file
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="/home/$APP_HOMEDIR/$APP_NAME"
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="/home/$APP_HOMEDIR/v-env"
26
27 RUN_AS="marcink"
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 --user=$RUN_AS \
33 --group=$RUN_AS \
34 --pid-file=$PID_PATH \
35 --log-file=$LOG_PATH $APP_PATH/$CONF_NAME"
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 = g654dcno0-9873jhgfreyu
231 #beaker.session.validate_key = 9712sds2212c--zxc123
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 = true
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, 5, 4)
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__ = 10 # defines current db version for migrations
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 = g654dcno0-9873jhgfreyu
231 #beaker.session.validate_key = 9712sds2212c--zxc123
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 = true
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 repositories group for proper 404 handling
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", "/repos/new",
97 action="new", conditions=dict(method=["GET"]))
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/{id}",
184 m.connect("update_repos_group", "/repos_groups/{group_name:.*?}",
162 185 action="update", conditions=dict(method=["PUT"],
163 function=check_int))
164 m.connect("delete_repos_group", "/repos_groups/{id}",
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_int))
167 m.connect("edit_repos_group", "/repos_groups/{id:.*?}/edit",
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_int))
173 m.connect("repos_group", "/repos_groups/{id}",
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_int))
176 m.connect("formatted_repos_group", "/repos_groups/{id}.{format}",
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_int))
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 USERS GROUPS REST ROUTES
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/{search_repo:.*}' % ADMIN_PREFIX,
393 controller='search')
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|org_ref_type)',
475 other_ref_type='(branch|book|tag|rev|other_ref_type)')
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(_('error occurred during update of defaults'),
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(_('Ldap settings updated successfully'),
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(_('error occurred during update of ldap settings'),
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 = all(un.user.user_id == c.rhodecode_user.user_id
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 is False:
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 _('disabled')),
70 _('Disabled')),
71 71 ('hg.register.manual_activate',
72 _('allowed with manual account activation')),
72 _('Allowed with manual account activation')),
73 73 ('hg.register.auto_activate',
74 _('allowed with automatic account activation')), ]
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(_('error occurred during update of permissions'),
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(_('created repository %s from %s') \
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.flash(_('created repository %s') % form_result['repo_name'],
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 = _('error occurred during creation of repository %s') \
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 /repos/new: Form to create a new item"""
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('hg.admin')
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(_('error occurred during update of repository %s') \
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('hg.admin')
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 repo_name, self.ip_addr, self.sa)
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(_('deleted repository %s') % repo_name, category='success')
319 h.flash(_('Deleted repository %s') % repo_name, category='success')
288 320 Session().commit()
289 except IntegrityError, e:
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, e:
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 users group
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 ' users groups'),
404 ' user groups'),
342 405 category='error')
343 406 raise HTTPInternalServerError()
344 407
345 @HasPermissionAllDecorator('hg.admin')
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('hg.admin')
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('hg.admin')
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 @HasPermissionAllDecorator('hg.admin')
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('hg.admin')
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('hg.admin')
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('hg.admin')
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 Repositories groups controller for RhodeCode
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(RepoGroup.query().all(), key=sk)
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(_('created repos group %s') \
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(_('error occurred during creation of repos group %s') \
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('hg.admin')
146 def update(self, id):
147 """PUT /repos_groups/id: Update an existing item"""
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', id=ID),
189 # h.form(url('repos_group', group_name=GROUP_NAME),
152 190 # method='put')
153 # url('repos_group', id=ID)
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(_('updated repos group %s') \
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(_('error occurred during update of repos group %s') \
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', id=id))
238 return redirect(url('edit_repos_group', group_name=group_name))
184 239
185 @HasPermissionAnyDecorator('hg.admin')
186 def delete(self, id):
187 """DELETE /repos_groups/id: Delete an existing item"""
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', id=ID),
246 # h.form(url('repos_group', group_name=GROUP_NAME),
192 247 # method='delete')
193 # url('repos_group', id=ID)
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(id)
264 ReposGroupModel().delete(group_name)
205 265 Session().commit()
206 h.flash(_('removed repos group %s') % gr.group_name,
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(_('error occurred during deletion of repos '
223 'group %s') % gr.group_name, category='error')
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 repositories group permission user
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 repositories group permission users group
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 ' users groups'),
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, id, format='html'):
283 """GET /repos_groups/id: Show a specific item"""
284 # url('repos_group', id=ID)
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 is False:
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('hg.admin')
314 def edit(self, id, format='html'):
315 """GET /repos_groups/id/edit: Form to edit an existing item"""
316 # url('edit_repos_group', id=ID)
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(id)
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(_('error occurred during updating '
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(_('error occurred during updating '
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[_f('hooks_%s' %
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[_f('hooks_%s' %
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[_f('hooks_%s' %
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[_f('hooks_%s' %
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[_f('extensions_largefiles')]
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[_f('extensions_hgsubversion')]
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[_f('extensions_hggit')]
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(_('error occurred during updating '
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(_('error occurred during hook creation'),
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(_('error occurred during update of user %s') \
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.bool2icon(user.active),
103 "admin": h.bool2icon(user.admin),
104 "ldap": h.bool2icon(bool(user.ldap_dn)),
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(_('created user %s') % usr,
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(_('error occurred during creation of user %s') \
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(_('error occurred during update of user %s') \
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(_('successfully deleted user'), category='success')
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 Users Groups crud controller for pylons
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 UsersGroupsAssignedException
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 UsersGroupModel
41 from rhodecode.model.users_group import UserGroupModel
42 42
43 from rhodecode.model.db import User, UsersGroup, UsersGroupToPerm,\
44 UsersGroupRepoToPerm, UsersGroupRepoGroupToPerm
45 from rhodecode.model.forms import UsersGroupForm
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 = UsersGroup().query().all()
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 = UsersGroupForm()()
77 users_group_form = UserGroupForm()()
78 78 try:
79 79 form_result = users_group_form.to_python(dict(request.POST))
80 UsersGroupModel().create(name=form_result['users_group_name'],
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(_('created users group %s') % gr, category='success')
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(_('error occurred during creation of users group %s') \
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 = UsersGroupRepoToPerm.query()\
114 .options(joinedload(UsersGroupRepoToPerm.permission))\
115 .options(joinedload(UsersGroupRepoToPerm.repository))\
116 .filter(UsersGroupRepoToPerm.users_group_id == id)\
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 = UsersGroupRepoGroupToPerm.query()\
124 .options(joinedload(UsersGroupRepoGroupToPerm.permission))\
125 .options(joinedload(UsersGroupRepoGroupToPerm.group))\
126 .filter(UsersGroupRepoGroupToPerm.users_group_id == id)\
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 = [x.user for x in c.users_group.members]
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 = [(x.user_id, x.username) for x in
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 = UsersGroup.get_or_404(id)
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 = UsersGroupForm(edit=True,
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 UsersGroupModel().update(c.users_group, form_result)
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(_('updated users group %s') % gr, category='success')
166 h.flash(_('Updated user group %s') % gr, category='success')
165 167 Session().commit()
166 168 except formencode.Invalid, errors:
167 ug_model = UsersGroupModel()
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(_('error occurred during update of users group %s') \
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 = UsersGroup.get_or_404(id)
201 usr_gr = UserGroup.get_or_404(id)
200 202 try:
201 UsersGroupModel().delete(usr_gr)
203 UserGroupModel().delete(usr_gr)
202 204 Session().commit()
203 h.flash(_('successfully deleted users group'), category='success')
204 except UsersGroupsAssignedException, e:
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 users group'),
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 = UsersGroup.get_or_404(id)
222 c.users_group = UserGroup.get_or_404(id)
221 223 self._load_data(id)
222 224
223 ug_model = UsersGroupModel()
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 = UsersGroup.get_or_404(id)
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 usersgroup_model = UsersGroupModel()
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 usersgroup_model.revoke_perm(id, 'hg.create.none')
256 usersgroup_model.grant_perm(id, 'hg.create.repository')
257 h.flash(_("Granted 'repository create' permission to users group"),
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 usersgroup_model.revoke_perm(id, 'hg.create.repository')
261 usersgroup_model.grant_perm(id, 'hg.create.none')
262 h.flash(_("Revoked 'repository create' permission to users group"),
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 usersgroup_model.revoke_perm(id, 'hg.fork.none')
267 usersgroup_model.grant_perm(id, 'hg.fork.repository')
268 h.flash(_("Granted 'repository fork' permission to users group"),
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 usersgroup_model.revoke_perm(id, 'hg.fork.repository')
272 usersgroup_model.grant_perm(id, 'hg.fork.none')
273 h.flash(_("Revoked 'repository fork' permission to users group"),
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 UsersGroupModel
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 users group by id or name or return JsonRPCError if not found
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 = UsersGroupModel().get_group(usersgroupid)
130 users_group = UserGroupModel().get_group(usersgroupid)
129 131 if users_group is None:
130 raise JSONRPCError('users group `%s` does not exist' % usersgroupid)
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 Repository.unlock(repo)
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 users group by name or id
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 users groups
530 Get all user groups
446 531
447 532 :param apiuser:
448 533 """
449 534
450 535 result = []
451 for users_group in UsersGroupModel().get_all():
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 UsersGroupModel().get_by_name(group_name):
466 raise JSONRPCError("users group `%s` already exist" % group_name)
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 = UsersGroupModel().create(name=group_name, active=active)
555 ug = UserGroupModel().create(name=group_name, active=active)
471 556 Session().commit()
472 557 return dict(
473 msg='created new users group `%s`' % group_name,
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 users group
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 = UsersGroupModel().add_user_to_group(users_group, 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 users group `%s`' % (
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 users group `%s`' % (
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 = UsersGroupModel().remove_user_from_group(users_group,
611 success = UserGroupModel().remove_user_from_group(users_group,
527 612 user)
528 msg = 'removed member `%s` from users group `%s`' % (
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 users group `%s`' % (
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 raise JSONRPCError('repository `%s` does not exist' % (repoid))
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 users group on given repository, or update
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 users group: `%s` in '
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 users group: `%s` in '
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 users group on given repository
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 users group: `%s` in repo: `%s`' % (
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 users group: `%s` in '
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='warning')
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 = _('show white space')
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 = _('ignore white space')
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 = _('ignore white space')
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='warning')
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 showoing differences between two
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 c.other_repo is None:
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 c.org_repo != c.other_repo and h.is_git(c.rhodecode_repo):
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 c.org_repo.scm_instance.alias != c.other_repo.scm_instance.alias:
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, discovery_data = PullRequestModel().get_compare_data(
131 org_repo, org_ref, other_repo, other_ref,
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('changesest: <a href="%s">%s</a>' % (_url, cs.raw_id[:8]))
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 = '<a href="%s">[%s]</a>' % (url_, _('click here to add new file'))
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='warning')
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='warning')
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='warning')
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 (_('Edited %s via RhodeCode')
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 (_('Added %s via RhodeCode')
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 is False:
404 return _('downloads disabled')
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.remove(archive)
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-%s%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 % (repo_name, form_result['repo_name']),
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 is False:
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 c.rhodecode_repo = c.rhodecode_db_repo.scm_instance
85 return render('/switch_to_list.html')
86 else:
87 raise HTTPBadRequest()
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'] is not False:
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.org_repos.append((org_repo.repo_name, '%s/%s' % (
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 = _('error during creation of pull request')
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['org_ref']
236 org_ref = 'rev:merge:%s' % _form['merge_rev']
199 237 other_repo = _form['other_repo']
200 other_ref = _form['other_ref']
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 text = text or (_('Status change -> %s')
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 request.POST.get('save_close'):
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, search_repo=None):
56 c.repo_name = search_repo
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.utils2 import safe_unicode
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: 2012-12-14 04:19+0100\n"
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 "show white space"
25 msgid "Show white space"
26 26 msgstr ""
27 27
28 28 #: rhodecode/controllers/changeset.py:90 rhodecode/controllers/changeset.py:97
29 msgid "ignore white space"
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:314
38 #: rhodecode/controllers/pullrequests.py:417
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:345
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:75
50 #: rhodecode/controllers/pullrequests.py:121
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:137
93 #: rhodecode/templates/changeset/changeset.html:149
94 #: rhodecode/templates/compare/compare_diff.html:62
95 #: rhodecode/templates/compare/compare_diff.html:73
96 #: rhodecode/templates/pullrequests/pullrequest_show.html:94
97 #: rhodecode/templates/pullrequests/pullrequest_show.html:153
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:92
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:265 rhodecode/controllers/files.py:325
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:292
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:297
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:308 rhodecode/controllers/files.py:372
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:313 rhodecode/controllers/files.py:378
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:344
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:362
150 #: rhodecode/controllers/files.py:368
147 151 msgid "No filename"
148 152 msgstr ""
149 153
150 #: rhodecode/controllers/files.py:404
151 msgid "downloads disabled"
152 msgstr ""
153
154 #: rhodecode/controllers/files.py:415
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:417
167 #: rhodecode/controllers/files.py:433
160 168 msgid "Empty repository"
161 169 msgstr ""
162 170
163 #: rhodecode/controllers/files.py:419
171 #: rhodecode/controllers/files.py:435
164 172 msgid "Unknown archive type"
165 173 msgstr ""
166 174
167 #: rhodecode/controllers/files.py:564
168 #: rhodecode/templates/changeset/changeset_range.html:13
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:565 rhodecode/controllers/pullrequests.py:74
174 #: rhodecode/controllers/summary.py:236 rhodecode/model/scm.py:550
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:566 rhodecode/controllers/pullrequests.py:78
179 #: rhodecode/controllers/summary.py:237 rhodecode/model/scm.py:561
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:158
195 #: rhodecode/controllers/forks.py:175
184 196 #, python-format
185 msgid "forked %s repository as %s"
186 msgstr ""
187
188 #: rhodecode/controllers/forks.py:172
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:218 rhodecode/controllers/journal.py:261
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:222 rhodecode/controllers/journal.py:265
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:143
204 msgid "You have successfully registered into rhodecode"
205 msgstr ""
206
207 #: rhodecode/controllers/login.py:164
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:184
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:76 rhodecode/model/scm.py:556
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:190
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:192
226 msgid "error during creation of pull request"
227 msgstr ""
228
229 #: rhodecode/controllers/pullrequests.py:224
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:227
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:260
264 #: rhodecode/controllers/pullrequests.py:287
238 265 msgid "Successfully deleted pull request"
239 266 msgstr ""
240 267
241 #: rhodecode/controllers/pullrequests.py:452
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/settings.py:119
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:144
305 #: rhodecode/templates/summary/summary.html:157
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 "error occurred during update of defaults"
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 "Ldap settings updated successfully"
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 "error occurred during update of ldap settings"
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 "Read"
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 "Write"
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:9
394 #: rhodecode/templates/admin/repos/repo_edit.html:9
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:8
397 #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:8
398 #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:10
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:126
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:197
409 #: rhodecode/templates/base/base.html:350
410 #: rhodecode/templates/base/base.html:352
411 #: rhodecode/templates/base/base.html:354
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:69
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:122
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:136
442 msgid "error occurred during update of permissions"
443 msgstr ""
444
445 #: rhodecode/controllers/admin/repos.py:121
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:190
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 "created repository %s from %s"
452 msgstr ""
453
454 #: rhodecode/controllers/admin/repos.py:194
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 "created repository %s"
457 msgstr ""
458
459 #: rhodecode/controllers/admin/repos.py:225
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:320
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:349
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:443
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:447
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:452 rhodecode/model/validators.py:300
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:465
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:467
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:483
546 #: rhodecode/controllers/admin/repos.py:545
506 547 msgid "Nothing"
507 548 msgstr ""
508 549
509 #: rhodecode/controllers/admin/repos.py:485
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:489
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_groups.py:120
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 "created repos group %s"
521 msgstr ""
522
523 #: rhodecode/controllers/admin/repos_groups.py:133
569 msgid "Created repository group %s"
570 msgstr ""
571
572 #: rhodecode/controllers/admin/repos_groups.py:157
524 573 #, python-format
525 msgid "error occurred during creation of repos group %s"
526 msgstr ""
527
528 #: rhodecode/controllers/admin/repos_groups.py:167
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 "updated repos group %s"
531 msgstr ""
532
533 #: rhodecode/controllers/admin/repos_groups.py:180
584 msgid "Updated repository group %s"
585 msgstr ""
586
587 #: rhodecode/controllers/admin/repos_groups.py:235
534 588 #, python-format
535 msgid "error occurred during update of repos group %s"
536 msgstr ""
537
538 #: rhodecode/controllers/admin/repos_groups.py:198
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:206
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 "removed repos group %s"
546 msgstr ""
547
548 #: rhodecode/controllers/admin/repos_groups.py:212
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 "error occurred during deletion of repos group %s"
556 msgstr ""
557
558 #: rhodecode/controllers/admin/repos_groups.py:243
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:264
563 msgid "An error occurred during deletion of group users groups"
564 msgstr ""
565
566 #: rhodecode/controllers/admin/settings.py:123
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,removed: %s"
569 msgstr ""
570
571 #: rhodecode/controllers/admin/settings.py:131
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:207
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:212
589 msgid "error occurred during updating visualisation settings"
590 msgstr ""
591
592 #: rhodecode/controllers/admin/settings.py:295
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:309
650 #: rhodecode/controllers/admin/settings.py:311
597 651 msgid "Added new hook"
598 652 msgstr ""
599 653
600 #: rhodecode/controllers/admin/settings.py:321
654 #: rhodecode/controllers/admin/settings.py:323
601 655 msgid "Updated hooks"
602 656 msgstr ""
603 657
604 #: rhodecode/controllers/admin/settings.py:325
605 msgid "error occurred during hook creation"
606 msgstr ""
607
608 #: rhodecode/controllers/admin/settings.py:344
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:399
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:430
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:445
621 #: rhodecode/controllers/admin/users.py:196
674 #: rhodecode/controllers/admin/settings.py:467
675 #: rhodecode/controllers/admin/users.py:198
622 676 #, python-format
623 msgid "error occurred during update of user %s"
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 "created user %s"
682 msgid "Created user %s"
629 683 msgstr ""
630 684
631 685 #: rhodecode/controllers/admin/users.py:142
632 686 #, python-format
633 msgid "error occurred during creation of user %s"
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:212
641 msgid "successfully deleted user"
642 msgstr ""
643
644 #: rhodecode/controllers/admin/users.py:217
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:231
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:272
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:277
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:283
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:288
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:294
669 #: rhodecode/controllers/admin/users_groups.py:279
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:309
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:315
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:325
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 "created users group %s"
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 "error occurred during creation of users group %s"
694 msgstr ""
695
696 #: rhodecode/controllers/admin/users_groups.py:164
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 "updated users group %s"
699 msgstr ""
700
701 #: rhodecode/controllers/admin/users_groups.py:186
765 msgid "Updated user group %s"
766 msgstr ""
767
768 #: rhodecode/controllers/admin/users_groups.py:188
702 769 #, python-format
703 msgid "error occurred during update of users group %s"
704 msgstr ""
705
706 #: rhodecode/controllers/admin/users_groups.py:203
707 msgid "successfully deleted users group"
708 msgstr ""
709
710 #: rhodecode/controllers/admin/users_groups.py:208
711 msgid "An error occurred during deletion of users group"
712 msgstr ""
713
714 #: rhodecode/controllers/admin/users_groups.py:257
715 msgid "Granted 'repository create' permission to users group"
716 msgstr ""
717
718 #: rhodecode/controllers/admin/users_groups.py:262
719 msgid "Revoked 'repository create' permission to users group"
720 msgstr ""
721
722 #: rhodecode/controllers/admin/users_groups.py:268
723 msgid "Granted 'repository fork' permission to users group"
724 msgstr ""
725
726 #: rhodecode/controllers/admin/users_groups.py:273
727 msgid "Revoked 'repository fork' permission to users group"
728 msgstr ""
729
730 #: rhodecode/lib/auth.py:499
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:540
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:74
739 msgid "binary file"
740 msgstr ""
741
742 #: rhodecode/lib/diffs.py:90
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:100
818 #: rhodecode/lib/diffs.py:92
747 819 msgid "No changes detected"
748 820 msgstr ""
749 821
750 #: rhodecode/lib/helpers.py:374
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:486
827 #: rhodecode/lib/helpers.py:506
756 828 msgid "True"
757 829 msgstr ""
758 830
759 #: rhodecode/lib/helpers.py:490
831 #: rhodecode/lib/helpers.py:509
760 832 msgid "False"
761 833 msgstr ""
762 834
763 #: rhodecode/lib/helpers.py:530
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:533
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:546
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 "revisions"
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 "[commented] on revision in repository"
853 msgstr ""
854
855 #: rhodecode/lib/helpers.py:692
856 msgid "[commented] on pull request for"
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 "[closed] pull request for"
861 msgstr ""
862
863 #: rhodecode/lib/helpers.py:696
864 msgid "[pushed] into"
865 msgstr ""
866
867 #: rhodecode/lib/helpers.py:698
868 msgid "[committed via RhodeCode] into repository"
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:702
946 #: rhodecode/lib/helpers.py:728
876 947 msgid "[pulled] from"
877 948 msgstr ""
878 949
879 #: rhodecode/lib/helpers.py:704
950 #: rhodecode/lib/helpers.py:730
880 951 msgid "[started following] repository"
881 952 msgstr ""
882 953
883 #: rhodecode/lib/helpers.py:706
954 #: rhodecode/lib/helpers.py:732
884 955 msgid "[stopped following] repository"
885 956 msgstr ""
886 957
887 #: rhodecode/lib/helpers.py:883
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:887
963 #: rhodecode/lib/helpers.py:914
893 964 msgid "No Files"
894 965 msgstr ""
895 966
896 #: rhodecode/lib/helpers.py:1163
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/utils2.py:403
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:404
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:405
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:406
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:407
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:408
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:424
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 rhodecode/model/db.py:1184
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 rhodecode/model/db.py:1185
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 rhodecode/model/db.py:1186
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 rhodecode/model/db.py:1188
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 rhodecode/model/db.py:1189
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 rhodecode/model/db.py:1190
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 rhodecode/model/db.py:1191
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 rhodecode/model/db.py:1193
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 rhodecode/model/db.py:1194
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 rhodecode/model/db.py:1195
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 rhodecode/model/db.py:1196
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 rhodecode/model/db.py:1197
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 rhodecode/model/db.py:1198
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 rhodecode/model/db.py:1199
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 rhodecode/model/db.py:1202
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 rhodecode/model/db.py:1643
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 rhodecode/model/db.py:1644
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 rhodecode/model/db.py:1645
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 rhodecode/model/db.py:1646
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:110
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:173
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 "opened new pull request at %(when)s"
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 "commented on pull request at %(when)s"
1109 msgstr ""
1110
1111 #: rhodecode/model/pull_request.py:90
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 wants you to review pull request #%(pr_id)s"
1114 msgstr ""
1115
1116 #: rhodecode/model/scm.py:542
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 "new user registration"
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:333
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\" is forbidden"
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:115
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:134
1166 msgid "Invalid users group name"
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 "users group name may only contain alphanumeric characters underscores, "
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:175
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:236
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:251
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 "Repositories group with name \"%(repo)s\" already exists"
1232 msgstr ""
1233
1234 #: rhodecode/model/validators.py:432
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:433
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:458
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:473
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:498
1251 msgid "This username or users group name is not valid"
1252 msgstr ""
1253
1254 #: rhodecode/model/validators.py:591
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:606
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:626
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:663
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:682
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:10
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:48
1291 #: rhodecode/templates/tags/tags.html:10
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:15
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:29
1308 #: rhodecode/templates/index_base.html:136
1309 #: rhodecode/templates/admin/repos_groups/repos_groups_add.html:32
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/admin/users_groups/users_group_edit.html:33
1314 msgid "Group name"
1315 msgstr ""
1316
1317 #: rhodecode/templates/index_base.html:30
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/admin/repos_groups/repos_groups_show.html:47
1336 msgid "Repositories group"
1337 msgstr ""
1338
1339 #: rhodecode/templates/index_base.html:71
1340 #: rhodecode/templates/index_base.html:174
1341 #: rhodecode/templates/index_base.html:264
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:70
1345 #: rhodecode/templates/admin/users/user_edit.html:196
1346 #: rhodecode/templates/admin/users/user_edit_my_account.html:59
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:50
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:70
1357 #: rhodecode/templates/journal/journal.html:196
1358 #: rhodecode/templates/journal/journal_page_repos.html:7
1359 #: rhodecode/templates/settings/repo_settings.html:31
1360 #: rhodecode/templates/summary/summary.html:43
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:73
1545 #: rhodecode/templates/index_base.html:84
1368 1546 msgid "Last change"
1369 1547 msgstr ""
1370 1548
1371 #: rhodecode/templates/index_base.html:74
1372 #: rhodecode/templates/index_base.html:179
1373 #: rhodecode/templates/admin/users/user_edit_my_account.html:182
1374 #: rhodecode/templates/journal/journal.html:198
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:75
1379 #: rhodecode/templates/index_base.html:181
1380 #: rhodecode/templates/index_base.html:269
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:73
1563 #: rhodecode/templates/admin/repos/repos.html:76
1383 1564 msgid "Owner"
1384 1565 msgstr ""
1385 1566
1386 #: rhodecode/templates/index_base.html:76
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:167
1397 #: rhodecode/templates/index_base.html:207
1398 #: rhodecode/templates/index_base.html:291
1399 #: rhodecode/templates/admin/repos/repos.html:94
1400 #: rhodecode/templates/admin/users/user_edit_my_account.html:202
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:60
1403 #: rhodecode/templates/branches/branches.html:76
1404 #: rhodecode/templates/journal/journal.html:221
1405 #: rhodecode/templates/tags/tags.html:77
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:168
1410 #: rhodecode/templates/index_base.html:208
1411 #: rhodecode/templates/index_base.html:292
1412 #: rhodecode/templates/admin/repos/repos.html:95
1413 #: rhodecode/templates/admin/users/user_edit_my_account.html:203
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:61
1416 #: rhodecode/templates/branches/branches.html:77
1417 #: rhodecode/templates/journal/journal.html:222
1418 #: rhodecode/templates/tags/tags.html:78
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:177
1423 #: rhodecode/templates/index_base.html:267
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/index_base.html:295
1453 #: rhodecode/templates/admin/repos/repos.html:98
1454 #: rhodecode/templates/admin/users/user_edit_my_account.html:206
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:64
1457 #: rhodecode/templates/branches/branches.html:80
1458 #: rhodecode/templates/journal/journal.html:62
1459 #: rhodecode/templates/journal/journal.html:225
1460 #: rhodecode/templates/tags/tags.html:81
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:50
1476 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:26
1477 #: rhodecode/templates/base/base.html:83
1478 #: rhodecode/templates/summary/summary.html:131
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:92
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:103
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 "Reset your password"
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:90
1536 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:53
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:99
1543 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:62
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:108
1550 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:71
1551 #: rhodecode/templates/summary/summary.html:133
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:11
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/settings/repo_settings.html:76
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:16
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:74
1630 #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:8
1631 #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:9
1632 #: rhodecode/templates/journal/journal_page_repos.html:9
1633 #: rhodecode/templates/journal/journal_page_repos.html:10
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:37
1822 #: rhodecode/templates/bookmarks/bookmarks.html:35
1644 1823 #: rhodecode/templates/bookmarks/bookmarks_data.html:7
1645 #: rhodecode/templates/branches/branches.html:51
1824 #: rhodecode/templates/branches/branches.html:48
1646 1825 #: rhodecode/templates/branches/branches_data.html:7
1647 #: rhodecode/templates/tags/tags.html:52
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:72
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:66
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/repos/repo_edit.html:141
1719 #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:74
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_edit.html:133
1722 #: rhodecode/templates/admin/users/user_edit.html:178
1723 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:79
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:134
1844 #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:58
1845 #: rhodecode/templates/admin/users/user_edit.html:143
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/settings/repo_settings.html:86
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 choosen "
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 "overwrite existing settings"
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 choosen"
1883 " permission, note that all custom default permission on repositories "
1884 "group will be lost"
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:92
1900 #: rhodecode/templates/admin/repos/repo_edit.html:264
1901 msgid "set"
1902 msgstr ""
1903
1904 #: rhodecode/templates/admin/repos/repo_add.html:5
1905 #: rhodecode/templates/admin/repos/repo_add_create_repository.html:5
1906 msgid "Add repository"
1907 msgstr ""
1908
1909 #: rhodecode/templates/admin/repos/repo_add.html:11
1910 #: rhodecode/templates/admin/repos/repo_edit.html:11
1911 #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:10
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:13
1916 msgid "add new"
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:104
1921 #: rhodecode/templates/summary/summary.html:105
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:54
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:41
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:45
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:63
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_add_base.html:73
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:13
1974 #: rhodecode/templates/admin/users/user_edit.html:13
1975 #: rhodecode/templates/admin/users/user_edit.html:228
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:142
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/settings/settings.html:269
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:159
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:159
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:162
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:163
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/users_groups/users_group_edit.html:42
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:224
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:226
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:231
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:238
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:243
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:243
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:246
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:278
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:282
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:18
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:23
2214 #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:42
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:67
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:87
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:103
2230 msgid "Failed to remove users group"
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:73
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:74
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:10
2283 #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:10
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:58
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:12
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 "Repositories groups administration"
2320 msgstr ""
2321
2322 #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:22
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:36
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/admin/users/user_edit.html:259
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:63
2352 msgid "There are no repositories groups yet"
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:24
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:32
2387 msgid "rescan option"
2388 msgstr ""
2389
2390 #: rhodecode/templates/admin/settings/settings.html:38
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:46
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:52
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:60
2416 msgid "index build option"
2417 msgstr ""
2418
2419 #: rhodecode/templates/admin/settings/settings.html:65
2420 msgid "build from scratch"
2421 msgstr ""
2422
2423 #: rhodecode/templates/admin/settings/settings.html:71
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:77
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:86
2432 msgid "Application name"
2433 msgstr ""
2434
2435 #: rhodecode/templates/admin/settings/settings.html:95
2436 msgid "Realm text"
2437 msgstr ""
2438
2439 #: rhodecode/templates/admin/settings/settings.html:104
2440 msgid "GA code"
2441 msgstr ""
2442
2443 #: rhodecode/templates/admin/settings/settings.html:112
2444 #: rhodecode/templates/admin/settings/settings.html:178
2445 #: rhodecode/templates/admin/settings/settings.html:268
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:119
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:127
2666 #: rhodecode/templates/admin/settings/settings.html:129
2454 2667 msgid "General"
2455 2668 msgstr ""
2456 2669
2457 #: rhodecode/templates/admin/settings/settings.html:132
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:139
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:144
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:148
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:155
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:160
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:187
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:196
2702 #: rhodecode/templates/admin/settings/settings.html:204
2486 2703 msgid "Web"
2487 2704 msgstr ""
2488 2705
2489 #: rhodecode/templates/admin/settings/settings.html:201
2490 msgid "require ssl for vcs operations"
2491 msgstr ""
2492
2493 #: rhodecode/templates/admin/settings/settings.html:203
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:209
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:235
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:240
2528 msgid "largefiles extensions"
2529 msgstr ""
2530
2531 #: rhodecode/templates/admin/settings/settings.html:244
2532 msgid "hgsubversion extensions"
2533 msgstr ""
2534
2535 #: rhodecode/templates/admin/settings/settings.html:246
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 clonning from svn remote "
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:256
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:261
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:262
2553 #: rhodecode/templates/base/base.html:221
2554 msgid "unlock"
2555 msgstr ""
2556
2557 #: rhodecode/templates/admin/settings/settings.html:263
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:283
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:291
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 "show"
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:63
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:72
2624 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:35
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:81
2629 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:44
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:151
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:156
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:162
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:170
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:190
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:260
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:274
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:124
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:49
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:26
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:33
2735 #: rhodecode/templates/pullrequests/pullrequest_show_all.html:30
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 "firstname"
2972 msgid "Firstname"
2792 2973 msgstr ""
2793 2974
2794 2975 #: rhodecode/templates/admin/users/users.html:81
2795 msgid "lastname"
2976 msgid "Lastname"
2796 2977 msgstr ""
2797 2978
2798 2979 #: rhodecode/templates/admin/users/users.html:82
2799 msgid "last login"
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 users group"
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:9
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 users group"
2999 msgid "Edit user group"
2827 3000 msgstr ""
2828 3001
2829 3002 #: rhodecode/templates/admin/users_groups/users_group_edit.html:11
2830 msgid "UsersGroups"
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 "Choosen group members"
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:146
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:163
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 "Users groups administration"
2871 msgstr ""
2872
2873 #: rhodecode/templates/admin/users_groups/users_groups.html:23
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:77
2896 msgid "Login to your account"
2897 msgstr ""
2898
2899 #: rhodecode/templates/base/base.html:100
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 "Inbox"
2909 msgstr ""
2910
2911 #: rhodecode/templates/base/base.html:123
2912 #: rhodecode/templates/base/base.html:322
2913 #: rhodecode/templates/base/base.html:324
2914 #: rhodecode/templates/base/base.html:326
2915 #: rhodecode/templates/journal/journal.html:4
2916 #: rhodecode/templates/journal/public_journal.html:4
2917 msgid "Journal"
2918 msgstr ""
2919
2920 #: rhodecode/templates/base/base.html:125
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:162
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/data_table/_dt_elements.html:80
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/summary/summary.html:61
3054 msgid "Start following this repository"
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:39
3250 #: rhodecode/templates/bookmarks/bookmarks.html:37
3087 3251 #: rhodecode/templates/bookmarks/bookmarks_data.html:8
3088 #: rhodecode/templates/branches/branches.html:53
3252 #: rhodecode/templates/branches/branches.html:50
3089 3253 #: rhodecode/templates/branches/branches_data.html:8
3090 #: rhodecode/templates/tags/tags.html:54
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:29
3275 #: rhodecode/templates/branches/branches.html:26
3101 3276 msgid "Compare branches"
3102 3277 msgstr ""
3103 3278
3104 #: rhodecode/templates/branches/branches.html:56
3279 #: rhodecode/templates/branches/branches.html:53
3105 3280 #: rhodecode/templates/branches/branches_data.html:10
3106 #: rhodecode/templates/compare/compare_diff.html:5
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:15
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:37
3298 #: rhodecode/templates/changelog/changelog.html:30
3126 3299 msgid "Clear selection"
3127 3300 msgstr ""
3128 3301
3129 #: rhodecode/templates/changelog/changelog.html:40
3302 #: rhodecode/templates/changelog/changelog.html:33
3130 3303 #: rhodecode/templates/forks/forks_data.html:19
3131 3304 #, python-format
3132 msgid "compare fork with %s"
3133 msgstr ""
3134
3135 #: rhodecode/templates/changelog/changelog.html:40
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:49
3140 msgid "Show"
3141 msgstr ""
3142
3143 #: rhodecode/templates/changelog/changelog.html:74
3144 #: rhodecode/templates/summary/summary.html:375
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/changelog/changelog.html:91
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:79
3176 msgid "merge"
3177 msgstr ""
3178
3179 #: rhodecode/templates/changelog/changelog.html:118
3180 #: rhodecode/templates/changeset/changeset.html:109
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:94
3206 msgid "removed"
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:95
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:96
3216 msgid "added"
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:98
3223 #: rhodecode/templates/changeset/changeset.html:99
3224 #: rhodecode/templates/changeset/changeset.html:100
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 "affected %s files"
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:14
3235 msgid "Changeset"
3236 msgstr ""
3237
3238 #: rhodecode/templates/changeset/changeset.html:52
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:70
3243 #: rhodecode/templates/changeset/diff_block.html:20
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_file_comment.html:82
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:76
3265 #: rhodecode/templates/changeset/changeset_file_comment.html:82
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:122
3273 #: rhodecode/templates/compare/compare_diff.html:44
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:124
3282 #: rhodecode/templates/compare/compare_diff.html:46
3283 #: rhodecode/templates/pullrequests/pullrequest_show.html:78
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_file_comment.html:42
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_file_comment.html:46
3299 #: rhodecode/templates/changeset/changeset_file_comment.html:121
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:48
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:59
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:67
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:67
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:118
3328 msgid "Leave a comment"
3329 msgstr ""
3330
3331 #: rhodecode/templates/changeset/changeset_file_comment.html:125
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:125
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:29
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:19
3362 msgid "show full diff for this file"
3363 msgstr ""
3364
3365 #: rhodecode/templates/changeset/diff_block.html:27
3366 msgid "show inline comments"
3367 msgstr ""
3368
3369 #: rhodecode/templates/compare/compare_cs.html:5
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_diff.html:37
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:52
3382 #: rhodecode/templates/pullrequests/pullrequest_show.html:84
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/data_table/_dt_elements.html:39
3387 #: rhodecode/templates/data_table/_dt_elements.html:41
3388 #: rhodecode/templates/data_table/_dt_elements.html:43
3389 msgid "Fork"
3390 msgstr ""
3391
3392 #: rhodecode/templates/data_table/_dt_elements.html:60
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:62
3399 #: rhodecode/templates/journal/journal.html:91
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:69
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:101
3421 #: rhodecode/templates/data_table/_dt_elements.html:103
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:109
3427 #: rhodecode/templates/data_table/_dt_elements.html:111
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:10
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:12
3458 msgid "If you didn't request new password please ignore this email."
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:11
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:18
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 "User %s commented on pull request #%s for repository %s"
3488 msgstr ""
3489
3490 #: rhodecode/templates/email_templates/pull_request_comment.html:10
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:46
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 diff"
3514 msgstr ""
3515
3516 #: rhodecode/templates/files/file_diff.html:12
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:74
3522 #, python-format
3523 msgid "%s files"
3524 msgstr ""
3525
3526 #: rhodecode/templates/files/files.html:12
3527 #: rhodecode/templates/summary/summary.html:351
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 "add file"
3539 msgstr ""
3540
3541 #: rhodecode/templates/files/files_add.html:40
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:45
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:49
3550 #: rhodecode/templates/files/files_add.html:58
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:49
3555 #: rhodecode/templates/files/files_add.html:54
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:58
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:63
3564 #: rhodecode/templates/files/files_edit.html:39
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:67
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:77
3574 #: rhodecode/templates/files/files_edit.html:63
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 "commit message"
3577 msgstr ""
3578
3579 #: rhodecode/templates/files/files_add.html:81
3580 #: rhodecode/templates/files/files_edit.html:67
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 "view"
3775 msgid "View"
3586 3776 msgstr ""
3587 3777
3588 3778 #: rhodecode/templates/files/files_browser.html:14
3589 msgid "previous revision"
3779 msgid "Previous revision"
3590 3780 msgstr ""
3591 3781
3592 3782 #: rhodecode/templates/files/files_browser.html:16
3593 msgid "next revision"
3783 msgid "Next revision"
3594 3784 msgstr ""
3595 3785
3596 3786 #: rhodecode/templates/files/files_browser.html:23
3597 msgid "follow current branch"
3787 msgid "Follow current branch"
3598 3788 msgstr ""
3599 3789
3600 3790 #: rhodecode/templates/files/files_browser.html:27
3601 msgid "search file list"
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 "edit file"
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 "download as raw"
3651 msgstr ""
3652
3653 #: rhodecode/templates/files/files_edit.html:54
3654 msgid "source"
3655 msgstr ""
3656
3657 #: rhodecode/templates/files/files_edit.html:59
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 "diff to revision"
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 "show at revision"
3861 msgid "Show at revision"
3672 3862 msgstr ""
3673 3863
3674 3864 #: rhodecode/templates/files/files_history_box.html:11
3675 msgid "show full history"
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 "show source"
3691 msgstr ""
3692
3693 #: rhodecode/templates/files/files_source.html:44
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:53
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:13
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:31
3937 #: rhodecode/templates/forks/fork.html:28
3733 3938 msgid "Fork name"
3734 3939 msgstr ""
3735 3940
3736 #: rhodecode/templates/forks/fork.html:68
3941 #: rhodecode/templates/forks/fork.html:65
3737 3942 msgid "Private"
3738 3943 msgstr ""
3739 3944
3740 #: rhodecode/templates/forks/fork.html:77
3945 #: rhodecode/templates/forks/fork.html:74
3741 3946 msgid "Copy permissions"
3742 3947 msgstr ""
3743 3948
3744 #: rhodecode/templates/forks/fork.html:81
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:86
3953 #: rhodecode/templates/forks/fork.html:84
3749 3954 msgid "Update after clone"
3750 3955 msgstr ""
3751 3956
3752 #: rhodecode/templates/forks/fork.html:90
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:94
3757 msgid "fork this repository"
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:13
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 "forked"
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:49
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:12
4023 #: rhodecode/templates/pullrequests/pullrequest.html:8
3838 4024 msgid "New pull request"
3839 4025 msgstr ""
3840 4026
3841 #: rhodecode/templates/pullrequests/pullrequest.html:54
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:70
3850 #: rhodecode/templates/pullrequests/pullrequest_show.html:100
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:79
3855 #: rhodecode/templates/pullrequests/pullrequest_show.html:112
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:91
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:97
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:106
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:123
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:23
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:31
3889 msgid "Status"
3890 msgstr ""
3891
3892 #: rhodecode/templates/pullrequests/pullrequest_show.html:36
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:44
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:48
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:50
3908 msgid "pull request was reviewed by all reviewers"
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:112
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:48
4127 #: rhodecode/templates/search/search.html:50
3958 4128 msgid "Search term"
3959 4129 msgstr ""
3960 4130
3961 #: rhodecode/templates/search/search.html:60
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 Shortlog"
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 "age"
4012 msgstr ""
4013
4014 #: rhodecode/templates/shortlog/shortlog_data.html:8
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:12
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 "repo %s ATOM feed"
4042 msgstr ""
4043
4044 #: rhodecode/templates/summary/summary.html:21
4191 msgid "%s ATOM feed"
4192 msgstr ""
4193
4194 #: rhodecode/templates/summary/summary.html:17
4045 4195 #, python-format
4046 msgid "repo %s RSS feed"
4047 msgstr ""
4048
4049 #: rhodecode/templates/summary/summary.html:49
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:72
4204 #: rhodecode/templates/summary/summary.html:64
4060 4205 msgid "Repository unlocked"
4061 4206 msgstr ""
4062 4207
4063 #: rhodecode/templates/summary/summary.html:91
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:104
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:139
4230 #: rhodecode/templates/summary/summary.html:131
4081 4231 msgid "Clone url"
4082 4232 msgstr ""
4083 4233
4084 #: rhodecode/templates/summary/summary.html:142
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:182
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:182
4272 #: rhodecode/templates/summary/summary.html:174
4123 4273 msgid "with subrepos"
4124 4274 msgstr ""
4125 4275
4126 #: rhodecode/templates/summary/summary.html:195
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:206
4289 #: rhodecode/templates/summary/summary.html:235
4131 4290 msgid "Stats gathered: "
4132 4291 msgstr ""
4133 4292
4134 #: rhodecode/templates/summary/summary.html:227
4135 msgid "Shortlog"
4136 msgstr ""
4137
4138 #: rhodecode/templates/summary/summary.html:229
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:243
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:246
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:304
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:661
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:662
4323 #: rhodecode/templates/summary/summary.html:691
4161 4324 msgid "files added"
4162 4325 msgstr ""
4163 4326
4164 #: rhodecode/templates/summary/summary.html:663
4327 #: rhodecode/templates/summary/summary.html:692
4165 4328 msgid "files changed"
4166 4329 msgstr ""
4167 4330
4168 #: rhodecode/templates/summary/summary.html:664
4331 #: rhodecode/templates/summary/summary.html:693
4169 4332 msgid "files removed"
4170 4333 msgstr ""
4171 4334
4172 #: rhodecode/templates/summary/summary.html:667
4335 #: rhodecode/templates/summary/summary.html:695
4173 4336 msgid "commit"
4174 4337 msgstr ""
4175 4338
4176 #: rhodecode/templates/summary/summary.html:668
4339 #: rhodecode/templates/summary/summary.html:696
4177 4340 msgid "file added"
4178 4341 msgstr ""
4179 4342
4180 #: rhodecode/templates/summary/summary.html:669
4343 #: rhodecode/templates/summary/summary.html:697
4181 4344 msgid "file changed"
4182 4345 msgstr ""
4183 4346
4184 #: rhodecode/templates/summary/summary.html:670
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:29
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