Mercurial > public > src > rhodecode
comparison pylons_app/controllers/files.py @ 131:49c7e191c2cd
Implemented mercurial style diff-lib
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Fri, 07 May 2010 01:02:47 +0200 |
parents | ffddbd80649e |
children | 5f42d751c719 |
comparison
equal
deleted
inserted
replaced
130:ffddbd80649e | 131:49c7e191c2cd |
---|---|
4 from pylons.controllers.util import abort, redirect | 4 from pylons.controllers.util import abort, redirect |
5 | 5 |
6 from pylons_app.lib.base import BaseController, render | 6 from pylons_app.lib.base import BaseController, render |
7 from pylons_app.lib.utils import get_repo_slug | 7 from pylons_app.lib.utils import get_repo_slug |
8 from pylons_app.model.hg_model import HgModel | 8 from pylons_app.model.hg_model import HgModel |
9 from difflib import unified_diff | |
10 from pylons_app.lib.differ import render_udiff | |
11 | |
9 log = logging.getLogger(__name__) | 12 log = logging.getLogger(__name__) |
10 | 13 |
11 class FilesController(BaseController): | 14 class FilesController(BaseController): |
12 def __before__(self): | 15 def __before__(self): |
13 c.repos_prefix = config['repos_name'] | 16 c.repos_prefix = config['repos_name'] |
27 | 30 |
28 def diff(self, repo_name, f_path): | 31 def diff(self, repo_name, f_path): |
29 hg_model = HgModel() | 32 hg_model = HgModel() |
30 diff1 = request.GET.get('diff1') | 33 diff1 = request.GET.get('diff1') |
31 diff2 = request.GET.get('diff2') | 34 diff2 = request.GET.get('diff2') |
35 c.no_changes = diff1 == diff2 | |
32 c.f_path = f_path | 36 c.f_path = f_path |
33 c.repo = hg_model.get_repo(c.repo_name) | 37 c.repo = hg_model.get_repo(c.repo_name) |
34 c.changeset_1 = c.repo.get_changeset(diff1) | 38 c.changeset_1 = c.repo.get_changeset(diff1) |
35 c.changeset_2 = c.repo.get_changeset(diff2) | 39 c.changeset_2 = c.repo.get_changeset(diff2) |
36 | 40 |
37 c.file_1 = c.changeset_1.get_node(f_path).content | 41 c.file_1 = c.changeset_1.get_node(f_path).content |
38 c.file_2 = c.changeset_2.get_node(f_path).content | 42 c.file_2 = c.changeset_2.get_node(f_path).content |
39 c.diff1 = 'r%s:%s' % (c.changeset_1.revision, c.changeset_1._short) | 43 c.diff1 = 'r%s:%s' % (c.changeset_1.revision, c.changeset_1._short) |
40 c.diff2 = 'r%s:%s' % (c.changeset_2.revision, c.changeset_2._short) | 44 c.diff2 = 'r%s:%s' % (c.changeset_2.revision, c.changeset_2._short) |
41 from difflib import unified_diff | 45 |
42 d = unified_diff(c.file_1.splitlines(1), c.file_2.splitlines(1)) | 46 d2 = unified_diff(c.file_1.splitlines(1), c.file_2.splitlines(1)) |
43 c.diff = ''.join(d) | 47 c.diff_files = render_udiff(udiff=d2) |
44 | 48 |
45 from pylons_app.lib.differ import render_udiff | 49 if len(c.diff_files) < 1: |
46 d2 = unified_diff(c.file_1.splitlines(1), c.file_2.splitlines(1)) | 50 c.no_changes = True |
47 c.diff_2 = render_udiff(udiff=d2) | |
48 | |
49 return render('files/file_diff.html') | 51 return render('files/file_diff.html') |
50 | 52 |
51 def _get_history(self, repo, node, f_path): | 53 def _get_history(self, repo, node, f_path): |
52 from vcs.nodes import NodeKind | 54 from vcs.nodes import NodeKind |
53 if not node.kind is NodeKind.FILE: | 55 if not node.kind is NodeKind.FILE: |