##// END OF EJS Templates
strip: make repair.strip transactional to avoid repository corruption...
strip: make repair.strip transactional to avoid repository corruption Uses a transaction instance from the local repository to journal the truncation of revlog files, such that if a strip only partially completes, hg recover will be able to finish the truncate of all the files. The potential unbundling of changes that have been backed up to be restored later will, in case of an error, have to be unbundled manually. The difference is that it will be possible to recover the repository state so the unbundle can actually succeed.

File last commit:

r7873:4a4c7f6a default
r8073:e8a28556 default
Show More
graphmod.py
75 lines | 2.3 KiB | text/x-python | PythonLexer
Dirkjan Ochtman
add graph page to hgweb
r6691 # Revision graph generator for Mercurial
#
# Copyright 2008 Dirkjan Ochtman <dirkjan@ochtman.nl>
# Copyright 2007 Joel Rosdahl <joel@rosdahl.net>
#
# This software may be used and distributed according to the terms of
# the GNU General Public License, incorporated herein by reference.
Peter Arrenbrecht
cleanup: drop unused imports
r7873 from node import nullrev
Dirkjan Ochtman
add graph page to hgweb
r6691
def graph(repo, start_rev, stop_rev):
"""incremental revision grapher
This generator function walks through the revision history from
revision start_rev to revision stop_rev (which must be less than
or equal to start_rev) and for each revision emits tuples with the
following elements:
- Current node
- Column and color for the current node
- Edges; a list of (col, next_col, color) indicating the edges between
the current node and its parents.
- First line of the changeset description
- The changeset author
- The changeset date/time
"""
Dirkjan Ochtman
hgweb: fix problems with empty repositories
r7565 if start_rev == nullrev and not stop_rev:
return
Dirkjan Ochtman
add graph page to hgweb
r6691 assert start_rev >= stop_rev
Dirkjan Ochtman
hgweb: let the web graph cope with low revisions/new repositories (issue1293)
r7030 assert stop_rev >= 0
Dirkjan Ochtman
add graph page to hgweb
r6691 curr_rev = start_rev
revs = []
cl = repo.changelog
colors = {}
new_color = 1
while curr_rev >= stop_rev:
# Compute revs and next_revs
if curr_rev not in revs:
revs.append(curr_rev) # new head
colors[curr_rev] = new_color
new_color += 1
idx = revs.index(curr_rev)
color = colors.pop(curr_rev)
next = revs[:]
# Add parents to next_revs
parents = [x for x in cl.parentrevs(curr_rev) if x != nullrev]
addparents = [p for p in parents if p not in next]
next[idx:idx + 1] = addparents
# Set colors for the parents
for i, p in enumerate(addparents):
if not i:
colors[p] = color
else:
colors[p] = new_color
new_color += 1
# Add edges to the graph
edges = []
for col, r in enumerate(revs):
if r in next:
edges.append((col, next.index(r), colors[r]))
elif r == curr_rev:
for p in parents:
edges.append((col, next.index(p), colors[p]))
# Yield and move on
Matt Mackall
use repo[changeid] to get a changectx
r6747 yield (repo[curr_rev], (idx, color), edges)
Dirkjan Ochtman
add graph page to hgweb
r6691 revs = next
curr_rev -= 1