--- a/mercurial/hgweb/webutil.py Thu Nov 29 08:49:21 2012 -0500
+++ b/mercurial/hgweb/webutil.py Mon Nov 12 14:05:39 2012 -0800
@@ -140,13 +140,7 @@
path = path.lstrip('/')
return scmutil.canonpath(repo.root, '', path)
-def changectx(repo, req):
- changeid = "tip"
- if 'node' in req.form:
- changeid = req.form['node'][0]
- elif 'manifest' in req.form:
- changeid = req.form['manifest'][0]
-
+def changeidctx (repo, changeid):
try:
ctx = repo[changeid]
except error.RepoError:
@@ -155,6 +149,28 @@
return ctx
+def changectx (repo, req):
+ changeid = "tip"
+ if 'node' in req.form:
+ changeid = req.form['node'][0]
+ ipos=changeid.find(':')
+ if ipos != -1:
+ changeid = changeid[(ipos + 1):]
+ elif 'manifest' in req.form:
+ changeid = req.form['manifest'][0]
+
+ return changeidctx(repo, changeid)
+
+def basechangectx(repo, req):
+ if 'node' in req.form:
+ changeid = req.form['node'][0]
+ ipos=changeid.find(':')
+ if ipos != -1:
+ changeid = changeid[:ipos]
+ return changeidctx(repo, changeid)
+
+ return None
+
def filectx(repo, req):
if 'file' not in req.form:
raise ErrorResponse(HTTP_NOT_FOUND, 'file not given')
@@ -178,7 +194,7 @@
if len(files) > max:
yield tmpl('fileellipses')
-def diffs(repo, tmpl, ctx, files, parity, style):
+def diffs(repo, tmpl, ctx, basectx, files, parity, style):
def countgen():
start = 1
@@ -209,8 +225,11 @@
m = match.always(repo.root, repo.getcwd())
diffopts = patch.diffopts(repo.ui, untrusted=True)
- parents = ctx.parents()
- node1 = parents and parents[0].node() or nullid
+ if basectx is None:
+ parents = ctx.parents()
+ node1 = parents and parents[0].node() or nullid
+ else:
+ node1 = basectx.node()
node2 = ctx.node()
block = []
@@ -274,10 +293,10 @@
for oc in s.get_grouped_opcodes(n=context):
yield tmpl('comparisonblock', lines=getblock(oc))
-def diffstatgen(ctx):
+def diffstatgen(ctx, basectx):
'''Generator function that provides the diffstat data.'''
- stats = patch.diffstatdata(util.iterlines(ctx.diff()))
+ stats = patch.diffstatdata(util.iterlines(ctx.diff(basectx)))
maxname, maxtotal, addtotal, removetotal, binary = patch.diffstatsum(stats)
while True:
yield stats, maxname, maxtotal, addtotal, removetotal, binary