##// END OF EJS Templates
Fixes for release 1.1.4...
marcink -
r1071:bdc438fb default
parent child Browse files
Show More
@@ -4,12 +4,14 b' Welcome to RhodeCode (RhodiumCode) docum'
4 =================================================
4 =================================================
5
5
6 ``RhodeCode`` (formerly hg-app) is Pylons framework based Mercurial repository
6 ``RhodeCode`` (formerly hg-app) is Pylons framework based Mercurial repository
7 browser/management with build in push/pull server and full text search.
7 browser/management tool with build in push/pull server and full text search.
8 It works on http/https, has build in permission/authentication(+ldap) features
8 It works on http/https, has build in permission/authentication system with
9 It's similar to github or bitbucket, but it's suppose to run as standalone
9 ability to auth via LDAP. It's similar in some parts to github or bitbucket,
10 hosted application, it's open source and focuses more on restricted access to
10 but it's suppose to run as standalone hosted application, it's open source
11 repositories. It's powered by vcs_ library that me and Lukasz Balcerzak created
11 and donation ware and focuses more on providing customized, self administered
12 to handle many various version control systems.
12 interface for Mercurial(and soon GIT) repositories. It's powered by vcs_
13 library that me and Lukasz Balcerzak created to handle many various version
14 control systems.
13
15
14 RhodeCode uses `Semantic Versioning <http://semver.org/>`_
16 RhodeCode uses `Semantic Versioning <http://semver.org/>`_
15
17
@@ -45,7 +47,7 b' Features'
45 - Has it's own middleware to handle mercurial_ protocol request.
47 - Has it's own middleware to handle mercurial_ protocol request.
46 Each request can be logged and authenticated. Runs on threads unlikely to
48 Each request can be logged and authenticated. Runs on threads unlikely to
47 hgweb. You can make multiple pulls/pushes simultaneous. Supports http/https
49 hgweb. You can make multiple pulls/pushes simultaneous. Supports http/https
48 and ldap
50 and LDAP
49 - Full permissions (private/read/write/admin) and authentication per project.
51 - Full permissions (private/read/write/admin) and authentication per project.
50 One account for web interface and mercurial_ push/pull/clone operations.
52 One account for web interface and mercurial_ push/pull/clone operations.
51 - Mako templates let's you customize look and feel of application.
53 - Mako templates let's you customize look and feel of application.
@@ -60,7 +62,7 b' Features'
60 (no external search servers required all in one application)
62 (no external search servers required all in one application)
61 - Setup project descriptions and info inside built in db for easy, non
63 - Setup project descriptions and info inside built in db for easy, non
62 file-system operations
64 file-system operations
63 - Inteligent cache with invalidation after push or project change, provides high
65 - Intelligent cache with invalidation after push or project change, provides high
64 performance and always up to date data.
66 performance and always up to date data.
65 - Rss / atom feeds, gravatar support, download sources as zip/tar/gz
67 - Rss / atom feeds, gravatar support, download sources as zip/tar/gz
66 - Async tasks for speed and performance using celery_ (works without them too)
68 - Async tasks for speed and performance using celery_ (works without them too)
@@ -77,20 +79,20 b' Incoming / Plans'
77
79
78 - project grouping
80 - project grouping
79 - User groups/teams
81 - User groups/teams
82 - ssh based authentication with server side key management
80 - code review (probably based on hg-review)
83 - code review (probably based on hg-review)
81 - full git_ support, with push/pull server (currently in beta tests)
84 - full git_ support, with push/pull server (currently in beta tests)
82 - redmine integration
85 - redmine integration
83 - public accessible activity feeds
86 - public accessible activity feeds
84 - commit based build in wiki system
87 - commit based build in wiki system
85 - clone points and cloning from remote repositories into rhodecode
88 - clone points and cloning from remote repositories into RhodeCode
86 (git_ and mercurial_)
87 - more statistics and graph (global annotation + some more statistics)
89 - more statistics and graph (global annotation + some more statistics)
88 - other cools stuff that i can figure out (or You can help me figure out)
90 - other cools stuff that i can figure out (or You can help me figure out)
89
91
90 License
92 License
91 -------
93 -------
92
94
93 ``rhodecode`` is released under GPL_ license.
95 ``RhodeCode`` is released under GPL_ license.
94
96
95
97
96 Mailing group Q&A
98 Mailing group Q&A
@@ -112,3 +114,13 b' Online documentation'
112
114
113 make html
115 make html
114
116
117 .. _virtualenv: http://pypi.python.org/pypi/virtualenv
118 .. _python: http://www.python.org/
119 .. _django: http://www.djangoproject.com/
120 .. _mercurial: http://mercurial.selenic.com/
121 .. _subversion: http://subversion.tigris.org/
122 .. _git: http://git-scm.com/
123 .. _celery: http://celeryproject.org/
124 .. _Sphinx: http://sphinx.pocoo.org/
125 .. _GPL: http://www.gnu.org/licenses/gpl.html
126 .. _vcs: http://pypi.python.org/pypi/vcs No newline at end of file
@@ -3,6 +3,21 b''
3 Changelog
3 Changelog
4 =========
4 =========
5
5
6 1.1.4 (**2011-02-19**)
7 ======================
8
9 news
10 ----
11
12 fixes
13 -----
14
15 - fixed formencode import problem on settings page, that caused server crash
16 when that page was accessed as first after server start
17 - journal fixes
18 - fixed option to access repository just by entering http://server/<repo_name>
19
20
6 1.1.3 (**2011-02-16**)
21 1.1.3 (**2011-02-16**)
7 ======================
22 ======================
8
23
@@ -29,7 +44,6 b' fixes'
29 - fixed #106 relation issues on databases different than sqlite
44 - fixed #106 relation issues on databases different than sqlite
30 - fixed static files paths links to use of url() method
45 - fixed static files paths links to use of url() method
31
46
32
33 1.1.2 (**2011-01-12**)
47 1.1.2 (**2011-01-12**)
34 ======================
48 ======================
35
49
@@ -6,4 +6,12 b' Contributing in RhodeCode'
6 If You would like to contribute to RhodeCode, please contact me, any help is
6 If You would like to contribute to RhodeCode, please contact me, any help is
7 greatly appreciated.
7 greatly appreciated.
8
8
9 Preferable method Would be to fork RhodeCode repository from bitbucket
10 https://bitbucket.org/marcinkuzminski/rhodecode and then open a pull request.
11 This way it's easier for me to merge.
12
13 To run RhodeCode in a development version You always need to install tip
14 version of RhodeCode and VCS library.
15
16
9 Thank You.
17 Thank You.
@@ -29,7 +29,7 b' Or::'
29 pip install rhodecode
29 pip install rhodecode
30
30
31 If you prefer to install manually simply grab latest release from
31 If you prefer to install manually simply grab latest release from
32 http://pypi.python.org/pypi/RhodeCode, decompres archive and run::
32 http://pypi.python.org/pypi/rhodecode, decompress archive and run::
33
33
34 python setup.py install
34 python setup.py install
35
35
@@ -39,13 +39,22 b' Step by step installation example'
39
39
40
40
41 - Assuming You have installed virtualenv_ create one using.
41 - Assuming You have installed virtualenv_ create one using.
42 The `--no-site-packages` will make sure non of Your system libs are linked
43 with this virtualenv_
44
42
45 ::
43 ::
46
44
47 virtualenv --no-site-packages /var/www/rhodecode-venv
45 virtualenv --no-site-packages /var/www/rhodecode-venv
48
46
47
48 .. note:: Using ``--no-site-packages`` when generating your
49 virtualenv is *very important*. This flag provides the necessary
50 isolation for running the set of packages required by
51 RhodeCode. If you do not specify ``--no-site-packages``,
52 it's possible that RhodeCode will not install properly into
53 the virtualenv, or, even if it does, may not run properly,
54 depending on the packages you've already got installed into your
55 Python's "main" site-packages dir.
56
57
49 - this will install new virtualenv_ into `/var/www/rhodecode-venv`.
58 - this will install new virtualenv_ into `/var/www/rhodecode-venv`.
50 - Activate the virtualenv_ by running
59 - Activate the virtualenv_ by running
51
60
@@ -53,6 +62,10 b' Step by step installation example'
53
62
54 source /var/www/rhodecode-venv/bin/activate
63 source /var/www/rhodecode-venv/bin/activate
55
64
65 .. note:: If you're on UNIX, *do not* use ``sudo`` to run the
66 ``virtualenv`` script. It's perfectly acceptable (and desirable)
67 to create a virtualenv as a normal user.
68
56 - Make a folder for rhodecode somewhere on the filesystem for example
69 - Make a folder for rhodecode somewhere on the filesystem for example
57
70
58 ::
71 ::
@@ -7,7 +7,7 b' Setup'
7 Setting up the application
7 Setting up the application
8 --------------------------
8 --------------------------
9
9
10 First You'll ned to create RhodeCode config file. Run the following command
10 First You'll need to create RhodeCode config file. Run the following command
11 to do this
11 to do this
12
12
13 ::
13 ::
@@ -19,8 +19,10 b' to do this'
19 email settings, usage of static files, cache, celery settings and logging.
19 email settings, usage of static files, cache, celery settings and logging.
20
20
21
21
22 Next we need to create the database. I'll recommend to use sqlite (default)
23 or postgresql. Make sure You properly adjust the db url in the .ini file to use
24 other than the default sqlite database
22
25
23 Next we need to create the database.
24
26
25 ::
27 ::
26
28
@@ -35,7 +37,7 b' Next we need to create the database.'
35 interface will work even without such an access but, when trying to do a
37 interface will work even without such an access but, when trying to do a
36 push it'll eventually fail with permission denied errors.
38 push it'll eventually fail with permission denied errors.
37
39
38 You are ready to use rhodecode, to run it simply execute
40 You are ready to use RhodeCode, to run it simply execute
39
41
40 ::
42 ::
41
43
@@ -50,31 +52,58 b' You are ready to use rhodecode, to run i'
50 anonymous, permissions settings. As well as edit more advanced options on
52 anonymous, permissions settings. As well as edit more advanced options on
51 users and repositories
53 users and repositories
52
54
55 Using RhodeCode with SSH
56 ------------------------
57
58 RhodeCode repository structures are kept in directories with the same name
59 as the project, when using repository groups, each group is a a subdirectory.
60 This will allow You to use ssh for accessing repositories quite easy. There
61 are some exceptions when using ssh for accessing repositories.
62
63 You have to make sure that the webserver as well as the ssh users have unix
64 permission for directories. Secondly when using ssh rhodecode will not
65 authenticate those requests and permissions set by the web interface will not
66 work on the repositories accessed via ssh. There is a solution to this to use
67 auth hooks, that connects to rhodecode db, and runs check functions for
68 permissions.
69
70
71 if Your main directory (the same as set in RhodeCode settings) is for example
72 set for to **/home/hg** and repository You are using is `rhodecode`
73
74 The command runned should look like this::
75
76 hg clone ssh://user@server.com/home/hg/rhodecode
77
78 Using external tools such as mercurial server or using ssh key based auth is
79 fully supported.
53
80
54 Setting up Whoosh full text search
81 Setting up Whoosh full text search
55 ----------------------------------
82 ----------------------------------
56
83
57 Index for whoosh can be build starting from version 1.1 using paster command
84 Starting from version 1.1 whoosh index can be build using paster command.
58 passing repo locations to index, as well as Your config file that stores
85 You have to specify the config file that stores location of index, and
59 whoosh index files locations. There is possible to pass `-f` to the options
86 location of repositories (`--repo-location`).
87
88 There is possible also to pass `-f` to the options
60 to enable full index rebuild. Without that indexing will run always in in
89 to enable full index rebuild. Without that indexing will run always in in
61 incremental mode.
90 incremental mode.
62
91
63 ::
92 incremental mode::
64
93
65 paster make-index production.ini --repo-location=<location for repos>
94 paster make-index production.ini --repo-location=<location for repos>
66
95
67 for full index rebuild You can use
96
68
97
69 ::
98 for full index rebuild You can use::
70
99
71 paster make-index production.ini -f --repo-location=<location for repos>
100 paster make-index production.ini -f --repo-location=<location for repos>
72
101
73 - For full text search You can either put crontab entry for
102 - For full text search You can either put crontab entry for
74
103
75 This command can be run even from crontab in order to do periodical
104 In order to do periodical index builds and keep Your index always up to date.
76 index builds and keep Your index always up to date. An example entry might
105 It's recommended to do a crontab entry for incremental indexing.
77 look like this
106 An example entry might look like this
78
107
79 ::
108 ::
80
109
@@ -93,7 +122,7 b' Setting up LDAP support'
93 -----------------------
122 -----------------------
94
123
95 RhodeCode starting from version 1.1 supports ldap authentication. In order
124 RhodeCode starting from version 1.1 supports ldap authentication. In order
96 to use ldap, You have to install python-ldap package. This package is available
125 to use LDAP, You have to install python-ldap_ package. This package is available
97 via pypi, so You can install it by running
126 via pypi, so You can install it by running
98
127
99 ::
128 ::
@@ -157,6 +186,7 b' In order to make start using celery run:'
157
186
158 paster celeryd <configfile.ini>
187 paster celeryd <configfile.ini>
159
188
189
160 .. note::
190 .. note::
161 Make sure You run this command from same virtualenv, and with the same user
191 Make sure You run this command from same virtualenv, and with the same user
162 that rhodecode runs.
192 that rhodecode runs.
@@ -207,8 +237,8 b' pushes and also on large pushes::'
207 proxy_connect_timeout 3600;
237 proxy_connect_timeout 3600;
208 proxy_send_timeout 3600;
238 proxy_send_timeout 3600;
209 proxy_read_timeout 3600;
239 proxy_read_timeout 3600;
210 proxy_buffer_size 8k;
240 proxy_buffer_size 16k;
211 proxy_buffers 8 32k;
241 proxy_buffers 4 16k;
212 proxy_busy_buffers_size 64k;
242 proxy_busy_buffers_size 64k;
213 proxy_temp_file_write_size 64k;
243 proxy_temp_file_write_size 64k;
214
244
@@ -257,6 +287,29 b' Additional tutorial'
257 http://wiki.pylonshq.com/display/pylonscookbook/Apache+as+a+reverse+proxy+for+Pylons
287 http://wiki.pylonshq.com/display/pylonscookbook/Apache+as+a+reverse+proxy+for+Pylons
258
288
259
289
290 Apache as subdirectory
291 ----------------------
292
293
294 Apache subdirectory part::
295
296 <Location /rhodecode>
297 ProxyPass http://127.0.0.1:59542/rhodecode
298 ProxyPassReverse http://127.0.0.1:59542/rhodecode
299 SetEnvIf X-Url-Scheme https HTTPS=1
300 </Location>
301
302 Besides the regular apache setup You'll need to add such part to .ini file::
303
304 filter-with = proxy-prefix
305
306 Add the following at the end of the .ini file::
307
308 [filter:proxy-prefix]
309 use = egg:PasteDeploy#prefix
310 prefix = /<someprefix>
311
312
260 Apache's example FCGI config
313 Apache's example FCGI config
261 ----------------------------
314 ----------------------------
262
315
@@ -293,10 +346,13 b' Troubleshooting'
293
346
294 - make sure You set a proper max_body_size for the http server
347 - make sure You set a proper max_body_size for the http server
295
348
349 - Apache doesn't pass basicAuth on pull/push ?
296
350
351 - Make sure You added `WSGIPassAuthorization true`
297
352
298 .. _virtualenv: http://pypi.python.org/pypi/virtualenv
353 .. _virtualenv: http://pypi.python.org/pypi/virtualenv
299 .. _python: http://www.python.org/
354 .. _python: http://www.python.org/
300 .. _mercurial: http://mercurial.selenic.com/
355 .. _mercurial: http://mercurial.selenic.com/
301 .. _celery: http://celeryproject.org/
356 .. _celery: http://celeryproject.org/
302 .. _rabbitmq: http://www.rabbitmq.com/ No newline at end of file
357 .. _rabbitmq: http://www.rabbitmq.com/
358 .. _python-ldap: http://www.python-ldap.org/
@@ -25,6 +25,11 b' This will display any changes made from '
25 current config. And tries to do an automerge. It's always better to do a backup
25 current config. And tries to do an automerge. It's always better to do a backup
26 of config file and recheck the content after merge.
26 of config file and recheck the content after merge.
27
27
28 .. note::
29 The next steps only apply to upgrading from non bugfix releases eg. from
30 any minor or major releases. Bugfix releases (eg. 1.1.2->1.1.3) will
31 not have any database schema changes or whoosh library updates
32
28 It's also good to rebuild the whoosh index since after upgrading the whoosh
33 It's also good to rebuild the whoosh index since after upgrading the whoosh
29 version there could be introduced incompatible index changes.
34 version there could be introduced incompatible index changes.
30
35
@@ -27,7 +27,7 b''
27 # MA 02110-1301, USA.
27 # MA 02110-1301, USA.
28
28
29
29
30 VERSION = (1, 1, 3)
30 VERSION = (1, 1, 4)
31 __version__ = '.'.join((str(each) for each in VERSION[:4]))
31 __version__ = '.'.join((str(each) for each in VERSION[:4]))
32 __dbversion__ = 2 #defines current db version for migrations
32 __dbversion__ = 2 #defines current db version for migrations
33
33
@@ -164,6 +164,8 b' def make_map(config):'
164 map.connect('raw_changeset_home', '/{repo_name:.*}/raw-changeset/{revision}',
164 map.connect('raw_changeset_home', '/{repo_name:.*}/raw-changeset/{revision}',
165 controller='changeset', action='raw_changeset', revision='tip',
165 controller='changeset', action='raw_changeset', revision='tip',
166 conditions=dict(function=check_repo))
166 conditions=dict(function=check_repo))
167 map.connect('summary_home_', '/{repo_name:.*}',
168 controller='summary', conditions=dict(function=check_repo))
167 map.connect('summary_home', '/{repo_name:.*}/summary',
169 map.connect('summary_home', '/{repo_name:.*}/summary',
168 controller='summary', conditions=dict(function=check_repo))
170 controller='summary', conditions=dict(function=check_repo))
169 map.connect('shortlog_home', '/{repo_name:.*}/shortlog',
171 map.connect('shortlog_home', '/{repo_name:.*}/shortlog',
@@ -27,8 +27,9 b''
27
27
28 import logging
28 import logging
29 import traceback
29 import traceback
30 import formencode
30
31
31 import formencode
32 from formencode import htmlfill
32
33
33 from pylons import tmpl_context as c, request, url
34 from pylons import tmpl_context as c, request, url
34 from pylons.controllers.util import redirect
35 from pylons.controllers.util import redirect
@@ -70,7 +71,7 b' class SettingsController(BaseController)'
70 defaults.update({'perm_%s' % p.user.username:
71 defaults.update({'perm_%s' % p.user.username:
71 p.permission.permission_name})
72 p.permission.permission_name})
72
73
73 return formencode.htmlfill.render(
74 return htmlfill.render(
74 render('settings/repo_settings.html'),
75 render('settings/repo_settings.html'),
75 defaults=defaults,
76 defaults=defaults,
76 encoding="UTF-8",
77 encoding="UTF-8",
@@ -95,7 +96,7 b' class SettingsController(BaseController)'
95 c.repo_info = repo_model.get_by_repo_name(repo_name)
96 c.repo_info = repo_model.get_by_repo_name(repo_name)
96 c.users_array = repo_model.get_users_js()
97 c.users_array = repo_model.get_users_js()
97 errors.value.update({'user':c.repo_info.user.username})
98 errors.value.update({'user':c.repo_info.user.username})
98 return formencode.htmlfill.render(
99 return htmlfill.render(
99 render('settings/repo_settings.html'),
100 render('settings/repo_settings.html'),
100 defaults=errors.value,
101 defaults=errors.value,
101 errors=errors.error_dict or {},
102 errors=errors.error_dict or {},
@@ -180,7 +181,7 b' class SettingsController(BaseController)'
180 c.new_repo = errors.value['fork_name']
181 c.new_repo = errors.value['fork_name']
181 r = render('settings/repo_fork.html')
182 r = render('settings/repo_fork.html')
182
183
183 return formencode.htmlfill.render(
184 return htmlfill.render(
184 r,
185 r,
185 defaults=errors.value,
186 defaults=errors.value,
186 errors=errors.error_dict or {},
187 errors=errors.error_dict or {},
@@ -423,7 +423,6 b' def action_parser(user_log):'
423 action, action_params = x
423 action, action_params = x
424
424
425 def get_cs_links():
425 def get_cs_links():
426 if action == 'push':
427 revs_limit = 5
426 revs_limit = 5
428 revs = action_params.split(',')
427 revs = action_params.split(',')
429 cs_links = " " + ', '.join ([link(rev,
428 cs_links = " " + ', '.join ([link(rev,
@@ -446,7 +445,6 b' def action_parser(user_log):'
446 revision=rev)) for rev in revs[revs_limit:] ]))
445 revision=rev)) for rev in revs[revs_limit:] ]))
447
446
448 return cs_links
447 return cs_links
449 return ''
450
448
451 def get_fork_name():
449 def get_fork_name():
452 repo_name = action_params
450 repo_name = action_params
@@ -455,14 +453,14 b' def action_parser(user_log):'
455
453
456 map = {'user_deleted_repo':(_('[deleted] repository'), None),
454 map = {'user_deleted_repo':(_('[deleted] repository'), None),
457 'user_created_repo':(_('[created] repository'), None),
455 'user_created_repo':(_('[created] repository'), None),
458 'user_forked_repo':(_('[forked] repository'), get_fork_name),
456 'user_forked_repo':(_('[forked] repository as'), get_fork_name),
459 'user_updated_repo':(_('[updated] repository'), None),
457 'user_updated_repo':(_('[updated] repository'), None),
460 'admin_deleted_repo':(_('[delete] repository'), None),
458 'admin_deleted_repo':(_('[delete] repository'), None),
461 'admin_created_repo':(_('[created] repository'), None),
459 'admin_created_repo':(_('[created] repository'), None),
462 'admin_forked_repo':(_('[forked] repository'), None),
460 'admin_forked_repo':(_('[forked] repository'), None),
463 'admin_updated_repo':(_('[updated] repository'), None),
461 'admin_updated_repo':(_('[updated] repository'), None),
464 'push':(_('[pushed] into'), get_cs_links),
462 'push':(_('[pushed] '), get_cs_links),
465 'pull':(_('[pulled] from'), None),
463 'pull':(_('[pulled] '), None),
466 'started_following_repo':(_('[started following] repository'), None),
464 'started_following_repo':(_('[started following] repository'), None),
467 'stopped_following_repo':(_('[stopped following] repository'), None),
465 'stopped_following_repo':(_('[stopped following] repository'), None),
468 }
466 }
General Comments 0
You need to be logged in to leave comments. Login now