##// END OF EJS Templates
Fixed dbmigrate issues.
Fixed dbmigrate issues.

File last commit:

r902:07a6e8c6 beta
r907:2f83756f beta
Show More
files.py
268 lines | 9.7 KiB | text/x-python | PythonLexer
fixes #79 cut off limit was added into .ini config files
r812 # -*- coding: utf-8 -*-
"""
rhodecode.controllers.files
~~~~~~~~~~~~~~~~~~~~~~~~~~~
renamed project to rhodecode
r547
fixes #79 cut off limit was added into .ini config files
r812 Files controller for RhodeCode
:created_on: Apr 21, 2010
:author: marcink
fixed copyright year to 2011
r902 :copyright: (C) 2009-2011 Marcin Kuzminski <marcin@python-works.com>
fixes #79 cut off limit was added into .ini config files
r812 :license: GPLv3, see COPYING for more details.
"""
renamed project to rhodecode
r547 # 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; version 2
# of the License or (at your opinion) any later version of the license.
#
# 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.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
# MA 02110-1301, USA.
fixes #79 cut off limit was added into .ini config files
r812 import tempfile
import logging
import rhodecode.lib.helpers as h
renamed project to rhodecode
r547 from mercurial import archival
fixes #79 cut off limit was added into .ini config files
r812
renamed project to rhodecode
r547 from pylons import request, response, session, tmpl_context as c, url
from pylons.i18n.translation import _
from pylons.controllers.util import redirect
fixes #79 cut off limit was added into .ini config files
r812
renamed project to rhodecode
r547 from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator
from rhodecode.lib.base import BaseController, render
from rhodecode.lib.utils import EmptyChangeset
Refactor codes for scm model...
r691 from rhodecode.model.scm import ScmModel
fixes #79 cut off limit was added into .ini config files
r812
implemented #91,...
r872 from vcs.exceptions import RepositoryError, ChangesetError, ChangesetDoesNotExistError
renamed project to rhodecode
r547 from vcs.nodes import FileNode
from vcs.utils import diffs as differ
Fixes for raw_id, needed for git...
r636
renamed project to rhodecode
r547 log = logging.getLogger(__name__)
class FilesController(BaseController):
Fixes for raw_id, needed for git...
r636
renamed project to rhodecode
r547 @LoginRequired()
@HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
Fixes for raw_id, needed for git...
r636 'repository.admin')
renamed project to rhodecode
r547 def __before__(self):
super(FilesController, self).__before__()
fixed small issue made on latest patches
r813 c.cut_off_limit = self.cut_off_limit
renamed project to rhodecode
r547
def index(self, repo_name, revision, f_path):
Refactor codes for scm model...
r691 hg_model = ScmModel()
fixed annotation bug, added history to annotation....
r662 c.repo = hg_model.get_repo(c.repo_name)
Fixes for raw_id, needed for git...
r636
renamed project to rhodecode
r547 try:
Fixed url bug when using numeric revision in file browser,...
r884 #reditect to given revision from form
post_revision = request.POST.get('at_rev', None)
if post_revision:
post_revision = c.repo.get_changeset(post_revision).raw_id
redirect(url('files_home', repo_name=c.repo_name,
revision=post_revision, f_path=f_path))
c.branch = request.GET.get('branch', None)
c.f_path = f_path
fixed annotation bug, added history to annotation....
r662 c.changeset = c.repo.get_changeset(revision)
some changes for #45....
r644 cur_rev = c.changeset.revision
Fixes for raw_id, needed for git...
r636
Fixed url bug when using numeric revision in file browser,...
r884 #prev link
Changed prev/next in file browser to new vcs methods
r883 try:
Fixed url bug when using numeric revision in file browser,...
r884 prev_rev = c.repo.get_changeset(cur_rev).prev(c.branch).raw_id
Changed prev/next in file browser to new vcs methods
r883 c.url_prev = url('files_home', repo_name=c.repo_name,
Fixes for raw_id, needed for git...
r636 revision=prev_rev, f_path=f_path)
Fixed url bug when using numeric revision in file browser,...
r884 if c.branch:
c.url_prev += '?branch=%s' % c.branch
Changed prev/next in file browser to new vcs methods
r883 except ChangesetDoesNotExistError:
c.url_prev = '#'
Fixed url bug when using numeric revision in file browser,...
r884 #next link
Changed prev/next in file browser to new vcs methods
r883 try:
Fixed url bug when using numeric revision in file browser,...
r884 next_rev = c.repo.get_changeset(cur_rev).next(c.branch).raw_id
Changed prev/next in file browser to new vcs methods
r883 c.url_next = url('files_home', repo_name=c.repo_name,
some changes for #45....
r644 revision=next_rev, f_path=f_path)
Fixed url bug when using numeric revision in file browser,...
r884 if c.branch:
c.url_next += '?branch=%s' % c.branch
Changed prev/next in file browser to new vcs methods
r883 except ChangesetDoesNotExistError:
c.url_next = '#'
Fixes for raw_id, needed for git...
r636
Fixed url bug when using numeric revision in file browser,...
r884 #files
some changes for #45....
r644 try:
c.files_list = c.changeset.get_node(f_path)
fixed annotation bug, added history to annotation....
r662 c.file_history = self._get_history(c.repo, c.files_list, f_path)
some changes for #45....
r644 except RepositoryError, e:
h.flash(str(e), category='warning')
redirect(h.url('files_home', repo_name=repo_name, revision=revision))
Fixes for raw_id, needed for git...
r636
some changes for #45....
r644 except RepositoryError, e:
h.flash(str(e), category='warning')
redirect(h.url('files_home', repo_name=repo_name, revision='tip'))
Fixes for raw_id, needed for git...
r636
renamed project to rhodecode
r547 return render('files/files.html')
def rawfile(self, repo_name, revision, f_path):
Refactor codes for scm model...
r691 hg_model = ScmModel()
renamed project to rhodecode
r547 c.repo = hg_model.get_repo(c.repo_name)
file_node = c.repo.get_changeset(revision).get_node(f_path)
response.content_type = file_node.mimetype
response.content_disposition = 'attachment; filename=%s' \
Fixes for raw_id, needed for git...
r636 % f_path.split('/')[-1]
renamed project to rhodecode
r547 return file_node.content
def raw(self, repo_name, revision, f_path):
Refactor codes for scm model...
r691 hg_model = ScmModel()
renamed project to rhodecode
r547 c.repo = hg_model.get_repo(c.repo_name)
file_node = c.repo.get_changeset(revision).get_node(f_path)
response.content_type = 'text/plain'
Fixes for raw_id, needed for git...
r636
renamed project to rhodecode
r547 return file_node.content
Fixes for raw_id, needed for git...
r636
renamed project to rhodecode
r547 def annotate(self, repo_name, revision, f_path):
Refactor codes for scm model...
r691 hg_model = ScmModel()
renamed project to rhodecode
r547 c.repo = hg_model.get_repo(c.repo_name)
added tags, and branches to file history select box, fixed annotation changeset errors crash on wrongly given revions
r774
try:
c.cs = c.repo.get_changeset(revision)
c.file = c.cs.get_node(f_path)
except RepositoryError, e:
h.flash(str(e), category='warning')
redirect(h.url('files_home', repo_name=repo_name, revision=revision))
fixed annotation bug, added history to annotation....
r662 c.file_history = self._get_history(c.repo, c.file, f_path)
renamed project to rhodecode
r547 c.f_path = f_path
return render('files/files_annotate.html')
Fixes for raw_id, needed for git...
r636
implemented #91,...
r872 def archivefile(self, repo_name, fname):
info = fname.split('.')
revision, fileformat = info[0], '.' + '.'.join(info[1:])
renamed project to rhodecode
r547 archive_specs = {
'.tar.bz2': ('application/x-tar', 'tbz2'),
'.tar.gz': ('application/x-tar', 'tgz'),
'.zip': ('application/zip', 'zip'),
}
if not archive_specs.has_key(fileformat):
implemented #91,...
r872 return _('Unknown archive type %s') % fileformat
repo = ScmModel().get_repo(repo_name)
try:
repo.get_changeset(revision)
except ChangesetDoesNotExistError:
return _('Unknown revision %s') % revision
archive = tempfile.TemporaryFile()
localrepo = repo.repo
fname = '%s-%s%s' % (repo_name, revision, fileformat)
archival.archive(localrepo, archive, revision, archive_specs[fileformat][1],
prefix='%s-%s' % (repo_name, revision))
response.content_type = archive_specs[fileformat][0]
response.content_disposition = 'attachment; filename=%s' % fname
archive.seek(0)
Fixes for raw_id, needed for git...
r636
renamed project to rhodecode
r547 def read_in_chunks(file_object, chunk_size=1024 * 40):
"""Lazy function (generator) to read a file piece by piece.
Default chunk size: 40k."""
while True:
data = file_object.read(chunk_size)
if not data:
break
Fixes for raw_id, needed for git...
r636 yield data
renamed project to rhodecode
r547 return read_in_chunks(archive)
Fixes for raw_id, needed for git...
r636
renamed project to rhodecode
r547 def diff(self, repo_name, f_path):
Refactor codes for scm model...
r691 hg_model = ScmModel()
renamed project to rhodecode
r547 diff1 = request.GET.get('diff1')
diff2 = request.GET.get('diff2')
c.action = request.GET.get('diff')
c.no_changes = diff1 == diff2
c.f_path = f_path
c.repo = hg_model.get_repo(c.repo_name)
try:
if diff1 not in ['', None, 'None', '0' * 12, '0' * 40]:
c.changeset_1 = c.repo.get_changeset(diff1)
node1 = c.changeset_1.get_node(f_path)
else:
c.changeset_1 = EmptyChangeset()
node1 = FileNode('.', '', changeset=c.changeset_1)
Fixes for raw_id, needed for git...
r636
renamed project to rhodecode
r547 if diff2 not in ['', None, 'None', '0' * 12, '0' * 40]:
c.changeset_2 = c.repo.get_changeset(diff2)
node2 = c.changeset_2.get_node(f_path)
else:
c.changeset_2 = EmptyChangeset()
node2 = FileNode('.', '', changeset=c.changeset_2)
except RepositoryError:
return redirect(url('files_home',
repo_name=c.repo_name, f_path=f_path))
f_udiff = differ.get_udiff(node1, node2)
diff = differ.DiffProcessor(f_udiff)
Fixes for raw_id, needed for git...
r636
renamed project to rhodecode
r547 if c.action == 'download':
diff_name = '%s_vs_%s.diff' % (diff1, diff2)
response.content_type = 'text/plain'
response.content_disposition = 'attachment; filename=%s' \
Fixes for raw_id, needed for git...
r636 % diff_name
renamed project to rhodecode
r547 return diff.raw_diff()
Fixes for raw_id, needed for git...
r636
renamed project to rhodecode
r547 elif c.action == 'raw':
fixed raw diff as purly raw without html
r649 response.content_type = 'text/plain'
return diff.raw_diff()
fixed annotation bug, added history to annotation....
r662
renamed project to rhodecode
r547 elif c.action == 'diff':
fixes #79 cut off limit was added into .ini config files
r812 if node1.size > self.cut_off_limit or node2.size > self.cut_off_limit:
renamed project to rhodecode
r547 c.cur_diff = _('Diff is to big to display')
else:
c.cur_diff = diff.as_html()
else:
#default option
fixes #79 cut off limit was added into .ini config files
r812 if node1.size > self.cut_off_limit or node2.size > self.cut_off_limit:
renamed project to rhodecode
r547 c.cur_diff = _('Diff is to big to display')
else:
c.cur_diff = diff.as_html()
Fixes for raw_id, needed for git...
r636
if not c.cur_diff: c.no_changes = True
renamed project to rhodecode
r547 return render('files/file_diff.html')
Fixes for raw_id, needed for git...
r636
renamed project to rhodecode
r547 def _get_history(self, repo, node, f_path):
from vcs.nodes import NodeKind
if not node.kind is NodeKind.FILE:
return []
changesets = node.history
hist_l = []
added tags, and branches to file history select box, fixed annotation changeset errors crash on wrongly given revions
r774
changesets_group = ([], _("Changesets"))
branches_group = ([], _("Branches"))
tags_group = ([], _("Tags"))
renamed project to rhodecode
r547 for chs in changesets:
n_desc = 'r%s:%s' % (chs.revision, chs.short_id)
added tags, and branches to file history select box, fixed annotation changeset errors crash on wrongly given revions
r774 changesets_group[0].append((chs.raw_id, n_desc,))
hist_l.append(changesets_group)
for name, chs in c.repository_branches.items():
#chs = chs.split(':')[-1]
branches_group[0].append((chs, name),)
hist_l.append(branches_group)
for name, chs in c.repository_tags.items():
#chs = chs.split(':')[-1]
tags_group[0].append((chs, name),)
hist_l.append(tags_group)
renamed project to rhodecode
r547 return hist_l
added tags, and branches to file history select box, fixed annotation changeset errors crash on wrongly given revions
r774