@@ -42,12 +42,13 @@ port = 5000
use = egg:rhodecode
full_stack = true
static_files = true
lang=en
cache_dir = %(here)s/data
index_dir = %(here)s/data/index
cut_off_limit = 256000
####################################
### CELERY CONFIG ####
use_celery = false
broker.host = localhost
@@ -42,12 +42,13 @@ port = 8001
static_files = false
@@ -43,12 +43,13 @@ use = egg:rhodecode
app_instance_uuid = ${app_instance_uuid}
#!/usr/bin/env python
# encoding: utf-8
# changeset controller for pylons
# Copyright (C) 2009-2010 Marcin Kuzminski <marcin@python-works.com>
# -*- coding: utf-8 -*-
"""
rhodecode.controllers.changeset
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
changeset controller for pylons
:created_on: Apr 25, 2010
:author: marcink
:copyright: (C) 2009-2010 Marcin Kuzminski <marcin@python-works.com>
:license: GPLv3, see COPYING for more details.
# 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,
@@ -13,30 +21,28 @@
# 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.
Created on April 25, 2010
@author: marcink
import logging
import traceback
from pylons import tmpl_context as c, url, request, response
from pylons.i18n.translation import _
from pylons.controllers.util import redirect
import rhodecode.lib.helpers as h
from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator
from rhodecode.lib.base import BaseController, render
from rhodecode.lib.utils import EmptyChangeset
from rhodecode.model.scm import ScmModel
from vcs.exceptions import RepositoryError, ChangesetError
from vcs.nodes import FileNode
from vcs.utils import diffs as differ
log = logging.getLogger(__name__)
class ChangesetController(BaseController):
@LoginRequired()
@@ -44,13 +50,12 @@ class ChangesetController(BaseController
'repository.admin')
def __before__(self):
super(ChangesetController, self).__before__()
def index(self, revision):
hg_model = ScmModel()
cut_off_limit = 1024 * 250
def wrap_to_table(str):
return '''<table class="code-difftable">
<tr class="line">
<td class="lineno new"></td>
@@ -79,13 +84,13 @@ class ChangesetController(BaseController
filenode_old = FileNode(node.path, '', EmptyChangeset())
if filenode_old.is_binary or node.is_binary:
diff = wrap_to_table(_('binary file'))
else:
c.sum_added += node.size
if c.sum_added < cut_off_limit:
if c.sum_added < self.cut_off_limit:
f_udiff = differ.get_udiff(filenode_old, node)
diff = differ.DiffProcessor(f_udiff).as_html()
diff = wrap_to_table(_('Changeset is to big and was cut'
' off, see raw changeset instead'))
@@ -105,13 +110,13 @@ class ChangesetController(BaseController
if c.sum_removed < cut_off_limit:
if c.sum_removed < self.cut_off_limit:
if diff:
c.sum_removed += len(diff)
@@ -148,13 +153,13 @@ class ChangesetController(BaseController
c.changeset_old = None
c.changes = []
for node in c.changeset.added:
filenode_old = FileNode(node.path, '')
diff = _('binary file') +'\n'
diff = _('binary file') + '\n'
diff = differ.DiffProcessor(f_udiff).raw_diff()
cs1 = None
cs2 = node.last_changeset.raw_id
@@ -170,18 +175,18 @@ class ChangesetController(BaseController
cs1 = filenode_old.last_changeset.raw_id
c.changes.append(('changed', node, diff, cs1, cs2))
response.content_type = 'text/plain'
if method == 'download':
response.content_disposition = 'attachment; filename=%s.patch' % revision
parent = True if len(c.changeset.parents) > 0 else False
c.parent_tmpl = 'Parent %s' % c.changeset.parents[0].raw_id if parent else ''
c.diffs = ''
for x in c.changes:
c.diffs += x[2]
return render('changeset/raw_changeset.html')
# files controller for pylons
rhodecode.controllers.files
~~~~~~~~~~~~~~~~~~~~~~~~~~~
Files controller for RhodeCode
:created_on: Apr 21, 2010
@@ -14,42 +21,40 @@
Created on April 21, 2010
files controller for pylons
import tempfile
from mercurial import archival
from pylons import request, response, session, tmpl_context as c, url
class FilesController(BaseController):
@HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
super(FilesController, self).__before__()
c.file_size_limit = 250 * 1024 #limit of file size to display
def index(self, repo_name, revision, f_path):
c.repo = hg_model.get_repo(c.repo_name)
revision = request.POST.get('at_rev', None) or revision
@@ -194,19 +199,19 @@ class FilesController(BaseController):
elif c.action == 'raw':
return diff.raw_diff()
elif c.action == 'diff':
if node1.size > c.file_size_limit or node2.size > c.file_size_limit:
if node1.size > self.cut_off_limit or node2.size > self.cut_off_limit:
c.cur_diff = _('Diff is to big to display')
c.cur_diff = diff.as_html()
#default option
if not c.cur_diff: c.no_changes = True
return render('files/file_diff.html')
@@ -17,13 +17,13 @@ class BaseController(WSGIController):
c.rhodecode_version = __version__
c.rhodecode_name = config['rhodecode_title']
c.repo_name = get_repo_slug(request)
c.cached_repo_list = ScmModel().get_repos()
c.backends = BACKENDS.keys()
self.cut_off_limit = int(config['cut_off_limit'])
self.sa = meta.Session()
scm_model = ScmModel(self.sa)
#c.unread_journal = scm_model.get_unread_journal()
if c.repo_name:
cached_repo = scm_model.get(c.repo_name)
@@ -41,12 +41,13 @@ port = 5000
index_dir = /tmp/index
Status change: