# HG changeset patch # User Christophe de Vienne # Date 1418376979 -3600 # Node ID 73d048325dfdc5922cb28557cd8449bbadb5fc49 # Parent e5cc5cf29c7e687b9254dcb3e84e8a50ae1a65f8# Parent 5bef954cfecd517feaa94b7a5aa2d0bd6bae6ef0 Merged in akabos/hg-review (pull request #2) diff -r 5bef954cfecd -r 73d048325dfd contrib/windows/update_tortoisehg_libs.py --- a/contrib/windows/update_tortoisehg_libs.py Mon Dec 19 13:07:35 2011 +0400 +++ b/contrib/windows/update_tortoisehg_libs.py Fri Dec 12 10:36:19 2014 +0100 @@ -1,23 +1,23 @@ # this script will update tortoisehgs python libs to include the missing libs that hg-review needs -# (tested with Python 2.6 and Tortoisehg 1.1) +# (tested with Python 2.7.3 and Tortoisehg 2.6.2) # # Daniel Newton # -# Version 1.0 (2010/07/28) +# Version 1.1 (2013/01/18) import sys import os # check python version -if sys.version[:3] != '2.6': - sys.exit('Need Python 2.6') +if sys.version[:3] != '2.7': + sys.exit('Need Python 2.7') # check for windows if sys.platform != 'win32': sys.exit('Script only works on win32') # list of libs to add -libs = ('Cookie.py', 'decimal.py', 'htmlentitydefs.py', 'code.py', 'codeop.py', 'compiler', 'numbers.py', 'symbol.py', 'uuid.py') +libs = ('Cookie.py', 'htmlentitydefs.py', 'code.py', 'codeop.py', 'compiler', 'symbol.py', 'uuid.py') # find python lib path pylib_path = os.path.join(os.path.dirname(sys.executable), 'lib') diff -r 5bef954cfecd -r 73d048325dfd docs/overview.rst --- a/docs/overview.rst Mon Dec 19 13:07:35 2011 +0400 +++ b/docs/overview.rst Fri Dec 12 10:36:19 2014 +0100 @@ -27,6 +27,18 @@ [extensions] review = [path to]/hg-review/review/ +TortoiseHG +~~~~~~~~~~ + +People using TortoiseHG on Windows platforms need to update the tortoisehg +`library.zip`. This is easily done by running the +`contrib\\windows\\update_tortoisehg_libs.py` script. + +Do to that, you need to have python 2.7 installed:: + + python contrib\windows\update_tortoisehg_libs.py + + Usage ----- diff -r 5bef954cfecd -r 73d048325dfd review/api.py --- a/review/api.py Mon Dec 19 13:07:35 2011 +0400 +++ b/review/api.py Fri Dec 12 10:36:19 2014 +0100 @@ -572,6 +572,10 @@ diff_opts.git = True d = patch.diff(self.target, node1, node2, match=m, opts=diff_opts) + if not d: + # there might be no diff for the current file (merge) + continue + # patch.diff will give us back a generator with two items # the first is the diff --git header, which we don't care about d.next() diff -r 5bef954cfecd -r 73d048325dfd review/static/styles/style.less --- a/review/static/styles/style.less Mon Dec 19 13:07:35 2011 +0400 +++ b/review/static/styles/style.less Fri Dec 12 10:36:19 2014 +0100 @@ -263,6 +263,10 @@ overflow: hidden; text-overflow: ellipsis; } + &.user { + text-align: center; + white-space: nowrap; + } &.desc { a { display: inline-block; diff -r 5bef954cfecd -r 73d048325dfd review/templates/index.html --- a/review/templates/index.html Mon Dec 19 13:07:35 2011 +0400 +++ b/review/templates/index.html Fri Dec 12 10:36:19 2014 +0100 @@ -13,8 +13,14 @@ {{ rev.rev() }}:{{ node_short }} + {{ utils['person'](rev.user()) }} - {{ utils['decode'](rev.description().splitlines()[0]) }} + + {% if rev.branch() != 'default' %} + [{{ rev.branch() }}] + {%endif%} + {{ utils['decode'](rev.description().splitlines()[0]) }} + {% with %} diff -r 5bef954cfecd -r 73d048325dfd review/tests/test_web.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/review/tests/test_web.py Fri Dec 12 10:36:19 2014 +0100 @@ -0,0 +1,38 @@ +import unittest + +from nose.tools import eq_ + +import util + +from .. import web + +NON_EXISTENT_REV = 999999 + +class WebTestCase(unittest.TestCase): + """Simple web tests. Currently only checks for correct status codes.""" + + def setUp(self): + util.setup_reviewed_sandbox()() + ui = util.get_ui() + repo = util.get_sandbox_repo() + web._configure_app(ui, repo) + web.app.config['TESTING'] = True + self.app = web.app.test_client() + + def tearDown(self): + util.teardown_sandbox() + + def test_index_no_rev(self): + rv = self.app.get('/') + eq_(rv.status_code, 200) + + def test_index_high_rev(self): + rv = self.app.get('/%s/' % NON_EXISTENT_REV) + eq_(rv.status_code, 200) + + def test_index_known_rev(self): + rv = self.app.get('/0/') + eq_(rv.status_code, 200) + +if __name__ == '__main__': + unittest.main() diff -r 5bef954cfecd -r 73d048325dfd review/web.py --- a/review/web.py Mon Dec 19 13:07:35 2011 +0400 +++ b/review/web.py Fri Dec 12 10:36:19 2014 +0100 @@ -231,23 +231,29 @@ return _render('500.html'), 500 +def _configure_app(ui, repo, read_only=False, allow_anon=False): + """Configure the web app. + + This happens in a distinct function to reuse these steps in tests. + + """ + app.read_only = read_only + app.debug = ui.debugflag + app.allow_anon = allow_anon + app.site_root = '' + if app.allow_anon: + ui.setconfig('ui', 'username', 'Anonymous ') + app.ui = ui + app.repo = repo + app.title = os.path.basename(repo.root) + app.project_url = None + def load_interface(ui, repo, read_only=False, allow_anon=False, open=False, address='127.0.0.1', port=8080): if open: import webbrowser webbrowser.open('http://localhost:%d/' % port) - app.read_only = read_only - app.debug = ui.debugflag - app.allow_anon = allow_anon - app.site_root = '' - - if app.allow_anon: - ui.setconfig('ui', 'username', 'Anonymous ') - - app.ui = ui - app.repo = repo - app.title = os.path.basename(repo.root) - app.project_url = None + _configure_app(ui, repo, read_only, allow_anon) app.run(host=address, port=port)