annotate examples/trac/trac/versioncontrol/web_ui/util.py @ 39:93b4dcbafd7b trunk

Copy Trac to main branch.
author cmlenz
date Mon, 03 Jul 2006 18:53:27 +0000
parents
children
rev   line source
39
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
1 # -*- coding: utf-8 -*-
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
2 #
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
3 # Copyright (C) 2003-2006 Edgewall Software
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
4 # Copyright (C) 2003-2005 Jonas Borgström <jonas@edgewall.com>
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
5 # Copyright (C) 2005-2006 Christian Boos <cboos@neuf.fr>
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
6 # All rights reserved.
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
7 #
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
8 # This software is licensed as described in the file COPYING, which
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
9 # you should have received as part of this distribution. The terms
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
10 # are also available at http://trac.edgewall.com/license.html.
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
11 #
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
12 # This software consists of voluntary contributions made by many
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
13 # individuals. For the exact contribution history, see the revision
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
14 # history and logs, available at http://projects.edgewall.com/trac/.
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
15 #
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
16 # Author: Jonas Borgström <jonas@edgewall.com>
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
17 # Christian Boos <cboos@neuf.fr>
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
18
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
19 import re
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
20 import urllib
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
21
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
22 from trac.core import TracError
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
23 from trac.util.datefmt import format_datetime, pretty_timedelta
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
24 from trac.util.text import shorten_line
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
25 from trac.util.markup import escape, html, Markup
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
26 from trac.versioncontrol.api import NoSuchNode, NoSuchChangeset
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
27 from trac.wiki import wiki_to_html, wiki_to_oneliner
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
28
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
29 __all__ = ['get_changes', 'get_path_links', 'get_path_rev_line',
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
30 'get_existing_node', 'render_node_property']
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
31
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
32 def get_changes(env, repos, revs, full=None, req=None, format=None):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
33 db = env.get_db_cnx()
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
34 changes = {}
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
35 for rev in revs:
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
36 try:
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
37 changeset = repos.get_changeset(rev)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
38 except NoSuchChangeset:
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
39 changes[rev] = {}
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
40 continue
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
41
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
42 wiki_format = env.config['changeset'].getbool('wiki_format_messages')
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
43 message = changeset.message or '--'
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
44 absurls = (format == 'rss')
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
45 if wiki_format:
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
46 shortlog = wiki_to_oneliner(message, env, db,
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
47 shorten=True, absurls=absurls)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
48 else:
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
49 shortlog = Markup.escape(shorten_line(message))
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
50
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
51 if full:
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
52 if wiki_format:
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
53 message = wiki_to_html(message, env, req, db,
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
54 absurls=absurls, escape_newlines=True)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
55 else:
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
56 message = html.PRE(message)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
57 else:
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
58 message = shortlog
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
59
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
60 if format == 'rss':
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
61 if isinstance(shortlog, Markup):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
62 shortlog = shortlog.plaintext(keeplinebreaks=False)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
63 message = unicode(message)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
64
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
65 changes[rev] = {
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
66 'date_seconds': changeset.date,
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
67 'date': format_datetime(changeset.date),
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
68 'age': pretty_timedelta(changeset.date),
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
69 'author': changeset.author or 'anonymous',
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
70 'message': message, 'shortlog': shortlog,
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
71 }
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
72 return changes
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
73
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
74 def get_path_links(href, path, rev):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
75 links = []
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
76 parts = path.split('/')
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
77 if not parts[-1]:
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
78 parts.pop()
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
79 path = '/'
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
80 for part in parts:
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
81 path = path + part + '/'
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
82 links.append({
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
83 'name': part or 'root',
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
84 'href': href.browser(path, rev=rev)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
85 })
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
86 return links
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
87
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
88 rev_re = re.compile(r"([^@#:]*)[@#:]([^#]+)(?:#L(\d+))?")
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
89
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
90 def get_path_rev_line(path):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
91 rev = None
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
92 line = None
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
93 match = rev_re.search(path)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
94 if match:
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
95 path = match.group(1)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
96 rev = match.group(2)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
97 if match.group(3):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
98 line = int(match.group(3))
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
99 path = urllib.unquote(path)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
100 return path, rev, line
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
101
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
102 def get_existing_node(req, repos, path, rev):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
103 try:
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
104 return repos.get_node(path, rev)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
105 except NoSuchNode, e:
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
106 raise TracError(Markup('%s<br><p>You can <a href="%s">search</a> '
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
107 'in the repository history to see if that path '
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
108 'existed but was later removed.</p>', e.message,
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
109 req.href.log(path, rev=rev,
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
110 mode='path_history')))
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
111
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
112 def render_node_property(env, name, value):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
113 """Renders a node property value to HTML.
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
114
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
115 Currently only handle multi-line properties. See also #1601.
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
116 """
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
117 if value and '\n' in value:
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
118 value = Markup(''.join(['<br />%s' % escape(v)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
119 for v in value.split('\n')]))
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
120 return value
Copyright (C) 2012-2017 Edgewall Software