##// END OF EJS Templates
fixes #550 mercurial repositories comparision failed when origin repo had...
fixes #550 mercurial repositories comparision failed when origin repo had additional not-common changesets + added regresion test for this

File last commit:

r2784:c85746b6 merge default
r2801:69420c48 beta
Show More
feed.py
134 lines | 4.9 KiB | text/x-python | PythonLexer
updated docs on every controller
r861 # -*- coding: utf-8 -*-
"""
rhodecode.controllers.feed
~~~~~~~~~~~~~~~~~~~~~~~~~~
Feed controller for rhodecode
source code cleanup: remove trailing white space, normalize file endings
r1203
updated docs on every controller
r861 :created_on: Apr 23, 2010
:author: marcink
2012 copyrights
r1824 :copyright: (C) 2010-2012 Marcin Kuzminski <marcin@python-works.com>
updated docs on every controller
r861 :license: GPLv3, see COPYING for more details.
"""
fixed license issue #149
r1206 # This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
source code cleanup: remove trailing white space, normalize file endings
r1203 #
renamed project to rhodecode
r547 # This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
source code cleanup: remove trailing white space, normalize file endings
r1203 #
renamed project to rhodecode
r547 # You should have received a copy of the GNU General Public License
fixed license issue #149
r1206 # along with this program. If not, see <http://www.gnu.org/licenses/>.
updated docs on every controller
r861
import logging
another major codes rewrite:...
r1045 from pylons import url, response, tmpl_context as c
another major code rafactor, reimplemented (almost from scratch)...
r1038 from pylons.i18n.translation import _
security bugfix: protected feeds, from unauthorized access, even without this, the feeds would crash and were unreadable, But proper way of securing it is with the secure decarators.
r862
Improved RSS/ATOM feeds...
r2385 from webhelpers.feedgenerator import Atom1Feed, Rss201rev2Feed
from rhodecode.lib import helpers as h
security bugfix: protected feeds, from unauthorized access, even without this, the feeds would crash and were unreadable, But proper way of securing it is with the secure decarators.
r862 from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator
another major codes rewrite:...
r1045 from rhodecode.lib.base import BaseRepoController
Improved RSS/ATOM feeds...
r2385 from rhodecode.lib.diffs import DiffProcessor
updated docs on every controller
r861
renamed project to rhodecode
r547 log = logging.getLogger(__name__)
pep8ify
r1212
another major codes rewrite:...
r1045 class FeedController(BaseRepoController):
updated docs on every controller
r861
fixed some bugs in api key auth, added access by api key into rss/atom feeds in global journal...
r1120 @LoginRequired(api_access=True)
security bugfix: protected feeds, from unauthorized access, even without this, the feeds would crash and were unreadable, But proper way of securing it is with the secure decarators.
r862 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
'repository.admin')
renamed project to rhodecode
r547 def __before__(self):
super(FeedController, self).__before__()
#common values for feeds
another major code rafactor, reimplemented (almost from scratch)...
r1038 self.description = _('Changes on %s repository')
made simple global rss and atom feed
r1088 self.title = self.title = _('%s %s feed') % (c.rhodecode_name, '%s')
renamed project to rhodecode
r547 self.language = 'en-us'
self.ttl = "5"
Improved RSS/ATOM feeds...
r2385 self.feed_nr = 20
renamed project to rhodecode
r547
added short_id to feeds, and made it more compact
r1897 def _get_title(self, cs):
Improved RSS/ATOM feeds...
r2385 return "%s" % (
h.shorter(cs.message, 160)
added short_id to feeds, and made it more compact
r1897 )
fixed wrong order of changes in feeds...
r1162 def __changes(self, cs):
Removed all string concat for exchange of ''.join()
r1359 changes = []
Added huge diff protection for RSS/ATOM feeds....
r2783 _diff = cs.diff()
# we need to protect from parsing huge diffs here other way
# we can kill the server, 32*1024 chars is a reasonable limit
HUGE_DIFF = 32 * 1024
if len(_diff) > HUGE_DIFF:
changes = ['\n ' + _('Changeset was too big and was cut off...')]
return changes
diffprocessor = DiffProcessor(_diff)
Improved RSS/ATOM feeds...
r2385 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
fixed wrong order of changes in feeds...
r1162
Improved RSS/ATOM feeds...
r2385 def __get_desc(self, cs):
desc_msg = []
desc_msg.append('%s %s %s:<br/>' % (cs.author, _('commited on'),
Vincent Duvert
Also use the date formatter on the feeds.
r2419 h.fmt_date(cs.date)))
Improved RSS/ATOM feeds...
r2385 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
fixed wrong order of changes in feeds...
r1162
renamed project to rhodecode
r547 def atom(self, repo_name):
"""Produce an atom-1.0 feed via feedgenerator module"""
added short_id to feeds, and made it more compact
r1897 feed = Atom1Feed(
title=self.title % repo_name,
link=url('summary_home', repo_name=repo_name,
qualified=True),
description=self.description % repo_name,
language=self.language,
ttl=self.ttl
)
fixed wrong order of changes in feeds...
r1162 for cs in reversed(list(c.rhodecode_repo[-self.feed_nr:])):
added short_id to feeds, and made it more compact
r1897 feed.add_item(title=self._get_title(cs),
renamed project to rhodecode
r547 link=url('changeset_home', repo_name=repo_name,
Fixes for raw_id, needed for git...
r636 revision=cs.raw_id, qualified=True),
fixed wrong order of changes in feeds...
r1162 author_name=cs.author,
Improved RSS/ATOM feeds...
r2385 description=''.join(self.__get_desc(cs)),
pubdate=cs.date,
)
updated docs on every controller
r861
renamed project to rhodecode
r547 response.content_type = feed.mime_type
return feed.writeString('utf-8')
def rss(self, repo_name):
"""Produce an rss2 feed via feedgenerator module"""
added short_id to feeds, and made it more compact
r1897 feed = Rss201rev2Feed(
title=self.title % repo_name,
link=url('summary_home', repo_name=repo_name,
qualified=True),
description=self.description % repo_name,
language=self.language,
ttl=self.ttl
)
fixed wrong order of changes in feeds...
r1162 for cs in reversed(list(c.rhodecode_repo[-self.feed_nr:])):
added short_id to feeds, and made it more compact
r1897 feed.add_item(title=self._get_title(cs),
renamed project to rhodecode
r547 link=url('changeset_home', repo_name=repo_name,
Fixes for raw_id, needed for git...
r636 revision=cs.raw_id, qualified=True),
fixed wrong order of changes in feeds...
r1162 author_name=cs.author,
Improved RSS/ATOM feeds...
r2385 description=''.join(self.__get_desc(cs)),
pubdate=cs.date,
fixed wrong order of changes in feeds...
r1162 )
updated docs on every controller
r861
renamed project to rhodecode
r547 response.content_type = feed.mime_type
return feed.writeString('utf-8')