Mercurial > public > src > rhodecode
diff pylons_app/controllers/changeset.py @ 509:183cee110578
first implementation of #34 changeset raw diff based on udiff from python
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Sat, 11 Sep 2010 01:52:16 +0200 |
parents | fdf9f6ee5217 |
children | 9dd372c7166c |
line wrap: on
line diff
--- a/pylons_app/controllers/changeset.py Wed Sep 08 01:33:38 2010 +0200 +++ b/pylons_app/controllers/changeset.py Sat Sep 11 01:52:16 2010 +0200 @@ -2,7 +2,6 @@ # encoding: utf-8 # changeset controller for pylons # Copyright (C) 2009-2010 Marcin Kuzminski <marcin@python-works.com> - # 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 @@ -22,7 +21,7 @@ changeset controller for pylons @author: marcink """ -from pylons import tmpl_context as c, url, request +from pylons import tmpl_context as c, url, request, response from pylons.controllers.util import redirect from pylons_app.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator from pylons_app.lib.base import BaseController, render @@ -64,12 +63,7 @@ else: f_udiff = differ.get_udiff(filenode_old, node) diff = differ.DiffProcessor(f_udiff).as_html() - try: - diff = unicode(diff) - except: - log.warning('Decoding failed of %s', filenode_old) - log.warning('Decoding failed of %s', node) - diff = 'unsupported type' + cs1 = None cs2 = node.last_changeset.raw_id c.changes.append(('added', node, diff, cs1, cs2)) @@ -81,12 +75,7 @@ else: f_udiff = differ.get_udiff(filenode_old, node) diff = differ.DiffProcessor(f_udiff).as_html() - try: - diff = unicode(diff) - except: - log.warning('Decoding failed of %s', filenode_old) - log.warning('Decoding failed of %s', node) - diff = 'unsupported type' + cs1 = filenode_old.last_changeset.raw_id cs2 = node.last_changeset.raw_id c.changes.append(('changed', node, diff, cs1, cs2)) @@ -95,3 +84,53 @@ c.changes.append(('removed', node, None, None, None)) return render('changeset/changeset.html') + + def raw_changeset(self,revision): + + hg_model = HgModel() + 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' + else: + f_udiff = differ.get_udiff(filenode_old, node) + diff = differ.DiffProcessor(f_udiff).raw_diff() + + cs1 = None + cs2 = node.last_changeset.raw_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).raw_diff() + + cs1 = filenode_old.last_changeset.raw_id + cs2 = node.last_changeset.raw_id + c.changes.append(('changed', node, diff, cs1, cs2)) + + response.content_type = 'text/plain' + + parent = True if len(c.changeset.parents) > 0 else False + c.parent_tmpl = 'Parent %s' % c.changeset.parents[0]._hex if parent else '' + + c.diffs = '' + for x in c.changes: + c.diffs += x[2] + + return render('changeset/raw_changeset.html')