Mercurial > kallithea
diff rhodecode/controllers/feed.py @ 2385:a455b2c79c85 beta
Improved RSS/ATOM feeds
- rewrote using new diff lib
- added shorter commit as title and full commit message in body
- increased feed size from 10 to 20 entries
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Mon, 04 Jun 2012 18:40:39 +0200 |
parents | 8ecfed1d8f8b |
children | 513de5ffe608 |
line wrap: on
line diff
--- a/rhodecode/controllers/feed.py Mon Jun 04 17:26:34 2012 +0200 +++ b/rhodecode/controllers/feed.py Mon Jun 04 18:40:39 2012 +0200 @@ -28,11 +28,12 @@ from pylons import url, response, tmpl_context as c from pylons.i18n.translation import _ -from rhodecode.lib.utils2 import safe_unicode +from webhelpers.feedgenerator import Atom1Feed, Rss201rev2Feed + +from rhodecode.lib import helpers as h from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator from rhodecode.lib.base import BaseRepoController - -from webhelpers.feedgenerator import Atom1Feed, Rss201rev2Feed +from rhodecode.lib.diffs import DiffProcessor log = logging.getLogger(__name__) @@ -49,31 +50,36 @@ self.title = self.title = _('%s %s feed') % (c.rhodecode_name, '%s') self.language = 'en-us' self.ttl = "5" - self.feed_nr = 10 + self.feed_nr = 20 def _get_title(self, cs): - return "R%s:%s - %s" % ( - cs.revision, cs.short_id, cs.message + return "%s" % ( + h.shorter(cs.message, 160) ) def __changes(self, cs): changes = [] - a = [safe_unicode(n.path) for n in cs.added] - if a: - changes.append('\nA ' + '\nA '.join(a)) - - m = [safe_unicode(n.path) for n in cs.changed] - if m: - changes.append('\nM ' + '\nM '.join(m)) + diffprocessor = DiffProcessor(cs.diff()) + stats = diffprocessor.prepare(inline_diff=False) + for st in stats: + st.update({'added': st['stats'][0], + 'removed': st['stats'][1]}) + changes.append('\n %(operation)s %(filename)s ' + '(%(added)s lines added, %(removed)s lines removed)' + % st) + return changes - d = [safe_unicode(n.path) for n in cs.removed] - if d: - changes.append('\nD ' + '\nD '.join(d)) - - changes.append('</pre>') - - return ''.join(changes) + def __get_desc(self, cs): + desc_msg = [] + desc_msg.append('%s %s %s:<br/>' % (cs.author, _('commited on'), + cs.date)) + desc_msg.append('<pre>') + desc_msg.append(cs.message) + desc_msg.append('\n') + desc_msg.extend(self.__changes(cs)) + desc_msg.append('</pre>') + return desc_msg def atom(self, repo_name): """Produce an atom-1.0 feed via feedgenerator module""" @@ -87,15 +93,13 @@ ) for cs in reversed(list(c.rhodecode_repo[-self.feed_nr:])): - desc_msg = [] - desc_msg.append('%s - %s<br/><pre>' % (cs.author, cs.date)) - desc_msg.append(self.__changes(cs)) - feed.add_item(title=self._get_title(cs), link=url('changeset_home', repo_name=repo_name, revision=cs.raw_id, qualified=True), author_name=cs.author, - description=''.join(desc_msg)) + description=''.join(self.__get_desc(cs)), + pubdate=cs.date, + ) response.content_type = feed.mime_type return feed.writeString('utf-8') @@ -112,15 +116,12 @@ ) for cs in reversed(list(c.rhodecode_repo[-self.feed_nr:])): - desc_msg = [] - desc_msg.append('%s - %s<br/><pre>' % (cs.author, cs.date)) - desc_msg.append(self.__changes(cs)) - feed.add_item(title=self._get_title(cs), link=url('changeset_home', repo_name=repo_name, revision=cs.raw_id, qualified=True), author_name=cs.author, - description=''.join(desc_msg), + description=''.join(self.__get_desc(cs)), + pubdate=cs.date, ) response.content_type = feed.mime_type