Mercurial > public > mercurial-scm > hg-stable
diff mercurial/hgweb/webcommands.py @ 35566:baca93a47992
hgweb: make different kinds of commits look differently on /graph
Regular hg log -G uses different symbols for some graph nodes, such as commits
that close branches and hidden commits. It also marks the currently checked out
commit with "@". Since hg serve is sometimes used/recommended as a more visual
alternative to CLI, it makes sense to port these features to hgweb.
"graphnode" includes the style of a particular node and also if it's currently
checked out or not, both at the same time. This is different from hg log -G
(which uses templatekw.showgraphnode), where there's only place for one
character, but hgweb doesn't have this limitation, since it uses <canvas> and
not plain text. I'm using one string of 1 or 2 characters in this patch, it's
not the most self-explanatory format, but it's concise, uses the same
characters as hg log -G, and is internal to hgweb (i.e. not used for
json-graph).
I'm more or less fine with how things look visually, but there's still room for
improvement. Feel free to criticise or point me to good-looking graphs of this
kind for inspiration.
author | Anton Shestakov <av6@dwimlabs.net> |
---|---|
date | Tue, 19 Dec 2017 20:41:25 +0800 |
parents | acd8a2454b47 |
children | 0ef50a5e3ae1 |
line wrap: on
line diff
--- a/mercurial/hgweb/webcommands.py Thu Dec 21 13:58:11 2017 +0100 +++ b/mercurial/hgweb/webcommands.py Tue Dec 19 20:41:25 2017 +0800 @@ -13,7 +13,7 @@ import re from ..i18n import _ -from ..node import hex, short +from ..node import hex, nullid, short from .common import ( ErrorResponse, @@ -1248,6 +1248,24 @@ tree = list(item for item in graphmod.colored(dag, web.repo) if item[1] == graphmod.CHANGESET) + def nodecurrent(ctx): + wpnodes = web.repo.dirstate.parents() + if wpnodes[1] == nullid: + wpnodes = wpnodes[:1] + if ctx.node() in wpnodes: + return '@' + return '' + + def nodesymbol(ctx): + if ctx.obsolete(): + return 'x' + elif ctx.isunstable(): + return '*' + elif ctx.closesbranch(): + return '_' + else: + return 'o' + def fulltree(): pos = web.repo[graphtop].rev() tree = [] @@ -1260,6 +1278,7 @@ def jsdata(): return [{'node': pycompat.bytestr(ctx), + 'graphnode': nodecurrent(ctx) + nodesymbol(ctx), 'vertex': vtx, 'edges': edges} for (id, type, ctx, vtx, edges) in fulltree()]