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