本文整理汇总了Python中trac.versioncontrol.api.RepositoryManager._get_changed_revs方法的典型用法代码示例。如果您正苦于以下问题:Python RepositoryManager._get_changed_revs方法的具体用法?Python RepositoryManager._get_changed_revs怎么用?Python RepositoryManager._get_changed_revs使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类trac.versioncontrol.api.RepositoryManager
的用法示例。
在下文中一共展示了RepositoryManager._get_changed_revs方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: render_property
# 需要导入模块: from trac.versioncontrol.api import RepositoryManager [as 别名]
# 或者: from trac.versioncontrol.api.RepositoryManager import _get_changed_revs [as 别名]
def render_property(self, name, mode, context, props):
"""Parse svn:mergeinfo and svnmerge-* properties, converting branch
names to links and providing links to the revision log for merged
and eligible revisions.
"""
has_eligible = name in ('svnmerge-integrated', 'svn:mergeinfo')
revs_label = _('blocked') if name.endswith('blocked') else _('merged')
revs_cols = 2 if has_eligible else None
reponame = context.resource.parent.id
target_path = context.resource.id
repos = RepositoryManager(self.env).get_repository(reponame)
target_rev = context.resource.version
if has_eligible:
node = repos.get_node(target_path, target_rev)
branch_starts = {}
for path, rev in node.get_copy_ancestry():
if path not in branch_starts:
branch_starts[path] = rev + 1
rows = []
eligible_infos = []
if name.startswith('svnmerge-'):
sources = props[name].split()
else:
sources = props[name].splitlines()
for line in sources:
path, revs = line.split(':', 1)
spath = _path_within_scope(repos.scope, path)
if spath is None:
continue
revs = revs.strip()
inheritable, non_inheritable = _partition_inheritable(revs)
revs = ','.join(inheritable)
deleted = False
try:
node = repos.get_node(spath, target_rev)
resource = context.resource.parent.child('source', spath)
if 'LOG_VIEW' in context.perm(resource):
row = [_get_source_link(spath, context),
_get_revs_link(revs_label, context, spath, revs)]
if non_inheritable:
non_inheritable = ','.join(non_inheritable)
row.append(_get_revs_link(_('non-inheritable'), context,
spath, non_inheritable,
_('merged on the directory '
'itself but not below')))
if has_eligible:
first_rev = branch_starts.get(spath)
if not first_rev:
first_rev = node.get_branch_origin()
eligible = set(xrange(first_rev or 1, target_rev + 1))
eligible -= set(Ranges(revs))
blocked = _get_blocked_revs(props, name, spath)
if blocked:
eligible -= set(Ranges(blocked))
if eligible:
node = repos.get_node(spath, max(eligible))
eligible_infos.append((spath, node, eligible, row))
continue
eligible = to_ranges(eligible)
row.append(_get_revs_link(_('eligible'), context,
spath, eligible))
rows.append((False, spath, [tag.td(each) for each in row]))
continue
except NoSuchNode:
deleted = True
revs = revs.replace(',', u',\u200b')
rows.append((deleted, spath,
[tag.td('/' + spath),
tag.td(revs, colspan=revs_cols)]))
# fetch eligible revisions for each path at a time
changed_revs = {}
changed_nodes = [(node, min(eligible))
for spath, node, eligible, row in eligible_infos]
if changed_nodes:
changed_revs = repos._get_changed_revs(changed_nodes)
for spath, node, eligible, row in eligible_infos:
if spath in changed_revs:
eligible &= set(changed_revs[spath])
else:
eligible.clear()
row.append(_get_revs_link(_("eligible"), context, spath,
to_ranges(eligible)))
rows.append((False, spath, [tag.td(each) for each in row]))
if not rows:
return None
rows.sort()
has_deleted = rows[-1][0] if rows else None
return tag(has_deleted and tag.a(_('(toggle deleted branches)'),
class_='trac-toggledeleted',
href='#'),
tag.table(tag.tbody(
[tag.tr(row, class_='trac-deleted' if deleted else None)
for deleted, spath, row in rows]), class_='props'))