diff 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
line wrap: on
line diff
new file mode 100644
--- /dev/null
+++ b/examples/trac/trac/versioncontrol/web_ui/util.py
@@ -0,0 +1,120 @@
+# -*- coding: utf-8 -*-
+#
+# Copyright (C) 2003-2006 Edgewall Software
+# Copyright (C) 2003-2005 Jonas Borgström <jonas@edgewall.com>
+# Copyright (C) 2005-2006 Christian Boos <cboos@neuf.fr>
+# All rights reserved.
+#
+# This software is licensed as described in the file COPYING, which
+# you should have received as part of this distribution. The terms
+# are also available at http://trac.edgewall.com/license.html.
+#
+# This software consists of voluntary contributions made by many
+# individuals. For the exact contribution history, see the revision
+# history and logs, available at http://projects.edgewall.com/trac/.
+#
+# Author: Jonas Borgström <jonas@edgewall.com>
+#         Christian Boos <cboos@neuf.fr>
+
+import re
+import urllib
+
+from trac.core import TracError
+from trac.util.datefmt import format_datetime, pretty_timedelta
+from trac.util.text import shorten_line
+from trac.util.markup import escape, html, Markup
+from trac.versioncontrol.api import NoSuchNode, NoSuchChangeset
+from trac.wiki import wiki_to_html, wiki_to_oneliner
+
+__all__ = ['get_changes', 'get_path_links', 'get_path_rev_line',
+           'get_existing_node', 'render_node_property']
+
+def get_changes(env, repos, revs, full=None, req=None, format=None):
+    db = env.get_db_cnx()
+    changes = {}
+    for rev in revs:
+        try:
+            changeset = repos.get_changeset(rev)
+        except NoSuchChangeset:
+            changes[rev] = {}
+            continue
+
+        wiki_format = env.config['changeset'].getbool('wiki_format_messages')
+        message = changeset.message or '--'
+        absurls = (format == 'rss')
+        if wiki_format:
+            shortlog = wiki_to_oneliner(message, env, db,
+                                        shorten=True, absurls=absurls)
+        else:
+            shortlog = Markup.escape(shorten_line(message))
+
+        if full:
+            if wiki_format:
+                message = wiki_to_html(message, env, req, db,
+                                       absurls=absurls, escape_newlines=True)
+            else:
+                message = html.PRE(message)
+        else:
+            message = shortlog
+
+        if format == 'rss':
+            if isinstance(shortlog, Markup):
+                shortlog = shortlog.plaintext(keeplinebreaks=False)
+            message = unicode(message)
+
+        changes[rev] = {
+            'date_seconds': changeset.date,
+            'date': format_datetime(changeset.date),
+            'age': pretty_timedelta(changeset.date),
+            'author': changeset.author or 'anonymous',
+            'message': message, 'shortlog': shortlog,
+        }
+    return changes
+
+def get_path_links(href, path, rev):
+    links = []
+    parts = path.split('/')
+    if not parts[-1]:
+        parts.pop()
+    path = '/'
+    for part in parts:
+        path = path + part + '/'
+        links.append({
+            'name': part or 'root',
+            'href': href.browser(path, rev=rev)
+        })
+    return links
+
+rev_re = re.compile(r"([^@#:]*)[@#:]([^#]+)(?:#L(\d+))?")
+
+def get_path_rev_line(path):
+    rev = None
+    line = None
+    match = rev_re.search(path)
+    if match:
+        path = match.group(1)
+        rev = match.group(2)
+        if match.group(3):
+            line = int(match.group(3))
+    path = urllib.unquote(path)
+    return path, rev, line
+
+def get_existing_node(req, repos, path, rev):
+    try: 
+        return repos.get_node(path, rev) 
+    except NoSuchNode, e:
+        raise TracError(Markup('%s<br><p>You can <a href="%s">search</a> ' 
+                               'in the repository history to see if that path '
+                               'existed but was later removed.</p>', e.message,
+                               req.href.log(path, rev=rev,
+                                            mode='path_history')))
+
+def render_node_property(env, name, value):
+    """Renders a node property value to HTML.
+
+    Currently only handle multi-line properties. See also #1601.
+    """
+    if value and '\n' in value:
+        value = Markup(''.join(['<br />%s' % escape(v)
+                                for v in value.split('\n')]))
+    return value
Copyright (C) 2012-2017 Edgewall Software