Mercurial > hg
view tests/test-hgweb-non-interactive.t @ 28600:0d6137891114
graphmod: allow for different styles for different edge types
Rather than draw all edges as solid lines, allow for using different styles for
different edge types. For example you could use dotted lines for edges that
do not connect to a parent, and dashed lines when connecting to a grandparent
(implying missing nodes in between).
For example, setting the following configuration:
[ui]
graphstyle.grandparent = :
graphstyle.missing = .
would result in a graph like this:
o changeset: 32:d06dffa21a31
|\ parent: 27:886ed638191b
| : parent: 31:621d83e11f67
| :
o : changeset: 31:621d83e11f67
|\: parent: 21:d42a756af44d
| : parent: 30:6e11cd4b648f
| :
o : changeset: 30:6e11cd4b648f
|\ \ parent: 28:44ecd0b9ae99
| . : parent: 29:cd9bb2be7593
| . :
o . : changeset: 28:44ecd0b9ae99
|\ \ \ parent: 1:6db2ef61d156
| . . : parent: 26:7f25b6c2f0b9
| . . :
o . . : changeset: 26:7f25b6c2f0b9
|\ \ \ \ parent: 18:1aa84d96232a
| | . . : parent: 25:91da8ed57247
| | . . :
| o-----+ changeset: 25:91da8ed57247
| | . . : parent: 21:d42a756af44d
| | . . : parent: 24:a9c19a3d96b7
| | . . :
| o . . : changeset: 24:a9c19a3d96b7
| |\ \ \ \ parent: 0:e6eb3150255d
| | . . . : parent: 23:a01cddf0766d
| | . . . :
| o---+ . : changeset: 23:a01cddf0766d
| | . . . : parent: 1:6db2ef61d156
| | . . . : parent: 22:e0d9cccacb5d
| | . . . :
| o-------+ changeset: 22:e0d9cccacb5d
| . . . . : parent: 18:1aa84d96232a
|/ / / / / parent: 21:d42a756af44d
| . . . :
| . . . o changeset: 21:d42a756af44d
| . . . |\ parent: 19:31ddc2c1573b
| . . . | | parent: 20:d30ed6450e32
| . . . | |
+-+-------o changeset: 20:d30ed6450e32
| . . . | parent: 0:e6eb3150255d
| . . . | parent: 18:1aa84d96232a
| . . . |
| . . . o changeset: 19:31ddc2c1573b
| . . . .\ parent: 15:1dda3f72782d
| . . . . | parent: 17:44765d7c06e0
| . . . . |
o---+---+ | changeset: 18:1aa84d96232a
. . . . | parent: 1:6db2ef61d156
/ / / / / parent: 15:1dda3f72782d
. . . . .
Edge styles can be altered by setting the following one-character config options::
[ui]
graphstyle.parent = |
graphstyle.grandparent = :
graphstyle.missing = .
The default configuration leaves all 3 types set to |, leaving graph styles
unaffected.
This is part of the work towards moving smartlog upstream; currently smartlog
injects extra nodes into the graph to indicate grandparent relationships (nodes
elided).
author | Martijn Pieters <mjpieters@fb.com> |
---|---|
date | Sat, 19 Mar 2016 16:46:15 -0700 |
parents | 7df5d4760873 |
children | af2e00c85d0a |
line wrap: on
line source
Tests if hgweb can run without touching sys.stdin, as is required by the WSGI standard and strictly implemented by mod_wsgi. $ hg init repo $ cd repo $ echo foo > bar $ hg add bar $ hg commit -m "test" $ cat > request.py <<EOF > from mercurial import dispatch > from mercurial.hgweb.hgweb_mod import hgweb > from mercurial.ui import ui > from mercurial import hg > from StringIO import StringIO > import os, sys > > class FileLike(object): > def __init__(self, real): > self.real = real > def fileno(self): > print >> sys.__stdout__, 'FILENO' > return self.real.fileno() > def read(self): > print >> sys.__stdout__, 'READ' > return self.real.read() > def readline(self): > print >> sys.__stdout__, 'READLINE' > return self.real.readline() > > sys.stdin = FileLike(sys.stdin) > errors = StringIO() > input = StringIO() > output = StringIO() > > def startrsp(status, headers): > print '---- STATUS' > print status > print '---- HEADERS' > print [i for i in headers if i[0] != 'ETag'] > print '---- DATA' > return output.write > > env = { > 'wsgi.version': (1, 0), > 'wsgi.url_scheme': 'http', > 'wsgi.errors': errors, > 'wsgi.input': input, > 'wsgi.multithread': False, > 'wsgi.multiprocess': False, > 'wsgi.run_once': False, > 'REQUEST_METHOD': 'GET', > 'SCRIPT_NAME': '', > 'PATH_INFO': '', > 'QUERY_STRING': '', > 'SERVER_NAME': '127.0.0.1', > 'SERVER_PORT': os.environ['HGPORT'], > 'SERVER_PROTOCOL': 'HTTP/1.0' > } > > i = hgweb('.') > for c in i(env, startrsp): > pass > print '---- ERRORS' > print errors.getvalue() > print '---- OS.ENVIRON wsgi variables' > print sorted([x for x in os.environ if x.startswith('wsgi')]) > print '---- request.ENVIRON wsgi variables' > with i._obtainrepo() as repo: > print sorted([x for x in repo.ui.environ if x.startswith('wsgi')]) > EOF $ python request.py ---- STATUS 200 Script output follows ---- HEADERS [('Content-Type', 'text/html; charset=ascii')] ---- DATA ---- ERRORS ---- OS.ENVIRON wsgi variables [] ---- request.ENVIRON wsgi variables ['wsgi.errors', 'wsgi.input', 'wsgi.multiprocess', 'wsgi.multithread', 'wsgi.run_once', 'wsgi.url_scheme', 'wsgi.version'] $ cd ..