Mercurial > public > src > rhodecode
comparison pylons_app/controllers/changeset.py @ 294:42f5c36820ef
few validation bugfixes/ new repo changesets, first commit changesets
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Mon, 14 Jun 2010 01:16:57 +0200 |
parents | cad478edb1c7 |
children | fdf9f6ee5217 |
comparison
equal
deleted
inserted
replaced
292:c4caeca9dd66 | 294:42f5c36820ef |
---|---|
1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
2 # encoding: utf-8 | 2 # encoding: utf-8 |
3 # changeset controller for pylons | 3 # changeset controller for pylons |
4 # Copyright (C) 2009-2010 Marcin Kuzminski <marcin@python-works.com> | 4 # Copyright (C) 2009-2010 Marcin Kuzminski <marcin@python-works.com> |
5 from pylons import tmpl_context as c, url | |
6 from pylons.controllers.util import redirect | |
7 from pylons_app.lib.auth import LoginRequired | |
8 from pylons_app.lib.base import BaseController, render | |
9 from pylons_app.model.hg_model import HgModel | |
10 from vcs.exceptions import RepositoryError | |
11 from vcs.nodes import FileNode | |
12 from vcs.utils import diffs as differ | |
13 import logging | |
14 import traceback | |
5 | 15 |
6 # This program is free software; you can redistribute it and/or | 16 # This program is free software; you can redistribute it and/or |
7 # modify it under the terms of the GNU General Public License | 17 # modify it under the terms of the GNU General Public License |
8 # as published by the Free Software Foundation; version 2 | 18 # as published by the Free Software Foundation; version 2 |
9 # of the License or (at your opinion) any later version of the license. | 19 # of the License or (at your opinion) any later version of the license. |
20 """ | 30 """ |
21 Created on April 25, 2010 | 31 Created on April 25, 2010 |
22 changeset controller for pylons | 32 changeset controller for pylons |
23 @author: marcink | 33 @author: marcink |
24 """ | 34 """ |
25 from pylons import tmpl_context as c | |
26 from pylons_app.lib.auth import LoginRequired | |
27 from pylons_app.lib.base import BaseController, render | |
28 from pylons_app.model.hg_model import HgModel | |
29 from vcs.utils import diffs as differ | |
30 import logging | |
31 from vcs.nodes import FileNode | |
32 | 35 |
33 | 36 |
34 log = logging.getLogger(__name__) | 37 log = logging.getLogger(__name__) |
35 | 38 |
36 class ChangesetController(BaseController): | 39 class ChangesetController(BaseController): |
39 def __before__(self): | 42 def __before__(self): |
40 super(ChangesetController, self).__before__() | 43 super(ChangesetController, self).__before__() |
41 | 44 |
42 def index(self, revision): | 45 def index(self, revision): |
43 hg_model = HgModel() | 46 hg_model = HgModel() |
44 c.changeset = hg_model.get_repo(c.repo_name).get_changeset(revision) | 47 try: |
45 c.changeset_old = c.changeset.parents[0] | 48 c.changeset = hg_model.get_repo(c.repo_name).get_changeset(revision) |
46 c.changes = [] | 49 except RepositoryError: |
47 | 50 log.error(traceback.format_exc()) |
51 return redirect(url('hg_home')) | |
52 else: | |
53 try: | |
54 c.changeset_old = c.changeset.parents[0] | |
55 except IndexError: | |
56 c.changeset_old = None | |
57 c.changes = [] | |
58 | |
59 for node in c.changeset.added: | |
60 filenode_old = FileNode(node.path, '') | |
61 if filenode_old.is_binary or node.is_binary: | |
62 diff = 'binary file' | |
63 else: | |
64 f_udiff = differ.get_udiff(filenode_old, node) | |
65 diff = differ.DiffProcessor(f_udiff).as_html() | |
66 try: | |
67 diff = unicode(diff) | |
68 except: | |
69 log.warning('Decoding failed of %s', filenode_old) | |
70 log.warning('Decoding failed of %s', node) | |
71 diff = 'unsupported type' | |
72 cs1 = None | |
73 cs2 = node.last_changeset.raw_id | |
74 c.changes.append(('added', node, diff, cs1, cs2)) | |
48 | 75 |
49 for node in c.changeset.added: | 76 for node in c.changeset.changed: |
50 filenode_old = FileNode(node.path, '') | 77 filenode_old = c.changeset_old.get_node(node.path) |
51 if filenode_old.is_binary or node.is_binary: | 78 if filenode_old.is_binary or node.is_binary: |
52 diff = 'binary file' | 79 diff = 'binary file' |
53 else: | 80 else: |
54 f_udiff = differ.get_udiff(filenode_old, node) | 81 f_udiff = differ.get_udiff(filenode_old, node) |
55 diff = differ.DiffProcessor(f_udiff).as_html() | 82 diff = differ.DiffProcessor(f_udiff).as_html() |
56 try: | 83 try: |
57 diff = unicode(diff) | 84 diff = unicode(diff) |
58 except: | 85 except: |
59 log.warning('Decoding failed of %s', filenode_old) | 86 log.warning('Decoding failed of %s', filenode_old) |
60 log.warning('Decoding failed of %s', node) | 87 log.warning('Decoding failed of %s', node) |
61 diff = 'unsupported type' | 88 diff = 'unsupported type' |
62 cs1 = None | 89 cs1 = filenode_old.last_changeset.raw_id |
63 cs2 = node.last_changeset.raw_id | 90 cs2 = node.last_changeset.raw_id |
64 c.changes.append(('added', node, diff, cs1, cs2)) | 91 c.changes.append(('changed', node, diff, cs1, cs2)) |
65 | 92 |
66 for node in c.changeset.changed: | 93 for node in c.changeset.removed: |
67 filenode_old = c.changeset_old.get_node(node.path) | 94 c.changes.append(('removed', node, None, None, None)) |
68 if filenode_old.is_binary or node.is_binary: | |
69 diff = 'binary file' | |
70 else: | |
71 f_udiff = differ.get_udiff(filenode_old, node) | |
72 diff = differ.DiffProcessor(f_udiff).as_html() | |
73 try: | |
74 diff = unicode(diff) | |
75 except: | |
76 log.warning('Decoding failed of %s', filenode_old) | |
77 log.warning('Decoding failed of %s', node) | |
78 diff = 'unsupported type' | |
79 cs1 = filenode_old.last_changeset.raw_id | |
80 cs2 = node.last_changeset.raw_id | |
81 c.changes.append(('changed', node, diff, cs1, cs2)) | |
82 | |
83 for node in c.changeset.removed: | |
84 c.changes.append(('removed', node, None, None, None)) | |
85 | 95 |
86 return render('changeset/changeset.html') | 96 return render('changeset/changeset.html') |