1
"""Sample Wiki syntax extension plugin."""
3
from genshi.builder import tag
5
from trac.core import *
6
from trac.util.text import shorten_line
7
from trac.versioncontrol.api import NoSuchChangeset
8
from trac.versioncontrol.web_ui import ChangesetModule
9
from trac.wiki.api import IWikiSyntaxProvider
11
revision = "$Rev: 6326 $"
12
url = "$URL: http://svn.edgewall.org/repos/trac/branches/0.11-stable/sample-plugins/revision_links.py $"
14
class RevisionLinks(Component):
15
"""Adds a few more ways to refer to changesets."""
17
implements(IWikiSyntaxProvider)
19
KEYWORDS = ['[Rr]ev(?:ision)?', '[Cc]hangeset']
21
# IWikiSyntaxProvider methods
23
def get_wiki_syntax(self):
24
def revlink(f, match, fullmatch):
25
rev = match.split(' ', 1)[1] # ignore keyword
26
return self._format_revision_link(f, 'revision', rev, rev,
29
yield (r"!?(?:%s)\s+%s" % ("|".join(self.KEYWORDS),
30
ChangesetModule.CHANGESET_ID),
33
def get_link_resolvers(self):
34
yield ('revision', self._format_revision_link)
36
def _format_revision_link(self, formatter, ns, rev, label, fullmatch=None):
37
rev, params, fragment = formatter.split_link(rev)
39
changeset = self.env.get_repository().get_changeset(rev)
40
return tag.a(label, class_="changeset",
41
title=shorten_line(changeset.message),
42
href=(formatter.href.changeset(rev) +
44
except NoSuchChangeset:
45
return tag.a(label, class_="missing changeset",
46
href=formatter.href.changeset(rev),