templates/graph.tmpl
author Petr Kodl <petrkodl@gmail.com>
Thu, 09 Oct 2008 10:29:47 -0400
changeset 7118 619ebf82cef2
parent 6905 248e54a9456e
child 7124 63579aa36c8e
permissions -rw-r--r--
Take advantage of fstat calls clustering per directory if OS support it. util module implements two versions of statfiles function _statfiles calls lstat per file _statfiles_clustered takes advantage of optimizations in osutil.c, stats all files in directory at once when new directory is hit and caches the results util.statfiles dispatches to appropriate version during module loading The speedup on directory tree with 2k directories and 63k files is about factor of 1.8 (1.3s -> 0.8s for hg diff - hg startup overhead about .2s) At this point only Win32 now benefit from this patch. Rest of OSes use the non clustered implementation.

#header#
<title>#repo|escape#: graph</title>
<link rel="alternate" type="application/atom+xml"
   href="#url#atom-tags" title="Atom feed for #repo|escape#: tags">
<link rel="alternate" type="application/rss+xml"
   href="#url#rss-tags" title="RSS feed for #repo|escape#: tags">
<!--[if IE]><script type="text/javascript" src="#staticurl#excanvas.js"></script><![endif]-->
</head>
<body>

<div class="buttons">
<a href="#url#log{sessionvars%urlparameter}">changelog</a>
<a href="#url#shortlog{sessionvars%urlparameter}">shortlog</a>
<a href="#url#tags{sessionvars%urlparameter}">tags</a>
<a href="#url#file/#node|short#/{sessionvars%urlparameter}">files</a>
</div>

<h2>graph</h2>

<form action="#url#log">
{sessionvars%hiddenformentry}
<p>
<label for="search1">search:</label>
<input name="rev" id="search1" type="text" size="30">
navigate: <small class="navigate">#changenav%navgraphentry#</small>
</p>
</form>

<div id="noscript">The revision graph only works with JavaScript-enabled browsers.</div>

<div id="wrapper">
<ul id="nodebgs"></ul>
<canvas id="graph" width="224" height="#canvasheight#"></canvas>
<ul id="graphnodes"></ul>
</div>

<script type="text/javascript" src="#staticurl#graph.js"></script>
<script type="text/javascript">
<!-- hide script content

document.getElementById('noscript').style.display = 'none';

var data = {jsdata|json};
var graph = new Graph();
graph.scale({bg_height});

graph.edge = function(x0, y0, x1, y1, color) {
	
	this.setColor(color, 0.0, 0.65);
	this.ctx.beginPath();
	this.ctx.moveTo(x0, y0);
	this.ctx.lineTo(x1, y1);
	this.ctx.stroke();
	
}

var revlink = '<li style="_STYLE"><span class="desc">';
revlink += '<a href="{url}rev/_NODEID{sessionvars%urlparameter}" title="_NODEID">_DESC</a>';
revlink += '</span><span class="info">_DATE ago, by _USER</span></li>';

graph.vertex = function(x, y, color, parity, cur) {
	
	this.ctx.beginPath();
	color = this.setColor(color, 0.25, 0.75);
	this.ctx.arc(x, y, radius, 0, Math.PI * 2, true);
	this.ctx.fill();
	
	var bg = '<li class="bg parity' + parity + '"></li>';
	var left = (this.columns + 1) * this.bg_height;
	var nstyle = 'padding-left: ' + left + 'px;';
	var item = revlink.replace(/_STYLE/, nstyle);
	item = item.replace(/_PARITY/, 'parity' + parity);
	item = item.replace(/_NODEID/, cur[0]);
	item = item.replace(/_NODEID/, cur[0]);
	item = item.replace(/_DESC/, cur[3]);
	item = item.replace(/_USER/, cur[4]);
	item = item.replace(/_DATE/, cur[5]);
	
	return [bg, item];
	
}

graph.render(data);

// stop hiding script -->
</script>

<form action="#url#log">
{sessionvars%hiddenformentry}
<p>
<label for="search1">search:</label>
<input name="rev" id="search1" type="text" size="30">
navigate: <small class="navigate">#changenav%navgraphentry#</small>
</p>
</form>

#footer#