docs/hacking: add an initial hacking doc
author |
Steve Losh <steve@stevelosh.com> |
date |
Tue, 13 Jul 2010 01:05:28 -0400 |
parents |
1b682f65a464
|
children |
d0f41ff4e65e
|
branches/tags |
initial-docs |
files |
docs/hacking.rst |
Changes
--- a/docs/hacking.rst Tue Jul 13 00:32:31 2010 -0400
+++ b/docs/hacking.rst Tue Jul 13 01:05:28 2010 -0400
@@ -1,11 +1,161 @@
Hacking hg-review
=================
+Want to improve hg-review? Great!
+
+The easiest way is to make some changes, push them somewhere public and send
+a pull request on Bitbucket (or `email Steve <mailto:steve@stevelosh.com>`_).
+
+Here's what you need to know.
+
+Rough Guidelines
+----------------
+
+Here's a few tips that will make hg-review's maintainer happier.
+
+Basic Coding Style
+''''''''''''''''''
+
+Keep lines of code under 85 characters, unless it makes things *really* ugly.
+
+Indentation is four spaces. Tabs are evil.
+
+Commit Messages
+'''''''''''''''
+
+Commit messages should start with a line like::
+
+ api: add feature X
+
+The first part is the component the change affects, like ``api``, ``cli``,
+``web``, ``docs/api``, or ``guts``.
+
+``guts`` is a catchall for changesets that affect everything at once -- using
+it means that the changeset could probably be split up into separate smallet
+changesets.
+
+The rest of the commit message should describe the change.
+
+Tests
+'''''
+
+Update the tests *in the same changeset as your change*. This makes bisection
+by running the test suite easier.
+
+If your changeset changes the CLI output, make sure you've read the next
+section and then add a test for it *in the same changeset*.
+
+If your changeset adds a new feature, add a test for it *in the same
+changeset*.
+
+If your changeset fixes a bug, add a test that would reproduce the bug *in the
+same changeset*.
+
+Backwards Compatibility
+'''''''''''''''''''''''
+
+hg-review's internal implementation is not stable. Feel free to modify it
+however you like. Patches that clean up the code and/or enhance performance
+will be gladly accepted.
+
+hg-review's file format is stable, but new fields may be added at any time.
+Removing a field or changing its format is not allowed without a very good
+reason. Adding an entirely new file format may be acceptable if there is
+a compelling reason.
+
+hg-review's command line interface is stable. Adding new commands or adding new
+options to existing commands is fine if they prove useful. Removing commands or
+radically changing the default output of existing commands is not acceptable
+except in extreme cases.
+
+hg-review is currently compatible with Python 2.5+ and Mercurial 1.6+. Patches
+that break this compatibility will be met with a large dose of skepticism.
+
Layout
------
+hg-review's basic structure looks like this::
+
+ hg-review/
+ |
+ +-- bundled/
+ | |
+ | `-- ... bundled third-party modules ...
+ |
+ +-- contrib/
+ | |
+ | `-- ... useful items not critical to hg-review's core ...
+ |
+ +-- docs/
+ | |
+ | `-- ... the documentation (and theme) ...
+ |
+ +-- review/
+ | |
+ | +-- static/
+ | | |
+ | | `-- ... static media for the web ui ...
+ | |
+ | +-- templates/
+ | | |
+ | | `-- ... jinja2 templates for the web ui ...
+ | |
+ | +-- tests/
+ | | |
+ | | ` ... unit test files and accompanying utilities ...
+ | |
+ | +-- api.py # the core hg-review backend
+ | |
+ | +-- cli.py # the hg-review Mercurial extension CLI
+ | |
+ | +-- messages.py # messages used by the CLI
+ | |
+ | +-- helps.py # help text for the CLI commands
+ | |
+ | +-- rutil.py # useful utilities
+ | |
+ | `-- web.py # the web interface
+ |
+ +-- README.markdown
+ |
+ +-- LICENSE
+ |
+ +-- fabfile.py
+ |
+ `-- kick.py
+
Testing
-------
+hg-review contains a test suite for the command line interface (and therefore
+the backend API as well).
+
+The tests can be run easily with nose. If you don't have node, you'll need to
+install it first:
+
+ pip install nose
+
+Once you've got it you can run the suite by cd'ing to the hg-review directory
+and running ``nosetests``.
+
+Before submitting a changeset please make sure it doesn't break any tests.
+
+If your changeset adds a new feature, add a test for it *in the same
+changeset*.
+
+If your changeset fixes a bug, add a test that would reproduce the bug *in the
+same changeset*.
+
Documentation
-------------
+
+If you want to submit a patch, please update the documentation to reflect your
+change (if necessary) *in the same changeset*.
+
+The documentation is formatted as restructured text and built with Sphinx
+(version 0.6.7).
+
+The CSS for the documentation is written with LessCSS. If you want to update
+the style you should update the ``docs/hgreview/static/review.less`` file and
+render it to CSS. Include the changes to the ``.less`` file *and* the ``.css``
+file in your changeset.