annotate pylons_app/controllers/files.py @ 245:a83a1799480c

Reimplemented way of caching repos list, hg model now get's repos objects right from cached dict, this way we skipp creating instances of MercurialRepository and gain performance. Some import cleanup
author Marcin Kuzminski <marcin@python-works.com>
date Thu, 03 Jun 2010 00:04:48 +0200
parents 1a18994cdc3b
children 3782a6d698af
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
245
a83a1799480c Reimplemented way of caching repos list, hg model now get's repos objects right from cached dict, this way we skipp creating instances of MercurialRepository and gain performance. Some import cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 209
diff changeset
1 from mercurial import archival
a83a1799480c Reimplemented way of caching repos list, hg model now get's repos objects right from cached dict, this way we skipp creating instances of MercurialRepository and gain performance. Some import cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 209
diff changeset
2 from pylons import request, response, session, tmpl_context as c, url
209
1a18994cdc3b Added archives support. Version bump
Marcin Kuzminski <marcin@python-works.com>
parents: 191
diff changeset
3 from pylons_app.lib.auth import LoginRequired
93
aec4c0071cb3 added empty controllers for branches tags files graph, routing and test for them
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
4 from pylons_app.lib.base import BaseController, render
99
5b57295601b6 Updated basic files browser with, pygments
Marcin Kuzminski <marcin@python-works.com>
parents: 93
diff changeset
5 from pylons_app.model.hg_model import HgModel
209
1a18994cdc3b Added archives support. Version bump
Marcin Kuzminski <marcin@python-works.com>
parents: 191
diff changeset
6 from vcs.exceptions import RepositoryError, ChangesetError
158
f905f45c457e moved diff libs to vcs. updated htmls and css for diff and source
Marcin Kuzminski <marcin@python-works.com>
parents: 152
diff changeset
7 from vcs.utils import diffs as differ
209
1a18994cdc3b Added archives support. Version bump
Marcin Kuzminski <marcin@python-works.com>
parents: 191
diff changeset
8 import logging
245
a83a1799480c Reimplemented way of caching repos list, hg model now get's repos objects right from cached dict, this way we skipp creating instances of MercurialRepository and gain performance. Some import cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 209
diff changeset
9 import tempfile
209
1a18994cdc3b Added archives support. Version bump
Marcin Kuzminski <marcin@python-works.com>
parents: 191
diff changeset
10
131
49c7e191c2cd Implemented mercurial style diff-lib
Marcin Kuzminski <marcin@python-works.com>
parents: 130
diff changeset
11
93
aec4c0071cb3 added empty controllers for branches tags files graph, routing and test for them
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
12 log = logging.getLogger(__name__)
aec4c0071cb3 added empty controllers for branches tags files graph, routing and test for them
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
13
aec4c0071cb3 added empty controllers for branches tags files graph, routing and test for them
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
14 class FilesController(BaseController):
191
b68b2246e5a6 Authenticated controller with LoginRequired decorator, and cleaned __before__ (used in baseController now). fixed User for clone url with logged in session user.
Marcin Kuzminski <marcin@python-works.com>
parents: 160
diff changeset
15
b68b2246e5a6 Authenticated controller with LoginRequired decorator, and cleaned __before__ (used in baseController now). fixed User for clone url with logged in session user.
Marcin Kuzminski <marcin@python-works.com>
parents: 160
diff changeset
16 @LoginRequired()
99
5b57295601b6 Updated basic files browser with, pygments
Marcin Kuzminski <marcin@python-works.com>
parents: 93
diff changeset
17 def __before__(self):
191
b68b2246e5a6 Authenticated controller with LoginRequired decorator, and cleaned __before__ (used in baseController now). fixed User for clone url with logged in session user.
Marcin Kuzminski <marcin@python-works.com>
parents: 160
diff changeset
18 super(FilesController, self).__before__()
93
aec4c0071cb3 added empty controllers for branches tags files graph, routing and test for them
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
19
99
5b57295601b6 Updated basic files browser with, pygments
Marcin Kuzminski <marcin@python-works.com>
parents: 93
diff changeset
20 def index(self, repo_name, revision, f_path):
5b57295601b6 Updated basic files browser with, pygments
Marcin Kuzminski <marcin@python-works.com>
parents: 93
diff changeset
21 hg_model = HgModel()
5b57295601b6 Updated basic files browser with, pygments
Marcin Kuzminski <marcin@python-works.com>
parents: 93
diff changeset
22 c.repo = repo = hg_model.get_repo(c.repo_name)
149
b3c93efd1c97 Updated template for summary (archives links)
Marcin Kuzminski <marcin@python-works.com>
parents: 147
diff changeset
23 revision = request.POST.get('at_rev', None) or revision
145
3f01d02c2cc6 fixed error when browsing revisions on path that doesn't exist. Fixed files browsing. Fixed templates in branches and tags
Marcin Kuzminski <marcin@python-works.com>
parents: 142
diff changeset
24
149
b3c93efd1c97 Updated template for summary (archives links)
Marcin Kuzminski <marcin@python-works.com>
parents: 147
diff changeset
25 def get_next_rev(cur):
145
3f01d02c2cc6 fixed error when browsing revisions on path that doesn't exist. Fixed files browsing. Fixed templates in branches and tags
Marcin Kuzminski <marcin@python-works.com>
parents: 142
diff changeset
26 max_rev = len(c.repo.revisions) - 1
149
b3c93efd1c97 Updated template for summary (archives links)
Marcin Kuzminski <marcin@python-works.com>
parents: 147
diff changeset
27 r = cur + 1
b3c93efd1c97 Updated template for summary (archives links)
Marcin Kuzminski <marcin@python-works.com>
parents: 147
diff changeset
28 if r > max_rev:
b3c93efd1c97 Updated template for summary (archives links)
Marcin Kuzminski <marcin@python-works.com>
parents: 147
diff changeset
29 r = max_rev
b3c93efd1c97 Updated template for summary (archives links)
Marcin Kuzminski <marcin@python-works.com>
parents: 147
diff changeset
30 return r
b3c93efd1c97 Updated template for summary (archives links)
Marcin Kuzminski <marcin@python-works.com>
parents: 147
diff changeset
31
b3c93efd1c97 Updated template for summary (archives links)
Marcin Kuzminski <marcin@python-works.com>
parents: 147
diff changeset
32 def get_prev_rev(cur):
b3c93efd1c97 Updated template for summary (archives links)
Marcin Kuzminski <marcin@python-works.com>
parents: 147
diff changeset
33 r = cur - 1
b3c93efd1c97 Updated template for summary (archives links)
Marcin Kuzminski <marcin@python-works.com>
parents: 147
diff changeset
34 return r
b3c93efd1c97 Updated template for summary (archives links)
Marcin Kuzminski <marcin@python-works.com>
parents: 147
diff changeset
35
99
5b57295601b6 Updated basic files browser with, pygments
Marcin Kuzminski <marcin@python-works.com>
parents: 93
diff changeset
36 c.f_path = f_path
149
b3c93efd1c97 Updated template for summary (archives links)
Marcin Kuzminski <marcin@python-works.com>
parents: 147
diff changeset
37
147
873fd2dc62c2 Added rawfile support, and few fixes for file
Marcin Kuzminski <marcin@python-works.com>
parents: 145
diff changeset
38
138
5f42d751c719 fixed files when repository is empty
Marcin Kuzminski <marcin@python-works.com>
parents: 131
diff changeset
39 try:
149
b3c93efd1c97 Updated template for summary (archives links)
Marcin Kuzminski <marcin@python-works.com>
parents: 147
diff changeset
40 cur_rev = repo.get_changeset(revision).revision
b3c93efd1c97 Updated template for summary (archives links)
Marcin Kuzminski <marcin@python-works.com>
parents: 147
diff changeset
41 prev_rev = repo.get_changeset(get_prev_rev(cur_rev)).raw_id
b3c93efd1c97 Updated template for summary (archives links)
Marcin Kuzminski <marcin@python-works.com>
parents: 147
diff changeset
42 next_rev = repo.get_changeset(get_next_rev(cur_rev)).raw_id
b3c93efd1c97 Updated template for summary (archives links)
Marcin Kuzminski <marcin@python-works.com>
parents: 147
diff changeset
43
b3c93efd1c97 Updated template for summary (archives links)
Marcin Kuzminski <marcin@python-works.com>
parents: 147
diff changeset
44 c.url_prev = url('files_home', repo_name=c.repo_name,
b3c93efd1c97 Updated template for summary (archives links)
Marcin Kuzminski <marcin@python-works.com>
parents: 147
diff changeset
45 revision=prev_rev, f_path=f_path)
b3c93efd1c97 Updated template for summary (archives links)
Marcin Kuzminski <marcin@python-works.com>
parents: 147
diff changeset
46 c.url_next = url('files_home', repo_name=c.repo_name,
b3c93efd1c97 Updated template for summary (archives links)
Marcin Kuzminski <marcin@python-works.com>
parents: 147
diff changeset
47 revision=next_rev, f_path=f_path)
b3c93efd1c97 Updated template for summary (archives links)
Marcin Kuzminski <marcin@python-works.com>
parents: 147
diff changeset
48
b3c93efd1c97 Updated template for summary (archives links)
Marcin Kuzminski <marcin@python-works.com>
parents: 147
diff changeset
49 c.changeset = repo.get_changeset(revision)
147
873fd2dc62c2 Added rawfile support, and few fixes for file
Marcin Kuzminski <marcin@python-works.com>
parents: 145
diff changeset
50 try:
873fd2dc62c2 Added rawfile support, and few fixes for file
Marcin Kuzminski <marcin@python-works.com>
parents: 145
diff changeset
51 c.file_msg = c.changeset.get_file_message(f_path)
873fd2dc62c2 Added rawfile support, and few fixes for file
Marcin Kuzminski <marcin@python-works.com>
parents: 145
diff changeset
52 except:
873fd2dc62c2 Added rawfile support, and few fixes for file
Marcin Kuzminski <marcin@python-works.com>
parents: 145
diff changeset
53 c.file_msg = None
873fd2dc62c2 Added rawfile support, and few fixes for file
Marcin Kuzminski <marcin@python-works.com>
parents: 145
diff changeset
54
142
f7218849798a Changeg graph to changelog, and changelog to shortlog
Marcin Kuzminski <marcin@python-works.com>
parents: 138
diff changeset
55 c.cur_rev = c.changeset.raw_id
f7218849798a Changeg graph to changelog, and changelog to shortlog
Marcin Kuzminski <marcin@python-works.com>
parents: 138
diff changeset
56 c.rev_nr = c.changeset.revision
138
5f42d751c719 fixed files when repository is empty
Marcin Kuzminski <marcin@python-works.com>
parents: 131
diff changeset
57 c.files_list = c.changeset.get_node(f_path)
5f42d751c719 fixed files when repository is empty
Marcin Kuzminski <marcin@python-works.com>
parents: 131
diff changeset
58 c.file_history = self._get_history(repo, c.files_list, f_path)
147
873fd2dc62c2 Added rawfile support, and few fixes for file
Marcin Kuzminski <marcin@python-works.com>
parents: 145
diff changeset
59
145
3f01d02c2cc6 fixed error when browsing revisions on path that doesn't exist. Fixed files browsing. Fixed templates in branches and tags
Marcin Kuzminski <marcin@python-works.com>
parents: 142
diff changeset
60 except (RepositoryError, ChangesetError):
138
5f42d751c719 fixed files when repository is empty
Marcin Kuzminski <marcin@python-works.com>
parents: 131
diff changeset
61 c.files_list = None
99
5b57295601b6 Updated basic files browser with, pygments
Marcin Kuzminski <marcin@python-works.com>
parents: 93
diff changeset
62
128
9deb6f1d5b90 Implemented file history.
Marcin Kuzminski <marcin@python-works.com>
parents: 106
diff changeset
63 return render('files/files.html')
9deb6f1d5b90 Implemented file history.
Marcin Kuzminski <marcin@python-works.com>
parents: 106
diff changeset
64
147
873fd2dc62c2 Added rawfile support, and few fixes for file
Marcin Kuzminski <marcin@python-works.com>
parents: 145
diff changeset
65 def rawfile(self, repo_name, revision, f_path):
873fd2dc62c2 Added rawfile support, and few fixes for file
Marcin Kuzminski <marcin@python-works.com>
parents: 145
diff changeset
66 hg_model = HgModel()
873fd2dc62c2 Added rawfile support, and few fixes for file
Marcin Kuzminski <marcin@python-works.com>
parents: 145
diff changeset
67 c.repo = hg_model.get_repo(c.repo_name)
873fd2dc62c2 Added rawfile support, and few fixes for file
Marcin Kuzminski <marcin@python-works.com>
parents: 145
diff changeset
68 file_node = c.repo.get_changeset(revision).get_node(f_path)
160
0f7f93df5802 implemented rawdiff and diff download into diff view.
Marcin Kuzminski <marcin@python-works.com>
parents: 158
diff changeset
69 response.content_type = file_node.mimetype
0f7f93df5802 implemented rawdiff and diff download into diff view.
Marcin Kuzminski <marcin@python-works.com>
parents: 158
diff changeset
70 response.content_disposition = 'attachment; filename=%s' \
147
873fd2dc62c2 Added rawfile support, and few fixes for file
Marcin Kuzminski <marcin@python-works.com>
parents: 145
diff changeset
71 % f_path.split('/')[-1]
873fd2dc62c2 Added rawfile support, and few fixes for file
Marcin Kuzminski <marcin@python-works.com>
parents: 145
diff changeset
72 return file_node.content
873fd2dc62c2 Added rawfile support, and few fixes for file
Marcin Kuzminski <marcin@python-works.com>
parents: 145
diff changeset
73
191
b68b2246e5a6 Authenticated controller with LoginRequired decorator, and cleaned __before__ (used in baseController now). fixed User for clone url with logged in session user.
Marcin Kuzminski <marcin@python-works.com>
parents: 160
diff changeset
74 def annotate(self, repo_name, revision, f_path):
b68b2246e5a6 Authenticated controller with LoginRequired decorator, and cleaned __before__ (used in baseController now). fixed User for clone url with logged in session user.
Marcin Kuzminski <marcin@python-works.com>
parents: 160
diff changeset
75 hg_model = HgModel()
b68b2246e5a6 Authenticated controller with LoginRequired decorator, and cleaned __before__ (used in baseController now). fixed User for clone url with logged in session user.
Marcin Kuzminski <marcin@python-works.com>
parents: 160
diff changeset
76 c.repo = hg_model.get_repo(c.repo_name)
b68b2246e5a6 Authenticated controller with LoginRequired decorator, and cleaned __before__ (used in baseController now). fixed User for clone url with logged in session user.
Marcin Kuzminski <marcin@python-works.com>
parents: 160
diff changeset
77 cs = c.repo.get_changeset(revision)
b68b2246e5a6 Authenticated controller with LoginRequired decorator, and cleaned __before__ (used in baseController now). fixed User for clone url with logged in session user.
Marcin Kuzminski <marcin@python-works.com>
parents: 160
diff changeset
78 c.file = cs.get_node(f_path)
b68b2246e5a6 Authenticated controller with LoginRequired decorator, and cleaned __before__ (used in baseController now). fixed User for clone url with logged in session user.
Marcin Kuzminski <marcin@python-works.com>
parents: 160
diff changeset
79 c.file_msg = cs.get_file_message(f_path)
b68b2246e5a6 Authenticated controller with LoginRequired decorator, and cleaned __before__ (used in baseController now). fixed User for clone url with logged in session user.
Marcin Kuzminski <marcin@python-works.com>
parents: 160
diff changeset
80 c.cur_rev = cs.raw_id
b68b2246e5a6 Authenticated controller with LoginRequired decorator, and cleaned __before__ (used in baseController now). fixed User for clone url with logged in session user.
Marcin Kuzminski <marcin@python-works.com>
parents: 160
diff changeset
81 c.f_path = f_path
b68b2246e5a6 Authenticated controller with LoginRequired decorator, and cleaned __before__ (used in baseController now). fixed User for clone url with logged in session user.
Marcin Kuzminski <marcin@python-works.com>
parents: 160
diff changeset
82 c.annotate = cs.get_file_annotate(f_path)
b68b2246e5a6 Authenticated controller with LoginRequired decorator, and cleaned __before__ (used in baseController now). fixed User for clone url with logged in session user.
Marcin Kuzminski <marcin@python-works.com>
parents: 160
diff changeset
83 return render('files/files_annotate.html')
b68b2246e5a6 Authenticated controller with LoginRequired decorator, and cleaned __before__ (used in baseController now). fixed User for clone url with logged in session user.
Marcin Kuzminski <marcin@python-works.com>
parents: 160
diff changeset
84
149
b3c93efd1c97 Updated template for summary (archives links)
Marcin Kuzminski <marcin@python-works.com>
parents: 147
diff changeset
85 def archivefile(self, repo_name, revision, fileformat):
209
1a18994cdc3b Added archives support. Version bump
Marcin Kuzminski <marcin@python-works.com>
parents: 191
diff changeset
86 archive_specs = {
1a18994cdc3b Added archives support. Version bump
Marcin Kuzminski <marcin@python-works.com>
parents: 191
diff changeset
87 '.tar.bz2': ('application/x-tar', 'tbz2'),
1a18994cdc3b Added archives support. Version bump
Marcin Kuzminski <marcin@python-works.com>
parents: 191
diff changeset
88 '.tar.gz': ('application/x-tar', 'tgz'),
1a18994cdc3b Added archives support. Version bump
Marcin Kuzminski <marcin@python-works.com>
parents: 191
diff changeset
89 '.zip': ('application/zip', 'zip'),
1a18994cdc3b Added archives support. Version bump
Marcin Kuzminski <marcin@python-works.com>
parents: 191
diff changeset
90 }
1a18994cdc3b Added archives support. Version bump
Marcin Kuzminski <marcin@python-works.com>
parents: 191
diff changeset
91 if not archive_specs.has_key(fileformat):
1a18994cdc3b Added archives support. Version bump
Marcin Kuzminski <marcin@python-works.com>
parents: 191
diff changeset
92 return 'Unknown archive type %s' % fileformat
1a18994cdc3b Added archives support. Version bump
Marcin Kuzminski <marcin@python-works.com>
parents: 191
diff changeset
93
1a18994cdc3b Added archives support. Version bump
Marcin Kuzminski <marcin@python-works.com>
parents: 191
diff changeset
94 def read_in_chunks(file_object, chunk_size=1024 * 40):
1a18994cdc3b Added archives support. Version bump
Marcin Kuzminski <marcin@python-works.com>
parents: 191
diff changeset
95 """Lazy function (generator) to read a file piece by piece.
1a18994cdc3b Added archives support. Version bump
Marcin Kuzminski <marcin@python-works.com>
parents: 191
diff changeset
96 Default chunk size: 40k."""
1a18994cdc3b Added archives support. Version bump
Marcin Kuzminski <marcin@python-works.com>
parents: 191
diff changeset
97 while True:
1a18994cdc3b Added archives support. Version bump
Marcin Kuzminski <marcin@python-works.com>
parents: 191
diff changeset
98 data = file_object.read(chunk_size)
1a18994cdc3b Added archives support. Version bump
Marcin Kuzminski <marcin@python-works.com>
parents: 191
diff changeset
99 if not data:
1a18994cdc3b Added archives support. Version bump
Marcin Kuzminski <marcin@python-works.com>
parents: 191
diff changeset
100 break
1a18994cdc3b Added archives support. Version bump
Marcin Kuzminski <marcin@python-works.com>
parents: 191
diff changeset
101 yield data
1a18994cdc3b Added archives support. Version bump
Marcin Kuzminski <marcin@python-works.com>
parents: 191
diff changeset
102
1a18994cdc3b Added archives support. Version bump
Marcin Kuzminski <marcin@python-works.com>
parents: 191
diff changeset
103 archive = tempfile.TemporaryFile()
1a18994cdc3b Added archives support. Version bump
Marcin Kuzminski <marcin@python-works.com>
parents: 191
diff changeset
104 repo = HgModel().get_repo(repo_name).repo
1a18994cdc3b Added archives support. Version bump
Marcin Kuzminski <marcin@python-works.com>
parents: 191
diff changeset
105 fname = '%s-%s%s' % (repo_name, revision, fileformat)
1a18994cdc3b Added archives support. Version bump
Marcin Kuzminski <marcin@python-works.com>
parents: 191
diff changeset
106 archival.archive(repo, archive, revision, archive_specs[fileformat][1],
1a18994cdc3b Added archives support. Version bump
Marcin Kuzminski <marcin@python-works.com>
parents: 191
diff changeset
107 prefix='%s-%s' % (repo_name, revision))
1a18994cdc3b Added archives support. Version bump
Marcin Kuzminski <marcin@python-works.com>
parents: 191
diff changeset
108 response.content_type = archive_specs[fileformat][0]
1a18994cdc3b Added archives support. Version bump
Marcin Kuzminski <marcin@python-works.com>
parents: 191
diff changeset
109 response.content_disposition = 'attachment; filename=%s' % fname
1a18994cdc3b Added archives support. Version bump
Marcin Kuzminski <marcin@python-works.com>
parents: 191
diff changeset
110 archive.seek(0)
1a18994cdc3b Added archives support. Version bump
Marcin Kuzminski <marcin@python-works.com>
parents: 191
diff changeset
111 return read_in_chunks(archive)
149
b3c93efd1c97 Updated template for summary (archives links)
Marcin Kuzminski <marcin@python-works.com>
parents: 147
diff changeset
112
129
42d46deb124d implemented simple diffs for history of files.
Marcin Kuzminski <marcin@python-works.com>
parents: 128
diff changeset
113 def diff(self, repo_name, f_path):
42d46deb124d implemented simple diffs for history of files.
Marcin Kuzminski <marcin@python-works.com>
parents: 128
diff changeset
114 hg_model = HgModel()
42d46deb124d implemented simple diffs for history of files.
Marcin Kuzminski <marcin@python-works.com>
parents: 128
diff changeset
115 diff1 = request.GET.get('diff1')
42d46deb124d implemented simple diffs for history of files.
Marcin Kuzminski <marcin@python-works.com>
parents: 128
diff changeset
116 diff2 = request.GET.get('diff2')
160
0f7f93df5802 implemented rawdiff and diff download into diff view.
Marcin Kuzminski <marcin@python-works.com>
parents: 158
diff changeset
117 c.action = action = request.GET.get('diff')
131
49c7e191c2cd Implemented mercurial style diff-lib
Marcin Kuzminski <marcin@python-works.com>
parents: 130
diff changeset
118 c.no_changes = diff1 == diff2
129
42d46deb124d implemented simple diffs for history of files.
Marcin Kuzminski <marcin@python-works.com>
parents: 128
diff changeset
119 c.f_path = f_path
42d46deb124d implemented simple diffs for history of files.
Marcin Kuzminski <marcin@python-works.com>
parents: 128
diff changeset
120 c.repo = hg_model.get_repo(c.repo_name)
42d46deb124d implemented simple diffs for history of files.
Marcin Kuzminski <marcin@python-works.com>
parents: 128
diff changeset
121 c.changeset_1 = c.repo.get_changeset(diff1)
42d46deb124d implemented simple diffs for history of files.
Marcin Kuzminski <marcin@python-works.com>
parents: 128
diff changeset
122 c.changeset_2 = c.repo.get_changeset(diff2)
152
0c00fbaff55a Fixed differ to properly extract filenames, and dates from diff file. and swaped order of columns with lines nr in diff html
Marcin Kuzminski <marcin@python-works.com>
parents: 149
diff changeset
123
129
42d46deb124d implemented simple diffs for history of files.
Marcin Kuzminski <marcin@python-works.com>
parents: 128
diff changeset
124 c.diff1 = 'r%s:%s' % (c.changeset_1.revision, c.changeset_1._short)
42d46deb124d implemented simple diffs for history of files.
Marcin Kuzminski <marcin@python-works.com>
parents: 128
diff changeset
125 c.diff2 = 'r%s:%s' % (c.changeset_2.revision, c.changeset_2._short)
158
f905f45c457e moved diff libs to vcs. updated htmls and css for diff and source
Marcin Kuzminski <marcin@python-works.com>
parents: 152
diff changeset
126 f_udiff = differ.get_udiff(c.changeset_1.get_node(f_path),
f905f45c457e moved diff libs to vcs. updated htmls and css for diff and source
Marcin Kuzminski <marcin@python-works.com>
parents: 152
diff changeset
127 c.changeset_2.get_node(f_path))
160
0f7f93df5802 implemented rawdiff and diff download into diff view.
Marcin Kuzminski <marcin@python-works.com>
parents: 158
diff changeset
128
0f7f93df5802 implemented rawdiff and diff download into diff view.
Marcin Kuzminski <marcin@python-works.com>
parents: 158
diff changeset
129 diff = differ.DiffProcessor(f_udiff)
0f7f93df5802 implemented rawdiff and diff download into diff view.
Marcin Kuzminski <marcin@python-works.com>
parents: 158
diff changeset
130
0f7f93df5802 implemented rawdiff and diff download into diff view.
Marcin Kuzminski <marcin@python-works.com>
parents: 158
diff changeset
131 if action == 'download':
0f7f93df5802 implemented rawdiff and diff download into diff view.
Marcin Kuzminski <marcin@python-works.com>
parents: 158
diff changeset
132 diff_name = '%s_vs_%s.diff' % (diff1, diff2)
0f7f93df5802 implemented rawdiff and diff download into diff view.
Marcin Kuzminski <marcin@python-works.com>
parents: 158
diff changeset
133 response.content_type = 'text/plain'
0f7f93df5802 implemented rawdiff and diff download into diff view.
Marcin Kuzminski <marcin@python-works.com>
parents: 158
diff changeset
134 response.content_disposition = 'attachment; filename=%s' \
0f7f93df5802 implemented rawdiff and diff download into diff view.
Marcin Kuzminski <marcin@python-works.com>
parents: 158
diff changeset
135 % diff_name
0f7f93df5802 implemented rawdiff and diff download into diff view.
Marcin Kuzminski <marcin@python-works.com>
parents: 158
diff changeset
136 return diff.raw_diff()
0f7f93df5802 implemented rawdiff and diff download into diff view.
Marcin Kuzminski <marcin@python-works.com>
parents: 158
diff changeset
137
0f7f93df5802 implemented rawdiff and diff download into diff view.
Marcin Kuzminski <marcin@python-works.com>
parents: 158
diff changeset
138 elif action == 'raw':
0f7f93df5802 implemented rawdiff and diff download into diff view.
Marcin Kuzminski <marcin@python-works.com>
parents: 158
diff changeset
139 c.cur_diff = '<pre class="raw">%s</pre>' % diff.raw_diff()
0f7f93df5802 implemented rawdiff and diff download into diff view.
Marcin Kuzminski <marcin@python-works.com>
parents: 158
diff changeset
140 elif action == 'diff':
0f7f93df5802 implemented rawdiff and diff download into diff view.
Marcin Kuzminski <marcin@python-works.com>
parents: 158
diff changeset
141 c.cur_diff = diff.as_html()
0f7f93df5802 implemented rawdiff and diff download into diff view.
Marcin Kuzminski <marcin@python-works.com>
parents: 158
diff changeset
142
129
42d46deb124d implemented simple diffs for history of files.
Marcin Kuzminski <marcin@python-works.com>
parents: 128
diff changeset
143 return render('files/file_diff.html')
42d46deb124d implemented simple diffs for history of files.
Marcin Kuzminski <marcin@python-works.com>
parents: 128
diff changeset
144
128
9deb6f1d5b90 Implemented file history.
Marcin Kuzminski <marcin@python-works.com>
parents: 106
diff changeset
145 def _get_history(self, repo, node, f_path):
9deb6f1d5b90 Implemented file history.
Marcin Kuzminski <marcin@python-works.com>
parents: 106
diff changeset
146 from vcs.nodes import NodeKind
9deb6f1d5b90 Implemented file history.
Marcin Kuzminski <marcin@python-works.com>
parents: 106
diff changeset
147 if not node.kind is NodeKind.FILE:
9deb6f1d5b90 Implemented file history.
Marcin Kuzminski <marcin@python-works.com>
parents: 106
diff changeset
148 return []
129
42d46deb124d implemented simple diffs for history of files.
Marcin Kuzminski <marcin@python-works.com>
parents: 128
diff changeset
149 changesets = node.history
128
9deb6f1d5b90 Implemented file history.
Marcin Kuzminski <marcin@python-works.com>
parents: 106
diff changeset
150 hist_l = []
9deb6f1d5b90 Implemented file history.
Marcin Kuzminski <marcin@python-works.com>
parents: 106
diff changeset
151 for chs in changesets:
9deb6f1d5b90 Implemented file history.
Marcin Kuzminski <marcin@python-works.com>
parents: 106
diff changeset
152 n_desc = 'r%s:%s' % (chs.revision, chs._short)
9deb6f1d5b90 Implemented file history.
Marcin Kuzminski <marcin@python-works.com>
parents: 106
diff changeset
153 hist_l.append((chs._short, n_desc,))
9deb6f1d5b90 Implemented file history.
Marcin Kuzminski <marcin@python-works.com>
parents: 106
diff changeset
154 return hist_l