Merge lp:~gagern/trac-bzr/bug488151 into lp:trac-bzr

Proposed by Martin von Gagern
Status: Merged
Merged at revision: not available
Proposed branch: lp:~gagern/trac-bzr/bug488151
Merge into: lp:trac-bzr
Diff against target: 109 lines (+53/-10)
1 file modified
tracbzr/backend.py (+53/-10)
To merge this branch: bzr merge lp:~gagern/trac-bzr/bug488151
Reviewer Review Type Date Requested Status
Trac-bzr-team Pending
Review via email: mp+15275@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Martin von Gagern (gagern) wrote :

Nice fancy links to parents for trac 0.11.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'tracbzr/backend.py'
2--- tracbzr/backend.py 2009-11-25 10:17:33 +0000
3+++ tracbzr/backend.py 2009-11-26 13:40:23 +0000
4@@ -36,6 +36,7 @@
5 from itertools import izip
6 import time
7 import urllib
8+import re
9
10 import trac
11 from trac import versioncontrol, core, mimeview, wiki
12@@ -49,9 +50,12 @@
13 # timestamp information.
14 def trac_timestamp(timestamp):
15 return datetime.datetime.fromtimestamp(timestamp, utc)
16+ from trac.versioncontrol.web_ui.browser import IPropertyRenderer
17 else:
18 def trac_timestamp(timestamp):
19 return timestamp
20+ class IPropertyRenderer(core.Interface):
21+ pass
22
23
24 from bzrlib import (
25@@ -74,7 +78,9 @@
26 """The necessary glue between our repository and trac."""
27
28 core.implements(versioncontrol.IRepositoryConnector,
29- wiki.IWikiMacroProvider)
30+ wiki.IWikiMacroProvider,
31+ IPropertyRenderer,
32+ )
33
34 # IRepositoryConnector
35
36@@ -131,6 +137,38 @@
37 finally:
38 repo.unlock()
39
40+ # IPropertyRenderer
41+
42+ def match_property(self, name, mode):
43+ if name == 'parents' and mode == 'revprop':
44+ return 4
45+ return 0
46+
47+ def render_property(self, name, mode, context, props):
48+ if name == 'parents' and mode == 'revprop':
49+ path = None
50+ if context.resource.realm == 'changeset':
51+ try:
52+ path = context.req.args.get('new_path')
53+ except KeyError:
54+ pass
55+ if path is not None:
56+ path = path.strip('/')
57+ if path == '':
58+ path = None
59+ content = html.TABLE(class_='wiki parents')(
60+ html.THEAD(html.TR([html.TH(h) for h in
61+ ['Rev', 'Tree', 'Chgset']])),
62+ html.TBODY([
63+ html.TR(
64+ html.TD(p.split(',')[-1]),
65+ html.TD(html.A('@%s' % p,
66+ href=context.href.browser(path, rev=p))),
67+ html.TD(html.A('[%s]' % p,
68+ href=context.href.changeset(p, path))))
69+ for p in props[name].split('\n')]))
70+ return content
71+
72
73 class LockedBranches(object):
74
75@@ -1047,20 +1085,25 @@
76 """Return an iterator of (name, value, is wikitext, html class)."""
77 if trac_version >= (0,11):
78 result = {}
79- def add_result(name, value, is_wikitext, html_class):
80+ def add_text(name, value):
81 result[name] = value
82+ def add_parents(parents):
83+ result['parents'] = '\n'.join(parents)
84 else:
85 result = []
86- def add_result(name, value, is_wikitext, html_class):
87- result.append((name, value, is_wikitext, html_class))
88+ def add_text(name, value):
89+ result.append((name, value, False, ''))
90+ def add_parents(parents):
91+ for name, link in [('parent trees', ' * source:@%s'),
92+ ('changesets', ' * [changeset:%s]')]:
93+ wikitext = '\n'.join(link % parent for parent in parents)
94+ result.append((name, wikitext, True, ''))
95+ add_text('revision id', self.revision.revision_id)
96 for name, value in self.revision.properties.iteritems():
97- add_result(name, value, False, '')
98+ add_text(name, value)
99 if len(self.revision.parent_ids) > 1:
100- for name, link in [('parent trees', ' * source:@%s'),
101- ('changesets', ' * [changeset:%s]')]:
102- add_result(name, '\n'.join(
103- link % (self.bzr_repo.string_rev(self.branch, parent),)
104- for parent in self.revision.parent_ids), True, '')
105+ add_parents([self.bzr_repo.string_rev(self.branch, parent)
106+ for parent in self.revision.parent_ids])
107 return result
108
109 def get_changes(self):

Subscribers

People subscribed via source and target branches