##// END OF EJS Templates
old style: navigation divs on file view are better inline
old style: navigation divs on file view are better inline

File last commit:

r4116:ffd45b18 rhodecode-2.2.5-gpl
r4156:555a351a rhodecode-2.2.5-gpl
Show More
changelog.py
214 lines | 8.2 KiB | text/x-python | PythonLexer
updated docs on every controller
r861 # -*- coding: utf-8 -*-
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/>.
Bradley M. Kuhn
Imported some of the GPLv3'd changes from RhodeCode v2.2.5....
r4116 """
rhodecode.controllers.changelog
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
changelog controller for rhodecode
:created_on: Apr 21, 2010
:author: marcink
:copyright: (c) 2013 RhodeCode GmbH.
:license: GPLv3, see LICENSE for more details.
"""
updated docs on every controller
r861
import logging
implemented #44 - branch filtering in changelog, aka branch browser...
r1656 import traceback
#37 fixed json imports for python2.5...
r592
implemented #44 - branch filtering in changelog, aka branch browser...
r1656 from pylons import request, url, session, tmpl_context as c
from pylons.controllers.util import redirect
from pylons.i18n.translation import _
Added missing __get_cs_or_redirect method for file history....
r3996 from webob.exc import HTTPNotFound, HTTPBadRequest
updated docs on every controller
r861
implemented #44 - branch filtering in changelog, aka branch browser...
r1656 import rhodecode.lib.helpers as h
renamed project to rhodecode
r547 from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator
another major codes rewrite:...
r1045 from rhodecode.lib.base import BaseRepoController, render
Added dedicated repo pager to support reversed new way slicing method of vcs and get_changesets method
r1098 from rhodecode.lib.helpers import RepoPage
fixed issues with python2.5...
r1514 from rhodecode.lib.compat import json
Unified DAG generation for hg and git...
r2380 from rhodecode.lib.graphmod import _colored, _dagwalker
Use changelog controller for displaying history of files....
r3760 from rhodecode.lib.vcs.exceptions import RepositoryError, ChangesetDoesNotExistError,\
in case of empty directory don't redirect to changelog, it causes an redirection loop
r3794 ChangesetError, NodeDoesNotExistError, EmptyRepositoryError
Use safe_str on flash messages.
r4077 from rhodecode.lib.utils2 import safe_int, safe_str
Added missing __get_cs_or_redirect method for file history....
r3996
implemented #44 - branch filtering in changelog, aka branch browser...
r1656
renamed project to rhodecode
r547 log = logging.getLogger(__name__)
pep8ify
r1212
Removed shortlog aka lightweight changelog....
r3764 def _load_changelog_summary():
p = safe_int(request.GET.get('page'), 1)
size = safe_int(request.GET.get('size'), 10)
def url_generator(**kw):
return url('changelog_summary_home',
repo_name=c.rhodecode_db_repo.repo_name, size=size, **kw)
collection = c.rhodecode_repo
c.repo_changesets = RepoPage(collection, page=p,
items_per_page=size,
url=url_generator)
page_revisions = [x.raw_id for x in list(c.repo_changesets)]
c.comments = c.rhodecode_db_repo.get_comments(page_revisions)
c.statuses = c.rhodecode_db_repo.statuses(page_revisions)
another major codes rewrite:...
r1045 class ChangelogController(BaseRepoController):
Fixes for raw_id, needed for git...
r636
renamed project to rhodecode
r547 def __before__(self):
super(ChangelogController, self).__before__()
fixed some limits in changesets and changelogs
r1130 c.affected_files_cut_off = 60
Fixes for raw_id, needed for git...
r636
Added missing __get_cs_or_redirect method for file history....
r3996 def __get_cs_or_redirect(self, rev, repo, redirect_after=True,
partial=False):
"""
Safe way to get changeset if error occur it redirects to changeset with
proper message. If partial is set then don't do redirect raise Exception
instead
:param rev: revision to fetch
:param repo: repo instance
"""
try:
return c.rhodecode_repo.get_changeset(rev)
except EmptyRepositoryError, e:
if not redirect_after:
return None
h.flash(h.literal(_('There are no changesets yet')),
category='warning')
redirect(url('changelog_home', repo_name=repo.repo_name))
except RepositoryError, e:
log.error(traceback.format_exc())
Use safe_str on flash messages.
r4077 h.flash(safe_str(e), category='warning')
Added missing __get_cs_or_redirect method for file history....
r3996 if not partial:
redirect(h.url('changelog_home', repo_name=repo.repo_name))
raise HTTPBadRequest()
auth decorators are not used anymore on __before__...
r3749 def _graph(self, repo, revs_int, repo_size, size, p):
"""
Generates a DAG graph for repo
:param repo:
:param revs_int:
:param repo_size:
:param size:
:param p:
"""
if not revs_int:
c.jsdata = json.dumps([])
return
data = []
revs = revs_int
dag = _dagwalker(repo, revs, repo.alias)
dag = _colored(dag)
do not overwrite python types
r4036 for (_id, _type, ctx, vtx, edges) in dag:
auth decorators are not used anymore on __before__...
r3749 data.append(['', vtx, edges])
c.jsdata = json.dumps(data)
@LoginRequired()
@HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
'repository.admin')
Use changelog controller for displaying history of files....
r3760 def index(self, repo_name, revision=None, f_path=None):
renamed project to rhodecode
r547 limit = 100
revert default to 20, for large repositories it's better to go less and have it faster....
r1864 default = 20
usage of request.GET is now more consistent
r3748 if request.GET.get('size'):
c.size = max(min(safe_int(request.GET.get('size')), limit), 1)
renamed project to rhodecode
r547 session['changelog_size'] = c.size
session.save()
else:
c.size = int(session.get('changelog_size', default))
fixes issue #502, float division error on setting maxsize of changelog to 0
r2628 # min size must be 1
c.size = max(c.size, 1)
usage of request.GET is now more consistent
r3748 p = safe_int(request.GET.get('page', 1), 1)
branch_name = request.GET.get('branch', None)
Mads Kiilerich
changelog: use unknown branch names as revisions...
r4022 if (branch_name and
branch_name not in c.rhodecode_repo.branches and
branch_name not in c.rhodecode_repo.closed_branches and
not revision):
return redirect(url('changelog_file_home', repo_name=c.repo_name,
revision=branch_name, f_path=f_path or ''))
Use changelog controller for displaying history of files....
r3760 c.changelog_for_path = f_path
implemented #44 - branch filtering in changelog, aka branch browser...
r1656 try:
Use changelog controller for displaying history of files....
r3760
if f_path:
log.debug('generating changelog for path %s' % f_path)
# get the history for the file !
tip_cs = c.rhodecode_repo.get_changeset()
try:
collection = tip_cs.get_file_history(f_path)
except (NodeDoesNotExistError, ChangesetError):
#this node is not present at tip !
try:
fixed typo in __get_cs_or_redirect method
r4035 cs = self.__get_cs_or_redirect(revision, repo_name)
Use changelog controller for displaying history of files....
r3760 collection = cs.get_file_history(f_path)
except RepositoryError, e:
Use safe_str on flash messages.
r4077 h.flash(safe_str(e), category='warning')
Use changelog controller for displaying history of files....
r3760 redirect(h.url('changelog_home', repo_name=repo_name))
collection = list(reversed(collection))
else:
collection = c.rhodecode_repo.get_changesets(start=0,
branch_name=branch_name)
changelog pagination with branch filtering now uses...
r3747 c.total_cs = len(collection)
Fixes for raw_id, needed for git...
r636
implemented #44 - branch filtering in changelog, aka branch browser...
r1656 c.pagination = RepoPage(collection, page=p, item_count=c.total_cs,
moved make-index command to paster_commands module...
r3915 items_per_page=c.size, branch=branch_name,)
Added number of comments in changelog for each changeset...
r1884 collection = list(c.pagination)
changelog pagination with branch filtering now uses...
r3747 page_revisions = [x.raw_id for x in c.pagination]
Fixed calls to Session in db model...
r2520 c.comments = c.rhodecode_db_repo.get_comments(page_revisions)
code-review initial
r2215 c.statuses = c.rhodecode_db_repo.statuses(page_revisions)
in case of empty directory don't redirect to changelog, it causes an redirection loop
r3794 except (EmptyRepositoryError), e:
Use safe_str on flash messages.
r4077 h.flash(safe_str(e), category='warning')
in case of empty directory don't redirect to changelog, it causes an redirection loop
r3794 return redirect(url('summary_home', repo_name=c.repo_name))
implemented #44 - branch filtering in changelog, aka branch browser...
r1656 except (RepositoryError, ChangesetDoesNotExistError, Exception), e:
log.error(traceback.format_exc())
Use safe_str on flash messages.
r4077 h.flash(safe_str(e), category='error')
Mads Kiilerich
report ChangesetDoesNotExistError as an error but don't lose the repo context
r3573 return redirect(url('changelog_home', repo_name=c.repo_name))
implemented #44 - branch filtering in changelog, aka branch browser...
r1656
c.branch_name = branch_name
Added number of comments in changelog for each changeset...
r1884 c.branch_filters = [('', _('All Branches'))] + \
[(k, k) for k in c.rhodecode_repo.branches.keys()]
Mads Kiilerich
branch selectors: show closed branches too...
r4020 if c.rhodecode_repo.closed_branches:
prefix = _('(closed)') + ' '
c.branch_filters += [('-', '-')] + \
[(k, prefix + k) for k in c.rhodecode_repo.closed_branches.keys()]
Use changelog controller for displaying history of files....
r3760 _revs = []
if not f_path:
_revs = [x.revision for x in c.pagination]
self._graph(c.rhodecode_repo, _revs, c.total_cs, c.size, p)
changelog pagination with branch filtering now uses...
r3747
renamed project to rhodecode
r547 return render('changelog/changelog.html')
auth decorators are not used anymore on __before__...
r3749 @LoginRequired()
@HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
'repository.admin')
changelog uses lazy loading of affected files details, in some scenarios this can improve speed...
r1431 def changelog_details(self, cs):
if request.environ.get('HTTP_X_PARTIAL_XHR'):
c.cs = c.rhodecode_repo.get_changeset(cs)
return render('changelog/changelog_details.html')
Removed shortlog aka lightweight changelog....
r3764 raise HTTPNotFound()
@LoginRequired()
@HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
'repository.admin')
def changelog_summary(self, repo_name):
if request.environ.get('HTTP_X_PARTIAL_XHR'):
_load_changelog_summary()
return render('changelog/changelog_summary_data.html')
raise HTTPNotFound()