changeset 572:a60cd29ba7e2

more docs update
author Marcin Kuzminski <marcin@python-works.com>
date Sun, 10 Oct 2010 21:34:24 +0200
parents 39d9aca6e266
children 2cd05c5803ad
files README.rst docs/conf.py docs/index.rst docs/installation.rst docs/setup.rst setup.py
diffstat 6 files changed, 277 insertions(+), 136 deletions(-) [+]
line wrap: on
line diff
--- a/README.rst	Sun Oct 10 18:00:54 2010 +0200
+++ b/README.rst	Sun Oct 10 21:34:24 2010 +0200
@@ -1,17 +1,53 @@
-------------------------------------------------
-Pylons based repository management for mercurial
-------------------------------------------------
+
+RhodeCode (RhodiumCode)
+=======================
+
+``RhodeCode`` (formerly hg-app) is Pylons based repository management and 
+serving for mercurial_. It's similar to github or bitbucket, but it's suppose to run
+as standalone app, it's open source and focuses more on restricted access to repositories
+There's no default free access to RhodeCode You have to create an account in order
+to use the application. It's powered by vcs_ library that we created to handle
+many various version control systems.
+
+RhodeCode uses `Semantic Versioning <http://semver.org/>`_
+
+
+RhodeCode demo
+--------------
+
+http://hg.python-works.com
+
+The default access is
 
-**Overview**
+- username: demo
+- password: demo
+
+Source code
+-----------
+
+Source code is along with issue tracker is available at
+http://bitbucket.org/marcinkuzminski/rhodecode
 
-- Has it's own middleware to handle mercurial protocol request. Each request can 
+Also a source codes can be obtained from demo rhodecode instance
+http://hg.python-works.com/rhodecode/summary
+
+Instalation
+-----------
+
+ Please visit http://packages.python.org/rhodecode/installation.html
+
+
+Features
+--------
+
+- Has it's own middleware to handle mercurial_ protocol request. Each request can 
   be logged and authenticated. Runs on threads unlikely to hgweb You can make
   multiple pulls/pushes simultaneous
 - Full permissions and authentication per project private/read/write/admin. 
-  One account for web interface and mercurial push/pull/clone.
+  One account for web interface and mercurial_ push/pull/clone.
 - Mako templates let's you customize look and feel of application.
 - Beautiful diffs, annotations and source codes all colored by pygments.
-- Mercurial branch graph and yui-flot powered graphs with zooming and statistics
+- Mercurial_ branch graph and yui-flot powered graphs with zooming and statistics
 - Admin interface with user/permission management. User activity journal logs
   pulls, pushes, forks,registrations. Possible to disable built in hooks
 - Server side forks, it's possible to fork a project and hack it free without
@@ -20,7 +56,7 @@
   and build in indexing daemons
   (no external search servers required all in one application)
 - Rss / atom feeds, gravatar support, download sources as zip/tarballs  
-- Async tasks for speed and performance using celery (works without them too)  
+- Async tasks for speed and performance using celery_ (works without them too)  
 - Backup scripts can do backup of whole app and send it over scp to desired 
   location
 - Setup project descriptions and info inside built in db for easy, non 
@@ -29,59 +65,29 @@
   always up to date data. 
 - Based on pylons 1.0 / sqlalchemy 0.6 / sqlite
 
-**Incoming**
 
-- code review based on hg-review (when it's stable)
-- git support (when vcs can handle it - almost there !)
-- commit based wikis
-- clonning from remote repositories into rhodecode (git/mercurial)
-- other cools stuff that i can figure out (or You can help me figure out)
-   
-------------
-Installation
-------------
+Incoming
+--------
 
-**quick setup**
- 
-- pip install -E rhodecode-venv rhodecode
-- activate virtualenv
-- run `paster make-config RhodeCode production.ini`
-- run `paster setup-app production.ini`
-- run `paster runserver production.ini`
-
-You're ready to go.
-
-**MORE DETAILED INSTRUCTIONS**
+- code review (probably based on hg-review)
+- git_ support (when vcs_ can handle it - it's almost there !)
+- commit based build in wiki system
+- clone points and cloning from remote repositories into rhodecode (git_ and mercurial_)
+- some cache optimizations
+- other cools stuff that i can figure out (or You can help me figure out)
 
-- I highly recommend to install new virtualenv for rhodecode see 
-  http://pypi.python.org/pypi/virtualenv for more details.
-- Create new virtualenv using `virtualenv --no-site-packages /var/www/rhodecode-venv`
-  this will install new virtual env into /var/www/rhodecode-venv. 
-  Activate the virtualenv by running 
-  `source activate /var/www/rhodecode-venv/bin/activate`   
-- Make a folder for rhodecode somewhere on the filesystem for example /var/www/rhodecode  
-- Run easy_install rhodecode
-- Run `paster make-config RhodeCode production.inii` in order to install 
-  the application config. You can play with the app settings later 
-- Run `paster setup-app production.ini` it should create all needed tables 
-  and an admin account make sure You specify correct path to repositories. 
-- Remember that the given path for mercurial repositories must be write 
-  accessible for the application
-- Run paster serve production.ini - or you can use sample init.d scripts.
-  the app should be available at the 127.0.0.1:5000
-- Use admin account you created to login.
-- Default permissions on each repository is read, and owner is admin. So remember
-  to update these.
-- In order to use full power of async tasks, You must install message broker
-  preferably rabbitmq and start celeryd daemon together with rhodecode. 
-  The app should gain a lot of speed and become much more responsible. 
-  For installation instructions You can visit: 
-  http://ask.github.com/celery/getting-started/index.html. 
-- All needed configs are inside rhodecode sources ie. celeryconfig.py, 
-  development.ini, production.ini You can configure the email, ports, loggers, 
-  workers from there.
-- For full text search You can either put crontab entry for 
-  `python /var/www/rhodecode/rhodecode/lib/indexers/daemon.py incremental <path_to_repos>`
-  or run indexer from admin panel. This will scann the repos given in the 
-  application setup or given path for daemon.py and each scann in incremental 
-  mode will scann only changed files.
\ No newline at end of file
+License
+-------
+
+``rhodecode`` is released under GPL_ license.
+
+
+Documentation
+-------------
+
+ Online documentation for current version is available at
+ http://packages.python.org/rhodecode/.
+ You may also build documentation for yourself - go into ``docs/`` and run::
+
+   make html
+
--- a/docs/conf.py	Sun Oct 10 18:00:54 2010 +0200
+++ b/docs/conf.py	Sun Oct 10 21:34:24 2010 +0200
@@ -120,7 +120,7 @@
 # Add any paths that contain custom static files (such as style sheets) here,
 # relative to this directory. They are copied after the builtin static files,
 # so a file named "default.css" will overwrite the builtin "default.css".
-html_static_path = ['_static']
+#html_static_path = ['_static']
 
 # If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
 # using the given strftime format.
--- a/docs/index.rst	Sun Oct 10 18:00:54 2010 +0200
+++ b/docs/index.rst	Sun Oct 10 21:34:24 2010 +0200
@@ -3,12 +3,18 @@
 Welcome to RhodeCode (RhodiumCode) documentation!
 =================================================
 
-``RhodeCode`` is Pylons based repository management and serving for mercurial. 
-It's similar to github or bitbucket, but focuses more on closed access restrictions.
+``RhodeCode`` (formerly hg-app) is Pylons based repository management and 
+serving for mercurial_. It's similar to github or bitbucket, but it's suppose to run
+as standalone app, it's open source and focuses more on restricted access to repositories
 There's no default free access to RhodeCode You have to create an account in order
-to use the application. 
+to use the application. It's powered by vcs_ library that we created to handle
+many various version control systems.
 
-**RhodeCode demo is available at**
+RhodeCode uses `Semantic Versioning <http://semver.org/>`_
+
+
+RhodeCode demo
+--------------
 
 http://hg.python-works.com
 
@@ -17,18 +23,26 @@
 - username: demo
 - password: demo
 
-RhodeCode uses `Semantic Versioning <http://semver.org/>`_
+Source code
+-----------
+
+Source code is along with issue tracker is available at
+http://bitbucket.org/marcinkuzminski/rhodecode
 
-**Features**
+Also a source codes can be obtained from demo rhodecode instance
+http://hg.python-works.com/rhodecode/summary
 
-- Has it's own middleware to handle mercurial protocol request. Each request can 
+Features
+--------
+
+- Has it's own middleware to handle mercurial_ protocol request. Each request can 
   be logged and authenticated. Runs on threads unlikely to hgweb You can make
   multiple pulls/pushes simultaneous
 - Full permissions and authentication per project private/read/write/admin. 
-  One account for web interface and mercurial push/pull/clone.
+  One account for web interface and mercurial_ push/pull/clone.
 - Mako templates let's you customize look and feel of application.
 - Beautiful diffs, annotations and source codes all colored by pygments.
-- Mercurial branch graph and yui-flot powered graphs with zooming and statistics
+- Mercurial_ branch graph and yui-flot powered graphs with zooming and statistics
 - Admin interface with user/permission management. User activity journal logs
   pulls, pushes, forks,registrations. Possible to disable built in hooks
 - Server side forks, it's possible to fork a project and hack it free without
@@ -37,7 +51,7 @@
   and build in indexing daemons
   (no external search servers required all in one application)
 - Rss / atom feeds, gravatar support, download sources as zip/tarballs  
-- Async tasks for speed and performance using celery (works without them too)  
+- Async tasks for speed and performance using celery_ (works without them too)  
 - Backup scripts can do backup of whole app and send it over scp to desired 
   location
 - Setup project descriptions and info inside built in db for easy, non 
@@ -58,16 +72,24 @@
    Summary page
 
 
-**Incoming**
+Incoming
+--------
 
-- code review based on hg-review (when it's stable)
-- git support (when vcs can handle it - almost there !)
-- commit based wikis
-- clonning from remote repositories into rhodecode (git/mercurial)
+- code review (probably based on hg-review)
+- git_ support (when vcs_ can handle it - it's almost there !)
+- commit based build in wiki system
+- clone points and cloning from remote repositories into rhodecode (git_ and mercurial_)
+- some cache optimizations
 - other cools stuff that i can figure out (or You can help me figure out)
 
+License
+-------
+
+``rhodecode`` is released under GPL_ license.
+
+
 Documentation
-=============
+-------------
 
 **Installation:**
 
@@ -78,13 +100,18 @@
    setup
 
 Other topics
-============
+------------
 
 * :ref:`genindex`
 * :ref:`search`
 
+.. _virtualenv: http://pypi.python.org/pypi/virtualenv
 .. _python: http://www.python.org/
 .. _django: http://www.djangoproject.com/
 .. _mercurial: http://mercurial.selenic.com/
 .. _subversion: http://subversion.tigris.org/
-.. _git: http://git-scm.com/
\ No newline at end of file
+.. _git: http://git-scm.com/
+.. _celery: http://celeryproject.org/
+.. _Sphinx: http://sphinx.pocoo.org/
+.. _GPL: http://www.gnu.org/licenses/gpl.html
+.. _vcs: http://pypi.python.org/pypi/vcs
--- a/docs/installation.rst	Sun Oct 10 18:00:54 2010 +0200
+++ b/docs/installation.rst	Sun Oct 10 21:34:24 2010 +0200
@@ -6,12 +6,10 @@
 ``RhodeCode`` is written entirely in Python, but in order to use it's full
 potential there are some third-party requirements. When RhodeCode is used 
 together with celery You have to install some kind of message broker,
-recommended one is rabbitmq to make the async tasks work.
-For installation instructions You can visit: 
-http://ask.github.com/celery/getting-started/index.html.
+recommended one is rabbitmq_ to make the async tasks work.
 
 Of course RhodeCode works in sync mode also, then You don't have to install
-any third party apps. Celery will give You large speed improvement when using
+any third party apps. Celery_ will give You large speed improvement when using
 many big repositories. If You plan to use it for 2 or 3 small repositories, it
 will work just fine without celery running.
    
@@ -26,6 +24,9 @@
 - preferred is `RabbitMq <http://www.rabbitmq.com/>`_
 - possible other is `Redis <http://code.google.com/p/redis/>`_
 
+For installation instructions You can visit: 
+http://ask.github.com/celery/getting-started/index.html
+It's very nice tutorial how to start celery_ with rabbitmq_
 
 Install from Cheese Shop
 ------------------------
@@ -36,7 +37,7 @@
 
 Or::
 
-   pip install rhodecode
+ pip install rhodecode
 
 If you prefer to install manually simply grab latest release from
 http://pypi.python.org/pypi/rhodecode, decompres archive and run::
@@ -44,52 +45,45 @@
    python setup.py install
 
 
-**Setting up the application**
-I recommend to run the RhodeCode in separate virtualenv.
-See http://pypi.python.org/pypi/virtualenv for more details.
-
-- run `paster make-config RhodeCode production.ini` make specific application
-  config, 
-- run `paster setup-app production.ini` makes the database, and propagates it
-  with default data, In this step You have to provide admin username and repositories
-  location, it can be a new location or with existing ones in that case RhodeCode
-  will scann all new found repos and put it into database.
-- run `paster runserver production.ini` runs the server.
-
-
-**STEP BY STEP EXAMPLE INSTRUCTION**
+Step by step installation example
+---------------------------------
 
 
-- Assuming You have setup virtualenv create one using 
-  `virtualenv --no-site-packages /var/www/rhodecode-venv`
-  this will install new virtual env into /var/www/rhodecode-venv. 
-- Activate the virtualenv by running 
-  `source activate /var/www/rhodecode-venv/bin/activate`   
+- Assuming You have installed virtualenv_ create one using. The `--no-site-packages`
+  will make sure non of Your system libs are linked with this virtualenv_  
+
+::
+
+ virtualenv --no-site-packages /var/www/rhodecode-venv
+
+- this will install new virtualenv_ into `/var/www/rhodecode-venv`. 
+- Activate the virtualenv_ by running 
+
+::
+
+  source activate /var/www/rhodecode-venv/bin/activate
+     
 - Make a folder for rhodecode somewhere on the filesystem for example 
-  /var/www/rhodecode  
-- Run easy_install rhodecode, this will install rhodecode together with pylons
+
+::
+
+  mkdir /var/www/rhodecode
+  
+    
+- Run this command to install rhodecode
+
+::
+
+  easy_install rhodecode 
+
+- this will install rhodecode together with pylons
   and all other required python libraries
-- Run `paster make-config RhodeCode production.ini` in order to install 
-  the application config. 
-- Run `paster setup-app production.ini` it should create all needed tables 
-  and an admin account. Also make sure You specify correct path to repositories.
-  You can either use a new location of one with already exising ones. RhodeCode
-  will simply add all new found repositories to it's database. 
-- Remember that the given path for mercurial repositories must be write 
-  accessible for the application. It's very important since RhodeCode web interface
-  will work even without such an access but, when trying to do a push it's eventually
-  failed with permission denied. 
-- Run `paster serve production.ini`
-  the app should be available at the 127.0.0.1:5000
-- Use admin account you created to login.
-- Default permissions on each repository is read, and owner is admin. So remember
-  to update these.
+
+
+You can now proceed to :ref:`setup`
 
-- All needed configs are inside rhodecode sources ie. celeryconfig.py, 
-  development.ini, production.ini You can configure the email, ports, loggers, 
-  workers from there.
-- For full text search You can either put crontab entry for 
-  `python /var/www/rhodecode/rhodecode/lib/indexers/daemon.py incremental <path_to_repos>`
-  or run indexer from admin panel. This will scann the repos given in the 
-  application setup or given path for daemon.py and each scann in incremental 
-  mode will scan only changed files.
\ No newline at end of file
+.. _virtualenv: http://pypi.python.org/pypi/virtualenv  
+.. _python: http://www.python.org/
+.. _mercurial: http://mercurial.selenic.com/
+.. _celery: http://celeryproject.org/
+.. _rabbitmq: http://www.rabbitmq.com/
\ No newline at end of file
--- a/docs/setup.rst	Sun Oct 10 18:00:54 2010 +0200
+++ b/docs/setup.rst	Sun Oct 10 21:34:24 2010 +0200
@@ -4,13 +4,118 @@
 =====
 
 
+Setting up the application
+--------------------------
+
+::
+ 
+ paster make-config RhodeCode production.ini
+
+- This will create `production.ini` config inside the directory
+  this config contain various settings for rhodecode, e.g port, email settings
+  static files, cache and logging.
+
+::
+
+ paster setup-app production.ini` 
+
+- This command will create all needed tables and an admin account. 
+  When asked for a path You can either use a new location of one with already 
+  existing ones. RhodeCode will simply add all new found repositories to 
+  it's database. Also make sure You specify correct path to repositories.
+- Remember that the given path for mercurial_ repositories must be write 
+  accessible for the application. It's very important since RhodeCode web interface
+  will work even without such an access but, when trying to do a push it'll 
+  eventually faile with permission denied errors. 
+- Run 
+
+::
+ 
+ paster serve production.ini
+ 
+- This command runs the rhodecode server the app should be available at the 
+  127.0.0.1:5000. This ip and port is configurable via the production.ini 
+  file  created in previos step
+- Use admin account you created to login.
+- Default permissions on each repository is read, and owner is admin. So 
+  remember to update these.
+
 - All needed configs are inside rhodecode sources ie. celeryconfig.py, 
   development.ini, production.ini You can configure the email, ports, loggers, 
   workers from there.
-- For full text search You can either put crontab entry for 
-  `python /var/www/rhodecode/rhodecode/lib/indexers/daemon.py incremental <path_to_repos>`
-  or run indexer from admin panel. This will scann the repos given in the 
-  application setup or given path for daemon.py and each scann in incremental 
-  mode will scan only changed files.
+  
+Setting up Whoosh
+-----------------
+
+- For full text search You can either put crontab entry for
+
+::
+ 
+ python /var/www/rhodecode/rhodecode/lib/indexers/daemon.py incremental <put_here_path_to_repos>
+  
+When using incremental mode whoosh will check last modification date of each file
+and add it to reindex if newer file is available. Also indexing daemon checks
+for removed files and removes them from index. Sometime You might want to rebuild
+index from scrach, in admin pannel You can check `build from scratch` flag
+and in standalone daemon You can pass `full` instead on incremental to build
+remove previos index and build new one.
+
+Nginx virtual host example
+--------------------------
+
+Sample config for nginx::
+
+ server {
+    listen          80;
+    server_name     hg.myserver.com;
+    access_log      /var/log/nginx/rhodecode.access.log;
+    error_log      /var/log/nginx/rhodecode.error.log;
+    location / {
+            root /var/www/rhodecode/rhodecode/public/;
+            if (!-f $request_filename){
+                proxy_pass      http://127.0.0.1:5000;
+            }
+            #this is important for https !!!
+            proxy_set_header X-Url-Scheme $scheme;
+            include         /etc/nginx/proxy.conf;  
+    }
+ }  
   
-TODO: write that !
\ No newline at end of file
+Here's the proxy.conf. It's tunned so it'll not timeout on long
+pushes and also on large pushes::
+
+    proxy_redirect              off;
+    proxy_set_header            Host $host;
+    proxy_set_header            X-Host $http_host;
+    proxy_set_header            X-Real-IP $remote_addr;
+    proxy_set_header            X-Forwarded-For $proxy_add_x_forwarded_for;
+    proxy_set_header            Proxy-host $proxy_host;
+    client_max_body_size        400m;
+    client_body_buffer_size     128k;
+    proxy_buffering             off;
+    proxy_connect_timeout       3600;
+    proxy_send_timeout          3600;
+    proxy_read_timeout          3600;
+    proxy_buffer_size           8k;
+    proxy_buffers               8 32k;
+    proxy_busy_buffers_size     64k;
+    proxy_temp_file_write_size  64k;
+ 
+Also when using root path with nginx You might set the static files to false
+in production.ini file::
+
+  [app:main]
+    use = egg:rhodecode
+    full_stack = true
+    static_files = false
+    lang=en
+    cache_dir = %(here)s/data
+
+To not have the statics served by the application.
+
+
+.. _virtualenv: http://pypi.python.org/pypi/virtualenv
+.. _python: http://www.python.org/
+.. _mercurial: http://mercurial.selenic.com/
+.. _celery: http://celeryproject.org/
+.. _rabbitmq: http://www.rabbitmq.com/
\ No newline at end of file
--- a/setup.py	Sun Oct 10 18:00:54 2010 +0200
+++ b/setup.py	Sun Oct 10 21:34:24 2010 +0200
@@ -15,6 +15,14 @@
         "babel",
     ]
 
+classifiers = ['Development Status :: 4 - Beta',
+                   'Environment :: Web Environment',
+                   'Framework :: Pylons',
+                   'Intended Audience :: Developers',
+                   'License :: OSI Approved :: BSD License',
+                   'Operating System :: OS Independent',
+                   'Programming Language :: Python', ]
+
 if sys.version_info < (2, 6):
     requirements.append("simplejson")
     requirements.append("pysqlite")
@@ -51,12 +59,13 @@
     version=get_version(),
     description=description,
     long_description=long_description,
-    keywords='mercurial web hgwebdir replacement serving hgweb rhodecode',
+    keywords='rhodiumcode mercurial web hgwebdir replacement serving hgweb rhodecode',
     license='BSD',
     author='Marcin Kuzminski',
     author_email='marcin@python-works.com',
     url='http://hg.python-works.com',
     install_requires=requirements,
+    classifiers=classifiers,
     setup_requires=["PasteScript>=1.6.3"],
     data_files=data_files,
     packages=packages,