docs/webui.rst @ c631e35b5827 initial-docs

docs: add a section about deploying a public web ui
author Steve Losh <steve@stevelosh.com>
date Sat, 03 Jul 2010 15:12:25 -0400
parents c549ca1eeb81
children c28a2dae28ef
Web Interface
=============

The web interface of hg-review is probably what you're going to use the most.

Running Locally
---------------

To start the web interface for a local repository that you want to review you
can run ``hg review --web``. Visit http://localhost:8080/ to use it.

When you add comments or signoffs hg-review will use your normal Mercurial
username as the author.

This command can take a few extra options:

``--address ADDRESS``
    The address to bind to. Use ``0.0.0.0`` if you want other people to be able
    to access it.

    **Be careful!** Because the web interface uses your Mercurial username by
    default, binding to ``0.0.0.0`` will let anyone add comments and signoffs
    in your name! You'll probably want to use the ``--read-only`` option to
    prevent this.

    Default: ``127.0.0.1``

``--port PORT``
    The port to listen on.

    Default: ``8080``

``--read-only``
    Run the server in read-only mode. This will not allow data to be pushed or
    pulled, comments to be made or signoffs to be added.

    This can be useful when combined with ``--address`` to let other people
    view the UI without letting them add comments in your name.

    Default: ``false``

``--allow-anon``
    Allow comments (not not signoffs) to be added even if ``--read-only`` is
    used, and set the username to ``Anonymous <anonymous@example.com>`` instead
    of your Mercurial username.

    This option is most useful when you're deploying a permanent web interface
    to a server and want to allow anonymous viewers to add comments. See the
    :ref:`deployment` section for more information.

    Default: ``false``


.. _deployment:

Deployment to a Server
----------------------

Although hg-review is built for *distributed* code review it's sometimes nice
to provide a public interface. This will let people can comment easily without
using the extension (or even cloning your project).

You can use any WSGI server you like to provide a public instance of hg-review.
Before you start you'll need to have Mercurial installed on your web server.

Once you've got Mercurial running on the server you'll need to clone copies of
hg-review, your project, and your project's review data to the web server.
First create a directory where everything will live::

    mkdir /var/www/myproject-review-interface/
    cd /var/www/myproject-review-interface/

Then grab a copy of hg-review::

    hg clone http://bitbucket.org/sjl/hg-review/

Grab a copy of your project and configure it to use the hg-review extension::

    hg clone http://bitbucket.org/you/yourproject/
    cd yourproject

    echo '[extensions]' >> .hg/hgrc
    echo 'review = /var/www/myproject-review-interface/hg-review/review' >> .hg/hgrc

Use hg-review to pull down the review data::

    hg review --init

Now that you've got all the necessary data you can set up the WSGI script.
Start by copying the included sample script::

    cd /var/www/myproject-review-interface/
    cp hg-review/contrib/deploy/wsgi.py wsgi.py

Edit the script to configure your project to your liking. For reference, the
relevant part of the script should look something like this::

    # An example WSGI script for serving hg-review's web UI.
    # Edit as necessary.

    # If hg-review is not on your webserver's PYTHONPATH, uncomment the lines
    # below and point it at the hg-review directory.
    import sys
    sys.path.insert(0, "/var/www/myproject-review-interface/hg-review")

    REPO = '/var/www/myproject-review-interface/myproject'
    READ_ONLY = True
    ALLOW_ANON_COMMENTS = False
    ANON_USER = 'Anonymous <anonymous@example.com>'
    SITE_ROOT = 'http://yoursite.com/optional/path'
    TITLE = 'Your Project'

All that's left is to point your WSGI server at this script and fire it up. How
you do that depends on your WSGI server. A sample configuration file for
`Gunicorn <http://gunicorn.org/>`_ is provided in
``contrib/deploy/gunicorn.conf.py``.