30864e67432f initial-docs

merge with default
[view raw] [browse files]
author Steve Losh <steve@stevelosh.com>
date Tue, 15 Jun 2010 19:23:15 -0400
parents 9307f4023849 (diff) d5280b38dd4c (current diff)
children c549ca1eeb81
branches/tags initial-docs
files

Changes

--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/docs/Makefile	Tue Jun 15 19:23:15 2010 -0400
@@ -0,0 +1,89 @@
+# Makefile for Sphinx documentation
+#
+
+# You can set these variables from the command line.
+SPHINXOPTS    =
+SPHINXBUILD   = sphinx-build
+PAPER         =
+BUILDDIR      = _build
+
+# Internal variables.
+PAPEROPT_a4     = -D latex_paper_size=a4
+PAPEROPT_letter = -D latex_paper_size=letter
+ALLSPHINXOPTS   = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
+
+.PHONY: help clean html dirhtml pickle json htmlhelp qthelp latex changes linkcheck doctest
+
+help:
+	@echo "Please use \`make <target>' where <target> is one of"
+	@echo "  html      to make standalone HTML files"
+	@echo "  dirhtml   to make HTML files named index.html in directories"
+	@echo "  pickle    to make pickle files"
+	@echo "  json      to make JSON files"
+	@echo "  htmlhelp  to make HTML files and a HTML help project"
+	@echo "  qthelp    to make HTML files and a qthelp project"
+	@echo "  latex     to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
+	@echo "  changes   to make an overview of all changed/added/deprecated items"
+	@echo "  linkcheck to check all external links for integrity"
+	@echo "  doctest   to run all doctests embedded in the documentation (if enabled)"
+
+clean:
+	-rm -rf $(BUILDDIR)/*
+
+html:
+	$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
+	@echo
+	@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
+
+dirhtml:
+	$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
+	@echo
+	@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
+
+pickle:
+	$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
+	@echo
+	@echo "Build finished; now you can process the pickle files."
+
+json:
+	$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
+	@echo
+	@echo "Build finished; now you can process the JSON files."
+
+htmlhelp:
+	$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
+	@echo
+	@echo "Build finished; now you can run HTML Help Workshop with the" \
+	      ".hhp project file in $(BUILDDIR)/htmlhelp."
+
+qthelp:
+	$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
+	@echo
+	@echo "Build finished; now you can run "qcollectiongenerator" with the" \
+	      ".qhcp project file in $(BUILDDIR)/qthelp, like this:"
+	@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/hg-review.qhcp"
+	@echo "To view the help file:"
+	@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/hg-review.qhc"
+
+latex:
+	$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
+	@echo
+	@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
+	@echo "Run \`make all-pdf' or \`make all-ps' in that directory to" \
+	      "run these through (pdf)latex."
+
+changes:
+	$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
+	@echo
+	@echo "The overview file is in $(BUILDDIR)/changes."
+
+linkcheck:
+	$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
+	@echo
+	@echo "Link check complete; look for any errors in the above output " \
+	      "or in $(BUILDDIR)/linkcheck/output.txt."
+
+doctest:
+	$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
+	@echo "Testing of doctests in the sources finished, look at the " \
+	      "results in $(BUILDDIR)/doctest/output.txt."
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/docs/cli.rst	Tue Jun 15 19:23:15 2010 -0400
@@ -0,0 +1,19 @@
+Command Line Interface
+======================
+
+hg-review provides a command line interface.
+
+review
+------
+
+``--comment``
+-------------
+
+``--signoff``
+-------------
+
+``--check``
+-----------
+
+``--web``
+---------
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/docs/concepts.rst	Tue Jun 15 19:23:15 2010 -0400
@@ -0,0 +1,148 @@
+Concepts
+========
+
+You're not perfect.
+
+Your code is not perfect.
+
+If you're the only person that's read your code, it's wrong. Period.
+
+As developers we need to review each other's code. This helps us catch errors
+before they find our users. It also makes us take greater care when writing
+code because we know someone will most definitely be looking at it.
+
+Code Review Basics
+------------------
+
+The simplest form of code review is asking a friend to look at the code you
+just wrote. Often a second set of eyes can find problems you might not have
+seen, especially if that person has more experience than you.
+
+Unfortunately, this isn't always practical. You might work remotely with people
+thousands of miles away and not have a chance to simply turn around and say:
+"Hey, could you look at this?"
+
+Code review tools (like hg-review) exist to make reviewing other people's code
+easier.
+
+Their goal is to make it as easy as possible to tell another developer: "No,
+you did *this* wrong.  Fix it."
+
+Other Code Review Tools
+-----------------------
+
+There are a lot of "code review tools" out there.
+
+The primary author of hg-review has a lot of experience with `Atlassian
+Crucible <http://www.atlassian.com/software/crucible/>`_, but some other
+popular tools include:
+
+* `Rietveld <http://codereview.appspot.com/>`_
+* `Reviewboard <http://www.reviewboard.org/>`_
+* `Gerrit <http://code.google.com/p/gerrit/>`_
+* `Code Collaborator <http://smartbear.com/codecollab.php>`_
+
+All of these tools try to accomplish the same goal: making it easy for
+developers to tell each other how to write better code.
+
+hg-review has the same goal, but it goes about it a little differently.
+
+Distributed Code Review
+-----------------------
+
+Let's back up for just a second and talk about version control. Some of the
+most popular version control systems a few years ago were *centralized* systems
+like `Subversion <http://subversion.apache.org/>`_ and
+`CVS <http://www.nongnu.org/cvs/>`_.
+
+With these systems you had a central server that contained all the history of
+your project. You would push changes to this central server and it would store
+them.
+
+In the past half-decade or so there has been a move toward *decentralized* or
+*distrubuted* version control systems. With these systems you commit to your
+local machine and then *push* and *pull* your commits to other people.
+
+Code review tools, however, seem to have remained rooted in the "centralized
+server" approach.  Even the tools that support decentralized version control
+systems like `git <http://git-scm.com>`_ and `Mercurial <http://hg-scm.org>`_
+rely on a central server to store the code review data.
+
+hg-review does away with the "centralized data store" model and embraces
+Mercurial's distributed nature. Code review data is held in a normal Mercurial
+repository and can be pushed and pulled like any other type of data.
+
+This has several advantages, the biggest one being that you can review code
+while offline (while in a bus, plane, train or car, or example) without
+sacrificing any functionality.
+
+It also means that the full power of Mercurial, such as tracking history and
+signing changesets with GPG, can be brought to bear on the review data.
+
+Review Data
+-----------
+
+hg-review tracks two kinds of code review data: comments and signoffs.
+
+Comments are simple comments that people make about changesets. People can
+comment on:
+
+* A changeset as a whole.
+* A specific file within a changeset.
+* One or more lines of a specific file within a changeset.
+
+Signoffs, on the other hand, *always* apply to a changeset as a whole. Each
+person can have on signoff for any particular changeset (though they can edit
+their signoff later).
+
+Signoffs can be used for whatever purpose your project might find useful, but
+the author of hg-review recommends that they be used to mean:
+
+    I approve of this changeset and think it should make its way to production.
+
+for signoffs of "Yes" and: 
+
+    I do not approve of this changeset and do not think it should make its way to
+    production without another changeset on top of it that fixes the problems
+    I have listed.
+
+for signoffs of "No."
+
+Signoffs of "neutral" might mean:
+
+    This changeset doesn't really impact me, so I don't care.
+
+or:
+
+    I've looked at this code but don't have the expertise to provide a useful
+    opinion.
+
+
+Repository Structure
+--------------------
+
+While it's not necessary to know exactly how the guts of hg-review work, it
+*is* helpful to understand the basic idea behind it.
+
+Let's say you have a project with a Mercurial repository in
+``~/src/yourproject/`` and you'd like to start using hg-review with it.
+
+The first thing to understand is that Mercurial itself stores data about this
+local repository in ``~/src/yourproject/.hg/``, and that data is local to your
+machine. It is never committed or tracked by Mercurial, but is instead used by
+the Mercurial program itself to work with your repository.
+
+hg-review creates a *separate* Mercurial repository to keep track of its data.
+It stores this repository in ``~/src/yourproject/.hg/review/``.
+
+Because this is inside of Mercurial's internal ``.hg`` directory of your
+project, changes to the review data (like comments and signoffs) won't be
+tracked by your project's repository.
+
+Instead, hg-review manages its own data in its own repository to avoid
+cluttering up your project's log with useless "added a comment"-type commits.
+
+This structure means that you can ``cd`` into the review data repository itself
+and interact with it just as you would a normal Mercurial repository. You can
+``push`` and ``pull`` to and from other people, backout changesets, and do
+anything else you could with a normal Mercurial repository.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/docs/conf.py	Tue Jun 15 19:23:15 2010 -0400
@@ -0,0 +1,195 @@
+# -*- coding: utf-8 -*-
+#
+# hg-review documentation build configuration file, created by
+# sphinx-quickstart on Mon Jun 14 20:39:45 2010.
+#
+# This file is execfile()d with the current directory set to its containing dir.
+#
+# Note that not all possible configuration values are present in this
+# autogenerated file.
+#
+# All configuration values have a default; values that are commented out
+# serve to show the default.
+
+import sys, os
+
+# If extensions (or modules to document with autodoc) are in another directory,
+# add these directories to sys.path here. If the directory is relative to the
+# documentation root, use os.path.abspath to make it absolute, like shown here.
+#sys.path.append(os.path.abspath('.'))
+
+# -- General configuration -----------------------------------------------------
+
+# Add any Sphinx extension module names here, as strings. They can be extensions
+# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
+extensions = []
+
+# Add any paths that contain templates here, relative to this directory.
+templates_path = ['_templates']
+
+# The suffix of source filenames.
+source_suffix = '.rst'
+
+# The encoding of source files.
+#source_encoding = 'utf-8'
+
+# The master toctree document.
+master_doc = 'index'
+
+# General information about the project.
+project = u'hg-review'
+copyright = u'2010, Steve Losh'
+
+# The version info for the project you're documenting, acts as replacement for
+# |version| and |release|, also used in various other places throughout the
+# built documents.
+#
+# The short X.Y version.
+version = 'pre-alpha'
+# The full version, including alpha/beta/rc tags.
+release = 'pre-alpha'
+
+# The language for content autogenerated by Sphinx. Refer to documentation
+# for a list of supported languages.
+#language = None
+
+# There are two options for replacing |today|: either, you set today to some
+# non-false value, then it is used:
+#today = ''
+# Else, today_fmt is used as the format for a strftime call.
+#today_fmt = '%B %d, %Y'
+
+# List of documents that shouldn't be included in the build.
+#unused_docs = []
+
+# List of directories, relative to source directory, that shouldn't be searched
+# for source files.
+exclude_trees = ['_build']
+
+# The reST default role (used for this markup: `text`) to use for all documents.
+#default_role = None
+
+# If true, '()' will be appended to :func: etc. cross-reference text.
+#add_function_parentheses = True
+
+# If true, the current module name will be prepended to all description
+# unit titles (such as .. function::).
+#add_module_names = True
+
+# If true, sectionauthor and moduleauthor directives will be shown in the
+# output. They are ignored by default.
+#show_authors = False
+
+# The name of the Pygments (syntax highlighting) style to use.
+pygments_style = 'sphinx'
+
+# A list of ignored prefixes for module index sorting.
+#modindex_common_prefix = []
+
+
+# -- Options for HTML output ---------------------------------------------------
+
+# The theme to use for HTML and HTML Help pages.  Major themes that come with
+# Sphinx are currently 'default' and 'sphinxdoc'.
+html_theme_path = ['.']
+html_theme = 'hgreview'
+
+# Theme options are theme-specific and customize the look and feel of a theme
+# further.  For a list of options available for each theme, see the
+# documentation.
+#html_theme_options = {}
+
+# Add any paths that contain custom themes here, relative to this directory.
+#html_theme_path = []
+
+# The name for this set of Sphinx documents.  If None, it defaults to
+# "<project> v<release> documentation".
+#html_title = None
+
+# A shorter title for the navigation bar.  Default is the same as html_title.
+#html_short_title = None
+
+# The name of an image file (relative to this directory) to place at the top
+# of the sidebar.
+#html_logo = None
+
+# The name of an image file (within the static path) to use as favicon of the
+# docs.  This file should be a Windows icon file (.ico) being 16x16 or 32x32
+# pixels large.
+#html_favicon = None
+
+# 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']
+
+# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
+# using the given strftime format.
+#html_last_updated_fmt = '%b %d, %Y'
+
+# If true, SmartyPants will be used to convert quotes and dashes to
+# typographically correct entities.
+#html_use_smartypants = True
+
+# Custom sidebar templates, maps document names to template names.
+#html_sidebars = {}
+
+# Additional templates that should be rendered to pages, maps page names to
+# template names.
+#html_additional_pages = {}
+
+# If false, no module index is generated.
+#html_use_modindex = True
+
+# If false, no index is generated.
+#html_use_index = True
+
+# If true, the index is split into individual pages for each letter.
+#html_split_index = False
+
+# If true, links to the reST sources are added to the pages.
+#html_show_sourcelink = True
+
+# If true, an OpenSearch description file will be output, and all pages will
+# contain a <link> tag referring to it.  The value of this option must be the
+# base URL from which the finished HTML is served.
+#html_use_opensearch = ''
+
+# If nonempty, this is the file name suffix for HTML files (e.g. ".xhtml").
+#html_file_suffix = ''
+
+# Output file base name for HTML help builder.
+htmlhelp_basename = 'hg-reviewdoc'
+
+
+# -- Options for LaTeX output --------------------------------------------------
+
+# The paper size ('letter' or 'a4').
+#latex_paper_size = 'letter'
+
+# The font size ('10pt', '11pt' or '12pt').
+#latex_font_size = '10pt'
+
+# Grouping the document tree into LaTeX files. List of tuples
+# (source start file, target name, title, author, documentclass [howto/manual]).
+latex_documents = [
+  ('index', 'hg-review.tex', u'hg-review Documentation',
+   u'Steve Losh', 'manual'),
+]
+
+# The name of an image file (relative to this directory) to place at the top of
+# the title page.
+#latex_logo = None
+
+# For "manual" documents, if this is true, then toplevel headings are parts,
+# not chapters.
+#latex_use_parts = False
+
+# Additional stuff for the LaTeX preamble.
+#latex_preamble = ''
+
+# Documents to append as an appendix to all manuals.
+#latex_appendices = []
+
+# If false, no module index is generated.
+#latex_use_modindex = True
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/docs/dev.rst	Tue Jun 15 19:23:15 2010 -0400
@@ -0,0 +1,11 @@
+API
+===
+
+Data Repository
+---------------
+
+File Formats
+------------
+
+Python API
+----------
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/docs/hacking.rst	Tue Jun 15 19:23:15 2010 -0400
@@ -0,0 +1,11 @@
+Hacking hg-review
+=================
+
+Layout
+------
+
+Testing
+-------
+
+Documentation
+-------------
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/docs/hgreview/static/aal.css	Tue Jun 15 19:23:15 2010 -0400
@@ -0,0 +1,99 @@
+/* 
+  aardvark.legs by Anatoli Papirovski - http://fecklessmind.com/
+  Licensed under the MIT license. http://www.opensource.org/licenses/mit-license.php
+*/
+
+/* 
+  Reset first. Modified version of Eric Meyer and Paul Chaplin reset 
+  from http://meyerweb.com/eric/tools/css/reset/ 
+*/
+html, body, div, span, applet, object, iframe,
+h1, h2, h3, h4, h5, h6, p, blockquote, pre,
+a, abbr, acronym, address, big, cite, code,
+del, dfn, em, font, img, ins, kbd, q, s, samp,
+small, strike, strong, sub, sup, tt, var,
+b, u, i, center,
+dl, dt, dd, ol, ul, li,
+fieldset, form, label, legend,
+table, caption, tbody, tfoot, thead, tr, th, td,
+header, nav, section, article, aside, footer
+{border: 0; margin: 0; outline: 0; padding: 0; background: transparent; vertical-align: baseline;}
+
+blockquote, q {quotes: none;}
+blockquote:before,blockquote:after,q:before,q:after {content: ''; content: none;}
+
+header, nav, section, article, aside, footer {display: block;}
+
+/* Basic styles */
+body {background: #fff; color: #111; font: 1em/1.5em "Helvetica Neue", Helvetica, Arial, "Liberation Sans", "Bitstream Vera Sans", sans-serif;}
+html>body {font-size: 16px;}
+
+img {display: inline-block; vertical-align: bottom;}
+
+h1,h2,h3,h4,h5,h6,strong,b,dt,th {font-weight: 700;}
+address,cite,em,i,caption,dfn,var {font-style: italic;}
+
+h1 {margin: 0 0 0.75em; font-size: 2em;}
+h2 {margin: 0 0 1em; font-size: 1.5em;}
+h3 {margin: 0 0 1.286em; font-size: 1.167em;}
+h4 {margin: 0 0 1.5em; font-size: 1em;}
+h5 {margin: 0 0 1.8em; font-size: .834em;}
+h6 {margin: 0 0 2em; font-size: .75em;}
+
+p,ul,ol,dl,blockquote,pre {margin: 0 0 1.5em;}
+
+li ul,li ol {margin: 0;}
+ul {list-style: outside disc;}
+ol {list-style: outside decimal;}
+li {margin: 0 0 0 2em;}
+dd {padding-left: 1.5em;}
+blockquote {padding: 0 1.5em;}
+
+a {text-decoration: underline;}
+a:hover {text-decoration: none;}
+abbr,acronym {border-bottom: 1px dotted; cursor: help;}
+del {text-decoration: line-through;}
+ins {text-decoration: overline;}
+sub {font-size: .834em; line-height: 1em; vertical-align: sub;}
+sup {font-size: .834em; line-height: 1em; vertical-align: super;}
+
+tt,code,kbd,samp,pre {font-size: 1em; font-family: Consolas, Monaco, "Courier New", Courier, monospace;}
+
+/* Table styles */
+table {border-collapse: collapse; border-spacing: 0; margin: 0 0 1.5em;}
+caption {text-align: left;}
+th, td {padding: .25em .5em;}
+tbody td, tbody th {border: 1px solid #000;}
+tfoot {font-style: italic;}
+
+/* Form styles */
+fieldset {clear: both;}
+legend {padding: 0 0 1.286em; font-size: 1.167em; font-weight: 700;}
+fieldset fieldset legend {padding: 0 0 1.5em; font-size: 1em;}
+* html legend {margin-left: -7px;}
+*+html legend {margin-left: -7px;}
+
+form .field, form .buttons {clear: both; margin: 0 0 1.5em;}
+form .field label {display: block;}
+form ul.fields li {list-style-type: none; margin: 0;}
+form ul.inline li, form ul.inline label {display: inline;}
+form ul.inline li {padding: 0 .75em 0 0;}
+
+input.radio, input.checkbox {vertical-align: top;}
+label, button, input.submit, input.image {cursor: pointer;}
+* html input.radio, * html input.checkbox {vertical-align: middle;}
+*+html input.radio, *+html input.checkbox {vertical-align: middle;}
+
+textarea {overflow: auto;}
+input.text, input.password, textarea, select {margin: 0; font: 1em/1.3 Helvetica, Arial, "Liberation Sans", "Bitstream Vera Sans", sans-serif; vertical-align: baseline;}
+input.text, input.password, textarea {border: 1px solid #444; border-bottom-color: #666; border-right-color: #666; padding: 2px;}
+
+* html button {margin: 0 .34em 0 0;}
+*+html button {margin: 0 .34em 0 0;}
+
+form.horizontal .field {padding-left: 150px;}
+form.horizontal .field label {display: inline; float: left; width: 140px; margin-left: -150px;}
+
+/* Useful classes */
+img.left {display: inline; float: left; margin: 0 1.5em .75em 0;}
+img.right {display: inline; float: right; margin: 0 0 .75em .75em;}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/docs/hgreview/static/review.css	Tue Jun 15 19:23:15 2010 -0400
@@ -0,0 +1,146 @@
+@import url("aal.css");
+body, html {
+  background-color: #f8f7e8;
+  font-family: Georgia, serif;
+  color: #222;
+}
+body a, html a {
+  color: #b6410c;
+  text-decoration: none;
+}
+body a:hover, html a:hover {
+  text-decoration: underline;
+}
+body a.headerlink, html a.headerlink {
+  display: none;
+}
+body h1,
+html h1,
+body h2,
+html h2,
+body h3,
+html h3,
+body h4,
+html h4,
+body h5,
+html h5,
+body h6,
+html h6 {
+  font-weight: normal;
+}
+body h1, html h1 {
+  letter-spacing: 1px;
+}
+body ul, html ul {
+  list-style-type: none;
+}
+body ul li, html ul li {
+  margin-left: 0;
+}
+body ul li li, html ul li li {
+  margin-left: 1em;
+}
+.related {
+  display: none;
+}
+.document {
+  -webkit-border-radius: 8px;
+  -moz-border-radius: 8px;
+  border-radius: 8px;
+  border: 1px solid #edecc7;
+  margin: 25px auto 0px;
+  padding: 0px 00px;
+  width: 800px;
+}
+.document .documentwrapper {
+  -webkit-border-radius: 8px;
+  -moz-border-radius: 8px;
+  border-radius: 8px;
+  background-color: #fbfbf3;
+  float: left;
+  width: 100%;
+}
+.document .documentwrapper .bodywrapper {
+  -webkit-border-radius: 8px;
+  -moz-border-radius: 8px;
+  border-radius: 8px;
+  background-color: #fefefe;
+  margin-left: 230px;
+  border-left: 1px solid #edecc7;
+  padding: 20px 30px;
+  min-height: 700px;
+}
+.document .documentwrapper .bodywrapper div pre {
+  border: 1px solid #edecc7;
+  background-color: #fbfbf3;
+  font-size: 13px;
+  font-family: Monaco, Consolas, "Courier New", monospace;
+  line-height: 24px;
+  margin-bottom: 32px;
+  margin-top: -8px;
+  margin-left: 24px;
+  padding: 0px 8px;
+  width: 498px;
+  overflow-x: auto;
+}
+.document .documentwrapper .bodywrapper span.pre {
+  background-color: #fafaef;
+  border: 1px solid #edecc7;
+  padding: 0px 6px;
+  font-size: 13px;
+  font-family: Monaco, Consolas, "Courier New", monospace;
+  line-height: 24px;
+  white-space: pre;
+}
+.document .documentwrapper .bodywrapper ul span.pre {
+  background-color: inherit;
+  border: none;
+  padding: 0;
+}
+.document .documentwrapper .bodywrapper a em {
+  font-style: normal;
+}
+.document .documentwrapper .bodywrapper tt.docutils.literal {
+  background-color: #fafaef;
+  border: 1px solid #edecc7;
+  padding: 0px 6px;
+  font-size: 13px;
+  font-family: Monaco, Consolas, "Courier New", monospace;
+  line-height: 24px;
+  white-space: pre;
+}
+.document .documentwrapper .bodywrapper tt.docutils.literal span.pre {
+  border: 0;
+  padding: 0;
+}
+.document .sphinxsidebar {
+  float: left;
+  margin-left: -100%;
+  width: 210px;
+  padding: 20px 20px;
+}
+.document .sphinxsidebar #searchbox h3 {
+  margin-bottom: 8px;
+}
+.document .sphinxsidebar #searchbox form input:nth-child(1) {
+  border: 1px solid #999;
+  font-size: 16px;
+}
+.document .sphinxsidebar #searchbox form input:nth-child(2) {
+  display: block;
+  margin-top: 6px;
+  width: 60px;
+}
+.document .sphinxsidebar #searchbox .searchtip {
+  display: none;
+}
+.clearer {
+  clear: both;
+}
+.footer {
+  width: 800px;
+  margin: 8px auto 40px;
+  padding-right: 10px;
+  text-align: right;
+  font-style: italic;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/docs/hgreview/static/review.less	Tue Jun 15 19:23:15 2010 -0400
@@ -0,0 +1,158 @@
+@import url("aal.css");
+
+@c-cream: #edecc7;
+@c-soft-cream: lighten(@c-cream, 10%);
+
+@font-normal: Georgia, serif;
+@font-mono: Monaco, Consolas, "Courier New", monospace;
+@content-width: 800px;
+
+.border-radius(@radius) {
+    -webkit-border-radius: @radius;
+    -moz-border-radius: @radius;
+    border-radius: @radius;
+}
+
+body, html {
+    background-color: @c-soft-cream;
+    font-family: Georgia, serif;
+    color: #222;
+
+    a {
+        color: #b6410c;
+        text-decoration: none;
+
+        &:hover {
+            text-decoration: underline;
+        }
+        &.headerlink {
+            display: none;
+        }
+    }
+    h1, h2, h3, h4, h5, h6 {
+        font-weight: normal;
+    }
+    h1 {
+        letter-spacing: 1px;
+    }
+    ul {
+        list-style-type: none;
+        
+        li {
+            margin-left: 0;
+
+            li {
+                margin-left: 1em;
+            }
+        }
+    }
+}
+.related {
+    display: none;
+}
+.document {
+    .border-radius(8px);
+    border: 1px solid @c-cream;
+    margin: 25px auto 0px;
+    padding: 0px 00px;
+    width: @content-width;
+
+    .documentwrapper {
+        .border-radius(8px);
+        background-color: lighten(@c-soft-cream, 3%);
+        float: left;
+        width: 100%;
+
+        .bodywrapper {
+            .border-radius(8px);
+            background-color: #fefefe;
+            margin-left: 230px;
+            border-left: 1px solid @c-cream;
+            padding: 20px 30px;
+            min-height: 700px;
+
+            div pre {
+                border: 1px solid @c-cream;
+                background-color: lighten(@c-soft-cream, 3%);
+                font-size: 13px;
+                font-family: @font-mono;
+                line-height: 24px;
+                margin-bottom: 32px;
+                margin-top: -8px;
+                margin-left: 24px;
+                padding: 0px 8px;
+                width: @content-width - 302px;
+                overflow-x: auto;
+            }
+            span.pre {
+                background-color: lighten(@c-soft-cream, 2%);
+                border: 1px solid @c-cream;
+                padding: 0px 6px;
+                font-size: 13px;
+                font-family: @font-mono;
+                line-height: 24px;
+                white-space: pre;
+            }
+            ul {
+                span.pre {
+                    background-color: inherit;
+                    border: none;
+                    padding: 0;
+                }
+            }
+            a em {
+                font-style: normal;
+            }
+            tt.docutils.literal {
+                background-color: lighten(@c-soft-cream, 2%);
+                border: 1px solid @c-cream;
+                padding: 0px 6px;
+                font-size: 13px;
+                font-family: @font-mono;
+                line-height: 24px;
+                white-space: pre;
+
+                span.pre {
+                    border: 0;
+                    padding: 0;
+                }
+            }
+        }
+    }
+    .sphinxsidebar {
+        float: left;
+        margin-left: -100%;
+        width: 210px;
+        padding: 20px 20px;
+
+        #searchbox {
+            h3 {
+                margin-bottom: 8px;
+            }
+            form {
+                input:nth-child(1) {
+                    border: 1px solid #999;
+                    font-size: 16px;
+                }
+                input:nth-child(2) {
+                    display: block;
+                    margin-top: 6px;
+                    width: 60px;
+                }
+            }
+            .searchtip {
+                display: none;
+            }
+        }
+    }
+}
+.clearer {
+    clear: both;
+}
+.footer {
+    width: @content-width;
+    margin: 8px auto 40px;
+    padding-right: 10px;
+    text-align: right;
+    font-style: italic;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/docs/hgreview/theme.conf	Tue Jun 15 19:23:15 2010 -0400
@@ -0,0 +1,5 @@
+[theme]
+inherit = basic
+stylesheet = review.css
+pygments_style = none
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/docs/index.rst	Tue Jun 15 19:23:15 2010 -0400
@@ -0,0 +1,69 @@
+.. hg-review documentation master file, created by
+   sphinx-quickstart on Mon Jun 14 20:39:45 2010.
+   You can adapt this file completely to your liking, but it should at least
+   contain the root `toctree` directive.
+
+hg-review documentation
+=======================
+
+hg-review is a `Mercurial <http://hg-scm.org>`_ extension for performing
+distributed code review.
+
+Quickstart
+----------
+
+If you're impatient and want to play with hg-review right away, here's what you
+need to do.
+
+First, clone the extension somewhere::
+
+    hg clone http://bitbucket.org/sjl/hg-review/
+
+Then add it to your ``~/.hgrc`` file::
+
+    [extensions]
+    review = [path to]/hg-review/review/
+
+Now you need a repository that has code review enabled.  Luckily, you've
+already got one -- hg-review uses itself for code review. 
+
+``cd`` into the directory you cloned hg-review to and initialize the review
+data::
+
+    cd hg-review
+    hg review --init
+
+Start the web interface::
+
+    hg review --web
+
+Open http://localhost:8080/ in your browser of choice and poke around.
+
+Check out the :doc:`Overview </overview>` when you're ready to learn more.
+
+User's Guide
+------------
+
+If you want to use hg-review for anything more than some simple poking around,
+this is the place to start.
+
+.. toctree::
+   :maxdepth: 2
+
+   overview
+   concepts
+   webui
+   cli
+
+Developer's Guide
+-----------------
+
+If you want to integrate hg-review with your own application or Mercurial
+extension, or hack on he-review itself, this is what you need to know.
+
+.. toctree::
+   :maxdepth: 2
+
+   dev
+   hacking
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/docs/kick	Tue Jun 15 19:23:15 2010 -0400
@@ -0,0 +1,4 @@
+#!/usr/bin/env bash
+
+kicker -qs -l 0.1 -e reload_safari \
+_build/**/*
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/docs/overview.rst	Tue Jun 15 19:23:15 2010 -0400
@@ -0,0 +1,89 @@
+Overview
+========
+
+Let's get started using hg-review.  No matter how you want to use it, you need
+to install it first!
+
+Installation
+------------
+
+hg-review requires `Python <http://python.org>`_ 2.5 or later and `Mercurial
+<http://hg-scm.org>`_ 1.4 or later
+
+You probably have both of these requirements already, but if you encounter
+problems you might want to check these first with ``python --version`` and
+``hg --version``.
+
+hg-review also depends on a couple of other things like `Flask
+<http://flask.pocoo.org>`_ and `Jinja2 <http://jinja.pocoo.org/2/>`_, but it
+bundles these requirements so you don't need to worry about them.
+
+To install hg-review, first clone the extension somewhere::
+
+    hg clone http://bitbucket.org/sjl/hg-review/
+
+Then add it to your ``~/.hgrc`` file::
+
+    [extensions]
+    review = [path to]/hg-review/review/
+
+Usage
+-----
+
+The easiest way to work with hg-review is with the :doc:`web interface
+</webui>`.  There's also a command-line interface, but it's really easiest to
+work with the web ui.
+
+Projects with Existing Code Reviews
+'''''''''''''''''''''''''''''''''''
+
+If you want to work with a repository that already has code review set up, all
+you need to do is cd into that repository, run ``hg review --init`` to pull
+down the review data, and then run ``hg review --web`` to fire up the web ui.
+
+Once that's done you can visit http://localhost:8080/ in your browser to start
+reviewing.
+
+You should read over the :doc:`concepts </concepts>` documentation to make sure
+you know how hg-review works, and the :doc:`web interface </webui>`
+documentation for a quick tour of how to use the web ui.
+
+Projects without Existing Code Reviews
+''''''''''''''''''''''''''''''''''''''
+
+If you want to *start* using hg-review with a repository, you need to do a few
+things to get it ready.
+
+First, create a repository to hold the code review data. This repository should
+be in a location that's accessible by anyone that needs to see the review data.
+
+For example, if you're working on an open-source project that's hosted at
+http://bitbucket.org/you/project/ you should create a new repository for
+the review data at http://bitbucket.org/you/project-review/
+
+Next you'll need to initialize the review data in your project. ``cd`` into you
+project's directory and run:: 
+
+    hg review --init --remote-path URL
+
+The ``URL`` should be the URL of the review repo you just created.
+
+This will create a local review data repo for you, as well as an ``.hgreview``
+file in your project. You need to commit this ``.hgreview`` file to your
+project with the command that hg-review suggested.
+
+Don't worry, this is the only time hg-review will make you commit something to
+your project's repository and clutter up its changelog.
+
+Now you can get to work reviewing changesets with the web interface by
+running ``hg review --web`` in your project.
+
+You should read over the :doc:`concepts </concepts>` documentation to make sure
+you know how hg-review works, and the :doc:`web interface </webui>`
+documentation for a quick tour of how to use the web ui.
+
+Reporting Bugs
+--------------
+
+If you encounter any errors while using hg-review please `post a bug
+<http://bitbucket.org/sjl/hg-review/issues/>`_.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/docs/publish.sh	Tue Jun 15 19:23:15 2010 -0400
@@ -0,0 +1,6 @@
+#!/usr/bin/env bash
+
+make html
+rsync --delete -az _build/html/ ~/src/sjl.bitbucket.org/hg-review
+hg -R ~/src/sjl.bitbucket.org commit -Am 'hg-review: Update documentation.'
+hg -R ~/src/sjl.bitbucket.org push
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/docs/webui.rst	Tue Jun 15 19:23:15 2010 -0400
@@ -0,0 +1,11 @@
+Web Interface
+=============
+
+
+The web interface of hg-review is probably what you're going to use the most.
+
+Local Use
+---------
+
+Deployment to a Server
+----------------------