##// END OF EJS Templates
merge with beta
marcink -
r2096:934906f0 merge rhodecode-0.0.1.3.3 default
parent child Browse files
Show More
@@ -1,627 +1,627 b''
1 .. _api:
1 .. _api:
2
2
3
3 ===
4 API
4 API
5 ===
5 ===
6
6
7
7
8 Starting from RhodeCode version 1.2 a simple API was implemented.
8 Starting from RhodeCode version 1.2 a simple API was implemented.
9 There's a single schema for calling all api methods. API is implemented
9 There's a single schema for calling all api methods. API is implemented
10 with JSON protocol both ways. An url to send API request in RhodeCode is
10 with JSON protocol both ways. An url to send API request in RhodeCode is
11 <your_server>/_admin/api
11 <your_server>/_admin/api
12
12
13 API ACCESS FOR WEB VIEWS
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
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
17 decorated with `@LoginRequired` decorator. To enable API access simple change
18 the standard login decorator to `@LoginRequired(api_access=True)`.
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
19 After this change, a rhodecode view can be accessed without login by adding a
20 GET parameter `?api_key=<api_key>` to url. By default this is only
20 GET parameter `?api_key=<api_key>` to url. By default this is only
21 enabled on RSS/ATOM feed views.
21 enabled on RSS/ATOM feed views.
22
22
23
23
24 API ACCESS
24 API ACCESS
25 ++++++++++
25 ++++++++++
26
26
27 All clients are required to send JSON-RPC spec JSON data::
27 All clients are required to send JSON-RPC spec JSON data::
28
28
29 {
29 {
30 "id:<id>,
30 "id:<id>,
31 "api_key":"<api_key>",
31 "api_key":"<api_key>",
32 "method":"<method_name>",
32 "method":"<method_name>",
33 "args":{"<arg_key>":"<arg_val>"}
33 "args":{"<arg_key>":"<arg_val>"}
34 }
34 }
35
35
36 Example call for autopulling remotes repos using curl::
36 Example call for autopulling remotes repos using curl::
37 curl https://server.com/_admin/api -X POST -H 'content-type:text/plain' --data-binary '{"id":1,"api_key":"xe7cdb2v278e4evbdf5vs04v832v0efvcbcve4a3","method":"pull","args":{"repo":"CPython"}}'
37 curl https://server.com/_admin/api -X POST -H 'content-type:text/plain' --data-binary '{"id":1,"api_key":"xe7cdb2v278e4evbdf5vs04v832v0efvcbcve4a3","method":"pull","args":{"repo":"CPython"}}'
38
38
39 Simply provide
39 Simply provide
40 - *id* A value of any type, which is used to match the response with the request that it is replying to.
40 - *id* A value of any type, which is used to match the response with the request that it is replying to.
41 - *api_key* for access and permission validation.
41 - *api_key* for access and permission validation.
42 - *method* is name of method to call
42 - *method* is name of method to call
43 - *args* is an key:value list of arguments to pass to method
43 - *args* is an key:value list of arguments to pass to method
44
44
45 .. note::
45 .. note::
46
46
47 api_key can be found in your user account page
47 api_key can be found in your user account page
48
48
49
49
50 RhodeCode API will return always a JSON-RPC response::
50 RhodeCode API will return always a JSON-RPC response::
51
51
52 {
52 {
53 "id":<id>,
53 "id":<id>,
54 "result": "<result>",
54 "result": "<result>",
55 "error": null
55 "error": null
56 }
56 }
57
57
58 All responses from API will be `HTTP/1.0 200 OK`, if there's an error while
58 All responses from API will be `HTTP/1.0 200 OK`, if there's an error while
59 calling api *error* key from response will contain failure description
59 calling api *error* key from response will contain failure description
60 and result will be null.
60 and result will be null.
61
61
62 API METHODS
62 API METHODS
63 +++++++++++
63 +++++++++++
64
64
65
65
66 pull
66 pull
67 ----
67 ----
68
68
69 Pulls given repo from remote location. Can be used to automatically keep
69 Pulls given repo from remote location. Can be used to automatically keep
70 remote repos up to date. This command can be executed only using api_key
70 remote repos up to date. This command can be executed only using api_key
71 belonging to user with admin rights
71 belonging to user with admin rights
72
72
73 INPUT::
73 INPUT::
74
74
75 api_key : "<api_key>"
75 api_key : "<api_key>"
76 method : "pull"
76 method : "pull"
77 args : {
77 args : {
78 "repo_name" : "<reponame>"
78 "repo_name" : "<reponame>"
79 }
79 }
80
80
81 OUTPUT::
81 OUTPUT::
82
82
83 result : "Pulled from <reponame>"
83 result : "Pulled from <reponame>"
84 error : null
84 error : null
85
85
86
86
87 get_user
87 get_user
88 --------
88 --------
89
89
90 Get's an user by username or user_id, Returns empty result if user is not found.
90 Get's an user by username or user_id, Returns empty result if user is not found.
91 This command can be executed only using api_key belonging to user with admin
91 This command can be executed only using api_key belonging to user with admin
92 rights.
92 rights.
93
93
94
94
95 INPUT::
95 INPUT::
96
96
97 api_key : "<api_key>"
97 api_key : "<api_key>"
98 method : "get_user"
98 method : "get_user"
99 args : {
99 args : {
100 "userid" : "<username or user_id>"
100 "userid" : "<username or user_id>"
101 }
101 }
102
102
103 OUTPUT::
103 OUTPUT::
104
104
105 result: None if user does not exist or
105 result: None if user does not exist or
106 {
106 {
107 "id" : "<id>",
107 "id" : "<id>",
108 "username" : "<username>",
108 "username" : "<username>",
109 "firstname": "<firstname>",
109 "firstname": "<firstname>",
110 "lastname" : "<lastname>",
110 "lastname" : "<lastname>",
111 "email" : "<email>",
111 "email" : "<email>",
112 "active" : "<bool>",
112 "active" : "<bool>",
113 "admin" :Β  "<bool>",
113 "admin" :Β  "<bool>",
114 "ldap_dn" : "<ldap_dn>"
114 "ldap_dn" : "<ldap_dn>"
115 }
115 }
116
116
117 error: null
117 error: null
118
118
119
119
120 get_users
120 get_users
121 ---------
121 ---------
122
122
123 Lists all existing users. This command can be executed only using api_key
123 Lists all existing users. This command can be executed only using api_key
124 belonging to user with admin rights.
124 belonging to user with admin rights.
125
125
126
126
127 INPUT::
127 INPUT::
128
128
129 api_key : "<api_key>"
129 api_key : "<api_key>"
130 method : "get_users"
130 method : "get_users"
131 args : { }
131 args : { }
132
132
133 OUTPUT::
133 OUTPUT::
134
134
135 result: [
135 result: [
136 {
136 {
137 "id" : "<id>",
137 "id" : "<id>",
138 "username" : "<username>",
138 "username" : "<username>",
139 "firstname": "<firstname>",
139 "firstname": "<firstname>",
140 "lastname" : "<lastname>",
140 "lastname" : "<lastname>",
141 "email" : "<email>",
141 "email" : "<email>",
142 "active" : "<bool>",
142 "active" : "<bool>",
143 "admin" :Β  "<bool>",
143 "admin" :Β  "<bool>",
144 "ldap_dn" : "<ldap_dn>"
144 "ldap_dn" : "<ldap_dn>"
145 },
145 },
146 …
146 …
147 ]
147 ]
148 error: null
148 error: null
149
149
150
150
151 create_user
151 create_user
152 -----------
152 -----------
153
153
154 Creates new user. This command can
154 Creates new user. This command can
155 be executed only using api_key belonging to user with admin rights.
155 be executed only using api_key belonging to user with admin rights.
156
156
157
157
158 INPUT::
158 INPUT::
159
159
160 api_key : "<api_key>"
160 api_key : "<api_key>"
161 method : "create_user"
161 method : "create_user"
162 args : {
162 args : {
163 "username" : "<username>",
163 "username" : "<username>",
164 "password" : "<password>",
164 "password" : "<password>",
165 "email" : "<useremail>",
165 "email" : "<useremail>",
166 "firstname" : "<firstname> = None",
166 "firstname" : "<firstname> = None",
167 "lastname" : "<lastname> = None",
167 "lastname" : "<lastname> = None",
168 "active" : "<bool> = True",
168 "active" : "<bool> = True",
169 "admin" : "<bool> = False",
169 "admin" : "<bool> = False",
170 "ldap_dn" : "<ldap_dn> = None"
170 "ldap_dn" : "<ldap_dn> = None"
171 }
171 }
172
172
173 OUTPUT::
173 OUTPUT::
174
174
175 result: {
175 result: {
176 "id" : "<new_user_id>",
176 "id" : "<new_user_id>",
177 "msg" : "created new user <username>"
177 "msg" : "created new user <username>"
178 }
178 }
179 error: null
179 error: null
180
180
181
181
182 update_user
182 update_user
183 -----------
183 -----------
184
184
185 updates current one if such user exists. This command can
185 updates current one if such user exists. This command can
186 be executed only using api_key belonging to user with admin rights.
186 be executed only using api_key belonging to user with admin rights.
187
187
188
188
189 INPUT::
189 INPUT::
190
190
191 api_key : "<api_key>"
191 api_key : "<api_key>"
192 method : "update_user"
192 method : "update_user"
193 args : {
193 args : {
194 "userid" : "<user_id or username>",
194 "userid" : "<user_id or username>",
195 "username" : "<username>",
195 "username" : "<username>",
196 "password" : "<password>",
196 "password" : "<password>",
197 "email" : "<useremail>",
197 "email" : "<useremail>",
198 "firstname" : "<firstname>",
198 "firstname" : "<firstname>",
199 "lastname" : "<lastname>",
199 "lastname" : "<lastname>",
200 "active" : "<bool>",
200 "active" : "<bool>",
201 "admin" : "<bool>",
201 "admin" : "<bool>",
202 "ldap_dn" : "<ldap_dn>"
202 "ldap_dn" : "<ldap_dn>"
203 }
203 }
204
204
205 OUTPUT::
205 OUTPUT::
206
206
207 result: {
207 result: {
208 "id" : "<edited_user_id>",
208 "id" : "<edited_user_id>",
209 "msg" : "updated user <username>"
209 "msg" : "updated user <username>"
210 }
210 }
211 error: null
211 error: null
212
212
213
213
214 get_users_group
214 get_users_group
215 ---------------
215 ---------------
216
216
217 Gets an existing users group. This command can be executed only using api_key
217 Gets an existing users group. This command can be executed only using api_key
218 belonging to user with admin rights.
218 belonging to user with admin rights.
219
219
220
220
221 INPUT::
221 INPUT::
222
222
223 api_key : "<api_key>"
223 api_key : "<api_key>"
224 method : "get_users_group"
224 method : "get_users_group"
225 args : {
225 args : {
226 "group_name" : "<name>"
226 "group_name" : "<name>"
227 }
227 }
228
228
229 OUTPUT::
229 OUTPUT::
230
230
231 result : None if group not exist
231 result : None if group not exist
232 {
232 {
233 "id" : "<id>",
233 "id" : "<id>",
234 "group_name" : "<groupname>",
234 "group_name" : "<groupname>",
235 "active": "<bool>",
235 "active": "<bool>",
236 "members" : [
236 "members" : [
237 { "id" : "<userid>",
237 { "id" : "<userid>",
238 "username" : "<username>",
238 "username" : "<username>",
239 "firstname": "<firstname>",
239 "firstname": "<firstname>",
240 "lastname" : "<lastname>",
240 "lastname" : "<lastname>",
241 "email" : "<email>",
241 "email" : "<email>",
242 "active" : "<bool>",
242 "active" : "<bool>",
243 "admin" :Β  "<bool>",
243 "admin" :Β  "<bool>",
244 "ldap" : "<ldap_dn>"
244 "ldap" : "<ldap_dn>"
245 },
245 },
246 …
246 …
247 ]
247 ]
248 }
248 }
249 error : null
249 error : null
250
250
251
251
252 get_users_groups
252 get_users_groups
253 ----------------
253 ----------------
254
254
255 Lists all existing users groups. This command can be executed only using
255 Lists all existing users groups. This command can be executed only using
256 api_key belonging to user with admin rights.
256 api_key belonging to user with admin rights.
257
257
258
258
259 INPUT::
259 INPUT::
260
260
261 api_key : "<api_key>"
261 api_key : "<api_key>"
262 method : "get_users_groups"
262 method : "get_users_groups"
263 args : { }
263 args : { }
264
264
265 OUTPUT::
265 OUTPUT::
266
266
267 result : [
267 result : [
268 {
268 {
269 "id" : "<id>",
269 "id" : "<id>",
270 "group_name" : "<groupname>",
270 "group_name" : "<groupname>",
271 "active": "<bool>",
271 "active": "<bool>",
272 "members" : [
272 "members" : [
273 {
273 {
274 "id" : "<userid>",
274 "id" : "<userid>",
275 "username" : "<username>",
275 "username" : "<username>",
276 "firstname": "<firstname>",
276 "firstname": "<firstname>",
277 "lastname" : "<lastname>",
277 "lastname" : "<lastname>",
278 "email" : "<email>",
278 "email" : "<email>",
279 "active" : "<bool>",
279 "active" : "<bool>",
280 "admin" :Β  "<bool>",
280 "admin" :Β  "<bool>",
281 "ldap" : "<ldap_dn>"
281 "ldap" : "<ldap_dn>"
282 },
282 },
283 …
283 …
284 ]
284 ]
285 }
285 }
286 ]
286 ]
287 error : null
287 error : null
288
288
289
289
290 create_users_group
290 create_users_group
291 ------------------
291 ------------------
292
292
293 Creates new users group. This command can be executed only using api_key
293 Creates new users group. This command can be executed only using api_key
294 belonging to user with admin rights
294 belonging to user with admin rights
295
295
296
296
297 INPUT::
297 INPUT::
298
298
299 api_key : "<api_key>"
299 api_key : "<api_key>"
300 method : "create_users_group"
300 method : "create_users_group"
301 args: {
301 args: {
302 "group_name": "<groupname>",
302 "group_name": "<groupname>",
303 "active":"<bool> = True"
303 "active":"<bool> = True"
304 }
304 }
305
305
306 OUTPUT::
306 OUTPUT::
307
307
308 result: {
308 result: {
309 "id": "<newusersgroupid>",
309 "id": "<newusersgroupid>",
310 "msg": "created new users group <groupname>"
310 "msg": "created new users group <groupname>"
311 }
311 }
312 error: null
312 error: null
313
313
314
314
315 add_user_to_users_group
315 add_user_to_users_group
316 -----------------------
316 -----------------------
317
317
318 Adds a user to a users group. If user exists in that group success will be
318 Adds a user to a users group. If user exists in that group success will be
319 `false`. This command can be executed only using api_key
319 `false`. This command can be executed only using api_key
320 belonging to user with admin rights
320 belonging to user with admin rights
321
321
322
322
323 INPUT::
323 INPUT::
324
324
325 api_key : "<api_key>"
325 api_key : "<api_key>"
326 method : "add_user_users_group"
326 method : "add_user_users_group"
327 args: {
327 args: {
328 "group_name" : "<groupname>",
328 "group_name" : "<groupname>",
329 "username" : "<username>"
329 "username" : "<username>"
330 }
330 }
331
331
332 OUTPUT::
332 OUTPUT::
333
333
334 result: {
334 result: {
335 "id": "<newusersgroupmemberid>",
335 "id": "<newusersgroupmemberid>",
336 "success": True|False # depends on if member is in group
336 "success": True|False # depends on if member is in group
337 "msg": "added member <username> to users group <groupname> |
337 "msg": "added member <username> to users group <groupname> |
338 User is already in that group"
338 User is already in that group"
339 }
339 }
340 error: null
340 error: null
341
341
342
342
343 remove_user_from_users_group
343 remove_user_from_users_group
344 ----------------------------
344 ----------------------------
345
345
346 Removes a user from a users group. If user is not in given group success will
346 Removes a user from a users group. If user is not in given group success will
347 be `false`. This command can be executed only
347 be `false`. This command can be executed only
348 using api_key belonging to user with admin rights
348 using api_key belonging to user with admin rights
349
349
350
350
351 INPUT::
351 INPUT::
352
352
353 api_key : "<api_key>"
353 api_key : "<api_key>"
354 method : "remove_user_from_users_group"
354 method : "remove_user_from_users_group"
355 args: {
355 args: {
356 "group_name" : "<groupname>",
356 "group_name" : "<groupname>",
357 "username" : "<username>"
357 "username" : "<username>"
358 }
358 }
359
359
360 OUTPUT::
360 OUTPUT::
361
361
362 result: {
362 result: {
363 "success": True|False, # depends on if member is in group
363 "success": True|False, # depends on if member is in group
364 "msg": "removed member <username> from users group <groupname> |
364 "msg": "removed member <username> from users group <groupname> |
365 User wasn't in group"
365 User wasn't in group"
366 }
366 }
367 error: null
367 error: null
368
368
369
369
370 get_repo
370 get_repo
371 --------
371 --------
372
372
373 Gets an existing repository by it's name or repository_id. This command can
373 Gets an existing repository by it's name or repository_id. This command can
374 be executed only using api_key belonging to user with admin rights.
374 be executed only using api_key belonging to user with admin rights.
375
375
376
376
377 INPUT::
377 INPUT::
378
378
379 api_key : "<api_key>"
379 api_key : "<api_key>"
380 method : "get_repo"
380 method : "get_repo"
381 args: {
381 args: {
382 "repoid" : "<reponame or repo_id>"
382 "repoid" : "<reponame or repo_id>"
383 }
383 }
384
384
385 OUTPUT::
385 OUTPUT::
386
386
387 result: None if repository does not exist or
387 result: None if repository does not exist or
388 {
388 {
389 "id" : "<id>",
389 "id" : "<id>",
390 "repo_name" : "<reponame>"
390 "repo_name" : "<reponame>"
391 "type" : "<type>",
391 "type" : "<type>",
392 "description" : "<description>",
392 "description" : "<description>",
393 "members" : [
393 "members" : [
394 { "id" : "<userid>",
394 { "id" : "<userid>",
395 "username" : "<username>",
395 "username" : "<username>",
396 "firstname": "<firstname>",
396 "firstname": "<firstname>",
397 "lastname" : "<lastname>",
397 "lastname" : "<lastname>",
398 "email" : "<email>",
398 "email" : "<email>",
399 "active" : "<bool>",
399 "active" : "<bool>",
400 "admin" :Β  "<bool>",
400 "admin" :Β  "<bool>",
401 "ldap" : "<ldap_dn>",
401 "ldap" : "<ldap_dn>",
402 "permission" : "repository.(read|write|admin)"
402 "permission" : "repository.(read|write|admin)"
403 },
403 },
404 …
404 …
405 {
405 {
406 "id" : "<usersgroupid>",
406 "id" : "<usersgroupid>",
407 "name" : "<usersgroupname>",
407 "name" : "<usersgroupname>",
408 "active": "<bool>",
408 "active": "<bool>",
409 "permission" : "repository.(read|write|admin)"
409 "permission" : "repository.(read|write|admin)"
410 },
410 },
411 …
411 …
412 ]
412 ]
413 }
413 }
414 error: null
414 error: null
415
415
416
416
417 get_repos
417 get_repos
418 ---------
418 ---------
419
419
420 Lists all existing repositories. This command can be executed only using api_key
420 Lists all existing repositories. This command can be executed only using api_key
421 belonging to user with admin rights
421 belonging to user with admin rights
422
422
423
423
424 INPUT::
424 INPUT::
425
425
426 api_key : "<api_key>"
426 api_key : "<api_key>"
427 method : "get_repos"
427 method : "get_repos"
428 args: { }
428 args: { }
429
429
430 OUTPUT::
430 OUTPUT::
431
431
432 result: [
432 result: [
433 {
433 {
434 "id" : "<id>",
434 "id" : "<id>",
435 "repo_name" : "<reponame>"
435 "repo_name" : "<reponame>"
436 "type" : "<type>",
436 "type" : "<type>",
437 "description" : "<description>"
437 "description" : "<description>"
438 },
438 },
439 …
439 …
440 ]
440 ]
441 error: null
441 error: null
442
442
443
443
444 get_repo_nodes
444 get_repo_nodes
445 --------------
445 --------------
446
446
447 returns a list of nodes and it's children in a flat list for a given path
447 returns a list of nodes and it's children in a flat list for a given path
448 at given revision. It's possible to specify ret_type to show only `files` or
448 at given revision. It's possible to specify ret_type to show only `files` or
449 `dirs`. This command can be executed only using api_key belonging to user
449 `dirs`. This command can be executed only using api_key belonging to user
450 with admin rights
450 with admin rights
451
451
452
452
453 INPUT::
453 INPUT::
454
454
455 api_key : "<api_key>"
455 api_key : "<api_key>"
456 method : "get_repo_nodes"
456 method : "get_repo_nodes"
457 args: {
457 args: {
458 "repo_name" : "<reponame>",
458 "repo_name" : "<reponame>",
459 "revision" : "<revision>",
459 "revision" : "<revision>",
460 "root_path" : "<root_path>",
460 "root_path" : "<root_path>",
461 "ret_type" : "<ret_type>" = 'all'
461 "ret_type" : "<ret_type>" = 'all'
462 }
462 }
463
463
464 OUTPUT::
464 OUTPUT::
465
465
466 result: [
466 result: [
467 {
467 {
468 "name" : "<name>"
468 "name" : "<name>"
469 "type" : "<type>",
469 "type" : "<type>",
470 },
470 },
471 …
471 …
472 ]
472 ]
473 error: null
473 error: null
474
474
475
475
476 create_repo
476 create_repo
477 -----------
477 -----------
478
478
479 Creates a repository. This command can be executed only using api_key
479 Creates a repository. This command can be executed only using api_key
480 belonging to user with admin rights.
480 belonging to user with admin rights.
481 If repository name contains "/", all needed repository groups will be created.
481 If repository name contains "/", all needed repository groups will be created.
482 For example "foo/bar/baz" will create groups "foo", "bar" (with "foo" as parent),
482 For example "foo/bar/baz" will create groups "foo", "bar" (with "foo" as parent),
483 and create "baz" repository with "bar" as group.
483 and create "baz" repository with "bar" as group.
484
484
485
485
486 INPUT::
486 INPUT::
487
487
488 api_key : "<api_key>"
488 api_key : "<api_key>"
489 method : "create_repo"
489 method : "create_repo"
490 args: {
490 args: {
491 "repo_name" : "<reponame>",
491 "repo_name" : "<reponame>",
492 "owner_name" : "<ownername>",
492 "owner_name" : "<ownername>",
493 "description" : "<description> = ''",
493 "description" : "<description> = ''",
494 "repo_type" : "<type> = 'hg'",
494 "repo_type" : "<type> = 'hg'",
495 "private" : "<bool> = False",
495 "private" : "<bool> = False",
496 "clone_uri" : "<clone_uri> = None",
496 "clone_uri" : "<clone_uri> = None",
497 }
497 }
498
498
499 OUTPUT::
499 OUTPUT::
500
500
501 result: {
501 result: {
502 "id": "<newrepoid>",
502 "id": "<newrepoid>",
503 "msg": "Created new repository <reponame>",
503 "msg": "Created new repository <reponame>",
504 }
504 }
505 error: null
505 error: null
506
506
507
507
508 delete_repo
508 delete_repo
509 -----------
509 -----------
510
510
511 Deletes a repository. This command can be executed only using api_key
511 Deletes a repository. This command can be executed only using api_key
512 belonging to user with admin rights.
512 belonging to user with admin rights.
513
513
514
514
515 INPUT::
515 INPUT::
516
516
517 api_key : "<api_key>"
517 api_key : "<api_key>"
518 method : "delete_repo"
518 method : "delete_repo"
519 args: {
519 args: {
520 "repo_name" : "<reponame>",
520 "repo_name" : "<reponame>",
521 }
521 }
522
522
523 OUTPUT::
523 OUTPUT::
524
524
525 result: {
525 result: {
526 "msg": "Deleted repository <reponame>",
526 "msg": "Deleted repository <reponame>",
527 }
527 }
528 error: null
528 error: null
529
529
530
530
531 grant_user_permission
531 grant_user_permission
532 ---------------------
532 ---------------------
533
533
534 Grant permission for user on given repository, or update existing one
534 Grant permission for user on given repository, or update existing one
535 if found. This command can be executed only using api_key belonging to user
535 if found. This command can be executed only using api_key belonging to user
536 with admin rights.
536 with admin rights.
537
537
538
538
539 INPUT::
539 INPUT::
540
540
541 api_key : "<api_key>"
541 api_key : "<api_key>"
542 method : "grant_user_permission"
542 method : "grant_user_permission"
543 args: {
543 args: {
544 "repo_name" : "<reponame>",
544 "repo_name" : "<reponame>",
545 "username" : "<username>",
545 "username" : "<username>",
546 "perm" : "(repository.(none|read|write|admin))",
546 "perm" : "(repository.(none|read|write|admin))",
547 }
547 }
548
548
549 OUTPUT::
549 OUTPUT::
550
550
551 result: {
551 result: {
552 "msg" : "Granted perm: <perm> for user: <username> in repo: <reponame>"
552 "msg" : "Granted perm: <perm> for user: <username> in repo: <reponame>"
553 }
553 }
554 error: null
554 error: null
555
555
556
556
557 revoke_user_permission
557 revoke_user_permission
558 ----------------------
558 ----------------------
559
559
560 Revoke permission for user on given repository. This command can be executed
560 Revoke permission for user on given repository. This command can be executed
561 only using api_key belonging to user with admin rights.
561 only using api_key belonging to user with admin rights.
562
562
563
563
564 INPUT::
564 INPUT::
565
565
566 api_key : "<api_key>"
566 api_key : "<api_key>"
567 method : "revoke_user_permission"
567 method : "revoke_user_permission"
568 args: {
568 args: {
569 "repo_name" : "<reponame>",
569 "repo_name" : "<reponame>",
570 "username" : "<username>",
570 "username" : "<username>",
571 }
571 }
572
572
573 OUTPUT::
573 OUTPUT::
574
574
575 result: {
575 result: {
576 "msg" : "Revoked perm for user: <suername> in repo: <reponame>"
576 "msg" : "Revoked perm for user: <suername> in repo: <reponame>"
577 }
577 }
578 error: null
578 error: null
579
579
580
580
581 grant_users_group_permission
581 grant_users_group_permission
582 ----------------------------
582 ----------------------------
583
583
584 Grant permission for users group on given repository, or update
584 Grant permission for users group on given repository, or update
585 existing one if found. This command can be executed only using
585 existing one if found. This command can be executed only using
586 api_key belonging to user with admin rights.
586 api_key belonging to user with admin rights.
587
587
588
588
589 INPUT::
589 INPUT::
590
590
591 api_key : "<api_key>"
591 api_key : "<api_key>"
592 method : "grant_users_group_permission"
592 method : "grant_users_group_permission"
593 args: {
593 args: {
594 "repo_name" : "<reponame>",
594 "repo_name" : "<reponame>",
595 "group_name" : "<usersgroupname>",
595 "group_name" : "<usersgroupname>",
596 "perm" : "(repository.(none|read|write|admin))",
596 "perm" : "(repository.(none|read|write|admin))",
597 }
597 }
598
598
599 OUTPUT::
599 OUTPUT::
600
600
601 result: {
601 result: {
602 "msg" : "Granted perm: <perm> for group: <usersgroupname> in repo: <reponame>"
602 "msg" : "Granted perm: <perm> for group: <usersgroupname> in repo: <reponame>"
603 }
603 }
604 error: null
604 error: null
605
605
606
606
607 revoke_users_group_permission
607 revoke_users_group_permission
608 -----------------------------
608 -----------------------------
609
609
610 Revoke permission for users group on given repository.This command can be
610 Revoke permission for users group on given repository.This command can be
611 executed only using api_key belonging to user with admin rights.
611 executed only using api_key belonging to user with admin rights.
612
612
613 INPUT::
613 INPUT::
614
614
615 api_key : "<api_key>"
615 api_key : "<api_key>"
616 method : "revoke_users_group_permission"
616 method : "revoke_users_group_permission"
617 args: {
617 args: {
618 "repo_name" : "<reponame>",
618 "repo_name" : "<reponame>",
619 "users_group" : "<usersgroupname>",
619 "users_group" : "<usersgroupname>",
620 }
620 }
621
621
622 OUTPUT::
622 OUTPUT::
623
623
624 result: {
624 result: {
625 "msg" : "Revoked perm for group: <usersgroupname> in repo: <reponame>"
625 "msg" : "Revoked perm for group: <usersgroupname> in repo: <reponame>"
626 }
626 }
627 error: null No newline at end of file
627 error: null
@@ -1,34 +1,35 b''
1 .. _models:
1 .. _models:
2
2
3 ========================
3 The :mod:`models` Module
4 The :mod:`models` Module
4 ========================
5 ========================
5
6
6 .. automodule:: rhodecode.model
7 .. automodule:: rhodecode.model
7 :members:
8 :members:
8
9
9 .. automodule:: rhodecode.model.comment
10 .. automodule:: rhodecode.model.comment
10 :members:
11 :members:
11
12
12 .. automodule:: rhodecode.model.notification
13 .. automodule:: rhodecode.model.notification
13 :members:
14 :members:
14
15
15 .. automodule:: rhodecode.model.permission
16 .. automodule:: rhodecode.model.permission
16 :members:
17 :members:
17
18
18 .. automodule:: rhodecode.model.repo_permission
19 .. automodule:: rhodecode.model.repo_permission
19 :members:
20 :members:
20
21
21 .. automodule:: rhodecode.model.repo
22 .. automodule:: rhodecode.model.repo
22 :members:
23 :members:
23
24
24 .. automodule:: rhodecode.model.repos_group
25 .. automodule:: rhodecode.model.repos_group
25 :members:
26 :members:
26
27
27 .. automodule:: rhodecode.model.scm
28 .. automodule:: rhodecode.model.scm
28 :members:
29 :members:
29
30
30 .. automodule:: rhodecode.model.user
31 .. automodule:: rhodecode.model.user
31 :members:
32 :members:
32
33
33 .. automodule:: rhodecode.model.users_group
34 .. automodule:: rhodecode.model.users_group
34 :members: No newline at end of file
35 :members:
@@ -1,535 +1,562 b''
1 .. _changelog:
1 .. _changelog:
2
2
3 =========
3 Changelog
4 Changelog
4 =========
5 =========
5
6
6
7
8
9 1.3.3 (**2012-03-02**)
10 ----------------------
11
12 news
13 ++++
14
15
16 fixes
17 +++++
18
19 - fixed some python2.5 compatibility issues
20 - fixed issues with removed repos was accidentally added as groups, after
21 full rescan of paths
22 - fixes #376 Cannot edit user (using container auth)
23 - fixes #378 Invalid image urls on changeset screen with proxy-prefix
24 configuration
25 - fixed initial sorting of repos inside repo group
26 - fixes issue when user tried to resubmit same permission into user/user_groups
27 - bumped beaker version that fixes #375 leap error bug
28 - fixed raw_changeset for git. It was generated with hg patch headers
29 - fixed vcs issue with last_changeset for filenodes
30 - fixed missing commit after hook delete
31 - fixed #372 issues with git operation detection that caused a security issue
32 for git repos
33
7 1.3.2 (**2012-02-28**)
34 1.3.2 (**2012-02-28**)
8 ----------------------
35 ----------------------
9
36
10 news
37 news
11 ++++
38 ++++
12
39
13
40
14 fixes
41 fixes
15 +++++
42 +++++
16
43
17 - fixed git protocol issues with repos-groups
44 - fixed git protocol issues with repos-groups
18 - fixed git remote repos validator that prevented from cloning remote git repos
45 - fixed git remote repos validator that prevented from cloning remote git repos
19 - fixes #370 ending slashes fixes for repo and groups
46 - fixes #370 ending slashes fixes for repo and groups
20 - fixes #368 improved git-protocol detection to handle other clients
47 - fixes #368 improved git-protocol detection to handle other clients
21 - fixes #366 When Setting Repository Group To Blank Repo Group Wont Be
48 - fixes #366 When Setting Repository Group To Blank Repo Group Wont Be
22 Moved To Root
49 Moved To Root
23 - fixes #371 fixed issues with beaker/sqlalchemy and non-ascii cache keys
50 - fixes #371 fixed issues with beaker/sqlalchemy and non-ascii cache keys
24 - fixed #373 missing cascade drop on user_group_to_perm table
51 - fixed #373 missing cascade drop on user_group_to_perm table
25
52
26 1.3.1 (**2012-02-27**)
53 1.3.1 (**2012-02-27**)
27 ----------------------
54 ----------------------
28
55
29 news
56 news
30 ++++
57 ++++
31
58
32
59
33 fixes
60 fixes
34 +++++
61 +++++
35
62
36 - redirection loop occurs when remember-me wasn't checked during login
63 - redirection loop occurs when remember-me wasn't checked during login
37 - fixes issues with git blob history generation
64 - fixes issues with git blob history generation
38 - don't fetch branch for git in file history dropdown. Causes unneeded slowness
65 - don't fetch branch for git in file history dropdown. Causes unneeded slowness
39
66
40 1.3.0 (**2012-02-26**)
67 1.3.0 (**2012-02-26**)
41 ----------------------
68 ----------------------
42
69
43 news
70 news
44 ++++
71 ++++
45
72
46 - code review, inspired by github code-comments
73 - code review, inspired by github code-comments
47 - #215 rst and markdown README files support
74 - #215 rst and markdown README files support
48 - #252 Container-based and proxy pass-through authentication support
75 - #252 Container-based and proxy pass-through authentication support
49 - #44 branch browser. Filtering of changelog by branches
76 - #44 branch browser. Filtering of changelog by branches
50 - mercurial bookmarks support
77 - mercurial bookmarks support
51 - new hover top menu, optimized to add maximum size for important views
78 - new hover top menu, optimized to add maximum size for important views
52 - configurable clone url template with possibility to specify protocol like
79 - configurable clone url template with possibility to specify protocol like
53 ssh:// or http:// and also manually alter other parts of clone_url.
80 ssh:// or http:// and also manually alter other parts of clone_url.
54 - enabled largefiles extension by default
81 - enabled largefiles extension by default
55 - optimized summary file pages and saved a lot of unused space in them
82 - optimized summary file pages and saved a lot of unused space in them
56 - #239 option to manually mark repository as fork
83 - #239 option to manually mark repository as fork
57 - #320 mapping of commit authors to RhodeCode users
84 - #320 mapping of commit authors to RhodeCode users
58 - #304 hashes are displayed using monospace font
85 - #304 hashes are displayed using monospace font
59 - diff configuration, toggle white lines and context lines
86 - diff configuration, toggle white lines and context lines
60 - #307 configurable diffs, whitespace toggle, increasing context lines
87 - #307 configurable diffs, whitespace toggle, increasing context lines
61 - sorting on branches, tags and bookmarks using YUI datatable
88 - sorting on branches, tags and bookmarks using YUI datatable
62 - improved file filter on files page
89 - improved file filter on files page
63 - implements #330 api method for listing nodes ar particular revision
90 - implements #330 api method for listing nodes ar particular revision
64 - #73 added linking issues in commit messages to chosen issue tracker url
91 - #73 added linking issues in commit messages to chosen issue tracker url
65 based on user defined regular expression
92 based on user defined regular expression
66 - added linking of changesets in commit messages
93 - added linking of changesets in commit messages
67 - new compact changelog with expandable commit messages
94 - new compact changelog with expandable commit messages
68 - firstname and lastname are optional in user creation
95 - firstname and lastname are optional in user creation
69 - #348 added post-create repository hook
96 - #348 added post-create repository hook
70 - #212 global encoding settings is now configurable from .ini files
97 - #212 global encoding settings is now configurable from .ini files
71 - #227 added repository groups permissions
98 - #227 added repository groups permissions
72 - markdown gets codehilite extensions
99 - markdown gets codehilite extensions
73 - new API methods, delete_repositories, grante/revoke permissions for groups
100 - new API methods, delete_repositories, grante/revoke permissions for groups
74 and repos
101 and repos
75
102
76
103
77 fixes
104 fixes
78 +++++
105 +++++
79
106
80 - rewrote dbsession management for atomic operations, and better error handling
107 - rewrote dbsession management for atomic operations, and better error handling
81 - fixed sorting of repo tables
108 - fixed sorting of repo tables
82 - #326 escape of special html entities in diffs
109 - #326 escape of special html entities in diffs
83 - normalized user_name => username in api attributes
110 - normalized user_name => username in api attributes
84 - fixes #298 ldap created users with mixed case emails created conflicts
111 - fixes #298 ldap created users with mixed case emails created conflicts
85 on saving a form
112 on saving a form
86 - fixes issue when owner of a repo couldn't revoke permissions for users
113 - fixes issue when owner of a repo couldn't revoke permissions for users
87 and groups
114 and groups
88 - fixes #271 rare JSON serialization problem with statistics
115 - fixes #271 rare JSON serialization problem with statistics
89 - fixes #337 missing validation check for conflicting names of a group with a
116 - fixes #337 missing validation check for conflicting names of a group with a
90 repositories group
117 repositories group
91 - #340 fixed session problem for mysql and celery tasks
118 - #340 fixed session problem for mysql and celery tasks
92 - fixed #331 RhodeCode mangles repository names if the a repository group
119 - fixed #331 RhodeCode mangles repository names if the a repository group
93 contains the "full path" to the repositories
120 contains the "full path" to the repositories
94 - #355 RhodeCode doesn't store encrypted LDAP passwords
121 - #355 RhodeCode doesn't store encrypted LDAP passwords
95
122
96 1.2.5 (**2012-01-28**)
123 1.2.5 (**2012-01-28**)
97 ----------------------
124 ----------------------
98
125
99 news
126 news
100 ++++
127 ++++
101
128
102 fixes
129 fixes
103 +++++
130 +++++
104
131
105 - #340 Celery complains about MySQL server gone away, added session cleanup
132 - #340 Celery complains about MySQL server gone away, added session cleanup
106 for celery tasks
133 for celery tasks
107 - #341 "scanning for repositories in None" log message during Rescan was missing
134 - #341 "scanning for repositories in None" log message during Rescan was missing
108 a parameter
135 a parameter
109 - fixed creating archives with subrepos. Some hooks were triggered during that
136 - fixed creating archives with subrepos. Some hooks were triggered during that
110 operation leading to crash.
137 operation leading to crash.
111 - fixed missing email in account page.
138 - fixed missing email in account page.
112 - Reverted Mercurial to 2.0.1 for windows due to bug in Mercurial that makes
139 - Reverted Mercurial to 2.0.1 for windows due to bug in Mercurial that makes
113 forking on windows impossible
140 forking on windows impossible
114
141
115 1.2.4 (**2012-01-19**)
142 1.2.4 (**2012-01-19**)
116 ----------------------
143 ----------------------
117
144
118 news
145 news
119 ++++
146 ++++
120
147
121 - RhodeCode is bundled with mercurial series 2.0.X by default, with
148 - RhodeCode is bundled with mercurial series 2.0.X by default, with
122 full support to largefiles extension. Enabled by default in new installations
149 full support to largefiles extension. Enabled by default in new installations
123 - #329 Ability to Add/Remove Groups to/from a Repository via AP
150 - #329 Ability to Add/Remove Groups to/from a Repository via AP
124 - added requires.txt file with requirements
151 - added requires.txt file with requirements
125
152
126 fixes
153 fixes
127 +++++
154 +++++
128
155
129 - fixes db session issues with celery when emailing admins
156 - fixes db session issues with celery when emailing admins
130 - #331 RhodeCode mangles repository names if the a repository group
157 - #331 RhodeCode mangles repository names if the a repository group
131 contains the "full path" to the repositories
158 contains the "full path" to the repositories
132 - #298 Conflicting e-mail addresses for LDAP and RhodeCode users
159 - #298 Conflicting e-mail addresses for LDAP and RhodeCode users
133 - DB session cleanup after hg protocol operations, fixes issues with
160 - DB session cleanup after hg protocol operations, fixes issues with
134 `mysql has gone away` errors
161 `mysql has gone away` errors
135 - #333 doc fixes for get_repo api function
162 - #333 doc fixes for get_repo api function
136 - #271 rare JSON serialization problem with statistics enabled
163 - #271 rare JSON serialization problem with statistics enabled
137 - #337 Fixes issues with validation of repository name conflicting with
164 - #337 Fixes issues with validation of repository name conflicting with
138 a group name. A proper message is now displayed.
165 a group name. A proper message is now displayed.
139 - #292 made ldap_dn in user edit readonly, to get rid of confusion that field
166 - #292 made ldap_dn in user edit readonly, to get rid of confusion that field
140 doesn't work
167 doesn't work
141 - #316 fixes issues with web description in hgrc files
168 - #316 fixes issues with web description in hgrc files
142
169
143 1.2.3 (**2011-11-02**)
170 1.2.3 (**2011-11-02**)
144 ----------------------
171 ----------------------
145
172
146 news
173 news
147 ++++
174 ++++
148
175
149 - added option to manage repos group for non admin users
176 - added option to manage repos group for non admin users
150 - added following API methods for get_users, create_user, get_users_groups,
177 - added following API methods for get_users, create_user, get_users_groups,
151 get_users_group, create_users_group, add_user_to_users_groups, get_repos,
178 get_users_group, create_users_group, add_user_to_users_groups, get_repos,
152 get_repo, create_repo, add_user_to_repo
179 get_repo, create_repo, add_user_to_repo
153 - implements #237 added password confirmation for my account
180 - implements #237 added password confirmation for my account
154 and admin edit user.
181 and admin edit user.
155 - implements #291 email notification for global events are now sent to all
182 - implements #291 email notification for global events are now sent to all
156 administrator users, and global config email.
183 administrator users, and global config email.
157
184
158 fixes
185 fixes
159 +++++
186 +++++
160
187
161 - added option for passing auth method for smtp mailer
188 - added option for passing auth method for smtp mailer
162 - #276 issue with adding a single user with id>10 to usergroups
189 - #276 issue with adding a single user with id>10 to usergroups
163 - #277 fixes windows LDAP settings in which missing values breaks the ldap auth
190 - #277 fixes windows LDAP settings in which missing values breaks the ldap auth
164 - #288 fixes managing of repos in a group for non admin user
191 - #288 fixes managing of repos in a group for non admin user
165
192
166 1.2.2 (**2011-10-17**)
193 1.2.2 (**2011-10-17**)
167 ----------------------
194 ----------------------
168
195
169 news
196 news
170 ++++
197 ++++
171
198
172 - #226 repo groups are available by path instead of numerical id
199 - #226 repo groups are available by path instead of numerical id
173
200
174 fixes
201 fixes
175 +++++
202 +++++
176
203
177 - #259 Groups with the same name but with different parent group
204 - #259 Groups with the same name but with different parent group
178 - #260 Put repo in group, then move group to another group -> repo becomes unavailable
205 - #260 Put repo in group, then move group to another group -> repo becomes unavailable
179 - #258 RhodeCode 1.2 assumes egg folder is writable (lockfiles problems)
206 - #258 RhodeCode 1.2 assumes egg folder is writable (lockfiles problems)
180 - #265 ldap save fails sometimes on converting attributes to booleans,
207 - #265 ldap save fails sometimes on converting attributes to booleans,
181 added getter and setter into model that will prevent from this on db model level
208 added getter and setter into model that will prevent from this on db model level
182 - fixed problems with timestamps issues #251 and #213
209 - fixed problems with timestamps issues #251 and #213
183 - fixes #266 RhodeCode allows to create repo with the same name and in
210 - fixes #266 RhodeCode allows to create repo with the same name and in
184 the same parent as group
211 the same parent as group
185 - fixes #245 Rescan of the repositories on Windows
212 - fixes #245 Rescan of the repositories on Windows
186 - fixes #248 cannot edit repos inside a group on windows
213 - fixes #248 cannot edit repos inside a group on windows
187 - fixes #219 forking problems on windows
214 - fixes #219 forking problems on windows
188
215
189 1.2.1 (**2011-10-08**)
216 1.2.1 (**2011-10-08**)
190 ----------------------
217 ----------------------
191
218
192 news
219 news
193 ++++
220 ++++
194
221
195
222
196 fixes
223 fixes
197 +++++
224 +++++
198
225
199 - fixed problems with basic auth and push problems
226 - fixed problems with basic auth and push problems
200 - gui fixes
227 - gui fixes
201 - fixed logger
228 - fixed logger
202
229
203 1.2.0 (**2011-10-07**)
230 1.2.0 (**2011-10-07**)
204 ----------------------
231 ----------------------
205
232
206 news
233 news
207 ++++
234 ++++
208
235
209 - implemented #47 repository groups
236 - implemented #47 repository groups
210 - implemented #89 Can setup google analytics code from settings menu
237 - implemented #89 Can setup google analytics code from settings menu
211 - implemented #91 added nicer looking archive urls with more download options
238 - implemented #91 added nicer looking archive urls with more download options
212 like tags, branches
239 like tags, branches
213 - implemented #44 into file browsing, and added follow branch option
240 - implemented #44 into file browsing, and added follow branch option
214 - implemented #84 downloads can be enabled/disabled for each repository
241 - implemented #84 downloads can be enabled/disabled for each repository
215 - anonymous repository can be cloned without having to pass default:default
242 - anonymous repository can be cloned without having to pass default:default
216 into clone url
243 into clone url
217 - fixed #90 whoosh indexer can index chooses repositories passed in command
244 - fixed #90 whoosh indexer can index chooses repositories passed in command
218 line
245 line
219 - extended journal with day aggregates and paging
246 - extended journal with day aggregates and paging
220 - implemented #107 source code lines highlight ranges
247 - implemented #107 source code lines highlight ranges
221 - implemented #93 customizable changelog on combined revision ranges -
248 - implemented #93 customizable changelog on combined revision ranges -
222 equivalent of githubs compare view
249 equivalent of githubs compare view
223 - implemented #108 extended and more powerful LDAP configuration
250 - implemented #108 extended and more powerful LDAP configuration
224 - implemented #56 users groups
251 - implemented #56 users groups
225 - major code rewrites optimized codes for speed and memory usage
252 - major code rewrites optimized codes for speed and memory usage
226 - raw and diff downloads are now in git format
253 - raw and diff downloads are now in git format
227 - setup command checks for write access to given path
254 - setup command checks for write access to given path
228 - fixed many issues with international characters and unicode. It uses utf8
255 - fixed many issues with international characters and unicode. It uses utf8
229 decode with replace to provide less errors even with non utf8 encoded strings
256 decode with replace to provide less errors even with non utf8 encoded strings
230 - #125 added API KEY access to feeds
257 - #125 added API KEY access to feeds
231 - #109 Repository can be created from external Mercurial link (aka. remote
258 - #109 Repository can be created from external Mercurial link (aka. remote
232 repository, and manually updated (via pull) from admin panel
259 repository, and manually updated (via pull) from admin panel
233 - beta git support - push/pull server + basic view for git repos
260 - beta git support - push/pull server + basic view for git repos
234 - added followers page and forks page
261 - added followers page and forks page
235 - server side file creation (with binary file upload interface)
262 - server side file creation (with binary file upload interface)
236 and edition with commits powered by codemirror
263 and edition with commits powered by codemirror
237 - #111 file browser file finder, quick lookup files on whole file tree
264 - #111 file browser file finder, quick lookup files on whole file tree
238 - added quick login sliding menu into main page
265 - added quick login sliding menu into main page
239 - changelog uses lazy loading of affected files details, in some scenarios
266 - changelog uses lazy loading of affected files details, in some scenarios
240 this can improve speed of changelog page dramatically especially for
267 this can improve speed of changelog page dramatically especially for
241 larger repositories.
268 larger repositories.
242 - implements #214 added support for downloading subrepos in download menu.
269 - implements #214 added support for downloading subrepos in download menu.
243 - Added basic API for direct operations on rhodecode via JSON
270 - Added basic API for direct operations on rhodecode via JSON
244 - Implemented advanced hook management
271 - Implemented advanced hook management
245
272
246 fixes
273 fixes
247 +++++
274 +++++
248
275
249 - fixed file browser bug, when switching into given form revision the url was
276 - fixed file browser bug, when switching into given form revision the url was
250 not changing
277 not changing
251 - fixed propagation to error controller on simplehg and simplegit middlewares
278 - fixed propagation to error controller on simplehg and simplegit middlewares
252 - fixed error when trying to make a download on empty repository
279 - fixed error when trying to make a download on empty repository
253 - fixed problem with '[' chars in commit messages in journal
280 - fixed problem with '[' chars in commit messages in journal
254 - fixed #99 Unicode errors, on file node paths with non utf-8 characters
281 - fixed #99 Unicode errors, on file node paths with non utf-8 characters
255 - journal fork fixes
282 - journal fork fixes
256 - removed issue with space inside renamed repository after deletion
283 - removed issue with space inside renamed repository after deletion
257 - fixed strange issue on formencode imports
284 - fixed strange issue on formencode imports
258 - fixed #126 Deleting repository on Windows, rename used incompatible chars.
285 - fixed #126 Deleting repository on Windows, rename used incompatible chars.
259 - #150 fixes for errors on repositories mapped in db but corrupted in
286 - #150 fixes for errors on repositories mapped in db but corrupted in
260 filesystem
287 filesystem
261 - fixed problem with ascendant characters in realm #181
288 - fixed problem with ascendant characters in realm #181
262 - fixed problem with sqlite file based database connection pool
289 - fixed problem with sqlite file based database connection pool
263 - whoosh indexer and code stats share the same dynamic extensions map
290 - whoosh indexer and code stats share the same dynamic extensions map
264 - fixes #188 - relationship delete of repo_to_perm entry on user removal
291 - fixes #188 - relationship delete of repo_to_perm entry on user removal
265 - fixes issue #189 Trending source files shows "show more" when no more exist
292 - fixes issue #189 Trending source files shows "show more" when no more exist
266 - fixes issue #197 Relative paths for pidlocks
293 - fixes issue #197 Relative paths for pidlocks
267 - fixes issue #198 password will require only 3 chars now for login form
294 - fixes issue #198 password will require only 3 chars now for login form
268 - fixes issue #199 wrong redirection for non admin users after creating a repository
295 - fixes issue #199 wrong redirection for non admin users after creating a repository
269 - fixes issues #202, bad db constraint made impossible to attach same group
296 - fixes issues #202, bad db constraint made impossible to attach same group
270 more than one time. Affects only mysql/postgres
297 more than one time. Affects only mysql/postgres
271 - fixes #218 os.kill patch for windows was missing sig param
298 - fixes #218 os.kill patch for windows was missing sig param
272 - improved rendering of dag (they are not trimmed anymore when number of
299 - improved rendering of dag (they are not trimmed anymore when number of
273 heads exceeds 5)
300 heads exceeds 5)
274
301
275 1.1.8 (**2011-04-12**)
302 1.1.8 (**2011-04-12**)
276 ----------------------
303 ----------------------
277
304
278 news
305 news
279 ++++
306 ++++
280
307
281 - improved windows support
308 - improved windows support
282
309
283 fixes
310 fixes
284 +++++
311 +++++
285
312
286 - fixed #140 freeze of python dateutil library, since new version is python2.x
313 - fixed #140 freeze of python dateutil library, since new version is python2.x
287 incompatible
314 incompatible
288 - setup-app will check for write permission in given path
315 - setup-app will check for write permission in given path
289 - cleaned up license info issue #149
316 - cleaned up license info issue #149
290 - fixes for issues #137,#116 and problems with unicode and accented characters.
317 - fixes for issues #137,#116 and problems with unicode and accented characters.
291 - fixes crashes on gravatar, when passed in email as unicode
318 - fixes crashes on gravatar, when passed in email as unicode
292 - fixed tooltip flickering problems
319 - fixed tooltip flickering problems
293 - fixed came_from redirection on windows
320 - fixed came_from redirection on windows
294 - fixed logging modules, and sql formatters
321 - fixed logging modules, and sql formatters
295 - windows fixes for os.kill issue #133
322 - windows fixes for os.kill issue #133
296 - fixes path splitting for windows issues #148
323 - fixes path splitting for windows issues #148
297 - fixed issue #143 wrong import on migration to 1.1.X
324 - fixed issue #143 wrong import on migration to 1.1.X
298 - fixed problems with displaying binary files, thanks to Thomas Waldmann
325 - fixed problems with displaying binary files, thanks to Thomas Waldmann
299 - removed name from archive files since it's breaking ui for long repo names
326 - removed name from archive files since it's breaking ui for long repo names
300 - fixed issue with archive headers sent to browser, thanks to Thomas Waldmann
327 - fixed issue with archive headers sent to browser, thanks to Thomas Waldmann
301 - fixed compatibility for 1024px displays, and larger dpi settings, thanks to
328 - fixed compatibility for 1024px displays, and larger dpi settings, thanks to
302 Thomas Waldmann
329 Thomas Waldmann
303 - fixed issue #166 summary pager was skipping 10 revisions on second page
330 - fixed issue #166 summary pager was skipping 10 revisions on second page
304
331
305
332
306 1.1.7 (**2011-03-23**)
333 1.1.7 (**2011-03-23**)
307 ----------------------
334 ----------------------
308
335
309 news
336 news
310 ++++
337 ++++
311
338
312 fixes
339 fixes
313 +++++
340 +++++
314
341
315 - fixed (again) #136 installation support for FreeBSD
342 - fixed (again) #136 installation support for FreeBSD
316
343
317
344
318 1.1.6 (**2011-03-21**)
345 1.1.6 (**2011-03-21**)
319 ----------------------
346 ----------------------
320
347
321 news
348 news
322 ++++
349 ++++
323
350
324 fixes
351 fixes
325 +++++
352 +++++
326
353
327 - fixed #136 installation support for FreeBSD
354 - fixed #136 installation support for FreeBSD
328 - RhodeCode will check for python version during installation
355 - RhodeCode will check for python version during installation
329
356
330 1.1.5 (**2011-03-17**)
357 1.1.5 (**2011-03-17**)
331 ----------------------
358 ----------------------
332
359
333 news
360 news
334 ++++
361 ++++
335
362
336 - basic windows support, by exchanging pybcrypt into sha256 for windows only
363 - basic windows support, by exchanging pybcrypt into sha256 for windows only
337 highly inspired by idea of mantis406
364 highly inspired by idea of mantis406
338
365
339 fixes
366 fixes
340 +++++
367 +++++
341
368
342 - fixed sorting by author in main page
369 - fixed sorting by author in main page
343 - fixed crashes with diffs on binary files
370 - fixed crashes with diffs on binary files
344 - fixed #131 problem with boolean values for LDAP
371 - fixed #131 problem with boolean values for LDAP
345 - fixed #122 mysql problems thanks to striker69
372 - fixed #122 mysql problems thanks to striker69
346 - fixed problem with errors on calling raw/raw_files/annotate functions
373 - fixed problem with errors on calling raw/raw_files/annotate functions
347 with unknown revisions
374 with unknown revisions
348 - fixed returned rawfiles attachment names with international character
375 - fixed returned rawfiles attachment names with international character
349 - cleaned out docs, big thanks to Jason Harris
376 - cleaned out docs, big thanks to Jason Harris
350
377
351 1.1.4 (**2011-02-19**)
378 1.1.4 (**2011-02-19**)
352 ----------------------
379 ----------------------
353
380
354 news
381 news
355 ++++
382 ++++
356
383
357 fixes
384 fixes
358 +++++
385 +++++
359
386
360 - fixed formencode import problem on settings page, that caused server crash
387 - fixed formencode import problem on settings page, that caused server crash
361 when that page was accessed as first after server start
388 when that page was accessed as first after server start
362 - journal fixes
389 - journal fixes
363 - fixed option to access repository just by entering http://server/<repo_name>
390 - fixed option to access repository just by entering http://server/<repo_name>
364
391
365 1.1.3 (**2011-02-16**)
392 1.1.3 (**2011-02-16**)
366 ----------------------
393 ----------------------
367
394
368 news
395 news
369 ++++
396 ++++
370
397
371 - implemented #102 allowing the '.' character in username
398 - implemented #102 allowing the '.' character in username
372 - added option to access repository just by entering http://server/<repo_name>
399 - added option to access repository just by entering http://server/<repo_name>
373 - celery task ignores result for better performance
400 - celery task ignores result for better performance
374
401
375 fixes
402 fixes
376 +++++
403 +++++
377
404
378 - fixed ehlo command and non auth mail servers on smtp_lib. Thanks to
405 - fixed ehlo command and non auth mail servers on smtp_lib. Thanks to
379 apollo13 and Johan Walles
406 apollo13 and Johan Walles
380 - small fixes in journal
407 - small fixes in journal
381 - fixed problems with getting setting for celery from .ini files
408 - fixed problems with getting setting for celery from .ini files
382 - registration, password reset and login boxes share the same title as main
409 - registration, password reset and login boxes share the same title as main
383 application now
410 application now
384 - fixed #113: to high permissions to fork repository
411 - fixed #113: to high permissions to fork repository
385 - fixed problem with '[' chars in commit messages in journal
412 - fixed problem with '[' chars in commit messages in journal
386 - removed issue with space inside renamed repository after deletion
413 - removed issue with space inside renamed repository after deletion
387 - db transaction fixes when filesystem repository creation failed
414 - db transaction fixes when filesystem repository creation failed
388 - fixed #106 relation issues on databases different than sqlite
415 - fixed #106 relation issues on databases different than sqlite
389 - fixed static files paths links to use of url() method
416 - fixed static files paths links to use of url() method
390
417
391 1.1.2 (**2011-01-12**)
418 1.1.2 (**2011-01-12**)
392 ----------------------
419 ----------------------
393
420
394 news
421 news
395 ++++
422 ++++
396
423
397
424
398 fixes
425 fixes
399 +++++
426 +++++
400
427
401 - fixes #98 protection against float division of percentage stats
428 - fixes #98 protection against float division of percentage stats
402 - fixed graph bug
429 - fixed graph bug
403 - forced webhelpers version since it was making troubles during installation
430 - forced webhelpers version since it was making troubles during installation
404
431
405 1.1.1 (**2011-01-06**)
432 1.1.1 (**2011-01-06**)
406 ----------------------
433 ----------------------
407
434
408 news
435 news
409 ++++
436 ++++
410
437
411 - added force https option into ini files for easier https usage (no need to
438 - added force https option into ini files for easier https usage (no need to
412 set server headers with this options)
439 set server headers with this options)
413 - small css updates
440 - small css updates
414
441
415 fixes
442 fixes
416 +++++
443 +++++
417
444
418 - fixed #96 redirect loop on files view on repositories without changesets
445 - fixed #96 redirect loop on files view on repositories without changesets
419 - fixed #97 unicode string passed into server header in special cases (mod_wsgi)
446 - fixed #97 unicode string passed into server header in special cases (mod_wsgi)
420 and server crashed with errors
447 and server crashed with errors
421 - fixed large tooltips problems on main page
448 - fixed large tooltips problems on main page
422 - fixed #92 whoosh indexer is more error proof
449 - fixed #92 whoosh indexer is more error proof
423
450
424 1.1.0 (**2010-12-18**)
451 1.1.0 (**2010-12-18**)
425 ----------------------
452 ----------------------
426
453
427 news
454 news
428 ++++
455 ++++
429
456
430 - rewrite of internals for vcs >=0.1.10
457 - rewrite of internals for vcs >=0.1.10
431 - uses mercurial 1.7 with dotencode disabled for maintaining compatibility
458 - uses mercurial 1.7 with dotencode disabled for maintaining compatibility
432 with older clients
459 with older clients
433 - anonymous access, authentication via ldap
460 - anonymous access, authentication via ldap
434 - performance upgrade for cached repos list - each repository has its own
461 - performance upgrade for cached repos list - each repository has its own
435 cache that's invalidated when needed.
462 cache that's invalidated when needed.
436 - performance upgrades on repositories with large amount of commits (20K+)
463 - performance upgrades on repositories with large amount of commits (20K+)
437 - main page quick filter for filtering repositories
464 - main page quick filter for filtering repositories
438 - user dashboards with ability to follow chosen repositories actions
465 - user dashboards with ability to follow chosen repositories actions
439 - sends email to admin on new user registration
466 - sends email to admin on new user registration
440 - added cache/statistics reset options into repository settings
467 - added cache/statistics reset options into repository settings
441 - more detailed action logger (based on hooks) with pushed changesets lists
468 - more detailed action logger (based on hooks) with pushed changesets lists
442 and options to disable those hooks from admin panel
469 and options to disable those hooks from admin panel
443 - introduced new enhanced changelog for merges that shows more accurate results
470 - introduced new enhanced changelog for merges that shows more accurate results
444 - new improved and faster code stats (based on pygments lexers mapping tables,
471 - new improved and faster code stats (based on pygments lexers mapping tables,
445 showing up to 10 trending sources for each repository. Additionally stats
472 showing up to 10 trending sources for each repository. Additionally stats
446 can be disabled in repository settings.
473 can be disabled in repository settings.
447 - gui optimizations, fixed application width to 1024px
474 - gui optimizations, fixed application width to 1024px
448 - added cut off (for large files/changesets) limit into config files
475 - added cut off (for large files/changesets) limit into config files
449 - whoosh, celeryd, upgrade moved to paster command
476 - whoosh, celeryd, upgrade moved to paster command
450 - other than sqlite database backends can be used
477 - other than sqlite database backends can be used
451
478
452 fixes
479 fixes
453 +++++
480 +++++
454
481
455 - fixes #61 forked repo was showing only after cache expired
482 - fixes #61 forked repo was showing only after cache expired
456 - fixes #76 no confirmation on user deletes
483 - fixes #76 no confirmation on user deletes
457 - fixes #66 Name field misspelled
484 - fixes #66 Name field misspelled
458 - fixes #72 block user removal when he owns repositories
485 - fixes #72 block user removal when he owns repositories
459 - fixes #69 added password confirmation fields
486 - fixes #69 added password confirmation fields
460 - fixes #87 RhodeCode crashes occasionally on updating repository owner
487 - fixes #87 RhodeCode crashes occasionally on updating repository owner
461 - fixes #82 broken annotations on files with more than 1 blank line at the end
488 - fixes #82 broken annotations on files with more than 1 blank line at the end
462 - a lot of fixes and tweaks for file browser
489 - a lot of fixes and tweaks for file browser
463 - fixed detached session issues
490 - fixed detached session issues
464 - fixed when user had no repos he would see all repos listed in my account
491 - fixed when user had no repos he would see all repos listed in my account
465 - fixed ui() instance bug when global hgrc settings was loaded for server
492 - fixed ui() instance bug when global hgrc settings was loaded for server
466 instance and all hgrc options were merged with our db ui() object
493 instance and all hgrc options were merged with our db ui() object
467 - numerous small bugfixes
494 - numerous small bugfixes
468
495
469 (special thanks for TkSoh for detailed feedback)
496 (special thanks for TkSoh for detailed feedback)
470
497
471
498
472 1.0.2 (**2010-11-12**)
499 1.0.2 (**2010-11-12**)
473 ----------------------
500 ----------------------
474
501
475 news
502 news
476 ++++
503 ++++
477
504
478 - tested under python2.7
505 - tested under python2.7
479 - bumped sqlalchemy and celery versions
506 - bumped sqlalchemy and celery versions
480
507
481 fixes
508 fixes
482 +++++
509 +++++
483
510
484 - fixed #59 missing graph.js
511 - fixed #59 missing graph.js
485 - fixed repo_size crash when repository had broken symlinks
512 - fixed repo_size crash when repository had broken symlinks
486 - fixed python2.5 crashes.
513 - fixed python2.5 crashes.
487
514
488
515
489 1.0.1 (**2010-11-10**)
516 1.0.1 (**2010-11-10**)
490 ----------------------
517 ----------------------
491
518
492 news
519 news
493 ++++
520 ++++
494
521
495 - small css updated
522 - small css updated
496
523
497 fixes
524 fixes
498 +++++
525 +++++
499
526
500 - fixed #53 python2.5 incompatible enumerate calls
527 - fixed #53 python2.5 incompatible enumerate calls
501 - fixed #52 disable mercurial extension for web
528 - fixed #52 disable mercurial extension for web
502 - fixed #51 deleting repositories don't delete it's dependent objects
529 - fixed #51 deleting repositories don't delete it's dependent objects
503
530
504
531
505 1.0.0 (**2010-11-02**)
532 1.0.0 (**2010-11-02**)
506 ----------------------
533 ----------------------
507
534
508 - security bugfix simplehg wasn't checking for permissions on commands
535 - security bugfix simplehg wasn't checking for permissions on commands
509 other than pull or push.
536 other than pull or push.
510 - fixed doubled messages after push or pull in admin journal
537 - fixed doubled messages after push or pull in admin journal
511 - templating and css corrections, fixed repo switcher on chrome, updated titles
538 - templating and css corrections, fixed repo switcher on chrome, updated titles
512 - admin menu accessible from options menu on repository view
539 - admin menu accessible from options menu on repository view
513 - permissions cached queries
540 - permissions cached queries
514
541
515 1.0.0rc4 (**2010-10-12**)
542 1.0.0rc4 (**2010-10-12**)
516 --------------------------
543 --------------------------
517
544
518 - fixed python2.5 missing simplejson imports (thanks to Jens BΓ€ckman)
545 - fixed python2.5 missing simplejson imports (thanks to Jens BΓ€ckman)
519 - removed cache_manager settings from sqlalchemy meta
546 - removed cache_manager settings from sqlalchemy meta
520 - added sqlalchemy cache settings to ini files
547 - added sqlalchemy cache settings to ini files
521 - validated password length and added second try of failure on paster setup-app
548 - validated password length and added second try of failure on paster setup-app
522 - fixed setup database destroy prompt even when there was no db
549 - fixed setup database destroy prompt even when there was no db
523
550
524
551
525 1.0.0rc3 (**2010-10-11**)
552 1.0.0rc3 (**2010-10-11**)
526 -------------------------
553 -------------------------
527
554
528 - fixed i18n during installation.
555 - fixed i18n during installation.
529
556
530 1.0.0rc2 (**2010-10-11**)
557 1.0.0rc2 (**2010-10-11**)
531 -------------------------
558 -------------------------
532
559
533 - Disabled dirsize in file browser, it's causing nasty bug when dir renames
560 - Disabled dirsize in file browser, it's causing nasty bug when dir renames
534 occure. After vcs is fixed it'll be put back again.
561 occure. After vcs is fixed it'll be put back again.
535 - templating/css rewrites, optimized css. No newline at end of file
562 - templating/css rewrites, optimized css.
@@ -1,33 +1,37 b''
1 .. _contributing:
1 .. _contributing:
2
2
3 =========================
3 Contributing to RhodeCode
4 Contributing to RhodeCode
4 =========================
5 =========================
5
6
6 If you would like to contribute to RhodeCode, please contact me, any help is
7 If you would like to contribute to RhodeCode, please contact me, any help is
7 greatly appreciated!
8 greatly appreciated!
8
9
9 Could I request that you make your source contributions by first forking the
10 Could I request that you make your source contributions by first forking the
10 RhodeCode repository on bitbucket_
11 RhodeCode repository on bitbucket_
11 https://bitbucket.org/marcinkuzminski/rhodecode and then make your changes to
12 https://bitbucket.org/marcinkuzminski/rhodecode and then make your changes to
12 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
13 fix might be already fixed there and i try to merge all fixes from beta into
14 fix might be already fixed there and i try to merge all fixes from beta into
14 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,
15 please send me a pull request.
16 please send me a pull request.
16
17
17 To run RhodeCode in a development version you always need to install the tip
18 To run RhodeCode in a development version you always need to install the latest
18 version of RhodeCode and the VCS library.
19 required libs from `requires.txt` file.
19
20
20 after downloading RhodeCode make sure you run::
21 after downloading/pulling RhodeCode make sure you run::
21
22
22 python setup.py develop
23 python setup.py develop
23
24
24 command to install all required packages, and prepare development enviroment
25 command to install/verify all required packages, and prepare development
26 enviroment.
25
27
26
28
29 After finishing your changes make sure all tests passes ok. You can run
30 the testsuite running nosetest from the project root.
27
31
28 | Thank you for any contributions!
32 | Thank you for any contributions!
29 | Marcin
33 | Marcin
30
34
31
35
32
36
33 .. _bitbucket: http://bitbucket.org/
37 .. _bitbucket: http://bitbucket.org/
@@ -1,123 +1,124 b''
1 .. _installation:
1 .. _installation:
2
2
3 ============
3 Installation
4 Installation
4 ============
5 ============
5
6
6 ``RhodeCode`` is written entirely in Python. Before posting any issues make
7 ``RhodeCode`` is written entirely in Python. Before posting any issues make
7 sure, your not missing any system libraries and using right version of
8 sure, your not missing any system libraries and using right version of
8 libraries required by RhodeCode. There's also restriction in terms of mercurial
9 libraries required by RhodeCode. There's also restriction in terms of mercurial
9 clients. Minimal version of hg client known working fine with RhodeCode is
10 clients. Minimal version of hg client known working fine with RhodeCode is
10 **1.6**. If you're using older client, please upgrade.
11 **1.6**. If you're using older client, please upgrade.
11
12
12
13
13 Installing RhodeCode from Cheese Shop
14 Installing RhodeCode from Cheese Shop
14 -------------------------------------
15 -------------------------------------
15
16
16 Rhodecode requires python version 2.5 or higher.
17 Rhodecode requires python version 2.5 or higher.
17
18
18 The easiest way to install ``rhodecode`` is to run::
19 The easiest way to install ``rhodecode`` is to run::
19
20
20 easy_install rhodecode
21 easy_install rhodecode
21
22
22 Or::
23 Or::
23
24
24 pip install rhodecode
25 pip install rhodecode
25
26
26 If you prefer to install RhodeCode manually simply grab latest release from
27 If you prefer to install RhodeCode manually simply grab latest release from
27 http://pypi.python.org/pypi/rhodecode, decompress the archive and run::
28 http://pypi.python.org/pypi/rhodecode, decompress the archive and run::
28
29
29 python setup.py install
30 python setup.py install
30
31
31
32
32 Step by step installation example
33 Step by step installation example
33 ---------------------------------
34 ---------------------------------
34
35
35
36
36 For installing RhodeCode i highly recommend using separate virtualenv_. This
37 For installing RhodeCode i highly recommend using separate virtualenv_. This
37 way many required by RhodeCode libraries will remain sandboxed from your main
38 way many required by RhodeCode libraries will remain sandboxed from your main
38 python and making things less problematic when doing system python updates.
39 python and making things less problematic when doing system python updates.
39
40
40 - Assuming you have installed virtualenv_ create a new virtual environment
41 - Assuming you have installed virtualenv_ create a new virtual environment
41 using virtualenv command::
42 using virtualenv command::
42
43
43 virtualenv --no-site-packages /var/www/rhodecode-venv
44 virtualenv --no-site-packages /var/www/rhodecode-venv
44
45
45
46
46 .. note:: Using ``--no-site-packages`` when generating your
47 .. note:: Using ``--no-site-packages`` when generating your
47 virtualenv is **very important**. This flag provides the necessary
48 virtualenv is **very important**. This flag provides the necessary
48 isolation for running the set of packages required by
49 isolation for running the set of packages required by
49 RhodeCode. If you do not specify ``--no-site-packages``,
50 RhodeCode. If you do not specify ``--no-site-packages``,
50 it's possible that RhodeCode will not install properly into
51 it's possible that RhodeCode will not install properly into
51 the virtualenv, or, even if it does, may not run properly,
52 the virtualenv, or, even if it does, may not run properly,
52 depending on the packages you've already got installed into your
53 depending on the packages you've already got installed into your
53 Python's "main" site-packages dir.
54 Python's "main" site-packages dir.
54
55
55
56
56 - this will install new virtualenv_ into `/var/www/rhodecode-venv`.
57 - this will install new virtualenv_ into `/var/www/rhodecode-venv`.
57 - Activate the virtualenv_ by running::
58 - Activate the virtualenv_ by running::
58
59
59 source /var/www/rhodecode-venv/bin/activate
60 source /var/www/rhodecode-venv/bin/activate
60
61
61 .. note:: If you're using UNIX, *do not* use ``sudo`` to run the
62 .. note:: If you're using UNIX, *do not* use ``sudo`` to run the
62 ``virtualenv`` script. It's perfectly acceptable (and desirable)
63 ``virtualenv`` script. It's perfectly acceptable (and desirable)
63 to create a virtualenv as a normal user.
64 to create a virtualenv as a normal user.
64
65
65 - Make a folder for rhodecode data files, and configuration somewhere on the
66 - Make a folder for rhodecode data files, and configuration somewhere on the
66 filesystem. For example::
67 filesystem. For example::
67
68
68 mkdir /var/www/rhodecode
69 mkdir /var/www/rhodecode
69
70
70
71
71 - Go into the created directory run this command to install rhodecode::
72 - Go into the created directory run this command to install rhodecode::
72
73
73 easy_install rhodecode
74 easy_install rhodecode
74
75
75 or::
76 or::
76
77
77 pip install rhodecode
78 pip install rhodecode
78
79
79 - This will install rhodecode together with pylons and all other required
80 - This will install rhodecode together with pylons and all other required
80 python libraries into activated virtualenv
81 python libraries into activated virtualenv
81
82
82 Requirements for Celery (optional)
83 Requirements for Celery (optional)
83 ----------------------------------
84 ----------------------------------
84
85
85 In order to gain maximum performance
86 In order to gain maximum performance
86 there are some third-party you must install. When RhodeCode is used
87 there are some third-party you must install. When RhodeCode is used
87 together with celery you have to install some kind of message broker,
88 together with celery you have to install some kind of message broker,
88 recommended one is rabbitmq_ to make the async tasks work.
89 recommended one is rabbitmq_ to make the async tasks work.
89
90
90 Of course RhodeCode works in sync mode also and then you do not have to install
91 Of course RhodeCode works in sync mode also and then you do not have to install
91 any third party applications. However, using Celery_ will give you a large
92 any third party applications. However, using Celery_ will give you a large
92 speed improvement when using many big repositories. If you plan to use
93 speed improvement when using many big repositories. If you plan to use
93 RhodeCode for say 7 to 10 repositories, RhodeCode will perform perfectly well
94 RhodeCode for say 7 to 10 repositories, RhodeCode will perform perfectly well
94 without celery running.
95 without celery running.
95
96
96 If you make the decision to run RhodeCode with celery make sure you run
97 If you make the decision to run RhodeCode with celery make sure you run
97 celeryd using paster and message broker together with the application.
98 celeryd using paster and message broker together with the application.
98
99
99 .. note::
100 .. note::
100 Installing message broker and using celery is optional, RhodeCode will
101 Installing message broker and using celery is optional, RhodeCode will
101 work perfectly fine without them.
102 work perfectly fine without them.
102
103
103
104
104 **Message Broker**
105 **Message Broker**
105
106
106 - preferred is `RabbitMq <http://www.rabbitmq.com/>`_
107 - preferred is `RabbitMq <http://www.rabbitmq.com/>`_
107 - A possible alternative is `Redis <http://code.google.com/p/redis/>`_
108 - A possible alternative is `Redis <http://code.google.com/p/redis/>`_
108
109
109 For installation instructions you can visit:
110 For installation instructions you can visit:
110 http://ask.github.com/celery/getting-started/index.html.
111 http://ask.github.com/celery/getting-started/index.html.
111 This is a very nice tutorial on how to start using celery_ with rabbitmq_
112 This is a very nice tutorial on how to start using celery_ with rabbitmq_
112
113
113
114
114 You can now proceed to :ref:`setup`
115 You can now proceed to :ref:`setup`
115 -----------------------------------
116 -----------------------------------
116
117
117
118
118
119
119 .. _virtualenv: http://pypi.python.org/pypi/virtualenv
120 .. _virtualenv: http://pypi.python.org/pypi/virtualenv
120 .. _python: http://www.python.org/
121 .. _python: http://www.python.org/
121 .. _mercurial: http://mercurial.selenic.com/
122 .. _mercurial: http://mercurial.selenic.com/
122 .. _celery: http://celeryproject.org/
123 .. _celery: http://celeryproject.org/
123 .. _rabbitmq: http://www.rabbitmq.com/ No newline at end of file
124 .. _rabbitmq: http://www.rabbitmq.com/
@@ -1,726 +1,727 b''
1 .. _setup:
1 .. _setup:
2
2
3 =====
3 Setup
4 Setup
4 =====
5 =====
5
6
6
7
7 Setting up RhodeCode
8 Setting up RhodeCode
8 --------------------
9 --------------------
9
10
10 First, you will need to create a RhodeCode configuration file. Run the
11 First, you will need to create a RhodeCode configuration file. Run the
11 following command to do this::
12 following command to do this::
12
13
13 paster make-config RhodeCode production.ini
14 paster make-config RhodeCode production.ini
14
15
15 - This will create the file `production.ini` in the current directory. This
16 - This will create the file `production.ini` in the current directory. This
16 configuration file contains the various settings for RhodeCode, e.g proxy
17 configuration file contains the various settings for RhodeCode, e.g proxy
17 port, email settings, usage of static files, cache, celery settings and
18 port, email settings, usage of static files, cache, celery settings and
18 logging.
19 logging.
19
20
20
21
21 Next, you need to create the databases used by RhodeCode. I recommend that you
22 Next, you need to create the databases used by RhodeCode. I recommend that you
22 use sqlite (default) or postgresql. If you choose a database other than the
23 use sqlite (default) or postgresql. If you choose a database other than the
23 default ensure you properly adjust the db url in your production.ini
24 default ensure you properly adjust the db url in your production.ini
24 configuration file to use this other database. Create the databases by running
25 configuration file to use this other database. Create the databases by running
25 the following command::
26 the following command::
26
27
27 paster setup-app production.ini
28 paster setup-app production.ini
28
29
29 This will prompt you for a "root" path. This "root" path is the location where
30 This will prompt you for a "root" path. This "root" path is the location where
30 RhodeCode will store all of its repositories on the current machine. After
31 RhodeCode will store all of its repositories on the current machine. After
31 entering this "root" path ``setup-app`` will also prompt you for a username
32 entering this "root" path ``setup-app`` will also prompt you for a username
32 and password for the initial admin account which ``setup-app`` sets up for you.
33 and password for the initial admin account which ``setup-app`` sets up for you.
33
34
34 - The ``setup-app`` command will create all of the needed tables and an admin
35 - The ``setup-app`` command will create all of the needed tables and an admin
35 account. When choosing a root path you can either use a new empty location,
36 account. When choosing a root path you can either use a new empty location,
36 or a location which already contains existing repositories. If you choose a
37 or a location which already contains existing repositories. If you choose a
37 location which contains existing repositories RhodeCode will simply add all
38 location which contains existing repositories RhodeCode will simply add all
38 of the repositories at the chosen location to it's database. (Note: make
39 of the repositories at the chosen location to it's database. (Note: make
39 sure you specify the correct path to the root).
40 sure you specify the correct path to the root).
40 - Note: the given path for mercurial_ repositories **must** be write accessible
41 - Note: the given path for mercurial_ repositories **must** be write accessible
41 for the application. It's very important since the RhodeCode web interface
42 for the application. It's very important since the RhodeCode web interface
42 will work without write access, but when trying to do a push it will
43 will work without write access, but when trying to do a push it will
43 eventually fail with permission denied errors unless it has write access.
44 eventually fail with permission denied errors unless it has write access.
44
45
45 You are now ready to use RhodeCode, to run it simply execute::
46 You are now ready to use RhodeCode, to run it simply execute::
46
47
47 paster serve production.ini
48 paster serve production.ini
48
49
49 - This command runs the RhodeCode server. The web app should be available at the
50 - This command runs the RhodeCode server. The web app should be available at the
50 127.0.0.1:5000. This ip and port is configurable via the production.ini
51 127.0.0.1:5000. This ip and port is configurable via the production.ini
51 file created in previous step
52 file created in previous step
52 - Use the admin account you created above when running ``setup-app`` to login
53 - Use the admin account you created above when running ``setup-app`` to login
53 to the web app.
54 to the web app.
54 - The default permissions on each repository is read, and the owner is admin.
55 - The default permissions on each repository is read, and the owner is admin.
55 Remember to update these if needed.
56 Remember to update these if needed.
56 - In the admin panel you can toggle ldap, anonymous, permissions settings. As
57 - In the admin panel you can toggle ldap, anonymous, permissions settings. As
57 well as edit more advanced options on users and repositories
58 well as edit more advanced options on users and repositories
58
59
59 Try copying your own mercurial repository into the "root" directory you are
60 Try copying your own mercurial repository into the "root" directory you are
60 using, then from within the RhodeCode web application choose Admin >
61 using, then from within the RhodeCode web application choose Admin >
61 repositories. Then choose Add New Repository. Add the repository you copied
62 repositories. Then choose Add New Repository. Add the repository you copied
62 into the root. Test that you can browse your repository from within RhodeCode
63 into the root. Test that you can browse your repository from within RhodeCode
63 and then try cloning your repository from RhodeCode with::
64 and then try cloning your repository from RhodeCode with::
64
65
65 hg clone http://127.0.0.1:5000/<repository name>
66 hg clone http://127.0.0.1:5000/<repository name>
66
67
67 where *repository name* is replaced by the name of your repository.
68 where *repository name* is replaced by the name of your repository.
68
69
69 Using RhodeCode with SSH
70 Using RhodeCode with SSH
70 ------------------------
71 ------------------------
71
72
72 RhodeCode currently only hosts repositories using http and https. (The addition
73 RhodeCode currently only hosts repositories using http and https. (The addition
73 of ssh hosting is a planned future feature.) However you can easily use ssh in
74 of ssh hosting is a planned future feature.) However you can easily use ssh in
74 parallel with RhodeCode. (Repository access via ssh is a standard "out of
75 parallel with RhodeCode. (Repository access via ssh is a standard "out of
75 the box" feature of mercurial_ and you can use this to access any of the
76 the box" feature of mercurial_ and you can use this to access any of the
76 repositories that RhodeCode is hosting. See PublishingRepositories_)
77 repositories that RhodeCode is hosting. See PublishingRepositories_)
77
78
78 RhodeCode repository structures are kept in directories with the same name
79 RhodeCode repository structures are kept in directories with the same name
79 as the project. When using repository groups, each group is a subdirectory.
80 as the project. When using repository groups, each group is a subdirectory.
80 This allows you to easily use ssh for accessing repositories.
81 This allows you to easily use ssh for accessing repositories.
81
82
82 In order to use ssh you need to make sure that your web-server and the users
83 In order to use ssh you need to make sure that your web-server and the users
83 login accounts have the correct permissions set on the appropriate directories.
84 login accounts have the correct permissions set on the appropriate directories.
84 (Note that these permissions are independent of any permissions you have set up
85 (Note that these permissions are independent of any permissions you have set up
85 using the RhodeCode web interface.)
86 using the RhodeCode web interface.)
86
87
87 If your main directory (the same as set in RhodeCode settings) is for example
88 If your main directory (the same as set in RhodeCode settings) is for example
88 set to **/home/hg** and the repository you are using is named `rhodecode`, then
89 set to **/home/hg** and the repository you are using is named `rhodecode`, then
89 to clone via ssh you should run::
90 to clone via ssh you should run::
90
91
91 hg clone ssh://user@server.com/home/hg/rhodecode
92 hg clone ssh://user@server.com/home/hg/rhodecode
92
93
93 Using other external tools such as mercurial-server_ or using ssh key based
94 Using other external tools such as mercurial-server_ or using ssh key based
94 authentication is fully supported.
95 authentication is fully supported.
95
96
96 Note: In an advanced setup, in order for your ssh access to use the same
97 Note: In an advanced setup, in order for your ssh access to use the same
97 permissions as set up via the RhodeCode web interface, you can create an
98 permissions as set up via the RhodeCode web interface, you can create an
98 authentication hook to connect to the rhodecode db and runs check functions for
99 authentication hook to connect to the rhodecode db and runs check functions for
99 permissions against that.
100 permissions against that.
100
101
101 Setting up Whoosh full text search
102 Setting up Whoosh full text search
102 ----------------------------------
103 ----------------------------------
103
104
104 Starting from version 1.1 the whoosh index can be build by using the paster
105 Starting from version 1.1 the whoosh index can be build by using the paster
105 command ``make-index``. To use ``make-index`` you must specify the configuration
106 command ``make-index``. To use ``make-index`` you must specify the configuration
106 file that stores the location of the index. You may specify the location of the
107 file that stores the location of the index. You may specify the location of the
107 repositories (`--repo-location`). If not specified, this value is retrieved
108 repositories (`--repo-location`). If not specified, this value is retrieved
108 from the RhodeCode database. This was required prior to 1.2. Starting from
109 from the RhodeCode database. This was required prior to 1.2. Starting from
109 version 1.2 it is also possible to specify a comma separated list of
110 version 1.2 it is also possible to specify a comma separated list of
110 repositories (`--index-only`) to build index only on chooses repositories
111 repositories (`--index-only`) to build index only on chooses repositories
111 skipping any other found in repos location
112 skipping any other found in repos location
112
113
113 You may optionally pass the option `-f` to enable a full index rebuild. Without
114 You may optionally pass the option `-f` to enable a full index rebuild. Without
114 the `-f` option, indexing will run always in "incremental" mode.
115 the `-f` option, indexing will run always in "incremental" mode.
115
116
116 For an incremental index build use::
117 For an incremental index build use::
117
118
118 paster make-index production.ini
119 paster make-index production.ini
119
120
120 For a full index rebuild use::
121 For a full index rebuild use::
121
122
122 paster make-index production.ini -f
123 paster make-index production.ini -f
123
124
124
125
125 building index just for chosen repositories is possible with such command::
126 building index just for chosen repositories is possible with such command::
126
127
127 paster make-index production.ini --index-only=vcs,rhodecode
128 paster make-index production.ini --index-only=vcs,rhodecode
128
129
129
130
130 In order to do periodical index builds and keep your index always up to date.
131 In order to do periodical index builds and keep your index always up to date.
131 It's recommended to do a crontab entry for incremental indexing.
132 It's recommended to do a crontab entry for incremental indexing.
132 An example entry might look like this::
133 An example entry might look like this::
133
134
134 /path/to/python/bin/paster make-index /path/to/rhodecode/production.ini
135 /path/to/python/bin/paster make-index /path/to/rhodecode/production.ini
135
136
136 When using incremental mode (the default) whoosh will check the last
137 When using incremental mode (the default) whoosh will check the last
137 modification date of each file and add it to be reindexed if a newer file is
138 modification date of each file and add it to be reindexed if a newer file is
138 available. The indexing daemon checks for any removed files and removes them
139 available. The indexing daemon checks for any removed files and removes them
139 from index.
140 from index.
140
141
141 If you want to rebuild index from scratch, you can use the `-f` flag as above,
142 If you want to rebuild index from scratch, you can use the `-f` flag as above,
142 or in the admin panel you can check `build from scratch` flag.
143 or in the admin panel you can check `build from scratch` flag.
143
144
144
145
145 Setting up LDAP support
146 Setting up LDAP support
146 -----------------------
147 -----------------------
147
148
148 RhodeCode starting from version 1.1 supports ldap authentication. In order
149 RhodeCode starting from version 1.1 supports ldap authentication. In order
149 to use LDAP, you have to install the python-ldap_ package. This package is
150 to use LDAP, you have to install the python-ldap_ package. This package is
150 available via pypi, so you can install it by running
151 available via pypi, so you can install it by running
151
152
152 using easy_install::
153 using easy_install::
153
154
154 easy_install python-ldap
155 easy_install python-ldap
155
156
156 using pip::
157 using pip::
157
158
158 pip install python-ldap
159 pip install python-ldap
159
160
160 .. note::
161 .. note::
161 python-ldap requires some certain libs on your system, so before installing
162 python-ldap requires some certain libs on your system, so before installing
162 it check that you have at least `openldap`, and `sasl` libraries.
163 it check that you have at least `openldap`, and `sasl` libraries.
163
164
164 LDAP settings are located in admin->ldap section,
165 LDAP settings are located in admin->ldap section,
165
166
166 Here's a typical ldap setup::
167 Here's a typical ldap setup::
167
168
168 Connection settings
169 Connection settings
169 Enable LDAP = checked
170 Enable LDAP = checked
170 Host = host.example.org
171 Host = host.example.org
171 Port = 389
172 Port = 389
172 Account = <account>
173 Account = <account>
173 Password = <password>
174 Password = <password>
174 Connection Security = LDAPS connection
175 Connection Security = LDAPS connection
175 Certificate Checks = DEMAND
176 Certificate Checks = DEMAND
176
177
177 Search settings
178 Search settings
178 Base DN = CN=users,DC=host,DC=example,DC=org
179 Base DN = CN=users,DC=host,DC=example,DC=org
179 LDAP Filter = (&(objectClass=user)(!(objectClass=computer)))
180 LDAP Filter = (&(objectClass=user)(!(objectClass=computer)))
180 LDAP Search Scope = SUBTREE
181 LDAP Search Scope = SUBTREE
181
182
182 Attribute mappings
183 Attribute mappings
183 Login Attribute = uid
184 Login Attribute = uid
184 First Name Attribute = firstName
185 First Name Attribute = firstName
185 Last Name Attribute = lastName
186 Last Name Attribute = lastName
186 E-mail Attribute = mail
187 E-mail Attribute = mail
187
188
188 .. _enable_ldap:
189 .. _enable_ldap:
189
190
190 Enable LDAP : required
191 Enable LDAP : required
191 Whether to use LDAP for authenticating users.
192 Whether to use LDAP for authenticating users.
192
193
193 .. _ldap_host:
194 .. _ldap_host:
194
195
195 Host : required
196 Host : required
196 LDAP server hostname or IP address.
197 LDAP server hostname or IP address.
197
198
198 .. _Port:
199 .. _Port:
199
200
200 Port : required
201 Port : required
201 389 for un-encrypted LDAP, 636 for SSL-encrypted LDAP.
202 389 for un-encrypted LDAP, 636 for SSL-encrypted LDAP.
202
203
203 .. _ldap_account:
204 .. _ldap_account:
204
205
205 Account : optional
206 Account : optional
206 Only required if the LDAP server does not allow anonymous browsing of
207 Only required if the LDAP server does not allow anonymous browsing of
207 records. This should be a special account for record browsing. This
208 records. This should be a special account for record browsing. This
208 will require `LDAP Password`_ below.
209 will require `LDAP Password`_ below.
209
210
210 .. _LDAP Password:
211 .. _LDAP Password:
211
212
212 Password : optional
213 Password : optional
213 Only required if the LDAP server does not allow anonymous browsing of
214 Only required if the LDAP server does not allow anonymous browsing of
214 records.
215 records.
215
216
216 .. _Enable LDAPS:
217 .. _Enable LDAPS:
217
218
218 Connection Security : required
219 Connection Security : required
219 Defines the connection to LDAP server
220 Defines the connection to LDAP server
220
221
221 No encryption
222 No encryption
222 Plain non encrypted connection
223 Plain non encrypted connection
223
224
224 LDAPS connection
225 LDAPS connection
225 Enable ldaps connection. It will likely require `Port`_ to be set to
226 Enable ldaps connection. It will likely require `Port`_ to be set to
226 a different value (standard LDAPS port is 636). When LDAPS is enabled
227 a different value (standard LDAPS port is 636). When LDAPS is enabled
227 then `Certificate Checks`_ is required.
228 then `Certificate Checks`_ is required.
228
229
229 START_TLS on LDAP connection
230 START_TLS on LDAP connection
230 START TLS connection
231 START TLS connection
231
232
232 .. _Certificate Checks:
233 .. _Certificate Checks:
233
234
234 Certificate Checks : optional
235 Certificate Checks : optional
235 How SSL certificates verification is handled - this is only useful when
236 How SSL certificates verification is handled - this is only useful when
236 `Enable LDAPS`_ is enabled. Only DEMAND or HARD offer full SSL security
237 `Enable LDAPS`_ is enabled. Only DEMAND or HARD offer full SSL security
237 while the other options are susceptible to man-in-the-middle attacks. SSL
238 while the other options are susceptible to man-in-the-middle attacks. SSL
238 certificates can be installed to /etc/openldap/cacerts so that the
239 certificates can be installed to /etc/openldap/cacerts so that the
239 DEMAND or HARD options can be used with self-signed certificates or
240 DEMAND or HARD options can be used with self-signed certificates or
240 certificates that do not have traceable certificates of authority.
241 certificates that do not have traceable certificates of authority.
241
242
242 NEVER
243 NEVER
243 A serve certificate will never be requested or checked.
244 A serve certificate will never be requested or checked.
244
245
245 ALLOW
246 ALLOW
246 A server certificate is requested. Failure to provide a
247 A server certificate is requested. Failure to provide a
247 certificate or providing a bad certificate will not terminate the
248 certificate or providing a bad certificate will not terminate the
248 session.
249 session.
249
250
250 TRY
251 TRY
251 A server certificate is requested. Failure to provide a
252 A server certificate is requested. Failure to provide a
252 certificate does not halt the session; providing a bad certificate
253 certificate does not halt the session; providing a bad certificate
253 halts the session.
254 halts the session.
254
255
255 DEMAND
256 DEMAND
256 A server certificate is requested and must be provided and
257 A server certificate is requested and must be provided and
257 authenticated for the session to proceed.
258 authenticated for the session to proceed.
258
259
259 HARD
260 HARD
260 The same as DEMAND.
261 The same as DEMAND.
261
262
262 .. _Base DN:
263 .. _Base DN:
263
264
264 Base DN : required
265 Base DN : required
265 The Distinguished Name (DN) where searches for users will be performed.
266 The Distinguished Name (DN) where searches for users will be performed.
266 Searches can be controlled by `LDAP Filter`_ and `LDAP Search Scope`_.
267 Searches can be controlled by `LDAP Filter`_ and `LDAP Search Scope`_.
267
268
268 .. _LDAP Filter:
269 .. _LDAP Filter:
269
270
270 LDAP Filter : optional
271 LDAP Filter : optional
271 A LDAP filter defined by RFC 2254. This is more useful when `LDAP
272 A LDAP filter defined by RFC 2254. This is more useful when `LDAP
272 Search Scope`_ is set to SUBTREE. The filter is useful for limiting
273 Search Scope`_ is set to SUBTREE. The filter is useful for limiting
273 which LDAP objects are identified as representing Users for
274 which LDAP objects are identified as representing Users for
274 authentication. The filter is augmented by `Login Attribute`_ below.
275 authentication. The filter is augmented by `Login Attribute`_ below.
275 This can commonly be left blank.
276 This can commonly be left blank.
276
277
277 .. _LDAP Search Scope:
278 .. _LDAP Search Scope:
278
279
279 LDAP Search Scope : required
280 LDAP Search Scope : required
280 This limits how far LDAP will search for a matching object.
281 This limits how far LDAP will search for a matching object.
281
282
282 BASE
283 BASE
283 Only allows searching of `Base DN`_ and is usually not what you
284 Only allows searching of `Base DN`_ and is usually not what you
284 want.
285 want.
285
286
286 ONELEVEL
287 ONELEVEL
287 Searches all entries under `Base DN`_, but not Base DN itself.
288 Searches all entries under `Base DN`_, but not Base DN itself.
288
289
289 SUBTREE
290 SUBTREE
290 Searches all entries below `Base DN`_, but not Base DN itself.
291 Searches all entries below `Base DN`_, but not Base DN itself.
291 When using SUBTREE `LDAP Filter`_ is useful to limit object
292 When using SUBTREE `LDAP Filter`_ is useful to limit object
292 location.
293 location.
293
294
294 .. _Login Attribute:
295 .. _Login Attribute:
295
296
296 Login Attribute : required
297 Login Attribute : required
297 The LDAP record attribute that will be matched as the USERNAME or
298 The LDAP record attribute that will be matched as the USERNAME or
298 ACCOUNT used to connect to RhodeCode. This will be added to `LDAP
299 ACCOUNT used to connect to RhodeCode. This will be added to `LDAP
299 Filter`_ for locating the User object. If `LDAP Filter`_ is specified as
300 Filter`_ for locating the User object. If `LDAP Filter`_ is specified as
300 "LDAPFILTER", `Login Attribute`_ is specified as "uid" and the user has
301 "LDAPFILTER", `Login Attribute`_ is specified as "uid" and the user has
301 connected as "jsmith" then the `LDAP Filter`_ will be augmented as below
302 connected as "jsmith" then the `LDAP Filter`_ will be augmented as below
302 ::
303 ::
303
304
304 (&(LDAPFILTER)(uid=jsmith))
305 (&(LDAPFILTER)(uid=jsmith))
305
306
306 .. _ldap_attr_firstname:
307 .. _ldap_attr_firstname:
307
308
308 First Name Attribute : required
309 First Name Attribute : required
309 The LDAP record attribute which represents the user's first name.
310 The LDAP record attribute which represents the user's first name.
310
311
311 .. _ldap_attr_lastname:
312 .. _ldap_attr_lastname:
312
313
313 Last Name Attribute : required
314 Last Name Attribute : required
314 The LDAP record attribute which represents the user's last name.
315 The LDAP record attribute which represents the user's last name.
315
316
316 .. _ldap_attr_email:
317 .. _ldap_attr_email:
317
318
318 Email Attribute : required
319 Email Attribute : required
319 The LDAP record attribute which represents the user's email address.
320 The LDAP record attribute which represents the user's email address.
320
321
321 If all data are entered correctly, and python-ldap_ is properly installed
322 If all data are entered correctly, and python-ldap_ is properly installed
322 users should be granted access to RhodeCode with ldap accounts. At this
323 users should be granted access to RhodeCode with ldap accounts. At this
323 time user information is copied from LDAP into the RhodeCode user database.
324 time user information is copied from LDAP into the RhodeCode user database.
324 This means that updates of an LDAP user object may not be reflected as a
325 This means that updates of an LDAP user object may not be reflected as a
325 user update in RhodeCode.
326 user update in RhodeCode.
326
327
327 If You have problems with LDAP access and believe You entered correct
328 If You have problems with LDAP access and believe You entered correct
328 information check out the RhodeCode logs, any error messages sent from LDAP
329 information check out the RhodeCode logs, any error messages sent from LDAP
329 will be saved there.
330 will be saved there.
330
331
331 Active Directory
332 Active Directory
332 ''''''''''''''''
333 ''''''''''''''''
333
334
334 RhodeCode can use Microsoft Active Directory for user authentication. This
335 RhodeCode can use Microsoft Active Directory for user authentication. This
335 is done through an LDAP or LDAPS connection to Active Directory. The
336 is done through an LDAP or LDAPS connection to Active Directory. The
336 following LDAP configuration settings are typical for using Active
337 following LDAP configuration settings are typical for using Active
337 Directory ::
338 Directory ::
338
339
339 Base DN = OU=SBSUsers,OU=Users,OU=MyBusiness,DC=v3sys,DC=local
340 Base DN = OU=SBSUsers,OU=Users,OU=MyBusiness,DC=v3sys,DC=local
340 Login Attribute = sAMAccountName
341 Login Attribute = sAMAccountName
341 First Name Attribute = givenName
342 First Name Attribute = givenName
342 Last Name Attribute = sn
343 Last Name Attribute = sn
343 E-mail Attribute = mail
344 E-mail Attribute = mail
344
345
345 All other LDAP settings will likely be site-specific and should be
346 All other LDAP settings will likely be site-specific and should be
346 appropriately configured.
347 appropriately configured.
347
348
348
349
349 Authentication by container or reverse-proxy
350 Authentication by container or reverse-proxy
350 --------------------------------------------
351 --------------------------------------------
351
352
352 Starting with version 1.3, RhodeCode supports delegating the authentication
353 Starting with version 1.3, RhodeCode supports delegating the authentication
353 of users to its WSGI container, or to a reverse-proxy server through which all
354 of users to its WSGI container, or to a reverse-proxy server through which all
354 clients access the application.
355 clients access the application.
355
356
356 When these authentication methods are enabled in RhodeCode, it uses the
357 When these authentication methods are enabled in RhodeCode, it uses the
357 username that the container/proxy (Apache/Nginx/etc) authenticated and doesn't
358 username that the container/proxy (Apache/Nginx/etc) authenticated and doesn't
358 perform the authentication itself. The authorization, however, is still done by
359 perform the authentication itself. The authorization, however, is still done by
359 RhodeCode according to its settings.
360 RhodeCode according to its settings.
360
361
361 When a user logs in for the first time using these authentication methods,
362 When a user logs in for the first time using these authentication methods,
362 a matching user account is created in RhodeCode with default permissions. An
363 a matching user account is created in RhodeCode with default permissions. An
363 administrator can then modify it using RhodeCode's admin interface.
364 administrator can then modify it using RhodeCode's admin interface.
364 It's also possible for an administrator to create accounts and configure their
365 It's also possible for an administrator to create accounts and configure their
365 permissions before the user logs in for the first time.
366 permissions before the user logs in for the first time.
366
367
367 Container-based authentication
368 Container-based authentication
368 ''''''''''''''''''''''''''''''
369 ''''''''''''''''''''''''''''''
369
370
370 In a container-based authentication setup, RhodeCode reads the user name from
371 In a container-based authentication setup, RhodeCode reads the user name from
371 the ``REMOTE_USER`` server variable provided by the WSGI container.
372 the ``REMOTE_USER`` server variable provided by the WSGI container.
372
373
373 After setting up your container (see `Apache's WSGI config`_), you'd need
374 After setting up your container (see `Apache's WSGI config`_), you'd need
374 to configure it to require authentication on the location configured for
375 to configure it to require authentication on the location configured for
375 RhodeCode.
376 RhodeCode.
376
377
377 In order for RhodeCode to start using the provided username, you should set the
378 In order for RhodeCode to start using the provided username, you should set the
378 following in the [app:main] section of your .ini file::
379 following in the [app:main] section of your .ini file::
379
380
380 container_auth_enabled = true
381 container_auth_enabled = true
381
382
382
383
383 Proxy pass-through authentication
384 Proxy pass-through authentication
384 '''''''''''''''''''''''''''''''''
385 '''''''''''''''''''''''''''''''''
385
386
386 In a proxy pass-through authentication setup, RhodeCode reads the user name
387 In a proxy pass-through authentication setup, RhodeCode reads the user name
387 from the ``X-Forwarded-User`` request header, which should be configured to be
388 from the ``X-Forwarded-User`` request header, which should be configured to be
388 sent by the reverse-proxy server.
389 sent by the reverse-proxy server.
389
390
390 After setting up your proxy solution (see `Apache virtual host reverse proxy example`_,
391 After setting up your proxy solution (see `Apache virtual host reverse proxy example`_,
391 `Apache as subdirectory`_ or `Nginx virtual host example`_), you'd need to
392 `Apache as subdirectory`_ or `Nginx virtual host example`_), you'd need to
392 configure the authentication and add the username in a request header named
393 configure the authentication and add the username in a request header named
393 ``X-Forwarded-User``.
394 ``X-Forwarded-User``.
394
395
395 For example, the following config section for Apache sets a subdirectory in a
396 For example, the following config section for Apache sets a subdirectory in a
396 reverse-proxy setup with basic auth::
397 reverse-proxy setup with basic auth::
397
398
398 <Location /<someprefix> >
399 <Location /<someprefix> >
399 ProxyPass http://127.0.0.1:5000/<someprefix>
400 ProxyPass http://127.0.0.1:5000/<someprefix>
400 ProxyPassReverse http://127.0.0.1:5000/<someprefix>
401 ProxyPassReverse http://127.0.0.1:5000/<someprefix>
401 SetEnvIf X-Url-Scheme https HTTPS=1
402 SetEnvIf X-Url-Scheme https HTTPS=1
402
403
403 AuthType Basic
404 AuthType Basic
404 AuthName "RhodeCode authentication"
405 AuthName "RhodeCode authentication"
405 AuthUserFile /home/web/rhodecode/.htpasswd
406 AuthUserFile /home/web/rhodecode/.htpasswd
406 require valid-user
407 require valid-user
407
408
408 RequestHeader unset X-Forwarded-User
409 RequestHeader unset X-Forwarded-User
409
410
410 RewriteEngine On
411 RewriteEngine On
411 RewriteCond %{LA-U:REMOTE_USER} (.+)
412 RewriteCond %{LA-U:REMOTE_USER} (.+)
412 RewriteRule .* - [E=RU:%1]
413 RewriteRule .* - [E=RU:%1]
413 RequestHeader set X-Forwarded-User %{RU}e
414 RequestHeader set X-Forwarded-User %{RU}e
414 </Location>
415 </Location>
415
416
416 In order for RhodeCode to start using the forwarded username, you should set
417 In order for RhodeCode to start using the forwarded username, you should set
417 the following in the [app:main] section of your .ini file::
418 the following in the [app:main] section of your .ini file::
418
419
419 proxypass_auth_enabled = true
420 proxypass_auth_enabled = true
420
421
421 .. note::
422 .. note::
422 If you enable proxy pass-through authentication, make sure your server is
423 If you enable proxy pass-through authentication, make sure your server is
423 only accessible through the proxy. Otherwise, any client would be able to
424 only accessible through the proxy. Otherwise, any client would be able to
424 forge the authentication header and could effectively become authenticated
425 forge the authentication header and could effectively become authenticated
425 using any account of their liking.
426 using any account of their liking.
426
427
427 Integration with Issue trackers
428 Integration with Issue trackers
428 -------------------------------
429 -------------------------------
429
430
430 RhodeCode provides a simple integration with issue trackers. It's possible
431 RhodeCode provides a simple integration with issue trackers. It's possible
431 to define a regular expression that will fetch issue id stored in commit
432 to define a regular expression that will fetch issue id stored in commit
432 messages and replace that with an url to this issue. To enable this simply
433 messages and replace that with an url to this issue. To enable this simply
433 uncomment following variables in the ini file::
434 uncomment following variables in the ini file::
434
435
435 url_pat = (?:^#|\s#)(\w+)
436 url_pat = (?:^#|\s#)(\w+)
436 issue_server_link = https://myissueserver.com/{repo}/issue/{id}
437 issue_server_link = https://myissueserver.com/{repo}/issue/{id}
437 issue_prefix = #
438 issue_prefix = #
438
439
439 `url_pat` is the regular expression that will fetch issues from commit messages.
440 `url_pat` is the regular expression that will fetch issues from commit messages.
440 Default regex will match issues in format of #<number> eg. #300.
441 Default regex will match issues in format of #<number> eg. #300.
441
442
442 Matched issues will be replace with the link specified as `issue_server_link`
443 Matched issues will be replace with the link specified as `issue_server_link`
443 {id} will be replaced with issue id, and {repo} with repository name.
444 {id} will be replaced with issue id, and {repo} with repository name.
444 Since the # is striped `issue_prefix` is added as a prefix to url.
445 Since the # is striped `issue_prefix` is added as a prefix to url.
445 `issue_prefix` can be something different than # if you pass
446 `issue_prefix` can be something different than # if you pass
446 ISSUE- as issue prefix this will generate an url in format::
447 ISSUE- as issue prefix this will generate an url in format::
447
448
448 <a href="https://myissueserver.com/example_repo/issue/300">ISSUE-300</a>
449 <a href="https://myissueserver.com/example_repo/issue/300">ISSUE-300</a>
449
450
450 Hook management
451 Hook management
451 ---------------
452 ---------------
452
453
453 Hooks can be managed in similar way to this used in .hgrc files.
454 Hooks can be managed in similar way to this used in .hgrc files.
454 To access hooks setting click `advanced setup` on Hooks section of Mercurial
455 To access hooks setting click `advanced setup` on Hooks section of Mercurial
455 Settings in Admin.
456 Settings in Admin.
456
457
457 There are 4 built in hooks that cannot be changed (only enable/disable by
458 There are 4 built in hooks that cannot be changed (only enable/disable by
458 checkboxes on previos section).
459 checkboxes on previos section).
459 To add another custom hook simply fill in first section with
460 To add another custom hook simply fill in first section with
460 <name>.<hook_type> and the second one with hook path. Example hooks
461 <name>.<hook_type> and the second one with hook path. Example hooks
461 can be found at *rhodecode.lib.hooks*.
462 can be found at *rhodecode.lib.hooks*.
462
463
463
464
464 Changing default encoding
465 Changing default encoding
465 -------------------------
466 -------------------------
466
467
467 By default RhodeCode uses utf8 encoding, starting from 1.3 series this
468 By default RhodeCode uses utf8 encoding, starting from 1.3 series this
468 can be changed, simply edit default_encoding in .ini file to desired one.
469 can be changed, simply edit default_encoding in .ini file to desired one.
469 This affects many parts in rhodecode including commiters names, filenames,
470 This affects many parts in rhodecode including commiters names, filenames,
470 encoding of commit messages. In addition RhodeCode can detect if `chardet`
471 encoding of commit messages. In addition RhodeCode can detect if `chardet`
471 library is installed. If `chardet` is detected RhodeCode will fallback to it
472 library is installed. If `chardet` is detected RhodeCode will fallback to it
472 when there are encode/decode errors.
473 when there are encode/decode errors.
473
474
474
475
475 Setting Up Celery
476 Setting Up Celery
476 -----------------
477 -----------------
477
478
478 Since version 1.1 celery is configured by the rhodecode ini configuration files.
479 Since version 1.1 celery is configured by the rhodecode ini configuration files.
479 Simply set use_celery=true in the ini file then add / change the configuration
480 Simply set use_celery=true in the ini file then add / change the configuration
480 variables inside the ini file.
481 variables inside the ini file.
481
482
482 Remember that the ini files use the format with '.' not with '_' like celery.
483 Remember that the ini files use the format with '.' not with '_' like celery.
483 So for example setting `BROKER_HOST` in celery means setting `broker.host` in
484 So for example setting `BROKER_HOST` in celery means setting `broker.host` in
484 the config file.
485 the config file.
485
486
486 In order to start using celery run::
487 In order to start using celery run::
487
488
488 paster celeryd <configfile.ini>
489 paster celeryd <configfile.ini>
489
490
490
491
491 .. note::
492 .. note::
492 Make sure you run this command from the same virtualenv, and with the same
493 Make sure you run this command from the same virtualenv, and with the same
493 user that rhodecode runs.
494 user that rhodecode runs.
494
495
495 HTTPS support
496 HTTPS support
496 -------------
497 -------------
497
498
498 There are two ways to enable https:
499 There are two ways to enable https:
499
500
500 - Set HTTP_X_URL_SCHEME in your http server headers, than rhodecode will
501 - Set HTTP_X_URL_SCHEME in your http server headers, than rhodecode will
501 recognize this headers and make proper https redirections
502 recognize this headers and make proper https redirections
502 - Alternatively, change the `force_https = true` flag in the ini configuration
503 - Alternatively, change the `force_https = true` flag in the ini configuration
503 to force using https, no headers are needed than to enable https
504 to force using https, no headers are needed than to enable https
504
505
505
506
506 Nginx virtual host example
507 Nginx virtual host example
507 --------------------------
508 --------------------------
508
509
509 Sample config for nginx using proxy::
510 Sample config for nginx using proxy::
510
511
511 upstream rc {
512 upstream rc {
512 server 127.0.0.1:5000;
513 server 127.0.0.1:5000;
513 # add more instances for load balancing
514 # add more instances for load balancing
514 #server 127.0.0.1:5001;
515 #server 127.0.0.1:5001;
515 #server 127.0.0.1:5002;
516 #server 127.0.0.1:5002;
516 }
517 }
517
518
518 server {
519 server {
519 listen 80;
520 listen 80;
520 server_name hg.myserver.com;
521 server_name hg.myserver.com;
521 access_log /var/log/nginx/rhodecode.access.log;
522 access_log /var/log/nginx/rhodecode.access.log;
522 error_log /var/log/nginx/rhodecode.error.log;
523 error_log /var/log/nginx/rhodecode.error.log;
523
524
524 location / {
525 location / {
525 try_files $uri @rhode;
526 try_files $uri @rhode;
526 }
527 }
527
528
528 location @rhode {
529 location @rhode {
529 proxy_pass http://rc;
530 proxy_pass http://rc;
530 include /etc/nginx/proxy.conf;
531 include /etc/nginx/proxy.conf;
531 }
532 }
532
533
533 }
534 }
534
535
535 Here's the proxy.conf. It's tuned so it will not timeout on long
536 Here's the proxy.conf. It's tuned so it will not timeout on long
536 pushes or large pushes::
537 pushes or large pushes::
537
538
538 proxy_redirect off;
539 proxy_redirect off;
539 proxy_set_header Host $host;
540 proxy_set_header Host $host;
540 proxy_set_header X-Url-Scheme $scheme;
541 proxy_set_header X-Url-Scheme $scheme;
541 proxy_set_header X-Host $http_host;
542 proxy_set_header X-Host $http_host;
542 proxy_set_header X-Real-IP $remote_addr;
543 proxy_set_header X-Real-IP $remote_addr;
543 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
544 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
544 proxy_set_header Proxy-host $proxy_host;
545 proxy_set_header Proxy-host $proxy_host;
545 client_max_body_size 400m;
546 client_max_body_size 400m;
546 client_body_buffer_size 128k;
547 client_body_buffer_size 128k;
547 proxy_buffering off;
548 proxy_buffering off;
548 proxy_connect_timeout 7200;
549 proxy_connect_timeout 7200;
549 proxy_send_timeout 7200;
550 proxy_send_timeout 7200;
550 proxy_read_timeout 7200;
551 proxy_read_timeout 7200;
551 proxy_buffers 8 32k;
552 proxy_buffers 8 32k;
552
553
553 Also, when using root path with nginx you might set the static files to false
554 Also, when using root path with nginx you might set the static files to false
554 in the production.ini file::
555 in the production.ini file::
555
556
556 [app:main]
557 [app:main]
557 use = egg:rhodecode
558 use = egg:rhodecode
558 full_stack = true
559 full_stack = true
559 static_files = false
560 static_files = false
560 lang=en
561 lang=en
561 cache_dir = %(here)s/data
562 cache_dir = %(here)s/data
562
563
563 In order to not have the statics served by the application. This improves speed.
564 In order to not have the statics served by the application. This improves speed.
564
565
565
566
566 Apache virtual host reverse proxy example
567 Apache virtual host reverse proxy example
567 -----------------------------------------
568 -----------------------------------------
568
569
569 Here is a sample configuration file for apache using proxy::
570 Here is a sample configuration file for apache using proxy::
570
571
571 <VirtualHost *:80>
572 <VirtualHost *:80>
572 ServerName hg.myserver.com
573 ServerName hg.myserver.com
573 ServerAlias hg.myserver.com
574 ServerAlias hg.myserver.com
574
575
575 <Proxy *>
576 <Proxy *>
576 Order allow,deny
577 Order allow,deny
577 Allow from all
578 Allow from all
578 </Proxy>
579 </Proxy>
579
580
580 #important !
581 #important !
581 #Directive to properly generate url (clone url) for pylons
582 #Directive to properly generate url (clone url) for pylons
582 ProxyPreserveHost On
583 ProxyPreserveHost On
583
584
584 #rhodecode instance
585 #rhodecode instance
585 ProxyPass / http://127.0.0.1:5000/
586 ProxyPass / http://127.0.0.1:5000/
586 ProxyPassReverse / http://127.0.0.1:5000/
587 ProxyPassReverse / http://127.0.0.1:5000/
587
588
588 #to enable https use line below
589 #to enable https use line below
589 #SetEnvIf X-Url-Scheme https HTTPS=1
590 #SetEnvIf X-Url-Scheme https HTTPS=1
590
591
591 </VirtualHost>
592 </VirtualHost>
592
593
593
594
594 Additional tutorial
595 Additional tutorial
595 http://wiki.pylonshq.com/display/pylonscookbook/Apache+as+a+reverse+proxy+for+Pylons
596 http://wiki.pylonshq.com/display/pylonscookbook/Apache+as+a+reverse+proxy+for+Pylons
596
597
597
598
598 Apache as subdirectory
599 Apache as subdirectory
599 ----------------------
600 ----------------------
600
601
601 Apache subdirectory part::
602 Apache subdirectory part::
602
603
603 <Location /<someprefix> >
604 <Location /<someprefix> >
604 ProxyPass http://127.0.0.1:5000/<someprefix>
605 ProxyPass http://127.0.0.1:5000/<someprefix>
605 ProxyPassReverse http://127.0.0.1:5000/<someprefix>
606 ProxyPassReverse http://127.0.0.1:5000/<someprefix>
606 SetEnvIf X-Url-Scheme https HTTPS=1
607 SetEnvIf X-Url-Scheme https HTTPS=1
607 </Location>
608 </Location>
608
609
609 Besides the regular apache setup you will need to add the following line
610 Besides the regular apache setup you will need to add the following line
610 into [app:main] section of your .ini file::
611 into [app:main] section of your .ini file::
611
612
612 filter-with = proxy-prefix
613 filter-with = proxy-prefix
613
614
614 Add the following at the end of the .ini file::
615 Add the following at the end of the .ini file::
615
616
616 [filter:proxy-prefix]
617 [filter:proxy-prefix]
617 use = egg:PasteDeploy#prefix
618 use = egg:PasteDeploy#prefix
618 prefix = /<someprefix>
619 prefix = /<someprefix>
619
620
620
621
621 then change <someprefix> into your choosen prefix
622 then change <someprefix> into your choosen prefix
622
623
623 Apache's WSGI config
624 Apache's WSGI config
624 --------------------
625 --------------------
625
626
626 Alternatively, RhodeCode can be set up with Apache under mod_wsgi. For
627 Alternatively, RhodeCode can be set up with Apache under mod_wsgi. For
627 that, you'll need to:
628 that, you'll need to:
628
629
629 - Install mod_wsgi. If using a Debian-based distro, you can install
630 - Install mod_wsgi. If using a Debian-based distro, you can install
630 the package libapache2-mod-wsgi::
631 the package libapache2-mod-wsgi::
631
632
632 aptitude install libapache2-mod-wsgi
633 aptitude install libapache2-mod-wsgi
633
634
634 - Enable mod_wsgi::
635 - Enable mod_wsgi::
635
636
636 a2enmod wsgi
637 a2enmod wsgi
637
638
638 - Create a wsgi dispatch script, like the one below. Make sure you
639 - Create a wsgi dispatch script, like the one below. Make sure you
639 check the paths correctly point to where you installed RhodeCode
640 check the paths correctly point to where you installed RhodeCode
640 and its Python Virtual Environment.
641 and its Python Virtual Environment.
641 - Enable the WSGIScriptAlias directive for the wsgi dispatch script,
642 - Enable the WSGIScriptAlias directive for the wsgi dispatch script,
642 as in the following example. Once again, check the paths are
643 as in the following example. Once again, check the paths are
643 correctly specified.
644 correctly specified.
644
645
645 Here is a sample excerpt from an Apache Virtual Host configuration file::
646 Here is a sample excerpt from an Apache Virtual Host configuration file::
646
647
647 WSGIDaemonProcess pylons user=www-data group=www-data processes=1 \
648 WSGIDaemonProcess pylons user=www-data group=www-data processes=1 \
648 threads=4 \
649 threads=4 \
649 python-path=/home/web/rhodecode/pyenv/lib/python2.6/site-packages
650 python-path=/home/web/rhodecode/pyenv/lib/python2.6/site-packages
650 WSGIScriptAlias / /home/web/rhodecode/dispatch.wsgi
651 WSGIScriptAlias / /home/web/rhodecode/dispatch.wsgi
651 WSGIPassAuthorization On
652 WSGIPassAuthorization On
652
653
653 Example wsgi dispatch script::
654 Example wsgi dispatch script::
654
655
655 import os
656 import os
656 os.environ["HGENCODING"] = "UTF-8"
657 os.environ["HGENCODING"] = "UTF-8"
657 os.environ['PYTHON_EGG_CACHE'] = '/home/web/rhodecode/.egg-cache'
658 os.environ['PYTHON_EGG_CACHE'] = '/home/web/rhodecode/.egg-cache'
658
659
659 # sometimes it's needed to set the curent dir
660 # sometimes it's needed to set the curent dir
660 os.chdir('/home/web/rhodecode/')
661 os.chdir('/home/web/rhodecode/')
661
662
662 import site
663 import site
663 site.addsitedir("/home/web/rhodecode/pyenv/lib/python2.6/site-packages")
664 site.addsitedir("/home/web/rhodecode/pyenv/lib/python2.6/site-packages")
664
665
665 from paste.deploy import loadapp
666 from paste.deploy import loadapp
666 from paste.script.util.logging_config import fileConfig
667 from paste.script.util.logging_config import fileConfig
667
668
668 fileConfig('/home/web/rhodecode/production.ini')
669 fileConfig('/home/web/rhodecode/production.ini')
669 application = loadapp('config:/home/web/rhodecode/production.ini')
670 application = loadapp('config:/home/web/rhodecode/production.ini')
670
671
671 Note: when using mod_wsgi you'll need to install the same version of
672 Note: when using mod_wsgi you'll need to install the same version of
672 Mercurial that's inside RhodeCode's virtualenv also on the system's Python
673 Mercurial that's inside RhodeCode's virtualenv also on the system's Python
673 environment.
674 environment.
674
675
675
676
676 Other configuration files
677 Other configuration files
677 -------------------------
678 -------------------------
678
679
679 Some example init.d scripts can be found here, for debian and gentoo:
680 Some example init.d scripts can be found here, for debian and gentoo:
680
681
681 https://rhodecode.org/rhodecode/files/tip/init.d
682 https://rhodecode.org/rhodecode/files/tip/init.d
682
683
683
684
684 Troubleshooting
685 Troubleshooting
685 ---------------
686 ---------------
686
687
687 :Q: **Missing static files?**
688 :Q: **Missing static files?**
688 :A: Make sure either to set the `static_files = true` in the .ini file or
689 :A: Make sure either to set the `static_files = true` in the .ini file or
689 double check the root path for your http setup. It should point to
690 double check the root path for your http setup. It should point to
690 for example:
691 for example:
691 /home/my-virtual-python/lib/python2.6/site-packages/rhodecode/public
692 /home/my-virtual-python/lib/python2.6/site-packages/rhodecode/public
692
693
693 |
694 |
694
695
695 :Q: **Can't install celery/rabbitmq**
696 :Q: **Can't install celery/rabbitmq**
696 :A: Don't worry RhodeCode works without them too. No extra setup is required.
697 :A: Don't worry RhodeCode works without them too. No extra setup is required.
697
698
698 |
699 |
699
700
700 :Q: **Long lasting push timeouts?**
701 :Q: **Long lasting push timeouts?**
701 :A: Make sure you set a longer timeouts in your proxy/fcgi settings, timeouts
702 :A: Make sure you set a longer timeouts in your proxy/fcgi settings, timeouts
702 are caused by https server and not RhodeCode.
703 are caused by https server and not RhodeCode.
703
704
704 |
705 |
705
706
706 :Q: **Large pushes timeouts?**
707 :Q: **Large pushes timeouts?**
707 :A: Make sure you set a proper max_body_size for the http server.
708 :A: Make sure you set a proper max_body_size for the http server.
708
709
709 |
710 |
710
711
711 :Q: **Apache doesn't pass basicAuth on pull/push?**
712 :Q: **Apache doesn't pass basicAuth on pull/push?**
712 :A: Make sure you added `WSGIPassAuthorization true`.
713 :A: Make sure you added `WSGIPassAuthorization true`.
713
714
714 For further questions search the `Issues tracker`_, or post a message in the
715 For further questions search the `Issues tracker`_, or post a message in the
715 `google group rhodecode`_
716 `google group rhodecode`_
716
717
717 .. _virtualenv: http://pypi.python.org/pypi/virtualenv
718 .. _virtualenv: http://pypi.python.org/pypi/virtualenv
718 .. _python: http://www.python.org/
719 .. _python: http://www.python.org/
719 .. _mercurial: http://mercurial.selenic.com/
720 .. _mercurial: http://mercurial.selenic.com/
720 .. _celery: http://celeryproject.org/
721 .. _celery: http://celeryproject.org/
721 .. _rabbitmq: http://www.rabbitmq.com/
722 .. _rabbitmq: http://www.rabbitmq.com/
722 .. _python-ldap: http://www.python-ldap.org/
723 .. _python-ldap: http://www.python-ldap.org/
723 .. _mercurial-server: http://www.lshift.net/mercurial-server.html
724 .. _mercurial-server: http://www.lshift.net/mercurial-server.html
724 .. _PublishingRepositories: http://mercurial.selenic.com/wiki/PublishingRepositories
725 .. _PublishingRepositories: http://mercurial.selenic.com/wiki/PublishingRepositories
725 .. _Issues tracker: https://bitbucket.org/marcinkuzminski/rhodecode/issues
726 .. _Issues tracker: https://bitbucket.org/marcinkuzminski/rhodecode/issues
726 .. _google group rhodecode: http://groups.google.com/group/rhodecode
727 .. _google group rhodecode: http://groups.google.com/group/rhodecode
@@ -1,54 +1,55 b''
1 .. _upgrade:
1 .. _upgrade:
2
2
3 =======
3 Upgrade
4 Upgrade
4 =======
5 =======
5
6
6 Upgrading from Cheese Shop
7 Upgrading from Cheese Shop
7 --------------------------
8 --------------------------
8
9
9 .. note::
10 .. note::
10 Firstly, it is recommended that you **always** perform a database backup
11 Firstly, it is recommended that you **always** perform a database backup
11 before doing an upgrade.
12 before doing an upgrade.
12
13
13 The easiest way to upgrade ``rhodecode`` is to run::
14 The easiest way to upgrade ``rhodecode`` is to run::
14
15
15 easy_install -U rhodecode
16 easy_install -U rhodecode
16
17
17 Or::
18 Or::
18
19
19 pip install --upgrade rhodecode
20 pip install --upgrade rhodecode
20
21
21
22
22 Then make sure you run the following command from the installation directory::
23 Then make sure you run the following command from the installation directory::
23
24
24 paster make-config RhodeCode production.ini
25 paster make-config RhodeCode production.ini
25
26
26 This will display any changes made by the new version of RhodeCode to your
27 This will display any changes made by the new version of RhodeCode to your
27 current configuration. It will try to perform an automerge. It's always better
28 current configuration. It will try to perform an automerge. It's always better
28 to make a backup of your configuration file before hand and recheck the
29 to make a backup of your configuration file before hand and re check the
29 content after the automerge.
30 content after the automerge.
30
31
31 .. note::
32 .. note::
32 Please always make sure your .ini files are upto date. Often errors are
33 Please always make sure your .ini files are up to date. Often errors are
33 caused by missing params added in new versions.
34 caused by missing params added in new versions.
34
35
35
36
36 It is also recommended that you rebuild the whoosh index after upgrading since
37 It is also recommended that you rebuild the whoosh index after upgrading since
37 the new whoosh version could introduce some incompatible index changes. Please
38 the new whoosh version could introduce some incompatible index changes. Please
38 Read the changelog to see if there were any changes to whoosh.
39 Read the changelog to see if there were any changes to whoosh.
39
40
40
41
41 The final step is to upgrade the database. To do this simply run::
42 The final step is to upgrade the database. To do this simply run::
42
43
43 paster upgrade-db production.ini
44 paster upgrade-db production.ini
44
45
45 This will upgrade the schema and update some of the defaults in the database,
46 This will upgrade the schema and update some of the defaults in the database,
46 and will always recheck the settings of the application, if there are no new
47 and will always recheck the settings of the application, if there are no new
47 options that need to be set.
48 options that need to be set.
48
49
49
50
50 .. _virtualenv: http://pypi.python.org/pypi/virtualenv
51 .. _virtualenv: http://pypi.python.org/pypi/virtualenv
51 .. _python: http://www.python.org/
52 .. _python: http://www.python.org/
52 .. _mercurial: http://mercurial.selenic.com/
53 .. _mercurial: http://mercurial.selenic.com/
53 .. _celery: http://celeryproject.org/
54 .. _celery: http://celeryproject.org/
54 .. _rabbitmq: http://www.rabbitmq.com/ No newline at end of file
55 .. _rabbitmq: http://www.rabbitmq.com/
@@ -1,25 +1,26 b''
1 .. _backup:
1 .. _backup:
2
2
3 ====================
3 Backing up RhodeCode
4 Backing up RhodeCode
4 ====================
5 ====================
5
6
6
7
7 Settings
8 Settings
8 --------
9 --------
9
10
10 Just copy your .ini file, it contains all RhodeCode settings.
11 Just copy your .ini file, it contains all RhodeCode settings.
11
12
12 Whoosh index
13 Whoosh index
13 ------------
14 ------------
14
15
15 Whoosh index is located in **/data/index** directory where you installed
16 Whoosh index is located in **/data/index** directory where you installed
16 RhodeCode ie. the same place where the ini file is located
17 RhodeCode ie. the same place where the ini file is located
17
18
18
19
19 Database
20 Database
20 --------
21 --------
21
22
22 When using sqlite just copy rhodecode.db.
23 When using sqlite just copy rhodecode.db.
23 Any other database engine requires a manual backup operation.
24 Any other database engine requires a manual backup operation.
24
25
25 Database backup will contain all gathered statistics No newline at end of file
26 Database backup will contain all gathered statistics
@@ -1,79 +1,80 b''
1 .. _general:
1 .. _general:
2
2
3 =======================
3 General RhodeCode usage
4 General RhodeCode usage
4 =======================
5 =======================
5
6
6
7
7 Repository deleting
8 Repository deleting
8 -------------------
9 -------------------
9
10
10 Currently when admin/owner deletes a repository, RhodeCode does not physically
11 Currently when admin/owner deletes a repository, RhodeCode does not physically
11 delete a repository from filesystem, it renames it in a special way so it's
12 delete a repository from filesystem, it renames it in a special way so it's
12 not possible to push,clone or access repository. It's worth a notice that,
13 not possible to push,clone or access repository. It's worth a notice that,
13 even if someone will be given administrative access to RhodeCode and will
14 even if someone will be given administrative access to RhodeCode and will
14 delete a repository You can easy restore such action by restoring `rm__<date>`
15 delete a repository You can easy restore such action by restoring `rm__<date>`
15 from the repository name, and internal repository storage (.hg/.git)
16 from the repository name, and internal repository storage (.hg/.git)
16
17
17 Follow current branch in file view
18 Follow current branch in file view
18 ----------------------------------
19 ----------------------------------
19
20
20 In file view when this checkbox is checked the << and >> arrows will jump
21 In file view when this checkbox is checked the << and >> arrows will jump
21 to changesets within the same branch currently viewing. So for example
22 to changesets within the same branch currently viewing. So for example
22 if someone is viewing files at 'beta' branch and marks `follow current branch`
23 if someone is viewing files at 'beta' branch and marks `follow current branch`
23 checkbox the << and >> buttons will only show him revisions for 'beta' branch
24 checkbox the << and >> buttons will only show him revisions for 'beta' branch
24
25
25
26
26 Compare view from changelog
27 Compare view from changelog
27 ---------------------------
28 ---------------------------
28
29
29 Checkboxes in compare view allow users to view combined compare view. You can
30 Checkboxes in compare view allow users to view combined compare view. You can
30 only show the range between the first and last checkbox (no cherry pick).
31 only show the range between the first and last checkbox (no cherry pick).
31 Clicking more than one checkbox will activate a link in top saying
32 Clicking more than one checkbox will activate a link in top saying
32 `Show selected changes <from-rev> -> <to-rev>` clicking this will bring
33 `Show selected changes <from-rev> -> <to-rev>` clicking this will bring
33 compare view
34 compare view
34
35
35 Compare view is also available from the journal on pushes having more than
36 Compare view is also available from the journal on pushes having more than
36 one changeset
37 one changeset
37
38
38
39
39 Non changeable repository urls
40 Non changeable repository urls
40 ------------------------------
41 ------------------------------
41
42
42 Due to complicated nature of repository grouping, often urls of repositories
43 Due to complicated nature of repository grouping, often urls of repositories
43 can change.
44 can change.
44
45
45 example::
46 example::
46
47
47 #before
48 #before
48 http://server.com/repo_name
49 http://server.com/repo_name
49 # after insertion to test_group group the url will be
50 # after insertion to test_group group the url will be
50 http://server.com/test_group/repo_name
51 http://server.com/test_group/repo_name
51
52
52 This can be an issue for build systems and any other hardcoded scripts, moving
53 This can be an issue for build systems and any other hardcoded scripts, moving
53 repository to a group leads to a need for changing external systems. To
54 repository to a group leads to a need for changing external systems. To
54 overcome this RhodeCode introduces a non changable replacement url. It's
55 overcome this RhodeCode introduces a non changable replacement url. It's
55 simply an repository ID prefixed with `_` above urls are also accessible as::
56 simply an repository ID prefixed with `_` above urls are also accessible as::
56
57
57 http://server.com/_<ID>
58 http://server.com/_<ID>
58
59
59 Since ID are always the same moving the repository will not affect such url.
60 Since ID are always the same moving the repository will not affect such url.
60 the _<ID> syntax can be used anywhere in the system so urls with repo_name
61 the _<ID> syntax can be used anywhere in the system so urls with repo_name
61 for changelogs, files and other can be exchanged with _<ID> syntax.
62 for changelogs, files and other can be exchanged with _<ID> syntax.
62
63
63
64
64
65
65 Mailing
66 Mailing
66 -------
67 -------
67
68
68 When administrator will fill up the mailing settings in .ini files
69 When administrator will fill up the mailing settings in .ini files
69 RhodeCode will send mails on user registration, or when RhodeCode errors occur
70 RhodeCode will send mails on user registration, or when RhodeCode errors occur
70 on errors the mails will have a detailed traceback of error.
71 on errors the mails will have a detailed traceback of error.
71
72
72
73
73 Trending source files
74 Trending source files
74 ---------------------
75 ---------------------
75
76
76 Trending source files are calculated based on pre defined dict of known
77 Trending source files are calculated based on pre defined dict of known
77 types and extensions. If You miss some extension or Would like to scan some
78 types and extensions. If You miss some extension or Would like to scan some
78 custom files it's possible to add new types in `LANGUAGES_EXTENSIONS_MAP` dict
79 custom files it's possible to add new types in `LANGUAGES_EXTENSIONS_MAP` dict
79 located in `/rhodecode/lib/celerylib/tasks.py` No newline at end of file
80 located in `/rhodecode/lib/celerylib/tasks.py`
@@ -1,48 +1,49 b''
1 .. _git_support:
1 .. _git_support:
2
2
3 ===========
3 GIT support
4 GIT support
4 ===========
5 ===========
5
6
6
7
7 Git support in RhodeCode 1.3 was enabled by default.
8 Git support in RhodeCode 1.3 was enabled by default.
8 Although There are some limitations on git usage.
9 Although There are some limitations on git usage.
9
10
10 - No hooks are runned for git push/pull actions.
11 - No hooks are runned for git push/pull actions.
11 - logs in action journals don't have git operations
12 - logs in action journals don't have git operations
12 - large pushes needs http server with chunked encoding support.
13 - large pushes needs http server with chunked encoding support.
13
14
14 if you plan to use git you need to run RhodeCode with some
15 if you plan to use git you need to run RhodeCode with some
15 http server that supports chunked encoding which git http protocol uses,
16 http server that supports chunked encoding which git http protocol uses,
16 i recommend using waitress_ or gunicorn_ (linux only) for `paste` wsgi app
17 i recommend using waitress_ or gunicorn_ (linux only) for `paste` wsgi app
17 replacement.
18 replacement.
18
19
19 To use waitress simply change change the following in the .ini file::
20 To use waitress simply change change the following in the .ini file::
20
21
21 use = egg:Paste#http
22 use = egg:Paste#http
22
23
23 To::
24 To::
24
25
25 use = egg:waitress#main
26 use = egg:waitress#main
26
27
27 And comment out bellow options::
28 And comment out bellow options::
28
29
29 threadpool_workers =
30 threadpool_workers =
30 threadpool_max_requests =
31 threadpool_max_requests =
31 use_threadpool =
32 use_threadpool =
32
33
33
34
34 You can simply run `paster serve` as usual.
35 You can simply run `paster serve` as usual.
35
36
36
37
37 You can always disable git/hg support by editing a
38 You can always disable git/hg support by editing a
38 file **rhodecode/__init__.py** and commenting out backends
39 file **rhodecode/__init__.py** and commenting out backends
39
40
40 .. code-block:: python
41 .. code-block:: python
41
42
42 BACKENDS = {
43 BACKENDS = {
43 'hg': 'Mercurial repository',
44 'hg': 'Mercurial repository',
44 #'git': 'Git repository',
45 #'git': 'Git repository',
45 }
46 }
46
47
47 .. _waitress: http://pypi.python.org/pypi/waitress
48 .. _waitress: http://pypi.python.org/pypi/waitress
48 .. _gunicorn: http://pypi.python.org/pypi/gunicorn No newline at end of file
49 .. _gunicorn: http://pypi.python.org/pypi/gunicorn
@@ -1,33 +1,33 b''
1 .. _statistics:
1 .. _statistics:
2
2
3
3 ==========
4 Statistics
4 Statistics
5 ==========
5 ==========
6
6
7 The RhodeCode statistics system makes heavy demands of the server resources, so
7 The RhodeCode statistics system makes heavy demands of the server resources, so
8 in order to keep a balance between usability and performance, the statistics are
8 in order to keep a balance between usability and performance, the statistics are
9 cached inside db and are gathered incrementally, this is how RhodeCode does
9 cached inside db and are gathered incrementally, this is how RhodeCode does
10 this:
10 this:
11
11
12 With Celery disabled
12 With Celery disabled
13 --------------------
13 --------------------
14
14
15 - On each first visit to the summary page a set of 250 commits are parsed and
15 - On each first visit to the summary page a set of 250 commits are parsed and
16 updates statistics cache.
16 updates statistics cache.
17 - This happens on each single visit to the statistics page until all commits are
17 - This happens on each single visit to the statistics page until all commits are
18 fetched. Statistics are kept cached until additional commits are added to the
18 fetched. Statistics are kept cached until additional commits are added to the
19 repository. In such a case RhodeCode will only fetch the new commits when
19 repository. In such a case RhodeCode will only fetch the new commits when
20 updating it's cache.
20 updating it's cache.
21
21
22
22
23 With Celery enabled
23 With Celery enabled
24 -------------------
24 -------------------
25
25
26 - On the first visit to the summary page RhodeCode will create tasks that will
26 - On the first visit to the summary page RhodeCode will create tasks that will
27 execute on celery workers. This task will gather all of the stats until all
27 execute on celery workers. This task will gather all of the stats until all
28 commits are parsed, each task will parse 250 commits, and run the next task to
28 commits are parsed, each task will parse 250 commits, and run the next task to
29 parse next 250 commits, until all of the commits are parsed.
29 parse next 250 commits, until all of the commits are parsed.
30
30
31 .. note::
31 .. note::
32 At any time you can disable statistics on each repository via the repository
32 At any time you can disable statistics on each repository via the repository
33 edit form in the admin panel. To do this just uncheck the statistics checkbox.
33 edit form in the admin panel. To do this just uncheck the statistics checkbox.
@@ -1,92 +1,92 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2 """
2 """
3 rhodecode.__init__
3 rhodecode.__init__
4 ~~~~~~~~~~~~~~~~~~
4 ~~~~~~~~~~~~~~~~~~
5
5
6 RhodeCode, a web based repository management based on pylons
6 RhodeCode, a web based repository management based on pylons
7 versioning implementation: http://semver.org/
7 versioning implementation: http://semver.org/
8
8
9 :created_on: Apr 9, 2010
9 :created_on: Apr 9, 2010
10 :author: marcink
10 :author: marcink
11 :copyright: (C) 2010-2012 Marcin Kuzminski <marcin@python-works.com>
11 :copyright: (C) 2010-2012 Marcin Kuzminski <marcin@python-works.com>
12 :license: GPLv3, see COPYING for more details.
12 :license: GPLv3, see COPYING for more details.
13 """
13 """
14 # This program is free software: you can redistribute it and/or modify
14 # This program is free software: you can redistribute it and/or modify
15 # it under the terms of the GNU General Public License as published by
15 # it under the terms of the GNU General Public License as published by
16 # the Free Software Foundation, either version 3 of the License, or
16 # the Free Software Foundation, either version 3 of the License, or
17 # (at your option) any later version.
17 # (at your option) any later version.
18 #
18 #
19 # This program is distributed in the hope that it will be useful,
19 # This program is distributed in the hope that it will be useful,
20 # but WITHOUT ANY WARRANTY; without even the implied warranty of
20 # but WITHOUT ANY WARRANTY; without even the implied warranty of
21 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22 # GNU General Public License for more details.
22 # GNU General Public License for more details.
23 #
23 #
24 # You should have received a copy of the GNU General Public License
24 # You should have received a copy of the GNU General Public License
25 # along with this program. If not, see <http://www.gnu.org/licenses/>.
25 # along with this program. If not, see <http://www.gnu.org/licenses/>.
26 import sys
26 import sys
27 import platform
27 import platform
28
28
29 VERSION = (1, 3, 2)
29 VERSION = (1, 3, 3)
30 __version__ = '.'.join((str(each) for each in VERSION[:4]))
30 __version__ = '.'.join((str(each) for each in VERSION[:4]))
31 __dbversion__ = 5 # defines current db version for migrations
31 __dbversion__ = 5 # defines current db version for migrations
32 __platform__ = platform.system()
32 __platform__ = platform.system()
33 __license__ = 'GPLv3'
33 __license__ = 'GPLv3'
34 __py_version__ = sys.version_info
34 __py_version__ = sys.version_info
35
35
36 PLATFORM_WIN = ('Windows')
36 PLATFORM_WIN = ('Windows')
37 PLATFORM_OTHERS = ('Linux', 'Darwin', 'FreeBSD', 'OpenBSD', 'SunOS')
37 PLATFORM_OTHERS = ('Linux', 'Darwin', 'FreeBSD', 'OpenBSD', 'SunOS')
38
38
39 requirements = [
39 requirements = [
40 "Pylons==1.0.0",
40 "Pylons==1.0.0",
41 "Beaker==1.6.3",
41 "Beaker==1.6.3",
42 "WebHelpers>=1.2",
42 "WebHelpers>=1.2",
43 "formencode==1.2.4",
43 "formencode==1.2.4",
44 "SQLAlchemy==0.7.4",
44 "SQLAlchemy==0.7.4",
45 "Mako==0.5.0",
45 "Mako==0.5.0",
46 "pygments>=1.4",
46 "pygments>=1.4",
47 "whoosh>=2.3.0,<2.4",
47 "whoosh>=2.3.0,<2.4",
48 "celery>=2.2.5,<2.3",
48 "celery>=2.2.5,<2.3",
49 "babel",
49 "babel",
50 "python-dateutil>=1.5.0,<2.0.0",
50 "python-dateutil>=1.5.0,<2.0.0",
51 "dulwich>=0.8.0,<0.9.0",
51 "dulwich>=0.8.0,<0.9.0",
52 "webob==1.0.8",
52 "webob==1.0.8",
53 "markdown==2.1.1",
53 "markdown==2.1.1",
54 "docutils==0.8.1",
54 "docutils==0.8.1",
55 ]
55 ]
56
56
57 if __py_version__ < (2, 6):
57 if __py_version__ < (2, 6):
58 requirements.append("simplejson")
58 requirements.append("simplejson")
59 requirements.append("pysqlite")
59 requirements.append("pysqlite")
60
60
61 if __platform__ in PLATFORM_WIN:
61 if __platform__ in PLATFORM_WIN:
62 requirements.append("mercurial>=2.1,<2.2")
62 requirements.append("mercurial>=2.1,<2.2")
63 else:
63 else:
64 requirements.append("py-bcrypt")
64 requirements.append("py-bcrypt")
65 requirements.append("mercurial>=2.1,<2.2")
65 requirements.append("mercurial>=2.1,<2.2")
66
66
67
67
68 try:
68 try:
69 from rhodecode.lib import get_current_revision
69 from rhodecode.lib import get_current_revision
70 _rev = get_current_revision(quiet=True)
70 _rev = get_current_revision(quiet=True)
71 except ImportError:
71 except ImportError:
72 # this is needed when doing some setup.py operations
72 # this is needed when doing some setup.py operations
73 _rev = False
73 _rev = False
74
74
75 if len(VERSION) > 3 and _rev:
75 if len(VERSION) > 3 and _rev:
76 __version__ += ' [rev:%s]' % _rev[0]
76 __version__ += ' [rev:%s]' % _rev[0]
77
77
78
78
79 def get_version():
79 def get_version():
80 """Returns shorter version (digit parts only) as string."""
80 """Returns shorter version (digit parts only) as string."""
81
81
82 return '.'.join((str(each) for each in VERSION[:3]))
82 return '.'.join((str(each) for each in VERSION[:3]))
83
83
84 BACKENDS = {
84 BACKENDS = {
85 'hg': 'Mercurial repository',
85 'hg': 'Mercurial repository',
86 'git': 'Git repository',
86 'git': 'Git repository',
87 }
87 }
88
88
89 CELERY_ON = False
89 CELERY_ON = False
90
90
91 # link to config for pylons
91 # link to config for pylons
92 CONFIG = {}
92 CONFIG = {}
General Comments 0
You need to be logged in to leave comments. Login now