b3f631ce834e

hg-review: Update documentation.
[view raw] [browse files]
author Steve Losh <steve@stevelosh.com>
date Tue, 13 Jul 2010 01:05:48 -0400
parents 1d1ba7d1338d
children 08a070ff68a7
branches/tags (none)
files hg-review/_sources/hacking.txt hg-review/hacking.html hg-review/index.html hg-review/searchindex.js

Changes

--- a/hg-review/_sources/hacking.txt	Tue Jul 13 00:32:56 2010 -0400
+++ b/hg-review/_sources/hacking.txt	Tue Jul 13 01:05:48 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.
--- a/hg-review/hacking.html	Tue Jul 13 00:32:56 2010 -0400
+++ b/hg-review/hacking.html	Tue Jul 13 01:05:48 2010 -0400
@@ -47,14 +47,136 @@
             
   <div class="section" id="hacking-hg-review">
 <h1>Hacking hg-review<a class="headerlink" href="#hacking-hg-review" title="Permalink to this headline">¶</a></h1>
+<p>Want to improve hg-review? Great!</p>
+<p>The easiest way is to make some changes, push them somewhere public and send
+a pull request on Bitbucket (or <a class="reference external" href="mailto:steve&#37;&#52;&#48;stevelosh&#46;com">email Steve</a>).</p>
+<p>Here&#8217;s what you need to know.</p>
+<div class="section" id="rough-guidelines">
+<h2>Rough Guidelines<a class="headerlink" href="#rough-guidelines" title="Permalink to this headline">¶</a></h2>
+<p>Here&#8217;s a few tips that will make hg-review&#8217;s maintainer happier.</p>
+<div class="section" id="basic-coding-style">
+<h3>Basic Coding Style<a class="headerlink" href="#basic-coding-style" title="Permalink to this headline">¶</a></h3>
+<p>Keep lines of code under 85 characters, unless it makes things <em>really</em> ugly.</p>
+<p>Indentation is four spaces. Tabs are evil.</p>
+</div>
+<div class="section" id="commit-messages">
+<h3>Commit Messages<a class="headerlink" href="#commit-messages" title="Permalink to this headline">¶</a></h3>
+<p>Commit messages should start with a line like:</p>
+<div class="highlight-python"><pre>api: add feature X</pre>
+</div>
+<p>The first part is the component the change affects, like <tt class="docutils literal"><span class="pre">api</span></tt>, <tt class="docutils literal"><span class="pre">cli</span></tt>,
+<tt class="docutils literal"><span class="pre">web</span></tt>, <tt class="docutils literal"><span class="pre">docs/api</span></tt>, or <tt class="docutils literal"><span class="pre">guts</span></tt>.</p>
+<p><tt class="docutils literal"><span class="pre">guts</span></tt> is a catchall for changesets that affect everything at once &#8211; using
+it means that the changeset could probably be split up into separate smallet
+changesets.</p>
+<p>The rest of the commit message should describe the change.</p>
+</div>
+<div class="section" id="tests">
+<h3>Tests<a class="headerlink" href="#tests" title="Permalink to this headline">¶</a></h3>
+<p>Update the tests <em>in the same changeset as your change</em>.  This makes bisection
+by running the test suite easier.</p>
+<p>If your changeset changes the CLI output, make sure you&#8217;ve read the next
+section and then add a test for it <em>in the same changeset</em>.</p>
+<p>If your changeset adds a new feature, add a test for it <em>in the same
+changeset</em>.</p>
+<p>If your changeset fixes a bug, add a test that would reproduce the bug <em>in the
+same changeset</em>.</p>
+</div>
+<div class="section" id="backwards-compatibility">
+<h3>Backwards Compatibility<a class="headerlink" href="#backwards-compatibility" title="Permalink to this headline">¶</a></h3>
+<p>hg-review&#8217;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.</p>
+<p>hg-review&#8217;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.</p>
+<p>hg-review&#8217;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.</p>
+<p>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.</p>
+</div>
+</div>
 <div class="section" id="layout">
 <h2>Layout<a class="headerlink" href="#layout" title="Permalink to this headline">¶</a></h2>
+<p>hg-review&#8217;s basic structure looks like this:</p>
+<div class="highlight-python"><pre>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</pre>
+</div>
 </div>
 <div class="section" id="testing">
 <h2>Testing<a class="headerlink" href="#testing" title="Permalink to this headline">¶</a></h2>
+<p>hg-review contains a test suite for the command line interface (and therefore
+the backend API as well).</p>
+<p>The tests can be run easily with nose. If you don&#8217;t have node, you&#8217;ll need to
+install it first:</p>
+<blockquote>
+pip install nose</blockquote>
+<p>Once you&#8217;ve got it you can run the suite by cd&#8217;ing to the hg-review directory
+and running <tt class="docutils literal"><span class="pre">nosetests</span></tt>.</p>
+<p>Before submitting a changeset please make sure it doesn&#8217;t break any tests.</p>
+<p>If your changeset adds a new feature, add a test for it <em>in the same
+changeset</em>.</p>
+<p>If your changeset fixes a bug, add a test that would reproduce the bug <em>in the
+same changeset</em>.</p>
 </div>
 <div class="section" id="documentation">
 <h2>Documentation<a class="headerlink" href="#documentation" title="Permalink to this headline">¶</a></h2>
+<p>If you want to submit a patch, please update the documentation to reflect your
+change (if necessary) <em>in the same changeset</em>.</p>
+<p>The documentation is formatted as restructured text and built with Sphinx
+(version 0.6.7).</p>
+<p>The CSS for the documentation is written with LessCSS.  If you want to update
+the style you should update the <tt class="docutils literal"><span class="pre">docs/hgreview/static/review.less</span></tt> file and
+render it to CSS. Include the changes to the <tt class="docutils literal"><span class="pre">.less</span></tt> file <em>and</em> the <tt class="docutils literal"><span class="pre">.css</span></tt>
+file in your changeset.</p>
 </div>
 </div>
 
@@ -67,6 +189,13 @@
             <h3><a href="index.html">Table Of Contents</a></h3>
             <ul>
 <li><a class="reference external" href="#">Hacking hg-review</a><ul>
+<li><a class="reference external" href="#rough-guidelines">Rough Guidelines</a><ul>
+<li><a class="reference external" href="#basic-coding-style">Basic Coding Style</a></li>
+<li><a class="reference external" href="#commit-messages">Commit Messages</a></li>
+<li><a class="reference external" href="#tests">Tests</a></li>
+<li><a class="reference external" href="#backwards-compatibility">Backwards Compatibility</a></li>
+</ul>
+</li>
 <li><a class="reference external" href="#layout">Layout</a></li>
 <li><a class="reference external" href="#testing">Testing</a></li>
 <li><a class="reference external" href="#documentation">Documentation</a></li>
--- a/hg-review/index.html	Tue Jul 13 00:32:56 2010 -0400
+++ b/hg-review/index.html	Tue Jul 13 01:05:48 2010 -0400
@@ -116,6 +116,7 @@
 </ul>
 </li>
 <li class="toctree-l1"><a class="reference external" href="hacking.html">Hacking hg-review</a><ul>
+<li class="toctree-l2"><a class="reference external" href="hacking.html#rough-guidelines">Rough Guidelines</a></li>
 <li class="toctree-l2"><a class="reference external" href="hacking.html#layout">Layout</a></li>
 <li class="toctree-l2"><a class="reference external" href="hacking.html#testing">Testing</a></li>
 <li class="toctree-l2"><a class="reference external" href="hacking.html#documentation">Documentation</a></li>
--- a/hg-review/searchindex.js	Tue Jul 13 00:32:56 2010 -0400
+++ b/hg-review/searchindex.js	Tue Jul 13 01:05:48 2010 -0400
@@ -1,1 +1,1 @@
-Search.setIndex({desctypes:{},terms:{represent:3,all:[5,2,3,1,4],concept:[0,5,2],project_url:4,steve:3,mile:5,follow:[3,1],hate:[],decid:1,depend:[2,3,4],flask:2,base64:3,readabl:3,init:[0,4,1,2],program:[3,7,5],under:7,worth:3,sourc:2,string:3,fals:[1,4],faq:7,offlin:5,failur:1,veri:3,affect:7,relev:4,four:3,disturb:[],level:[3,1],did:5,list:[3,1,5],"try":5,item:1,"0e987f91e9b6628b26a30c5d00668a15fae8f22f":3,stderr:1,gut:5,quick:2,pleas:2,prevent:4,natur:5,sign:[1,5],past:5,second:[3,5],design:[3,4],pass:1,port:[1,4],even:[4,5],index:[],what:[0,3,1,4],poke:0,section:4,abl:[3,4],remain:5,current:[1,4],delet:[],version:[2,3,7,5],"new":[2,1,4],hgreview:[2,1],ever:4,"public":[2,1,4],can:[5,2,3,1,4],full:[1,5],hash:3,never:[4,5],here:[0,3],let:[2,4,5],address:[1,4],layout:[0,6,3],valu:1,search:[],sjl:[0,4,2],action:[],opinion:[3,5],chang:[3,1,5],chanc:[4,5],repositori:[0,1,2,3,4,5],extra:4,backout:5,appli:[3,5],modul:[],brought:[],filenam:[3,1],api:[0,3],visibl:4,instal:[0,4,2],txt:3,from:[3,1,5],describ:1,would:[1,5],visit:[2,1,4],two:[3,1,5],next:2,few:[2,4,5],live:[1,4],recommend:5,decentr:5,type:5,tell:5,more:[5,0,3,1,4],peopl:[4,5],site_root:4,train:[],particular:5,actual:3,hold:[2,1],easiest:2,high:3,none:[1,4],someproject:2,sometim:4,car:[],work:[2,3,7,5],histori:5,left:4,anon_us:4,whatev:5,learn:[0,7],purpos:5,root:5,fetch:4,control:5,distrubut:[],quickstart:0,give:3,share:[],indic:1,topic:1,want:[0,1,2,3,4,7],alwai:[5,3,1,4],mai:3,goal:5,thing:[2,1,5],anoth:5,write:5,how:[2,7,4,5],anyon:[2,4],instead:[5,1,4],simpl:[0,5],perman:4,product:5,subcommand:1,clone:[0,4,1,2],befor:[4,5],wrong:[4,5],plane:[],embrac:5,date:3,data:[0,1,2,3,4,5],stabil:3,"short":1,practic:5,bind:4,caus:4,inform:4,combin:4,allow:[3,1,4],order:1,talk:5,help:[1,5],over:2,move:5,approv:5,becaus:[3,4,5],top:5,held:5,comma:1,hgrc:[0,4,2],mainli:1,perfect:5,read_onli:4,style:3,cli:3,fix:5,better:5,solitari:[],window:[],restart:4,commmit:1,decad:5,main:4,might:[2,7,5],easier:5,them:[2,3,4,5],good:1,"return":1,greater:5,thei:5,python:[0,3,2],initi:[0,3,4,1,2],"break":3,jinja2:2,half:5,now:[0,4,2],choic:[0,1],somewher:[0,2],name:4,anyth:[0,5],edit:[5,0,3,1,4],gerrit:5,separ:[1,5],easili:[3,4],mode:4,each:[1,5],debug:1,unicod:[],updat:4,mean:[3,1,5],replac:1,individu:1,idea:5,realli:5,ensur:1,expect:3,year:5,our:5,out:[0,5],shown:1,accomplish:5,space:3,goe:5,rev:1,content:1,print:1,got:[0,4],prioriti:3,gunicorn:4,insid:5,given:[3,1],ask:5,org:[0,4,2],"byte":3,care:[4,5],indent:3,launch:[],could:[4,5],keep:[4,5],turn:5,perhap:5,place:0,isn:5,think:[1,5],frequent:3,first:[0,1,2,3,4,5],mdown:1,feel:3,onc:[2,4],number:1,yourself:1,hook:4,alreadi:[0,1,2],done:[2,4],least:1,blank:3,stabl:3,open:[0,1,2],primari:5,ont:[],gpl:[3,7],differ:[1,5],script:[1,4],interact:[3,5],gpg:5,mkdir:4,system:[3,5],messag:[3,1],mercuri:[0,1,2,3,4,5,7],attach:1,store:[3,5],listen:4,luckili:0,option:[1,4],especi:5,tool:[0,5],copi:4,specifi:1,"var":4,part:4,pars:3,kept:3,exactli:[1,5],than:[0,5],serv:4,cron:4,kind:[4,5],provid:[5,3,1,4],eleg:3,structur:[0,3,5],provic:[],project:[5,2,3,1,4],matter:2,friend:5,were:5,toward:5,browser:[0,1,2],sai:5,viewer:4,modern:1,ani:[1,2,3,7,5,4],myproject:4,raw:3,have:[5,2,3,1,4],tabl:[],need:[0,1,2,3,4,5],seen:[1,5],seem:[4,5],built:4,also:[2,1,5],exampl:[2,4],take:[3,4,5],which:3,noth:1,sure:2,distribut:[0,7,4,5],deploy:[0,4],track:5,licens:[0,7],glog:[],most:[5,1,4],plai:0,deploi:4,everyth:4,don:[2,5,1,4],url:[2,1],later:[2,3,7,5],doe:[1,5],clean:3,latest:4,someth:[2,4],changeset:[5,2,3,1,4],wsgi:4,reykjavi:3,signoff:[5,0,3,1,4],show:1,text:3,verbos:1,subprocess:3,hack:[0,6],fear:3,find:[1,5],impact:5,yoursit:4,onli:[2,5,1,4],locat:2,configur:4,state:1,should:[1,2,3,7,5,4],local:[0,5,4,2],get:[2,1],stop:1,bear:[],autom:4,repo:[2,4],rietveld:5,report:[0,2],awai:[0,3,5],requir:[2,1],enabl:[0,3,1],mon:3,method:3,remot:[2,1,5],bad:1,integr:0,contain:5,grab:4,where:[1,4],wrote:5,view:[1,4],set:[2,5,1,4],see:[2,3,4],num:1,fail:1,page:7,expertis:5,statu:1,review:[0,1,2,3,4,5,6,7],behind:5,won:[4,5],volatil:3,simplest:5,"import":4,neither:1,experi:5,approach:[3,5],parent:[],disallow:1,extens:[0,4,1,2],job:4,otherwis:1,tue:3,both:[2,3],last:3,howev:5,quiet:1,tour:2,instanc:4,context:1,com:[3,4],albeit:3,comment:[5,0,3,1,4],markdown:[3,1],simpli:[3,4,5],point:[3,4],overview:[0,2],period:[],path:[0,4,1,2],diff:1,guid:0,reviewboard:5,code:[0,1,2,3,4,5],coupl:2,been:[3,5],mark:1,json:3,interpret:[],basic:[0,5],immedi:4,quickli:3,oth:[],fire:[2,4],thousand:5,atlassian:5,understand:5,"catch":5,impati:0,those:1,crucibl:5,look:[3,7,4,5],plain:3,"while":[2,5],unifi:1,error:[2,1,5],anonym:[1,4],advantag:5,ctrl:1,readi:[0,2],canon:1,non:3,worri:2,"default":[1,4],itself:[0,7,5],clutter:[2,5],uncom:4,conf:4,revis:1,sever:[1,5],develop:[0,5],welcom:[],author:[3,4,5],perform:[0,1],suggest:2,make:[2,3,1,5],belong:3,anon:[1,4],same:[5,7,1,4],document:[0,6,3,2],conflict:4,http:[0,4,1,2],webserv:4,yese:1,someon:[5,1,4],hand:5,fairli:3,moment:3,user:[0,4,5],implement:3,u0301k:3,task:1,off:1,older:3,whole:[1,5],well:[2,4],person:[3,5],without:[2,3,4,5],command:[0,3,4,1,2],thi:[0,1,2,3,4,5,7],programm:[],model:5,usual:[],identifi:1,just:[2,5],tip:[],collabor:[1,5],changset:3,cmv5ywphdmnmgwsudhh0:3,human:3,web:[0,4,1,2],easi:[3,5],had:5,except:1,littl:5,add:[0,4,1,2],els:[1,5],useless:5,applic:[0,3],around:[0,5],format:[0,3,1],read:[2,5,1,4],know:[0,5,2],hgdate:3,insert:4,like:[5,2,3,1,4],specif:[1,5],safest:3,changelog:2,manual:4,integ:3,server:[0,4,5],necessari:[4,5],popular:5,output:1,losh:3,manag:5,encount:[2,4],www:4,right:[0,1],often:[3,5],some:[5,0,3,1,4],back:[4,5],intern:[0,3,5],"export":3,home:[],avoid:[3,5],though:5,definit:[],per:3,usernam:[3,1,4],stevelosh:3,localhost:[0,4,1,2],refer:4,machin:5,creatur:[],run:[0,4,1,2],power:5,usag:[0,1,2],sacrif:5,host:2,although:4,post:2,src:[2,5],about:[2,7,5],central:5,unfortun:5,includ:[3,4,5],commit:[2,1,5],own:[0,1,5],pythonpath:4,within:5,encod:3,automat:4,down:[2,4],empti:3,contrib:4,subvers:5,your:[0,1,2,3,4,5],merg:4,git:5,lof:[],log:5,wai:[2,5],support:5,start:[0,5,4,1,2],reli:[3,5],interfac:[0,3,4,1,2],editor:1,lot:5,biggest:5,hei:5,"function":[3,5],reduc:3,head:4,form:5,forc:[],bundl:2,jul:3,neutral:[3,1,5],yourproject:[4,5],gain:1,newer:3,line:[0,1,2,3,4,5],inlin:1,"true":4,bug:[0,2],pull:[2,5,1,4],made:4,utf:3,possibl:[3,1,5],whether:[3,1],access:[2,4],allow_anon_com:4,displai:1,below:[1,4],sampl:[3,4],problem:[2,4,5],constant:3,creat:[2,5,7,1,4],doesn:[4,5],repres:3,exist:[2,3,5],file:[0,1,2,3,4,5],guarante:3,check:[0,3,1,2],probabl:[2,1,4],echo:4,googl:[],titl:4,when:[5,0,3,1,4],detail:[3,1],virtual:3,field:3,other:[0,1,2,3,4,5],lookup:3,futur:3,normal:[4,5],test:[0,6,1],you:[0,1,2,3,4,5,7],nice:4,node:3,meaning:[],ago:5,bitbucket:[0,4,2],receiv:[3,4],faster:3,directori:[5,0,3,4,2],tradeoff:3,time:[2,3,1],push:[5,1,4]},titles:["hg-review documentation","Command Line Interface","Overview","API","Web Interface","Concepts","Hacking hg-review","Licensing"],modules:{},descrefs:{},filenames:["index","cli","overview","api","webui","concepts","hacking","licensing"]})
\ No newline at end of file
+Search.setIndex({desctypes:{},terms:{represent:3,all:[5,2,3,1,4],concept:[0,5,2],project_url:4,steve:[6,3],mile:5,follow:[3,1],readm:6,hate:[],decid:1,depend:[2,3,4],flask:2,base64:3,readabl:3,send:6,init:[0,4,1,2],program:[3,7,5],under:[6,7],worth:3,sourc:2,string:3,crucibl:5,fals:[1,4],faq:7,offlin:5,util:6,failur:1,veri:[6,3],affect:[6,7],relev:4,four:[6,3],disturb:[],level:[3,1],did:5,list:[3,1,5],"try":5,item:[6,1],"0e987f91e9b6628b26a30c5d00668a15fae8f22f":3,stderr:1,gut:[6,5],quick:2,pleas:[2,6],prevent:4,smallet:6,creatur:[],natur:5,sign:[1,5],past:5,second:[3,5],design:[3,4],pass:1,port:[1,4],even:[4,5],index:[],what:[0,6,3,1,4],poke:0,skeptic:6,section:[6,4],abl:[3,4],remain:5,current:[6,1,4],delet:[],version:[2,6,3,7,5],"new":[2,6,1,4],hgreview:[2,6,1],ever:4,method:3,can:[1,2,3,4,5,6],full:[1,5],hash:3,never:[4,5],here:[0,6,3],met:6,let:[2,4,5],address:[1,4],locat:2,modifi:6,valu:1,search:[],nosetest:6,sjl:[0,4,2],action:[],opinion:[3,5],chang:[6,3,1,5],chanc:[4,5],although:4,extra:4,backout:5,appli:[3,5],modul:6,brought:[],filenam:[3,1],api:[0,6,3],visibl:4,instal:[0,6,4,2],txt:3,unit:6,from:[3,1,5],describ:[6,1],would:[6,1,5],prove:6,visit:[2,1,4],two:[3,1,5],next:[2,6],few:[2,6,4,5],live:[1,4],recommend:5,decentr:5,type:5,tell:5,more:[5,0,3,1,4],peopl:[4,5],site_root:4,enhanc:6,"export":3,train:[],accept:6,particular:5,central:5,hold:[2,1],easiest:[2,6],topic:1,none:[1,4],someproject:2,sometim:4,car:[],work:[2,3,7,5],histori:5,anon_us:4,whatev:5,learn:[0,7],purpos:5,root:5,fetch:4,control:5,distrubut:[],quickstart:0,give:3,share:[],indic:1,high:3,critic:6,perman:4,want:[0,1,2,3,4,6,7],alwai:[5,3,1,4],mai:[6,3],goal:5,turn:5,anoth:5,read_onli:4,how:[2,7,4,5],anyon:[2,4],instead:[5,1,4],simpl:[0,5],css:6,updat:[6,4],product:5,subcommand:1,clone:[0,4,1,2],reflect:6,befor:[6,4,5],wrong:[4,5],plane:[],embrac:5,date:3,data:[0,1,2,3,4,5],stabil:3,"short":1,practic:5,third:6,bind:4,caus:4,inform:4,maintain:6,combin:4,allow:[6,3,1,4],suggest:2,order:1,talk:5,help:[6,1,5],over:2,move:5,approv:5,becaus:[3,4,5],top:5,held:5,comma:1,left:4,mainli:1,perfect:5,write:5,style:[6,3],cli:[6,3],fix:[6,5],better:5,solitari:[],window:[],requir:[2,1],commmit:1,decad:5,main:4,might:[2,7,5],easier:[6,5],them:[2,6,3,4,5],good:[6,1],"return":1,greater:5,thei:[6,5],python:[0,6,3,2],initi:[0,3,4,1,2],"break":[6,3],jinja2:[2,6],half:5,now:[0,4,2],choic:[0,1],somewher:[0,6,2],name:4,anyth:[0,5],edit:[5,0,3,1,4],gerrit:5,separ:[6,1,5],easili:[6,3,4],mode:4,each:[1,5],debug:1,unicod:[],mean:[6,3,1,5],replac:1,individu:1,idea:5,realli:[6,5],contrib:[6,4],"static":6,expect:3,year:5,our:5,out:[0,5],shown:1,accomplish:5,space:[6,3],goe:5,rev:1,content:1,print:1,got:[0,6,4],gpl:[3,7],gunicorn:4,insid:5,written:6,given:[3,1],free:6,reason:6,ask:5,org:[0,4,2],"byte":3,care:[4,5],indent:[6,3],launch:[],could:[6,4,5],keep:[6,4,5],thing:[2,6,1,5],perhap:5,place:0,isn:5,think:[1,5],frequent:3,first:[0,1,2,3,4,5,6],mdown:1,render:6,feel:[6,3],onc:[2,6,4],number:1,yourself:1,hook:4,alreadi:[0,1,2],done:[2,4],least:1,blank:3,stabl:[6,3],open:[0,1,2],primari:5,ont:[],prioriti:3,differ:[1,5],script:[1,4],interact:[3,5],gpg:5,mkdir:4,system:[3,5],messag:[6,3,1],mercuri:[0,1,2,3,4,5,6,7],attach:1,store:[3,5],listen:4,luckili:0,option:[6,1,4],especi:5,tool:[0,5],copi:4,specifi:1,biggest:5,part:[6,4],pars:3,review:[0,1,2,3,4,5,6,7],off:1,exactli:[1,5],than:[0,5],serv:4,cron:4,kind:[4,5],provid:[5,3,1,4],remov:6,older:3,structur:[0,6,3,5],provic:[],project:[5,2,3,1,4],matter:2,friend:5,were:5,toward:5,browser:[0,1,2],sai:5,viewer:4,modern:1,ani:[1,2,3,4,5,6,7],myproject:4,raw:3,have:[1,2,3,4,5,6],tabl:[],need:[0,1,2,3,4,5,6],seen:[1,5],seem:[4,5],built:[6,4],also:[2,1,5],without:[2,6,3,4,5],take:[3,4,5],which:3,noth:1,compat:6,sure:[2,6],unless:6,distribut:[0,7,4,5],deploy:[0,4],track:5,licens:[0,6,7],glog:[],most:[5,1,4],plai:0,deploi:4,model:5,don:[2,6,5,1,4],url:[2,1],doc:6,later:[2,3,7,5],request:6,doe:[1,5],clean:[6,3],accompani:6,usual:[],someth:[2,4],changeset:[1,2,3,4,5,6],wsgi:4,reykjavi:3,signoff:[5,0,3,1,4],show:1,text:[6,3],verbos:1,subprocess:3,hack:[0,6],radic:6,fear:3,fine:6,find:[1,5],impact:5,yoursit:4,onli:[2,5,1,4],layout:[0,6,3],configur:4,behind:5,should:[1,2,3,4,5,6,7],"public":[2,6,1,4],theme:6,restructur:6,templat:6,local:[0,5,4,2],get:[2,1],stop:1,bear:[],autom:4,repo:[2,4],made:4,report:[0,2],neither:1,restart:4,enabl:[0,3,1],bisect:6,patch:6,remot:[2,1,5],bad:1,integr:0,contain:[6,5],grab:4,where:[1,4],wrote:5,view:[1,4],set:[2,5,1,4],see:[2,3,4],num:1,manag:5,fail:1,charact:6,expertis:5,statu:1,hgrc:[0,4,2],state:1,won:[4,5],volatil:3,simplest:5,"import":4,awai:[0,3,5],experi:5,approach:[3,5],email:6,parent:[],disallow:1,extens:[0,6,4,1,2],job:4,rutil:6,fabfil:6,tue:3,both:[2,3],last:3,howev:[6,5],quiet:1,tour:2,entir:6,context:1,improv:6,com:[3,4],albeit:3,comment:[5,0,3,1,4],markdown:[6,3,1],simpli:[3,4,5],point:[3,4],overview:[0,2],period:[],lesscss:6,path:[0,4,1,2],diff:1,guid:0,reviewboard:5,code:[0,1,2,3,4,5,6],coupl:2,been:[3,5],mark:1,compon:6,json:3,interpret:[],basic:[0,6,5],immedi:4,quickli:3,oth:[],fire:[2,4],catchal:6,thousand:5,atlassian:5,understand:5,"catch":5,impati:0,those:1,"case":6,ugli:6,therefor:6,look:[6,3,7,4,5],plain:3,"while":[2,5],unifi:1,error:[2,1,5],anonym:[1,4],ago:5,advantag:5,ctrl:1,readi:[0,2],canon:1,non:3,worri:2,"default":[6,1,4],itself:[0,7,5],clutter:[2,5],uncom:4,conf:4,revis:1,sever:[1,5],develop:[0,5],welcom:[],author:[3,4,5],perform:[0,6,1],parti:6,make:[2,6,3,1,5],belong:3,anon:[1,4],same:[6,5,7,1,4],when:[5,0,3,1,4],instanc:4,split:6,document:[0,6,3,2],conflict:4,http:[0,4,1,2],webserv:4,yese:1,someon:[5,1,4],evil:6,hand:5,fairli:3,moment:3,user:[0,4,5],extrem:6,implement:[6,3],u0301k:3,task:1,kept:3,eleg:3,whole:[1,5],well:[2,6,4],know:[0,6,5,2],person:[3,5],exampl:[2,4],command:[0,1,2,3,4,6],thi:[0,1,2,3,4,5,6,7],programm:[],everyth:[6,4],latest:4,identifi:1,just:[2,5],less:6,tip:6,rest:6,dose:6,collabor:[1,5],changset:3,cmv5ywphdmnmgwsudhh0:3,human:3,web:[0,6,4,1,2],easi:[3,5],had:5,except:[6,1],littl:5,add:[0,6,4,1,2],guidelin:[0,6],els:[1,5],kick:6,useless:5,applic:[0,3],around:[0,5],format:[0,6,3,1],read:[2,6,5,1,4],mon:3,hgdate:3,insert:4,like:[1,2,3,4,5,6],specif:[1,5],safest:3,changelog:2,manual:4,integ:3,server:[0,4,5],necessari:[6,4,5],nose:6,popular:5,output:[6,1],losh:3,page:7,encount:[2,4],www:4,right:[0,1],often:[3,5],some:[0,1,3,4,5,6],back:[4,5],intern:[0,6,3,5],sampl:[3,4],home:[],avoid:[3,5],though:5,definit:[],per:3,usernam:[3,1,4],stevelosh:3,larg:6,backend:6,reproduc:6,localhost:[0,4,1,2],refer:4,machin:5,core:6,run:[0,6,4,1,2],power:5,usag:[0,1,2],sacrif:5,host:2,repositori:[0,1,2,3,4,5],post:2,src:[2,5],about:[2,7,5],actual:3,unfortun:5,commit:[2,6,1,5],own:[0,1,5],pythonpath:4,within:5,encod:3,automat:4,down:[2,4],empti:3,ensur:1,subvers:5,your:[0,1,2,3,4,5,6],merg:4,git:5,lof:[],log:5,wai:[2,6,5],support:5,submit:6,editor:1,start:[0,1,2,4,5,6],reli:[3,5],interfac:[0,1,2,3,4,6],includ:[6,3,4,5],lot:5,suit:6,"var":4,hei:5,"function":[3,5],media:6,head:4,form:5,forc:[],great:6,bundl:[2,6],jul:3,neutral:[3,1,5],yourproject:[4,5],gain:1,newer:3,sphinx:6,line:[0,1,2,3,4,5,6],inlin:1,"true":4,bug:[0,6,2],pull:[2,6,5,1,4],rietveld:5,utf:3,tab:6,possibl:[3,1,5],whether:[3,1],access:[2,4],allow_anon_com:4,displai:1,below:[1,4],otherwis:1,problem:[2,4,5],featur:6,constant:3,creat:[2,5,7,1,4],doesn:[6,4,5],repres:3,exist:[2,6,3,5],file:[0,1,2,3,4,5,6],guarante:3,pip:6,ing:6,check:[0,3,1,2],probabl:[2,6,1,4],echo:4,googl:[],titl:4,compel:6,detail:[3,1],virtual:3,field:[6,3],other:[0,1,2,3,4,5],lookup:3,futur:3,normal:[4,5],gladli:6,test:[0,6,1],you:[0,1,2,3,4,5,6,7],nice:4,node:[6,3],meaning:[],reduc:3,bitbucket:[0,6,4,2],receiv:[3,4],happier:6,faster:3,directori:[0,2,3,4,5,6],tradeoff:3,rough:[0,6],time:[2,6,3,1],push:[6,5,1,4],backward:6},titles:["hg-review documentation","Command Line Interface","Overview","API","Web Interface","Concepts","Hacking hg-review","Licensing"],modules:{},descrefs:{},filenames:["index","cli","overview","api","webui","concepts","hacking","licensing"]})
\ No newline at end of file