1205 lessvars = copy.copy(tmpl.defaults['sessionvars']) |
1205 lessvars = copy.copy(tmpl.defaults['sessionvars']) |
1206 lessvars['revcount'] = max(revcount / 2, 1) |
1206 lessvars['revcount'] = max(revcount / 2, 1) |
1207 morevars = copy.copy(tmpl.defaults['sessionvars']) |
1207 morevars = copy.copy(tmpl.defaults['sessionvars']) |
1208 morevars['revcount'] = revcount * 2 |
1208 morevars['revcount'] = revcount * 2 |
1209 |
1209 |
|
1210 graphtop = req.form.get('graphtop', [ctx.hex()])[0] |
|
1211 graphvars = copy.copy(tmpl.defaults['sessionvars']) |
|
1212 graphvars['graphtop'] = graphtop |
|
1213 |
1210 count = len(web.repo) |
1214 count = len(web.repo) |
1211 pos = rev |
1215 pos = rev |
1212 |
1216 |
1213 uprev = min(max(0, count - 1), rev + revcount) |
1217 uprev = min(max(0, count - 1), rev + revcount) |
1214 downrev = max(0, rev - revcount) |
1218 downrev = max(0, rev - revcount) |
1215 changenav = webutil.revnav(web.repo).gen(pos, revcount, count) |
1219 changenav = webutil.revnav(web.repo).gen(pos, revcount, count) |
1216 |
1220 |
1217 tree = [] |
1221 tree = [] |
|
1222 nextentry = [] |
|
1223 lastrev = 0 |
1218 if pos != -1: |
1224 if pos != -1: |
1219 allrevs = web.repo.changelog.revs(pos, 0) |
1225 allrevs = web.repo.changelog.revs(pos, 0) |
1220 revs = [] |
1226 revs = [] |
1221 for i in allrevs: |
1227 for i in allrevs: |
1222 revs.append(i) |
1228 revs.append(i) |
1223 if len(revs) >= revcount: |
1229 if len(revs) >= revcount + 1: |
1224 break |
1230 break |
|
1231 |
|
1232 if len(revs) > revcount: |
|
1233 nextentry = [webutil.commonentry(web.repo, web.repo[revs[-1]])] |
|
1234 revs = revs[:-1] |
|
1235 |
|
1236 lastrev = revs[-1] |
1225 |
1237 |
1226 # We have to feed a baseset to dagwalker as it is expecting smartset |
1238 # We have to feed a baseset to dagwalker as it is expecting smartset |
1227 # object. This does not have a big impact on hgweb performance itself |
1239 # object. This does not have a big impact on hgweb performance itself |
1228 # since hgweb graphing code is not itself lazy yet. |
1240 # since hgweb graphing code is not itself lazy yet. |
1229 dag = graphmod.dagwalker(web.repo, smartset.baseset(revs)) |
1241 dag = graphmod.dagwalker(web.repo, smartset.baseset(revs)) |
1230 # As we said one line above... not lazy. |
1242 # As we said one line above... not lazy. |
1231 tree = list(item for item in graphmod.colored(dag, web.repo) |
1243 tree = list(item for item in graphmod.colored(dag, web.repo) |
1232 if item[1] == graphmod.CHANGESET) |
1244 if item[1] == graphmod.CHANGESET) |
1233 |
1245 |
|
1246 def fulltree(): |
|
1247 pos = web.repo[graphtop].rev() |
|
1248 tree = [] |
|
1249 if pos != -1: |
|
1250 revs = web.repo.changelog.revs(pos, lastrev) |
|
1251 dag = graphmod.dagwalker(web.repo, smartset.baseset(revs)) |
|
1252 tree = list(item for item in graphmod.colored(dag, web.repo) |
|
1253 if item[1] == graphmod.CHANGESET) |
|
1254 return tree |
|
1255 |
1234 def jsdata(): |
1256 def jsdata(): |
1235 return [{'node': pycompat.bytestr(ctx), |
1257 return [{'node': pycompat.bytestr(ctx), |
1236 'vertex': vtx, |
1258 'vertex': vtx, |
1237 'edges': edges} |
1259 'edges': edges} |
1238 for (id, type, ctx, vtx, edges) in tree] |
1260 for (id, type, ctx, vtx, edges) in fulltree()] |
1239 |
1261 |
1240 def nodes(): |
1262 def nodes(): |
1241 for row, (id, type, ctx, vtx, edges) in enumerate(tree): |
1263 for row, (id, type, ctx, vtx, edges) in enumerate(tree): |
1242 entry = webutil.commonentry(web.repo, ctx) |
1264 entry = webutil.commonentry(web.repo, ctx) |
1243 edgedata = [{'col': edge[0], |
1265 edgedata = [{'col': edge[0], |
1258 rows = len(tree) |
1280 rows = len(tree) |
1259 |
1281 |
1260 return tmpl('graph', rev=rev, symrev=symrev, revcount=revcount, |
1282 return tmpl('graph', rev=rev, symrev=symrev, revcount=revcount, |
1261 uprev=uprev, |
1283 uprev=uprev, |
1262 lessvars=lessvars, morevars=morevars, downrev=downrev, |
1284 lessvars=lessvars, morevars=morevars, downrev=downrev, |
|
1285 graphvars=graphvars, |
1263 rows=rows, |
1286 rows=rows, |
1264 bg_height=bg_height, |
1287 bg_height=bg_height, |
1265 changesets=count, |
1288 changesets=count, |
|
1289 nextentry=nextentry, |
1266 jsdata=lambda **x: jsdata(), |
1290 jsdata=lambda **x: jsdata(), |
1267 nodes=lambda **x: nodes(), |
1291 nodes=lambda **x: nodes(), |
1268 node=ctx.hex(), changenav=changenav) |
1292 node=ctx.hex(), changenav=changenav) |
1269 |
1293 |
1270 def _getdoc(e): |
1294 def _getdoc(e): |