Changeset - 2e2ae0af3962
[Not reviewed]
Merge default
0 4 0
Marcin Kuzminski - 15 years ago 2010-10-05 21:26:44
marcin@python-works.com
merged
4 files changed with 116 insertions and 58 deletions:
0 comments (0 inline, 0 general)
pylons_app/controllers/changeset.py
Show inline comments
 
@@ -22,11 +22,12 @@ changeset controller for pylons
 
@author: marcink
 
"""
 
from pylons import tmpl_context as c, url, request, response
 
from pylons.i18n.translation import _
 
from pylons.controllers.util import redirect
 
from pylons_app.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator
 
from pylons_app.lib.base import BaseController, render
 
from pylons_app.model.hg_model import HgModel
 
from vcs.exceptions import RepositoryError
 
from vcs.exceptions import RepositoryError, ChangesetError
 
from vcs.nodes import FileNode
 
from vcs.utils import diffs as differ
 
import logging
 
@@ -44,6 +45,88 @@ class ChangesetController(BaseController
 
        
 
    def index(self, revision):
 
        hg_model = HgModel()
 
        cut_off_limit = 1024 * 100
 
        
 
        def wrap_to_table(str):
 
            
 
            return '''<table class="code-difftable">
 
                        <tr class="line">
 
                        <td class="lineno new"></td>
 
                        <td class="code"><pre>%s</pre></td>
 
                        </tr>
 
                      </table>''' % str
 
            
 
        try:
 
            c.changeset = hg_model.get_repo(c.repo_name).get_changeset(revision)
 
        except RepositoryError:
 
            log.error(traceback.format_exc())
 
            return redirect(url('hg_home'))
 
        else:
 
            try:
 
                c.changeset_old = c.changeset.parents[0]
 
            except IndexError:
 
                c.changeset_old = None
 
            c.changes = []
 
            
 
            #===================================================================
 
            # ADDED FILES
 
            #===================================================================
 
            c.sum_added = 0
 
            for node in c.changeset.added:
 
                
 
                filenode_old = FileNode(node.path, '')
 
                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:
 
                        f_udiff = differ.get_udiff(filenode_old, node)
 
                        diff = differ.DiffProcessor(f_udiff).as_html()
 
                    else:
 
                        diff = wrap_to_table(_('Changeset is to big and was cut'
 
                                            ' off, see raw changeset instead'))
 
                        
 
                cs1 = None
 
                cs2 = node.last_changeset.short_id                                        
 
                c.changes.append(('added', node, diff, cs1, cs2))
 
            
 
            #===================================================================
 
            # CHANGED FILES
 
            #===================================================================
 
            c.sum_removed = 0    
 
            for node in c.changeset.changed:
 
                try:
 
                    filenode_old = c.changeset_old.get_node(node.path)
 
                except ChangesetError:
 
                    filenode_old = FileNode(node.path, '')
 
                    
 
                if filenode_old.is_binary or node.is_binary:
 
                    diff = wrap_to_table(_('binary file'))
 
                else:
 
                    c.sum_removed += node.size
 
                    if c.sum_removed < cut_off_limit:
 
                        f_udiff = differ.get_udiff(filenode_old, node)
 
                        diff = differ.DiffProcessor(f_udiff).as_html()
 
                    else:
 
                        diff = wrap_to_table(_('Changeset is to big and was cut'
 
                                            ' off, see raw changeset instead'))
 

	
 
                cs1 = filenode_old.last_changeset.short_id
 
                cs2 = node.last_changeset.short_id                    
 
                c.changes.append(('changed', node, diff, cs1, cs2))
 
                
 
            #===================================================================
 
            # REMOVED FILES    
 
            #===================================================================
 
            for node in c.changeset.removed:
 
                c.changes.append(('removed', node, None, None, None))            
 
            
 
        return render('changeset/changeset.html')
 

	
 
    def raw_changeset(self, revision):
 
        
 
        hg_model = HgModel()
 
        method = request.GET.get('diff', 'show')
 
        try:
 
            c.changeset = hg_model.get_repo(c.repo_name).get_changeset(revision)
 
        except RepositoryError:
 
@@ -59,52 +142,7 @@ class ChangesetController(BaseController
 
            for node in c.changeset.added:
 
                filenode_old = FileNode(node.path, '')
 
                if filenode_old.is_binary or node.is_binary:
 
                    diff = 'binary file'
 
                else:    
 
                    f_udiff = differ.get_udiff(filenode_old, node)
 
                    diff = differ.DiffProcessor(f_udiff).as_html()
 

	
 
                cs1 = None
 
                cs2 = node.last_changeset.short_id                                        
 
                c.changes.append(('added', node, diff, cs1, cs2))
 
                
 
            for node in c.changeset.changed:
 
                filenode_old = c.changeset_old.get_node(node.path)
 
                if filenode_old.is_binary or node.is_binary:
 
                    diff = 'binary file'
 
                else:    
 
                    f_udiff = differ.get_udiff(filenode_old, node)
 
                    diff = differ.DiffProcessor(f_udiff).as_html()
 

	
 
                cs1 = filenode_old.last_changeset.short_id
 
                cs2 = node.last_changeset.short_id                    
 
                c.changes.append(('changed', node, diff, cs1, cs2))
 
                
 
            for node in c.changeset.removed:
 
                c.changes.append(('removed', node, None, None, None))            
 
            
 
        return render('changeset/changeset.html')
 

	
 
    def raw_changeset(self,revision):
 
        
 
        hg_model = HgModel()
 
        method = request.GET.get('diff','show')
 
        try:
 
            c.changeset = hg_model.get_repo(c.repo_name).get_changeset(revision)
 
        except RepositoryError:
 
            log.error(traceback.format_exc())
 
            return redirect(url('hg_home'))
 
        else:
 
            try:
 
                c.changeset_old = c.changeset.parents[0]
 
            except IndexError:
 
                c.changeset_old = None
 
            c.changes = []
 
            
 
            for node in c.changeset.added:
 
                filenode_old = FileNode(node.path, '')
 
                if filenode_old.is_binary or node.is_binary:
 
                    diff = 'binary file'
 
                    diff = _('binary file')
 
                else:    
 
                    f_udiff = differ.get_udiff(filenode_old, node)
 
                    diff = differ.DiffProcessor(f_udiff).raw_diff()
 
@@ -116,7 +154,7 @@ class ChangesetController(BaseController
 
            for node in c.changeset.changed:
 
                filenode_old = c.changeset_old.get_node(node.path)
 
                if filenode_old.is_binary or node.is_binary:
 
                    diff = 'binary file'
 
                    diff = _('binary file')
 
                else:    
 
                    f_udiff = differ.get_udiff(filenode_old, node)
 
                    diff = differ.DiffProcessor(f_udiff).raw_diff()
 
@@ -129,7 +167,7 @@ class ChangesetController(BaseController
 
        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]._hex if parent else ''
 
        c.parent_tmpl = 'Parent  %s' % c.changeset.parents[0].raw_id if parent else ''
 
    
 
        c.diffs = ''
 
        for x in c.changes:
pylons_app/controllers/files.py
Show inline comments
 
@@ -24,6 +24,7 @@ files controller for pylons
 
"""
 
from mercurial import archival
 
from pylons import request, response, session, tmpl_context as c, url
 
from pylons.i18n.translation import _
 
from pylons.controllers.util import redirect
 
from pylons_app.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator
 
from pylons_app.lib.base import BaseController, render
 
@@ -155,26 +156,27 @@ class FilesController(BaseController):
 
        c.repo = hg_model.get_repo(c.repo_name)
 

	
 
        try:
 
            if diff1 not in ['', None, 'None', '0' * 12]:
 
            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('.', '')
 
            if diff2 not in ['', None, 'None', '0' * 12]:
 
                node1 = FileNode('.', '', changeset=c.changeset_1)
 
                
 
            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('.', '') 
 
                node2 = FileNode('.', '', changeset=c.changeset_2)
 
        except RepositoryError:
 
            return redirect(url('files_home',
 
                                repo_name=c.repo_name, f_path=f_path))
 

	
 
        c.diff1 = 'r%s:%s' % (c.changeset_1.revision, c.changeset_1.short_id)
 
        c.diff2 = 'r%s:%s' % (c.changeset_2.revision, c.changeset_2.short_id)
 
        
 
        f_udiff = differ.get_udiff(node1, node2)
 
        
 
        diff = differ.DiffProcessor(f_udiff)
 
                                
 
        if c.action == 'download':
 
@@ -187,10 +189,16 @@ class FilesController(BaseController):
 
        elif c.action == 'raw':
 
            c.cur_diff = '<pre class="raw">%s</pre>' % h.escape(diff.raw_diff())
 
        elif c.action == 'diff':
 
            c.cur_diff = diff.as_html()
 
            if node1.size > c.file_size_limit or node2.size > c.file_size_limit:
 
                c.cur_diff = _('Diff is to big to display')
 
            else:
 
                c.cur_diff = diff.as_html()
 
        else:
 
            #default option
 
            c.cur_diff = diff.as_html()
 
            if node1.size > c.file_size_limit or node2.size > c.file_size_limit:
 
                c.cur_diff = _('Diff is to big to display')
 
            else:
 
                c.cur_diff = diff.as_html()
 
        
 
        if not c.cur_diff: c.no_changes = True    
 
        return render('files/file_diff.html')
pylons_app/lib/utils.py
Show inline comments
 
@@ -251,11 +251,14 @@ def invalidate_cache(name, *args):
 
        region_invalidate(_full_changelog_cached, None, *args)
 
        
 
class EmptyChangeset(BaseChangeset):
 
    """
 
    An dummy empty changeset.
 
    """
 
    
 
    revision = -1
 
    message = ''
 
    author = ''
 
    
 
    date = ''
 
    @LazyProperty
 
    def raw_id(self):
 
        """
 
@@ -268,6 +271,15 @@ class EmptyChangeset(BaseChangeset):
 
    def short_id(self):
 
        return self.raw_id[:12]
 

	
 
    def get_file_changeset(self, path):
 
        return self
 
    
 
    def get_file_content(self, path):
 
        return u''
 
    
 
    def get_file_size(self, path):
 
        return 0
 
    
 
def repo2db_mapper(initial_repo_list, remove_obsolete=False):
 
    """
 
    maps all found repositories into db
pylons_app/templates/changeset/raw_changeset.html
Show inline comments
 
# HG changeset patch
 
# User ${c.changeset.author|n}
 
# Date ${"%d %d" % c.changeset._ctx.date()}
 
# Node ID ${c.changeset._hex}
 
# Node ID ${c.changeset.raw_id}
 
# ${c.parent_tmpl}
 
${c.changeset.message}
 

	
0 comments (0 inline, 0 general)