annotate pylons_app/controllers/files.py @ 269:183c06406127

fixed bug in middleware config
author Marcin Kuzminski <marcin@python-works.com>
date Mon, 07 Jun 2010 14:54:27 +0200
parents c3661cf28bec
children a83e86e3f580
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
252
3782a6d698af licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 245
diff changeset
1 #!/usr/bin/env python
3782a6d698af licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 245
diff changeset
2 # encoding: utf-8
3782a6d698af licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 245
diff changeset
3 # files controller for pylons
3782a6d698af licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 245
diff changeset
4 # Copyright (C) 2009-2010 Marcin Kuzminski <marcin@python-works.com>
3782a6d698af licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 245
diff changeset
5
3782a6d698af licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 245
diff changeset
6 # This program is free software; you can redistribute it and/or
3782a6d698af licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 245
diff changeset
7 # modify it under the terms of the GNU General Public License
3782a6d698af licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 245
diff changeset
8 # as published by the Free Software Foundation; version 2
3782a6d698af licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 245
diff changeset
9 # of the License or (at your opinion) any later version of the license.
3782a6d698af licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 245
diff changeset
10 #
3782a6d698af licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 245
diff changeset
11 # This program is distributed in the hope that it will be useful,
3782a6d698af licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 245
diff changeset
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
3782a6d698af licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 245
diff changeset
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3782a6d698af licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 245
diff changeset
14 # GNU General Public License for more details.
3782a6d698af licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 245
diff changeset
15 #
3782a6d698af licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 245
diff changeset
16 # You should have received a copy of the GNU General Public License
3782a6d698af licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 245
diff changeset
17 # along with this program; if not, write to the Free Software
3782a6d698af licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 245
diff changeset
18 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
3782a6d698af licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 245
diff changeset
19 # MA 02110-1301, USA.
3782a6d698af licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 245
diff changeset
20 """
3782a6d698af licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 245
diff changeset
21 Created on April 21, 2010
3782a6d698af licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 245
diff changeset
22 files controller for pylons
3782a6d698af licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 245
diff changeset
23 @author: marcink
3782a6d698af licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 245
diff changeset
24 """
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
25 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
26 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
27 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
28 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
29 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
30 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
31 from vcs.utils import diffs as differ
209
1a18994cdc3b Added archives support. Version bump
Marcin Kuzminski <marcin@python-works.com>
parents: 191
diff changeset
32 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
33 import tempfile
209
1a18994cdc3b Added archives support. Version bump
Marcin Kuzminski <marcin@python-works.com>
parents: 191
diff changeset
34
131
49c7e191c2cd Implemented mercurial style diff-lib
Marcin Kuzminski <marcin@python-works.com>
parents: 130
diff changeset
35
93
aec4c0071cb3 added empty controllers for branches tags files graph, routing and test for them
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
36 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
37
aec4c0071cb3 added empty controllers for branches tags files graph, routing and test for them
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
38 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
39
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
40 @LoginRequired()
99
5b57295601b6 Updated basic files browser with, pygments
Marcin Kuzminski <marcin@python-works.com>
parents: 93
diff changeset
41 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
42 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
43
99
5b57295601b6 Updated basic files browser with, pygments
Marcin Kuzminski <marcin@python-works.com>
parents: 93
diff changeset
44 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
45 hg_model = HgModel()
5b57295601b6 Updated basic files browser with, pygments
Marcin Kuzminski <marcin@python-works.com>
parents: 93
diff changeset
46 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
47 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
48
149
b3c93efd1c97 Updated template for summary (archives links)
Marcin Kuzminski <marcin@python-works.com>
parents: 147
diff changeset
49 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
50 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
51 r = cur + 1
b3c93efd1c97 Updated template for summary (archives links)
Marcin Kuzminski <marcin@python-works.com>
parents: 147
diff changeset
52 if r > max_rev:
b3c93efd1c97 Updated template for summary (archives links)
Marcin Kuzminski <marcin@python-works.com>
parents: 147
diff changeset
53 r = max_rev
b3c93efd1c97 Updated template for summary (archives links)
Marcin Kuzminski <marcin@python-works.com>
parents: 147
diff changeset
54 return r
b3c93efd1c97 Updated template for summary (archives links)
Marcin Kuzminski <marcin@python-works.com>
parents: 147
diff changeset
55
b3c93efd1c97 Updated template for summary (archives links)
Marcin Kuzminski <marcin@python-works.com>
parents: 147
diff changeset
56 def get_prev_rev(cur):
b3c93efd1c97 Updated template for summary (archives links)
Marcin Kuzminski <marcin@python-works.com>
parents: 147
diff changeset
57 r = cur - 1
b3c93efd1c97 Updated template for summary (archives links)
Marcin Kuzminski <marcin@python-works.com>
parents: 147
diff changeset
58 return r
b3c93efd1c97 Updated template for summary (archives links)
Marcin Kuzminski <marcin@python-works.com>
parents: 147
diff changeset
59
99
5b57295601b6 Updated basic files browser with, pygments
Marcin Kuzminski <marcin@python-works.com>
parents: 93
diff changeset
60 c.f_path = f_path
149
b3c93efd1c97 Updated template for summary (archives links)
Marcin Kuzminski <marcin@python-works.com>
parents: 147
diff changeset
61
147
873fd2dc62c2 Added rawfile support, and few fixes for file
Marcin Kuzminski <marcin@python-works.com>
parents: 145
diff changeset
62
138
5f42d751c719 fixed files when repository is empty
Marcin Kuzminski <marcin@python-works.com>
parents: 131
diff changeset
63 try:
149
b3c93efd1c97 Updated template for summary (archives links)
Marcin Kuzminski <marcin@python-works.com>
parents: 147
diff changeset
64 cur_rev = repo.get_changeset(revision).revision
b3c93efd1c97 Updated template for summary (archives links)
Marcin Kuzminski <marcin@python-works.com>
parents: 147
diff changeset
65 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
66 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
67
b3c93efd1c97 Updated template for summary (archives links)
Marcin Kuzminski <marcin@python-works.com>
parents: 147
diff changeset
68 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
69 revision=prev_rev, f_path=f_path)
b3c93efd1c97 Updated template for summary (archives links)
Marcin Kuzminski <marcin@python-works.com>
parents: 147
diff changeset
70 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
71 revision=next_rev, f_path=f_path)
b3c93efd1c97 Updated template for summary (archives links)
Marcin Kuzminski <marcin@python-works.com>
parents: 147
diff changeset
72
b3c93efd1c97 Updated template for summary (archives links)
Marcin Kuzminski <marcin@python-works.com>
parents: 147
diff changeset
73 c.changeset = repo.get_changeset(revision)
267
c3661cf28bec fixed bug for last commit message in file source
Marcin Kuzminski <marcin@python-works.com>
parents: 252
diff changeset
74
147
873fd2dc62c2 Added rawfile support, and few fixes for file
Marcin Kuzminski <marcin@python-works.com>
parents: 145
diff changeset
75
142
f7218849798a Changeg graph to changelog, and changelog to shortlog
Marcin Kuzminski <marcin@python-works.com>
parents: 138
diff changeset
76 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
77 c.rev_nr = c.changeset.revision
138
5f42d751c719 fixed files when repository is empty
Marcin Kuzminski <marcin@python-works.com>
parents: 131
diff changeset
78 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
79 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
80
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
81 except (RepositoryError, ChangesetError):
138
5f42d751c719 fixed files when repository is empty
Marcin Kuzminski <marcin@python-works.com>
parents: 131
diff changeset
82 c.files_list = None
99
5b57295601b6 Updated basic files browser with, pygments
Marcin Kuzminski <marcin@python-works.com>
parents: 93
diff changeset
83
128
9deb6f1d5b90 Implemented file history.
Marcin Kuzminski <marcin@python-works.com>
parents: 106
diff changeset
84 return render('files/files.html')
9deb6f1d5b90 Implemented file history.
Marcin Kuzminski <marcin@python-works.com>
parents: 106
diff changeset
85
147
873fd2dc62c2 Added rawfile support, and few fixes for file
Marcin Kuzminski <marcin@python-works.com>
parents: 145
diff changeset
86 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
87 hg_model = HgModel()
873fd2dc62c2 Added rawfile support, and few fixes for file
Marcin Kuzminski <marcin@python-works.com>
parents: 145
diff changeset
88 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
89 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
90 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
91 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
92 % f_path.split('/')[-1]
873fd2dc62c2 Added rawfile support, and few fixes for file
Marcin Kuzminski <marcin@python-works.com>
parents: 145
diff changeset
93 return file_node.content
873fd2dc62c2 Added rawfile support, and few fixes for file
Marcin Kuzminski <marcin@python-works.com>
parents: 145
diff changeset
94
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
95 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
96 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
97 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
98 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
99 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
100 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
101 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
102 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
103 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
104 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
105
149
b3c93efd1c97 Updated template for summary (archives links)
Marcin Kuzminski <marcin@python-works.com>
parents: 147
diff changeset
106 def archivefile(self, repo_name, revision, fileformat):
209
1a18994cdc3b Added archives support. Version bump
Marcin Kuzminski <marcin@python-works.com>
parents: 191
diff changeset
107 archive_specs = {
1a18994cdc3b Added archives support. Version bump
Marcin Kuzminski <marcin@python-works.com>
parents: 191
diff changeset
108 '.tar.bz2': ('application/x-tar', 'tbz2'),
1a18994cdc3b Added archives support. Version bump
Marcin Kuzminski <marcin@python-works.com>
parents: 191
diff changeset
109 '.tar.gz': ('application/x-tar', 'tgz'),
1a18994cdc3b Added archives support. Version bump
Marcin Kuzminski <marcin@python-works.com>
parents: 191
diff changeset
110 '.zip': ('application/zip', 'zip'),
1a18994cdc3b Added archives support. Version bump
Marcin Kuzminski <marcin@python-works.com>
parents: 191
diff changeset
111 }
1a18994cdc3b Added archives support. Version bump
Marcin Kuzminski <marcin@python-works.com>
parents: 191
diff changeset
112 if not archive_specs.has_key(fileformat):
1a18994cdc3b Added archives support. Version bump
Marcin Kuzminski <marcin@python-works.com>
parents: 191
diff changeset
113 return 'Unknown archive type %s' % fileformat
1a18994cdc3b Added archives support. Version bump
Marcin Kuzminski <marcin@python-works.com>
parents: 191
diff changeset
114
1a18994cdc3b Added archives support. Version bump
Marcin Kuzminski <marcin@python-works.com>
parents: 191
diff changeset
115 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
116 """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
117 Default chunk size: 40k."""
1a18994cdc3b Added archives support. Version bump
Marcin Kuzminski <marcin@python-works.com>
parents: 191
diff changeset
118 while True:
1a18994cdc3b Added archives support. Version bump
Marcin Kuzminski <marcin@python-works.com>
parents: 191
diff changeset
119 data = file_object.read(chunk_size)
1a18994cdc3b Added archives support. Version bump
Marcin Kuzminski <marcin@python-works.com>
parents: 191
diff changeset
120 if not data:
1a18994cdc3b Added archives support. Version bump
Marcin Kuzminski <marcin@python-works.com>
parents: 191
diff changeset
121 break
1a18994cdc3b Added archives support. Version bump
Marcin Kuzminski <marcin@python-works.com>
parents: 191
diff changeset
122 yield data
1a18994cdc3b Added archives support. Version bump
Marcin Kuzminski <marcin@python-works.com>
parents: 191
diff changeset
123
1a18994cdc3b Added archives support. Version bump
Marcin Kuzminski <marcin@python-works.com>
parents: 191
diff changeset
124 archive = tempfile.TemporaryFile()
1a18994cdc3b Added archives support. Version bump
Marcin Kuzminski <marcin@python-works.com>
parents: 191
diff changeset
125 repo = HgModel().get_repo(repo_name).repo
1a18994cdc3b Added archives support. Version bump
Marcin Kuzminski <marcin@python-works.com>
parents: 191
diff changeset
126 fname = '%s-%s%s' % (repo_name, revision, fileformat)
1a18994cdc3b Added archives support. Version bump
Marcin Kuzminski <marcin@python-works.com>
parents: 191
diff changeset
127 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
128 prefix='%s-%s' % (repo_name, revision))
1a18994cdc3b Added archives support. Version bump
Marcin Kuzminski <marcin@python-works.com>
parents: 191
diff changeset
129 response.content_type = archive_specs[fileformat][0]
1a18994cdc3b Added archives support. Version bump
Marcin Kuzminski <marcin@python-works.com>
parents: 191
diff changeset
130 response.content_disposition = 'attachment; filename=%s' % fname
1a18994cdc3b Added archives support. Version bump
Marcin Kuzminski <marcin@python-works.com>
parents: 191
diff changeset
131 archive.seek(0)
1a18994cdc3b Added archives support. Version bump
Marcin Kuzminski <marcin@python-works.com>
parents: 191
diff changeset
132 return read_in_chunks(archive)
149
b3c93efd1c97 Updated template for summary (archives links)
Marcin Kuzminski <marcin@python-works.com>
parents: 147
diff changeset
133
129
42d46deb124d implemented simple diffs for history of files.
Marcin Kuzminski <marcin@python-works.com>
parents: 128
diff changeset
134 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
135 hg_model = HgModel()
42d46deb124d implemented simple diffs for history of files.
Marcin Kuzminski <marcin@python-works.com>
parents: 128
diff changeset
136 diff1 = request.GET.get('diff1')
42d46deb124d implemented simple diffs for history of files.
Marcin Kuzminski <marcin@python-works.com>
parents: 128
diff changeset
137 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
138 c.action = action = request.GET.get('diff')
131
49c7e191c2cd Implemented mercurial style diff-lib
Marcin Kuzminski <marcin@python-works.com>
parents: 130
diff changeset
139 c.no_changes = diff1 == diff2
129
42d46deb124d implemented simple diffs for history of files.
Marcin Kuzminski <marcin@python-works.com>
parents: 128
diff changeset
140 c.f_path = f_path
42d46deb124d implemented simple diffs for history of files.
Marcin Kuzminski <marcin@python-works.com>
parents: 128
diff changeset
141 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
142 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
143 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
144
129
42d46deb124d implemented simple diffs for history of files.
Marcin Kuzminski <marcin@python-works.com>
parents: 128
diff changeset
145 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
146 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
147 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
148 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
149
0f7f93df5802 implemented rawdiff and diff download into diff view.
Marcin Kuzminski <marcin@python-works.com>
parents: 158
diff changeset
150 diff = differ.DiffProcessor(f_udiff)
0f7f93df5802 implemented rawdiff and diff download into diff view.
Marcin Kuzminski <marcin@python-works.com>
parents: 158
diff changeset
151
0f7f93df5802 implemented rawdiff and diff download into diff view.
Marcin Kuzminski <marcin@python-works.com>
parents: 158
diff changeset
152 if action == 'download':
0f7f93df5802 implemented rawdiff and diff download into diff view.
Marcin Kuzminski <marcin@python-works.com>
parents: 158
diff changeset
153 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
154 response.content_type = 'text/plain'
0f7f93df5802 implemented rawdiff and diff download into diff view.
Marcin Kuzminski <marcin@python-works.com>
parents: 158
diff changeset
155 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
156 % diff_name
0f7f93df5802 implemented rawdiff and diff download into diff view.
Marcin Kuzminski <marcin@python-works.com>
parents: 158
diff changeset
157 return diff.raw_diff()
0f7f93df5802 implemented rawdiff and diff download into diff view.
Marcin Kuzminski <marcin@python-works.com>
parents: 158
diff changeset
158
0f7f93df5802 implemented rawdiff and diff download into diff view.
Marcin Kuzminski <marcin@python-works.com>
parents: 158
diff changeset
159 elif action == 'raw':
0f7f93df5802 implemented rawdiff and diff download into diff view.
Marcin Kuzminski <marcin@python-works.com>
parents: 158
diff changeset
160 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
161 elif action == 'diff':
0f7f93df5802 implemented rawdiff and diff download into diff view.
Marcin Kuzminski <marcin@python-works.com>
parents: 158
diff changeset
162 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
163
129
42d46deb124d implemented simple diffs for history of files.
Marcin Kuzminski <marcin@python-works.com>
parents: 128
diff changeset
164 return render('files/file_diff.html')
42d46deb124d implemented simple diffs for history of files.
Marcin Kuzminski <marcin@python-works.com>
parents: 128
diff changeset
165
128
9deb6f1d5b90 Implemented file history.
Marcin Kuzminski <marcin@python-works.com>
parents: 106
diff changeset
166 def _get_history(self, repo, node, f_path):
9deb6f1d5b90 Implemented file history.
Marcin Kuzminski <marcin@python-works.com>
parents: 106
diff changeset
167 from vcs.nodes import NodeKind
9deb6f1d5b90 Implemented file history.
Marcin Kuzminski <marcin@python-works.com>
parents: 106
diff changeset
168 if not node.kind is NodeKind.FILE:
9deb6f1d5b90 Implemented file history.
Marcin Kuzminski <marcin@python-works.com>
parents: 106
diff changeset
169 return []
129
42d46deb124d implemented simple diffs for history of files.
Marcin Kuzminski <marcin@python-works.com>
parents: 128
diff changeset
170 changesets = node.history
128
9deb6f1d5b90 Implemented file history.
Marcin Kuzminski <marcin@python-works.com>
parents: 106
diff changeset
171 hist_l = []
9deb6f1d5b90 Implemented file history.
Marcin Kuzminski <marcin@python-works.com>
parents: 106
diff changeset
172 for chs in changesets:
9deb6f1d5b90 Implemented file history.
Marcin Kuzminski <marcin@python-works.com>
parents: 106
diff changeset
173 n_desc = 'r%s:%s' % (chs.revision, chs._short)
9deb6f1d5b90 Implemented file history.
Marcin Kuzminski <marcin@python-works.com>
parents: 106
diff changeset
174 hist_l.append((chs._short, n_desc,))
9deb6f1d5b90 Implemented file history.
Marcin Kuzminski <marcin@python-works.com>
parents: 106
diff changeset
175 return hist_l