Mercurial > kallithea
annotate rhodecode/controllers/files.py @ 3625:260a7a01b054 beta
follow Python conventions for boolean values
True and False might be singletons and the "default" values for "boolean"
expressions, but "all" values in Python has a boolean value and should be
evaluated as such. Checking with 'is True' and 'is False' is thus confusing,
error prone and unnessarily complex.
If we anywhere rely and nullable boolean fields from the database layer and
don't want the null value to be treated as False then we should check
explicitly for null with 'is None'.
author | Mads Kiilerich <madski@unity3d.com> |
---|---|
date | Thu, 28 Mar 2013 01:10:45 +0100 |
parents | fe012b7df29d |
children | ec6354949623 |
rev | line source |
---|---|
812
30ad41c76fae
fixes #79 cut off limit was added into .ini config files
Marcin Kuzminski <marcin@python-works.com>
parents:
774
diff
changeset
|
1 # -*- coding: utf-8 -*- |
30ad41c76fae
fixes #79 cut off limit was added into .ini config files
Marcin Kuzminski <marcin@python-works.com>
parents:
774
diff
changeset
|
2 """ |
30ad41c76fae
fixes #79 cut off limit was added into .ini config files
Marcin Kuzminski <marcin@python-works.com>
parents:
774
diff
changeset
|
3 rhodecode.controllers.files |
30ad41c76fae
fixes #79 cut off limit was added into .ini config files
Marcin Kuzminski <marcin@python-works.com>
parents:
774
diff
changeset
|
4 ~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
318
fdf9f6ee5217
Implemented permissions into hg app, secured admin controllers, templates and repository specific controllers
Marcin Kuzminski <marcin@python-works.com>
parents:
275
diff
changeset
|
5 |
812
30ad41c76fae
fixes #79 cut off limit was added into .ini config files
Marcin Kuzminski <marcin@python-works.com>
parents:
774
diff
changeset
|
6 Files controller for RhodeCode |
1203
6832ef664673
source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents:
1200
diff
changeset
|
7 |
812
30ad41c76fae
fixes #79 cut off limit was added into .ini config files
Marcin Kuzminski <marcin@python-works.com>
parents:
774
diff
changeset
|
8 :created_on: Apr 21, 2010 |
30ad41c76fae
fixes #79 cut off limit was added into .ini config files
Marcin Kuzminski <marcin@python-works.com>
parents:
774
diff
changeset
|
9 :author: marcink |
1824
89efedac4e6c
2012 copyrights
Marcin Kuzminski <marcin@python-works.com>
parents:
1818
diff
changeset
|
10 :copyright: (C) 2010-2012 Marcin Kuzminski <marcin@python-works.com> |
812
30ad41c76fae
fixes #79 cut off limit was added into .ini config files
Marcin Kuzminski <marcin@python-works.com>
parents:
774
diff
changeset
|
11 :license: GPLv3, see COPYING for more details. |
30ad41c76fae
fixes #79 cut off limit was added into .ini config files
Marcin Kuzminski <marcin@python-works.com>
parents:
774
diff
changeset
|
12 """ |
1206
a671db5bdd58
fixed license issue #149
Marcin Kuzminski <marcin@python-works.com>
parents:
1203
diff
changeset
|
13 # This program is free software: you can redistribute it and/or modify |
a671db5bdd58
fixed license issue #149
Marcin Kuzminski <marcin@python-works.com>
parents:
1203
diff
changeset
|
14 # it under the terms of the GNU General Public License as published by |
a671db5bdd58
fixed license issue #149
Marcin Kuzminski <marcin@python-works.com>
parents:
1203
diff
changeset
|
15 # the Free Software Foundation, either version 3 of the License, or |
a671db5bdd58
fixed license issue #149
Marcin Kuzminski <marcin@python-works.com>
parents:
1203
diff
changeset
|
16 # (at your option) any later version. |
1203
6832ef664673
source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents:
1200
diff
changeset
|
17 # |
252
3782a6d698af
licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents:
245
diff
changeset
|
18 # 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
|
19 # 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
|
20 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
3782a6d698af
licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents:
245
diff
changeset
|
21 # GNU General Public License for more details. |
1203
6832ef664673
source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents:
1200
diff
changeset
|
22 # |
252
3782a6d698af
licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents:
245
diff
changeset
|
23 # You should have received a copy of the GNU General Public License |
1206
a671db5bdd58
fixed license issue #149
Marcin Kuzminski <marcin@python-works.com>
parents:
1203
diff
changeset
|
24 # along with this program. If not, see <http://www.gnu.org/licenses/>. |
2291
982d8a80e048
archive file fixes for python 2.5
Marcin Kuzminski <marcin@python-works.com>
parents:
2277
diff
changeset
|
25 from __future__ import with_statement |
1200
3ecaa17d9dea
added os.sep for files controller
Marcin Kuzminski <marcin@python-works.com>
parents:
1190
diff
changeset
|
26 import os |
812
30ad41c76fae
fixes #79 cut off limit was added into .ini config files
Marcin Kuzminski <marcin@python-works.com>
parents:
774
diff
changeset
|
27 import logging |
1305
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
28 import traceback |
2267
b872bc10f4ec
cleanup code of get archive for repositories
Marcin Kuzminski <marcin@python-works.com>
parents:
2255
diff
changeset
|
29 import tempfile |
3490
c0ac34b8eb07
initial version of #788 tarball cache
Marcin Kuzminski <marcin@python-works.com>
parents:
3488
diff
changeset
|
30 import shutil |
812
30ad41c76fae
fixes #79 cut off limit was added into .ini config files
Marcin Kuzminski <marcin@python-works.com>
parents:
774
diff
changeset
|
31 |
1789
17caf4efe15c
implements #308 rewrote diffs to enable displaying full diff on each file
Marcin Kuzminski <marcin@python-works.com>
parents:
1768
diff
changeset
|
32 from pylons import request, response, tmpl_context as c, url |
544
d8778cde98f0
added limits to single file diffs
Marcin Kuzminski <marcin@python-works.com>
parents:
512
diff
changeset
|
33 from pylons.i18n.translation import _ |
318
fdf9f6ee5217
Implemented permissions into hg app, secured admin controllers, templates and repository specific controllers
Marcin Kuzminski <marcin@python-works.com>
parents:
275
diff
changeset
|
34 from pylons.controllers.util import redirect |
3061
7727faad5baf
fixed issue #671 commenting on pull requests sometimes used old JSON encoder and broke. This changeset replaces it's with RhodeCode json encoder to ensure all data is properly serializable
Marcin Kuzminski <marcin@python-works.com>
parents:
3037
diff
changeset
|
35 from rhodecode.lib.utils import jsonify |
812
30ad41c76fae
fixes #79 cut off limit was added into .ini config files
Marcin Kuzminski <marcin@python-works.com>
parents:
774
diff
changeset
|
36 |
2109 | 37 from rhodecode.lib import diffs |
38 from rhodecode.lib import helpers as h | |
1753
1d1ccb873d00
moved soon-to-be-deleted code from vcs to rhodecode
Marcin Kuzminski <marcin@python-works.com>
parents:
1752
diff
changeset
|
39 |
1789
17caf4efe15c
implements #308 rewrote diffs to enable displaying full diff on each file
Marcin Kuzminski <marcin@python-works.com>
parents:
1768
diff
changeset
|
40 from rhodecode.lib.compat import OrderedDict |
2931
4c7cc3a4c330
fixed issue with show at revision button. Some JS were not properly loaded due to ajaxified files view.
Marcin Kuzminski <marcin@python-works.com>
parents:
2930
diff
changeset
|
41 from rhodecode.lib.utils2 import convert_line_endings, detect_mode, safe_str,\ |
4c7cc3a4c330
fixed issue with show at revision button. Some JS were not properly loaded due to ajaxified files view.
Marcin Kuzminski <marcin@python-works.com>
parents:
2930
diff
changeset
|
42 str2bool |
1305
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
43 from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator |
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
44 from rhodecode.lib.base import BaseRepoController, render |
2684
2b6939a77052
Bumped mercurial version to 2.3
Marcin Kuzminski <marcin@python-works.com>
parents:
2570
diff
changeset
|
45 from rhodecode.lib.vcs.backends.base import EmptyChangeset |
2109 | 46 from rhodecode.lib.vcs.conf import settings |
47 from rhodecode.lib.vcs.exceptions import RepositoryError, \ | |
48 ChangesetDoesNotExistError, EmptyRepositoryError, \ | |
2977
cff9d4e1d821
Fixed issue when node didn't exists at 'tip' and we tried calculate history based on that assumption.
Marcin Kuzminski <marcin@python-works.com>
parents:
2973
diff
changeset
|
49 ImproperArchiveTypeError, VCSError, NodeAlreadyExistsError,\ |
3037
789f20683559
fix error when diff path is a directory, edge case generated by google bots
Marcin Kuzminski <marcin@python-works.com>
parents:
3009
diff
changeset
|
50 NodeDoesNotExistError, ChangesetError, NodeError |
2109 | 51 from rhodecode.lib.vcs.nodes import FileNode |
52 | |
1305
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
53 from rhodecode.model.repo import RepoModel |
2109 | 54 from rhodecode.model.scm import ScmModel |
2255
95800dad44d0
fixes for tests on Windows
Marcin Kuzminski <marcin@python-works.com>
parents:
2199
diff
changeset
|
55 from rhodecode.model.db import Repository |
2109 | 56 |
1789
17caf4efe15c
implements #308 rewrote diffs to enable displaying full diff on each file
Marcin Kuzminski <marcin@python-works.com>
parents:
1768
diff
changeset
|
57 from rhodecode.controllers.changeset import anchor_url, _ignorews_url,\ |
17caf4efe15c
implements #308 rewrote diffs to enable displaying full diff on each file
Marcin Kuzminski <marcin@python-works.com>
parents:
1768
diff
changeset
|
58 _context_url, get_line_ctx, get_ignore_ws |
3621
fe012b7df29d
missing files or bad files revisions should return 404s not redirects - ref #808
Marcin Kuzminski <marcin@python-works.com>
parents:
3591
diff
changeset
|
59 from webob.exc import HTTPNotFound |
2109 | 60 |
1305
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
61 |
93
aec4c0071cb3
added empty controllers for branches tags files graph, routing and test for them
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
62 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
|
63 |
1134
1dc5d169e85a
fixed issue with vcs stream
Marcin Kuzminski <marcin@python-works.com>
parents:
1132
diff
changeset
|
64 |
1045
3fc9183e05dd
another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents:
1044
diff
changeset
|
65 class FilesController(BaseRepoController): |
636
ffd07396d315
Fixes for raw_id, needed for git
Marcin Kuzminski <marcin@python-works.com>
parents:
629
diff
changeset
|
66 |
99
5b57295601b6
Updated basic files browser with, pygments
Marcin Kuzminski <marcin@python-works.com>
parents:
93
diff
changeset
|
67 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
|
68 super(FilesController, self).__before__() |
813
e8b5be26fb78
fixed small issue made on latest patches
Marcin Kuzminski <marcin@python-works.com>
parents:
812
diff
changeset
|
69 c.cut_off_limit = self.cut_off_limit |
93
aec4c0071cb3
added empty controllers for branches tags files graph, routing and test for them
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
70 |
1483
7b67b0dcad6d
Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents:
1480
diff
changeset
|
71 def __get_cs_or_redirect(self, rev, repo_name, redirect_after=True): |
1045
3fc9183e05dd
another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents:
1044
diff
changeset
|
72 """ |
1137
82344ce0a892
clean and fixes in files controller
Marcin Kuzminski <marcin@python-works.com>
parents:
1134
diff
changeset
|
73 Safe way to get changeset if error occur it redirects to tip with |
82344ce0a892
clean and fixes in files controller
Marcin Kuzminski <marcin@python-works.com>
parents:
1134
diff
changeset
|
74 proper message |
1203
6832ef664673
source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents:
1200
diff
changeset
|
75 |
1045
3fc9183e05dd
another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents:
1044
diff
changeset
|
76 :param rev: revision to fetch |
3fc9183e05dd
another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents:
1044
diff
changeset
|
77 :param repo_name: repo name to redirect after |
3fc9183e05dd
another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents:
1044
diff
changeset
|
78 """ |
3fc9183e05dd
another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents:
1044
diff
changeset
|
79 |
3fc9183e05dd
another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents:
1044
diff
changeset
|
80 try: |
3fc9183e05dd
another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents:
1044
diff
changeset
|
81 return c.rhodecode_repo.get_changeset(rev) |
3fc9183e05dd
another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents:
1044
diff
changeset
|
82 except EmptyRepositoryError, e: |
1483
7b67b0dcad6d
Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents:
1480
diff
changeset
|
83 if not redirect_after: |
7b67b0dcad6d
Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents:
1480
diff
changeset
|
84 return None |
7b67b0dcad6d
Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents:
1480
diff
changeset
|
85 url_ = url('files_add_home', |
7b67b0dcad6d
Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents:
1480
diff
changeset
|
86 repo_name=c.repo_name, |
1485
269905fac50a
added uploading of files from web interface directly into repo
Marcin Kuzminski <marcin@python-works.com>
parents:
1484
diff
changeset
|
87 revision=0, f_path='') |
3547
b7f489714639
linkify names on fork/create repos in tooltip messages
Marcin Kuzminski <marcin@python-works.com>
parents:
3490
diff
changeset
|
88 add_new = h.link_to(_('click here to add new file'), url_) |
2570 | 89 h.flash(h.literal(_('There are no files yet %s') % add_new), |
1483
7b67b0dcad6d
Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents:
1480
diff
changeset
|
90 category='warning') |
1045
3fc9183e05dd
another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents:
1044
diff
changeset
|
91 redirect(h.url('summary_home', repo_name=repo_name)) |
3fc9183e05dd
another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents:
1044
diff
changeset
|
92 |
3621
fe012b7df29d
missing files or bad files revisions should return 404s not redirects - ref #808
Marcin Kuzminski <marcin@python-works.com>
parents:
3591
diff
changeset
|
93 except RepositoryError, e: # including ChangesetDoesNotExistError |
3573
881ae12b3c7d
report ChangesetDoesNotExistError as an error but don't lose the repo context
Mads Kiilerich <madski@unity3d.com>
parents:
3563
diff
changeset
|
94 h.flash(str(e), category='error') |
3621
fe012b7df29d
missing files or bad files revisions should return 404s not redirects - ref #808
Marcin Kuzminski <marcin@python-works.com>
parents:
3591
diff
changeset
|
95 raise HTTPNotFound() |
1045
3fc9183e05dd
another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents:
1044
diff
changeset
|
96 |
1189
a4e1b955fe07
fixes for rawfile, annotation, download. It will check now if it's a filenode.
Marcin Kuzminski <marcin@python-works.com>
parents:
1151
diff
changeset
|
97 def __get_filenode_or_redirect(self, repo_name, cs, path): |
a4e1b955fe07
fixes for rawfile, annotation, download. It will check now if it's a filenode.
Marcin Kuzminski <marcin@python-works.com>
parents:
1151
diff
changeset
|
98 """ |
a4e1b955fe07
fixes for rawfile, annotation, download. It will check now if it's a filenode.
Marcin Kuzminski <marcin@python-works.com>
parents:
1151
diff
changeset
|
99 Returns file_node, if error occurs or given path is directory, |
a4e1b955fe07
fixes for rawfile, annotation, download. It will check now if it's a filenode.
Marcin Kuzminski <marcin@python-works.com>
parents:
1151
diff
changeset
|
100 it'll redirect to top level path |
1203
6832ef664673
source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents:
1200
diff
changeset
|
101 |
1189
a4e1b955fe07
fixes for rawfile, annotation, download. It will check now if it's a filenode.
Marcin Kuzminski <marcin@python-works.com>
parents:
1151
diff
changeset
|
102 :param repo_name: repo_name |
a4e1b955fe07
fixes for rawfile, annotation, download. It will check now if it's a filenode.
Marcin Kuzminski <marcin@python-works.com>
parents:
1151
diff
changeset
|
103 :param cs: given changeset |
a4e1b955fe07
fixes for rawfile, annotation, download. It will check now if it's a filenode.
Marcin Kuzminski <marcin@python-works.com>
parents:
1151
diff
changeset
|
104 :param path: path to lookup |
a4e1b955fe07
fixes for rawfile, annotation, download. It will check now if it's a filenode.
Marcin Kuzminski <marcin@python-works.com>
parents:
1151
diff
changeset
|
105 """ |
a4e1b955fe07
fixes for rawfile, annotation, download. It will check now if it's a filenode.
Marcin Kuzminski <marcin@python-works.com>
parents:
1151
diff
changeset
|
106 |
a4e1b955fe07
fixes for rawfile, annotation, download. It will check now if it's a filenode.
Marcin Kuzminski <marcin@python-works.com>
parents:
1151
diff
changeset
|
107 try: |
a4e1b955fe07
fixes for rawfile, annotation, download. It will check now if it's a filenode.
Marcin Kuzminski <marcin@python-works.com>
parents:
1151
diff
changeset
|
108 file_node = cs.get_node(path) |
a4e1b955fe07
fixes for rawfile, annotation, download. It will check now if it's a filenode.
Marcin Kuzminski <marcin@python-works.com>
parents:
1151
diff
changeset
|
109 if file_node.is_dir(): |
a4e1b955fe07
fixes for rawfile, annotation, download. It will check now if it's a filenode.
Marcin Kuzminski <marcin@python-works.com>
parents:
1151
diff
changeset
|
110 raise RepositoryError('given path is a directory') |
a4e1b955fe07
fixes for rawfile, annotation, download. It will check now if it's a filenode.
Marcin Kuzminski <marcin@python-works.com>
parents:
1151
diff
changeset
|
111 except RepositoryError, e: |
3573
881ae12b3c7d
report ChangesetDoesNotExistError as an error but don't lose the repo context
Mads Kiilerich <madski@unity3d.com>
parents:
3563
diff
changeset
|
112 h.flash(str(e), category='error') |
3621
fe012b7df29d
missing files or bad files revisions should return 404s not redirects - ref #808
Marcin Kuzminski <marcin@python-works.com>
parents:
3591
diff
changeset
|
113 raise HTTPNotFound() |
1189
a4e1b955fe07
fixes for rawfile, annotation, download. It will check now if it's a filenode.
Marcin Kuzminski <marcin@python-works.com>
parents:
1151
diff
changeset
|
114 |
a4e1b955fe07
fixes for rawfile, annotation, download. It will check now if it's a filenode.
Marcin Kuzminski <marcin@python-works.com>
parents:
1151
diff
changeset
|
115 return file_node |
a4e1b955fe07
fixes for rawfile, annotation, download. It will check now if it's a filenode.
Marcin Kuzminski <marcin@python-works.com>
parents:
1151
diff
changeset
|
116 |
2457
01e005cabd4d
moved login required into seperate calls for files due to optional API access option
Marcin Kuzminski <marcin@python-works.com>
parents:
2456
diff
changeset
|
117 @LoginRequired() |
1305
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
118 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', |
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
119 'repository.admin') |
2177
ee07357d9265
unified annotation view with file source view
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
120 def index(self, repo_name, revision, f_path, annotate=False): |
1789
17caf4efe15c
implements #308 rewrote diffs to enable displaying full diff on each file
Marcin Kuzminski <marcin@python-works.com>
parents:
1768
diff
changeset
|
121 # redirect to given revision from form if given |
1137
82344ce0a892
clean and fixes in files controller
Marcin Kuzminski <marcin@python-works.com>
parents:
1134
diff
changeset
|
122 post_revision = request.POST.get('at_rev', None) |
82344ce0a892
clean and fixes in files controller
Marcin Kuzminski <marcin@python-works.com>
parents:
1134
diff
changeset
|
123 if post_revision: |
1224
e76833cd555a
files: fixes error when passing a diff without parameters and caused server crash
Marcin Kuzminski <marcin@python-works.com>
parents:
1212
diff
changeset
|
124 cs = self.__get_cs_or_redirect(post_revision, repo_name) |
636
ffd07396d315
Fixes for raw_id, needed for git
Marcin Kuzminski <marcin@python-works.com>
parents:
629
diff
changeset
|
125 |
1137
82344ce0a892
clean and fixes in files controller
Marcin Kuzminski <marcin@python-works.com>
parents:
1134
diff
changeset
|
126 c.changeset = self.__get_cs_or_redirect(revision, repo_name) |
82344ce0a892
clean and fixes in files controller
Marcin Kuzminski <marcin@python-works.com>
parents:
1134
diff
changeset
|
127 c.branch = request.GET.get('branch', None) |
82344ce0a892
clean and fixes in files controller
Marcin Kuzminski <marcin@python-works.com>
parents:
1134
diff
changeset
|
128 c.f_path = f_path |
2177
ee07357d9265
unified annotation view with file source view
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
129 c.annotate = annotate |
3237
f5dd76e2a7af
disable file editing when not on branch head fixes issue #462
Marcin Kuzminski <marcin@python-works.com>
parents:
3061
diff
changeset
|
130 c.changeset = self.__get_cs_or_redirect(revision, repo_name) |
1137
82344ce0a892
clean and fixes in files controller
Marcin Kuzminski <marcin@python-works.com>
parents:
1134
diff
changeset
|
131 cur_rev = c.changeset.revision |
636
ffd07396d315
Fixes for raw_id, needed for git
Marcin Kuzminski <marcin@python-works.com>
parents:
629
diff
changeset
|
132 |
1789
17caf4efe15c
implements #308 rewrote diffs to enable displaying full diff on each file
Marcin Kuzminski <marcin@python-works.com>
parents:
1768
diff
changeset
|
133 # prev link |
1137
82344ce0a892
clean and fixes in files controller
Marcin Kuzminski <marcin@python-works.com>
parents:
1134
diff
changeset
|
134 try: |
82344ce0a892
clean and fixes in files controller
Marcin Kuzminski <marcin@python-works.com>
parents:
1134
diff
changeset
|
135 prev_rev = c.rhodecode_repo.get_changeset(cur_rev).prev(c.branch) |
82344ce0a892
clean and fixes in files controller
Marcin Kuzminski <marcin@python-works.com>
parents:
1134
diff
changeset
|
136 c.url_prev = url('files_home', repo_name=c.repo_name, |
82344ce0a892
clean and fixes in files controller
Marcin Kuzminski <marcin@python-works.com>
parents:
1134
diff
changeset
|
137 revision=prev_rev.raw_id, f_path=f_path) |
82344ce0a892
clean and fixes in files controller
Marcin Kuzminski <marcin@python-works.com>
parents:
1134
diff
changeset
|
138 if c.branch: |
82344ce0a892
clean and fixes in files controller
Marcin Kuzminski <marcin@python-works.com>
parents:
1134
diff
changeset
|
139 c.url_prev += '?branch=%s' % c.branch |
82344ce0a892
clean and fixes in files controller
Marcin Kuzminski <marcin@python-works.com>
parents:
1134
diff
changeset
|
140 except (ChangesetDoesNotExistError, VCSError): |
82344ce0a892
clean and fixes in files controller
Marcin Kuzminski <marcin@python-works.com>
parents:
1134
diff
changeset
|
141 c.url_prev = '#' |
883
20ed6f6a6329
Changed prev/next in file browser to new vcs methods
Marcin Kuzminski <marcin@python-works.com>
parents:
872
diff
changeset
|
142 |
1789
17caf4efe15c
implements #308 rewrote diffs to enable displaying full diff on each file
Marcin Kuzminski <marcin@python-works.com>
parents:
1768
diff
changeset
|
143 # next link |
1137
82344ce0a892
clean and fixes in files controller
Marcin Kuzminski <marcin@python-works.com>
parents:
1134
diff
changeset
|
144 try: |
82344ce0a892
clean and fixes in files controller
Marcin Kuzminski <marcin@python-works.com>
parents:
1134
diff
changeset
|
145 next_rev = c.rhodecode_repo.get_changeset(cur_rev).next(c.branch) |
82344ce0a892
clean and fixes in files controller
Marcin Kuzminski <marcin@python-works.com>
parents:
1134
diff
changeset
|
146 c.url_next = url('files_home', repo_name=c.repo_name, |
82344ce0a892
clean and fixes in files controller
Marcin Kuzminski <marcin@python-works.com>
parents:
1134
diff
changeset
|
147 revision=next_rev.raw_id, f_path=f_path) |
82344ce0a892
clean and fixes in files controller
Marcin Kuzminski <marcin@python-works.com>
parents:
1134
diff
changeset
|
148 if c.branch: |
82344ce0a892
clean and fixes in files controller
Marcin Kuzminski <marcin@python-works.com>
parents:
1134
diff
changeset
|
149 c.url_next += '?branch=%s' % c.branch |
82344ce0a892
clean and fixes in files controller
Marcin Kuzminski <marcin@python-works.com>
parents:
1134
diff
changeset
|
150 except (ChangesetDoesNotExistError, VCSError): |
82344ce0a892
clean and fixes in files controller
Marcin Kuzminski <marcin@python-works.com>
parents:
1134
diff
changeset
|
151 c.url_next = '#' |
636
ffd07396d315
Fixes for raw_id, needed for git
Marcin Kuzminski <marcin@python-works.com>
parents:
629
diff
changeset
|
152 |
1789
17caf4efe15c
implements #308 rewrote diffs to enable displaying full diff on each file
Marcin Kuzminski <marcin@python-works.com>
parents:
1768
diff
changeset
|
153 # files or dirs |
1137
82344ce0a892
clean and fixes in files controller
Marcin Kuzminski <marcin@python-works.com>
parents:
1134
diff
changeset
|
154 try: |
1737
61eda8bf70d0
new files views
Marcin Kuzminski <marcin@python-works.com>
parents:
1664
diff
changeset
|
155 c.file = c.changeset.get_node(f_path) |
1190
0d7a127e6449
use cs get history instead of node.history, node history have to much reference calls
Marcin Kuzminski <marcin@python-works.com>
parents:
1189
diff
changeset
|
156 |
1737
61eda8bf70d0
new files views
Marcin Kuzminski <marcin@python-works.com>
parents:
1664
diff
changeset
|
157 if c.file.is_file(): |
3001
37c7abd34d44
implements #636, lazy loading of history and authors to speed up page responsiveness.
Marcin Kuzminski <marcin@python-works.com>
parents:
2995
diff
changeset
|
158 c.load_full_history = False |
37c7abd34d44
implements #636, lazy loading of history and authors to speed up page responsiveness.
Marcin Kuzminski <marcin@python-works.com>
parents:
2995
diff
changeset
|
159 file_last_cs = c.file.last_changeset |
37c7abd34d44
implements #636, lazy loading of history and authors to speed up page responsiveness.
Marcin Kuzminski <marcin@python-works.com>
parents:
2995
diff
changeset
|
160 c.file_changeset = (c.changeset |
37c7abd34d44
implements #636, lazy loading of history and authors to speed up page responsiveness.
Marcin Kuzminski <marcin@python-works.com>
parents:
2995
diff
changeset
|
161 if c.changeset.revision < file_last_cs.revision |
37c7abd34d44
implements #636, lazy loading of history and authors to speed up page responsiveness.
Marcin Kuzminski <marcin@python-works.com>
parents:
2995
diff
changeset
|
162 else file_last_cs) |
3237
f5dd76e2a7af
disable file editing when not on branch head fixes issue #462
Marcin Kuzminski <marcin@python-works.com>
parents:
3061
diff
changeset
|
163 #determine if we're on branch head |
f5dd76e2a7af
disable file editing when not on branch head fixes issue #462
Marcin Kuzminski <marcin@python-works.com>
parents:
3061
diff
changeset
|
164 _branches = c.rhodecode_repo.branches |
3267
7b74079beec9
coding style: fix trailing and leading spaces and tabs
Mads Kiilerich <madski@unity3d.com>
parents:
3237
diff
changeset
|
165 c.on_branch_head = revision in _branches.keys() + _branches.values() |
3001
37c7abd34d44
implements #636, lazy loading of history and authors to speed up page responsiveness.
Marcin Kuzminski <marcin@python-works.com>
parents:
2995
diff
changeset
|
166 _hist = [] |
37c7abd34d44
implements #636, lazy loading of history and authors to speed up page responsiveness.
Marcin Kuzminski <marcin@python-works.com>
parents:
2995
diff
changeset
|
167 c.file_history = [] |
37c7abd34d44
implements #636, lazy loading of history and authors to speed up page responsiveness.
Marcin Kuzminski <marcin@python-works.com>
parents:
2995
diff
changeset
|
168 if c.load_full_history: |
37c7abd34d44
implements #636, lazy loading of history and authors to speed up page responsiveness.
Marcin Kuzminski <marcin@python-works.com>
parents:
2995
diff
changeset
|
169 c.file_history, _hist = self._get_node_history(c.changeset, f_path) |
37c7abd34d44
implements #636, lazy loading of history and authors to speed up page responsiveness.
Marcin Kuzminski <marcin@python-works.com>
parents:
2995
diff
changeset
|
170 |
2456
51b203e44202
Add authors into file view
Marcin Kuzminski <marcin@python-works.com>
parents:
2428
diff
changeset
|
171 c.authors = [] |
51b203e44202
Add authors into file view
Marcin Kuzminski <marcin@python-works.com>
parents:
2428
diff
changeset
|
172 for a in set([x.author for x in _hist]): |
51b203e44202
Add authors into file view
Marcin Kuzminski <marcin@python-works.com>
parents:
2428
diff
changeset
|
173 c.authors.append((h.email(a), h.person(a))) |
1190
0d7a127e6449
use cs get history instead of node.history, node history have to much reference calls
Marcin Kuzminski <marcin@python-works.com>
parents:
1189
diff
changeset
|
174 else: |
2456
51b203e44202
Add authors into file view
Marcin Kuzminski <marcin@python-works.com>
parents:
2428
diff
changeset
|
175 c.authors = c.file_history = [] |
644
c8bd0e6cc3da
some changes for #45.
Marcin Kuzminski <marcin@python-works.com>
parents:
636
diff
changeset
|
176 except RepositoryError, e: |
3621
fe012b7df29d
missing files or bad files revisions should return 404s not redirects - ref #808
Marcin Kuzminski <marcin@python-works.com>
parents:
3591
diff
changeset
|
177 h.flash(str(e), category='error') |
fe012b7df29d
missing files or bad files revisions should return 404s not redirects - ref #808
Marcin Kuzminski <marcin@python-works.com>
parents:
3591
diff
changeset
|
178 raise HTTPNotFound() |
644
c8bd0e6cc3da
some changes for #45.
Marcin Kuzminski <marcin@python-works.com>
parents:
636
diff
changeset
|
179 |
2686
269c6e0b54cc
Reimplemented file-browser using partial-ajax
Marcin Kuzminski <marcin@python-works.com>
parents:
2684
diff
changeset
|
180 if request.environ.get('HTTP_X_PARTIAL_XHR'): |
269c6e0b54cc
Reimplemented file-browser using partial-ajax
Marcin Kuzminski <marcin@python-works.com>
parents:
2684
diff
changeset
|
181 return render('files/files_ypjax.html') |
269c6e0b54cc
Reimplemented file-browser using partial-ajax
Marcin Kuzminski <marcin@python-works.com>
parents:
2684
diff
changeset
|
182 |
128
9deb6f1d5b90
Implemented file history.
Marcin Kuzminski <marcin@python-works.com>
parents:
106
diff
changeset
|
183 return render('files/files.html') |
9deb6f1d5b90
Implemented file history.
Marcin Kuzminski <marcin@python-works.com>
parents:
106
diff
changeset
|
184 |
3001
37c7abd34d44
implements #636, lazy loading of history and authors to speed up page responsiveness.
Marcin Kuzminski <marcin@python-works.com>
parents:
2995
diff
changeset
|
185 def history(self, repo_name, revision, f_path, annotate=False): |
37c7abd34d44
implements #636, lazy loading of history and authors to speed up page responsiveness.
Marcin Kuzminski <marcin@python-works.com>
parents:
2995
diff
changeset
|
186 if request.environ.get('HTTP_X_PARTIAL_XHR'): |
37c7abd34d44
implements #636, lazy loading of history and authors to speed up page responsiveness.
Marcin Kuzminski <marcin@python-works.com>
parents:
2995
diff
changeset
|
187 c.changeset = self.__get_cs_or_redirect(revision, repo_name) |
37c7abd34d44
implements #636, lazy loading of history and authors to speed up page responsiveness.
Marcin Kuzminski <marcin@python-works.com>
parents:
2995
diff
changeset
|
188 c.f_path = f_path |
37c7abd34d44
implements #636, lazy loading of history and authors to speed up page responsiveness.
Marcin Kuzminski <marcin@python-works.com>
parents:
2995
diff
changeset
|
189 c.annotate = annotate |
37c7abd34d44
implements #636, lazy loading of history and authors to speed up page responsiveness.
Marcin Kuzminski <marcin@python-works.com>
parents:
2995
diff
changeset
|
190 c.file = c.changeset.get_node(f_path) |
37c7abd34d44
implements #636, lazy loading of history and authors to speed up page responsiveness.
Marcin Kuzminski <marcin@python-works.com>
parents:
2995
diff
changeset
|
191 if c.file.is_file(): |
37c7abd34d44
implements #636, lazy loading of history and authors to speed up page responsiveness.
Marcin Kuzminski <marcin@python-works.com>
parents:
2995
diff
changeset
|
192 file_last_cs = c.file.last_changeset |
37c7abd34d44
implements #636, lazy loading of history and authors to speed up page responsiveness.
Marcin Kuzminski <marcin@python-works.com>
parents:
2995
diff
changeset
|
193 c.file_changeset = (c.changeset |
37c7abd34d44
implements #636, lazy loading of history and authors to speed up page responsiveness.
Marcin Kuzminski <marcin@python-works.com>
parents:
2995
diff
changeset
|
194 if c.changeset.revision < file_last_cs.revision |
37c7abd34d44
implements #636, lazy loading of history and authors to speed up page responsiveness.
Marcin Kuzminski <marcin@python-works.com>
parents:
2995
diff
changeset
|
195 else file_last_cs) |
37c7abd34d44
implements #636, lazy loading of history and authors to speed up page responsiveness.
Marcin Kuzminski <marcin@python-works.com>
parents:
2995
diff
changeset
|
196 c.file_history, _hist = self._get_node_history(c.changeset, f_path) |
37c7abd34d44
implements #636, lazy loading of history and authors to speed up page responsiveness.
Marcin Kuzminski <marcin@python-works.com>
parents:
2995
diff
changeset
|
197 c.authors = [] |
37c7abd34d44
implements #636, lazy loading of history and authors to speed up page responsiveness.
Marcin Kuzminski <marcin@python-works.com>
parents:
2995
diff
changeset
|
198 for a in set([x.author for x in _hist]): |
37c7abd34d44
implements #636, lazy loading of history and authors to speed up page responsiveness.
Marcin Kuzminski <marcin@python-works.com>
parents:
2995
diff
changeset
|
199 c.authors.append((h.email(a), h.person(a))) |
37c7abd34d44
implements #636, lazy loading of history and authors to speed up page responsiveness.
Marcin Kuzminski <marcin@python-works.com>
parents:
2995
diff
changeset
|
200 return render('files/files_history_box.html') |
37c7abd34d44
implements #636, lazy loading of history and authors to speed up page responsiveness.
Marcin Kuzminski <marcin@python-works.com>
parents:
2995
diff
changeset
|
201 |
2457
01e005cabd4d
moved login required into seperate calls for files due to optional API access option
Marcin Kuzminski <marcin@python-works.com>
parents:
2456
diff
changeset
|
202 @LoginRequired() |
1305
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
203 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', |
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
204 'repository.admin') |
147
873fd2dc62c2
Added rawfile support, and few fixes for file
Marcin Kuzminski <marcin@python-works.com>
parents:
145
diff
changeset
|
205 def rawfile(self, repo_name, revision, f_path): |
1137
82344ce0a892
clean and fixes in files controller
Marcin Kuzminski <marcin@python-works.com>
parents:
1134
diff
changeset
|
206 cs = self.__get_cs_or_redirect(revision, repo_name) |
1189
a4e1b955fe07
fixes for rawfile, annotation, download. It will check now if it's a filenode.
Marcin Kuzminski <marcin@python-works.com>
parents:
1151
diff
changeset
|
207 file_node = self.__get_filenode_or_redirect(repo_name, cs, f_path) |
1045
3fc9183e05dd
another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents:
1044
diff
changeset
|
208 |
1189
a4e1b955fe07
fixes for rawfile, annotation, download. It will check now if it's a filenode.
Marcin Kuzminski <marcin@python-works.com>
parents:
1151
diff
changeset
|
209 response.content_disposition = 'attachment; filename=%s' % \ |
2255
95800dad44d0
fixes for tests on Windows
Marcin Kuzminski <marcin@python-works.com>
parents:
2199
diff
changeset
|
210 safe_str(f_path.split(Repository.url_sep())[-1]) |
1189
a4e1b955fe07
fixes for rawfile, annotation, download. It will check now if it's a filenode.
Marcin Kuzminski <marcin@python-works.com>
parents:
1151
diff
changeset
|
211 |
160
0f7f93df5802
implemented rawdiff and diff download into diff view.
Marcin Kuzminski <marcin@python-works.com>
parents:
158
diff
changeset
|
212 response.content_type = file_node.mimetype |
147
873fd2dc62c2
Added rawfile support, and few fixes for file
Marcin Kuzminski <marcin@python-works.com>
parents:
145
diff
changeset
|
213 return file_node.content |
2461
015a42e970a6
whitespace cleanup
Marcin Kuzminski <marcin@python-works.com>
parents:
2457
diff
changeset
|
214 |
2457
01e005cabd4d
moved login required into seperate calls for files due to optional API access option
Marcin Kuzminski <marcin@python-works.com>
parents:
2456
diff
changeset
|
215 @LoginRequired() |
1305
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
216 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', |
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
217 'repository.admin') |
485
9836541b0509
added limit for showing pygemntized source codes larger than 250kb.
Marcin Kuzminski <marcin@python-works.com>
parents:
438
diff
changeset
|
218 def raw(self, repo_name, revision, f_path): |
1137
82344ce0a892
clean and fixes in files controller
Marcin Kuzminski <marcin@python-works.com>
parents:
1134
diff
changeset
|
219 cs = self.__get_cs_or_redirect(revision, repo_name) |
1189
a4e1b955fe07
fixes for rawfile, annotation, download. It will check now if it's a filenode.
Marcin Kuzminski <marcin@python-works.com>
parents:
1151
diff
changeset
|
220 file_node = self.__get_filenode_or_redirect(repo_name, cs, f_path) |
1045
3fc9183e05dd
another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents:
1044
diff
changeset
|
221 |
1241
ed5270522724
changed raw action to show images instead of saying about binary file
Marcin Kuzminski <marcin@python-works.com>
parents:
1224
diff
changeset
|
222 raw_mimetype_mapping = { |
ed5270522724
changed raw action to show images instead of saying about binary file
Marcin Kuzminski <marcin@python-works.com>
parents:
1224
diff
changeset
|
223 # map original mimetype to a mimetype used for "show as raw" |
ed5270522724
changed raw action to show images instead of saying about binary file
Marcin Kuzminski <marcin@python-works.com>
parents:
1224
diff
changeset
|
224 # you can also provide a content-disposition to override the |
ed5270522724
changed raw action to show images instead of saying about binary file
Marcin Kuzminski <marcin@python-works.com>
parents:
1224
diff
changeset
|
225 # default "attachment" disposition. |
ed5270522724
changed raw action to show images instead of saying about binary file
Marcin Kuzminski <marcin@python-works.com>
parents:
1224
diff
changeset
|
226 # orig_type: (new_type, new_dispo) |
ed5270522724
changed raw action to show images instead of saying about binary file
Marcin Kuzminski <marcin@python-works.com>
parents:
1224
diff
changeset
|
227 |
ed5270522724
changed raw action to show images instead of saying about binary file
Marcin Kuzminski <marcin@python-works.com>
parents:
1224
diff
changeset
|
228 # show images inline: |
ed5270522724
changed raw action to show images instead of saying about binary file
Marcin Kuzminski <marcin@python-works.com>
parents:
1224
diff
changeset
|
229 'image/x-icon': ('image/x-icon', 'inline'), |
ed5270522724
changed raw action to show images instead of saying about binary file
Marcin Kuzminski <marcin@python-works.com>
parents:
1224
diff
changeset
|
230 'image/png': ('image/png', 'inline'), |
ed5270522724
changed raw action to show images instead of saying about binary file
Marcin Kuzminski <marcin@python-works.com>
parents:
1224
diff
changeset
|
231 'image/gif': ('image/gif', 'inline'), |
ed5270522724
changed raw action to show images instead of saying about binary file
Marcin Kuzminski <marcin@python-works.com>
parents:
1224
diff
changeset
|
232 'image/jpeg': ('image/jpeg', 'inline'), |
ed5270522724
changed raw action to show images instead of saying about binary file
Marcin Kuzminski <marcin@python-works.com>
parents:
1224
diff
changeset
|
233 'image/svg+xml': ('image/svg+xml', 'inline'), |
ed5270522724
changed raw action to show images instead of saying about binary file
Marcin Kuzminski <marcin@python-works.com>
parents:
1224
diff
changeset
|
234 } |
ed5270522724
changed raw action to show images instead of saying about binary file
Marcin Kuzminski <marcin@python-works.com>
parents:
1224
diff
changeset
|
235 |
ed5270522724
changed raw action to show images instead of saying about binary file
Marcin Kuzminski <marcin@python-works.com>
parents:
1224
diff
changeset
|
236 mimetype = file_node.mimetype |
ed5270522724
changed raw action to show images instead of saying about binary file
Marcin Kuzminski <marcin@python-works.com>
parents:
1224
diff
changeset
|
237 try: |
ed5270522724
changed raw action to show images instead of saying about binary file
Marcin Kuzminski <marcin@python-works.com>
parents:
1224
diff
changeset
|
238 mimetype, dispo = raw_mimetype_mapping[mimetype] |
ed5270522724
changed raw action to show images instead of saying about binary file
Marcin Kuzminski <marcin@python-works.com>
parents:
1224
diff
changeset
|
239 except KeyError: |
ed5270522724
changed raw action to show images instead of saying about binary file
Marcin Kuzminski <marcin@python-works.com>
parents:
1224
diff
changeset
|
240 # we don't know anything special about this, handle it safely |
ed5270522724
changed raw action to show images instead of saying about binary file
Marcin Kuzminski <marcin@python-works.com>
parents:
1224
diff
changeset
|
241 if file_node.is_binary: |
ed5270522724
changed raw action to show images instead of saying about binary file
Marcin Kuzminski <marcin@python-works.com>
parents:
1224
diff
changeset
|
242 # do same as download raw for binary files |
ed5270522724
changed raw action to show images instead of saying about binary file
Marcin Kuzminski <marcin@python-works.com>
parents:
1224
diff
changeset
|
243 mimetype, dispo = 'application/octet-stream', 'attachment' |
ed5270522724
changed raw action to show images instead of saying about binary file
Marcin Kuzminski <marcin@python-works.com>
parents:
1224
diff
changeset
|
244 else: |
ed5270522724
changed raw action to show images instead of saying about binary file
Marcin Kuzminski <marcin@python-works.com>
parents:
1224
diff
changeset
|
245 # do not just use the original mimetype, but force text/plain, |
ed5270522724
changed raw action to show images instead of saying about binary file
Marcin Kuzminski <marcin@python-works.com>
parents:
1224
diff
changeset
|
246 # otherwise it would serve text/html and that might be unsafe. |
ed5270522724
changed raw action to show images instead of saying about binary file
Marcin Kuzminski <marcin@python-works.com>
parents:
1224
diff
changeset
|
247 # Note: underlying vcs library fakes text/plain mimetype if the |
1245
5f2fbab7c429
PEP8ify - controllers
Marcin Kuzminski <marcin@python-works.com>
parents:
1241
diff
changeset
|
248 # mimetype can not be determined and it thinks it is not |
5f2fbab7c429
PEP8ify - controllers
Marcin Kuzminski <marcin@python-works.com>
parents:
1241
diff
changeset
|
249 # binary.This might lead to erroneous text display in some |
5f2fbab7c429
PEP8ify - controllers
Marcin Kuzminski <marcin@python-works.com>
parents:
1241
diff
changeset
|
250 # cases, but helps in other cases, like with text files |
5f2fbab7c429
PEP8ify - controllers
Marcin Kuzminski <marcin@python-works.com>
parents:
1241
diff
changeset
|
251 # without extension. |
1241
ed5270522724
changed raw action to show images instead of saying about binary file
Marcin Kuzminski <marcin@python-works.com>
parents:
1224
diff
changeset
|
252 mimetype, dispo = 'text/plain', 'inline' |
ed5270522724
changed raw action to show images instead of saying about binary file
Marcin Kuzminski <marcin@python-works.com>
parents:
1224
diff
changeset
|
253 |
ed5270522724
changed raw action to show images instead of saying about binary file
Marcin Kuzminski <marcin@python-works.com>
parents:
1224
diff
changeset
|
254 if dispo == 'attachment': |
ed5270522724
changed raw action to show images instead of saying about binary file
Marcin Kuzminski <marcin@python-works.com>
parents:
1224
diff
changeset
|
255 dispo = 'attachment; filename=%s' % \ |
1401
b7563ad4e7ee
Unicode fixes, added safe_str method for global str() operations +better test sandboxing
Marcin Kuzminski <marcin@python-works.com>
parents:
1313
diff
changeset
|
256 safe_str(f_path.split(os.sep)[-1]) |
1241
ed5270522724
changed raw action to show images instead of saying about binary file
Marcin Kuzminski <marcin@python-works.com>
parents:
1224
diff
changeset
|
257 |
ed5270522724
changed raw action to show images instead of saying about binary file
Marcin Kuzminski <marcin@python-works.com>
parents:
1224
diff
changeset
|
258 response.content_disposition = dispo |
ed5270522724
changed raw action to show images instead of saying about binary file
Marcin Kuzminski <marcin@python-works.com>
parents:
1224
diff
changeset
|
259 response.content_type = mimetype |
485
9836541b0509
added limit for showing pygemntized source codes larger than 250kb.
Marcin Kuzminski <marcin@python-works.com>
parents:
438
diff
changeset
|
260 return file_node.content |
636
ffd07396d315
Fixes for raw_id, needed for git
Marcin Kuzminski <marcin@python-works.com>
parents:
629
diff
changeset
|
261 |
2457
01e005cabd4d
moved login required into seperate calls for files due to optional API access option
Marcin Kuzminski <marcin@python-works.com>
parents:
2456
diff
changeset
|
262 @LoginRequired() |
1305
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
263 @HasRepoPermissionAnyDecorator('repository.write', 'repository.admin') |
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
264 def edit(self, repo_name, revision, f_path): |
3237
f5dd76e2a7af
disable file editing when not on branch head fixes issue #462
Marcin Kuzminski <marcin@python-works.com>
parents:
3061
diff
changeset
|
265 repo = c.rhodecode_db_repo |
2727
5899fe08f063
Forbid adding files and editing from web interface while repo is locked
Marcin Kuzminski <marcin@python-works.com>
parents:
2688
diff
changeset
|
266 if repo.enable_locking and repo.locked[0]: |
5899fe08f063
Forbid adding files and editing from web interface while repo is locked
Marcin Kuzminski <marcin@python-works.com>
parents:
2688
diff
changeset
|
267 h.flash(_('This repository is has been locked by %s on %s') |
5899fe08f063
Forbid adding files and editing from web interface while repo is locked
Marcin Kuzminski <marcin@python-works.com>
parents:
2688
diff
changeset
|
268 % (h.person_by_id(repo.locked[0]), |
5899fe08f063
Forbid adding files and editing from web interface while repo is locked
Marcin Kuzminski <marcin@python-works.com>
parents:
2688
diff
changeset
|
269 h.fmt_date(h.time_to_datetime(repo.locked[1]))), |
5899fe08f063
Forbid adding files and editing from web interface while repo is locked
Marcin Kuzminski <marcin@python-works.com>
parents:
2688
diff
changeset
|
270 'warning') |
5899fe08f063
Forbid adding files and editing from web interface while repo is locked
Marcin Kuzminski <marcin@python-works.com>
parents:
2688
diff
changeset
|
271 return redirect(h.url('files_home', |
5899fe08f063
Forbid adding files and editing from web interface while repo is locked
Marcin Kuzminski <marcin@python-works.com>
parents:
2688
diff
changeset
|
272 repo_name=repo_name, revision='tip')) |
5899fe08f063
Forbid adding files and editing from web interface while repo is locked
Marcin Kuzminski <marcin@python-works.com>
parents:
2688
diff
changeset
|
273 |
3237
f5dd76e2a7af
disable file editing when not on branch head fixes issue #462
Marcin Kuzminski <marcin@python-works.com>
parents:
3061
diff
changeset
|
274 # check if revision is a branch identifier- basically we cannot |
f5dd76e2a7af
disable file editing when not on branch head fixes issue #462
Marcin Kuzminski <marcin@python-works.com>
parents:
3061
diff
changeset
|
275 # create multiple heads via file editing |
f5dd76e2a7af
disable file editing when not on branch head fixes issue #462
Marcin Kuzminski <marcin@python-works.com>
parents:
3061
diff
changeset
|
276 _branches = repo.scm_instance.branches |
f5dd76e2a7af
disable file editing when not on branch head fixes issue #462
Marcin Kuzminski <marcin@python-works.com>
parents:
3061
diff
changeset
|
277 # check if revision is a branch name or branch hash |
f5dd76e2a7af
disable file editing when not on branch head fixes issue #462
Marcin Kuzminski <marcin@python-works.com>
parents:
3061
diff
changeset
|
278 if revision not in _branches.keys() + _branches.values(): |
f5dd76e2a7af
disable file editing when not on branch head fixes issue #462
Marcin Kuzminski <marcin@python-works.com>
parents:
3061
diff
changeset
|
279 h.flash(_('You can only edit files with revision ' |
f5dd76e2a7af
disable file editing when not on branch head fixes issue #462
Marcin Kuzminski <marcin@python-works.com>
parents:
3061
diff
changeset
|
280 'being a valid branch '), category='warning') |
f5dd76e2a7af
disable file editing when not on branch head fixes issue #462
Marcin Kuzminski <marcin@python-works.com>
parents:
3061
diff
changeset
|
281 return redirect(h.url('files_home', |
f5dd76e2a7af
disable file editing when not on branch head fixes issue #462
Marcin Kuzminski <marcin@python-works.com>
parents:
3061
diff
changeset
|
282 repo_name=repo_name, revision='tip', |
f5dd76e2a7af
disable file editing when not on branch head fixes issue #462
Marcin Kuzminski <marcin@python-works.com>
parents:
3061
diff
changeset
|
283 f_path=f_path)) |
f5dd76e2a7af
disable file editing when not on branch head fixes issue #462
Marcin Kuzminski <marcin@python-works.com>
parents:
3061
diff
changeset
|
284 |
1305
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
285 r_post = request.POST |
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
286 |
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
287 c.cs = self.__get_cs_or_redirect(revision, repo_name) |
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
288 c.file = self.__get_filenode_or_redirect(repo_name, c.cs, f_path) |
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
289 |
1313
856be614d9a4
disabled edition of binary files
Marcin Kuzminski <marcin@python-works.com>
parents:
1312
diff
changeset
|
290 if c.file.is_binary: |
856be614d9a4
disabled edition of binary files
Marcin Kuzminski <marcin@python-works.com>
parents:
1312
diff
changeset
|
291 return redirect(url('files_home', repo_name=c.repo_name, |
856be614d9a4
disabled edition of binary files
Marcin Kuzminski <marcin@python-works.com>
parents:
1312
diff
changeset
|
292 revision=c.cs.raw_id, f_path=f_path)) |
3237
f5dd76e2a7af
disable file editing when not on branch head fixes issue #462
Marcin Kuzminski <marcin@python-works.com>
parents:
3061
diff
changeset
|
293 c.default_message = _('Edited file %s via RhodeCode') % (f_path) |
1305
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
294 c.f_path = f_path |
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
295 |
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
296 if r_post: |
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
297 |
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
298 old_content = c.file.content |
1306
6e1d24503383
Added support for ascendent characters for inMemoryCommit
Marcin Kuzminski <marcin@python-works.com>
parents:
1305
diff
changeset
|
299 sl = old_content.splitlines(1) |
6e1d24503383
Added support for ascendent characters for inMemoryCommit
Marcin Kuzminski <marcin@python-works.com>
parents:
1305
diff
changeset
|
300 first_line = sl[0] if sl else '' |
1305
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
301 # modes: 0 - Unix, 1 - Mac, 2 - DOS |
1306
6e1d24503383
Added support for ascendent characters for inMemoryCommit
Marcin Kuzminski <marcin@python-works.com>
parents:
1305
diff
changeset
|
302 mode = detect_mode(first_line, 0) |
1305
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
303 content = convert_line_endings(r_post.get('content'), mode) |
1306
6e1d24503383
Added support for ascendent characters for inMemoryCommit
Marcin Kuzminski <marcin@python-works.com>
parents:
1305
diff
changeset
|
304 |
3237
f5dd76e2a7af
disable file editing when not on branch head fixes issue #462
Marcin Kuzminski <marcin@python-works.com>
parents:
3061
diff
changeset
|
305 message = r_post.get('message') or c.default_message |
1311
6705eeebc41b
moved out commit into scm model, and added cache invalidation after commit.
Marcin Kuzminski <marcin@python-works.com>
parents:
1308
diff
changeset
|
306 author = self.rhodecode_user.full_contact |
1305
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
307 |
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
308 if content == old_content: |
3621
fe012b7df29d
missing files or bad files revisions should return 404s not redirects - ref #808
Marcin Kuzminski <marcin@python-works.com>
parents:
3591
diff
changeset
|
309 h.flash(_('No changes'), category='warning') |
1306
6e1d24503383
Added support for ascendent characters for inMemoryCommit
Marcin Kuzminski <marcin@python-works.com>
parents:
1305
diff
changeset
|
310 return redirect(url('changeset_home', repo_name=c.repo_name, |
6e1d24503383
Added support for ascendent characters for inMemoryCommit
Marcin Kuzminski <marcin@python-works.com>
parents:
1305
diff
changeset
|
311 revision='tip')) |
1305
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
312 try: |
1311
6705eeebc41b
moved out commit into scm model, and added cache invalidation after commit.
Marcin Kuzminski <marcin@python-works.com>
parents:
1308
diff
changeset
|
313 self.scm_model.commit_change(repo=c.rhodecode_repo, |
6705eeebc41b
moved out commit into scm model, and added cache invalidation after commit.
Marcin Kuzminski <marcin@python-works.com>
parents:
1308
diff
changeset
|
314 repo_name=repo_name, cs=c.cs, |
3487
b39cb4d4e0be
it's safer to user user_id for IMC
Marcin Kuzminski <marcin@python-works.com>
parents:
3440
diff
changeset
|
315 user=self.rhodecode_user.user_id, |
1311
6705eeebc41b
moved out commit into scm model, and added cache invalidation after commit.
Marcin Kuzminski <marcin@python-works.com>
parents:
1308
diff
changeset
|
316 author=author, message=message, |
6705eeebc41b
moved out commit into scm model, and added cache invalidation after commit.
Marcin Kuzminski <marcin@python-works.com>
parents:
1308
diff
changeset
|
317 content=content, f_path=f_path) |
2570 | 318 h.flash(_('Successfully committed to %s') % f_path, |
1305
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
319 category='success') |
1306
6e1d24503383
Added support for ascendent characters for inMemoryCommit
Marcin Kuzminski <marcin@python-works.com>
parents:
1305
diff
changeset
|
320 |
1311
6705eeebc41b
moved out commit into scm model, and added cache invalidation after commit.
Marcin Kuzminski <marcin@python-works.com>
parents:
1308
diff
changeset
|
321 except Exception: |
1305
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
322 log.error(traceback.format_exc()) |
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
323 h.flash(_('Error occurred during commit'), category='error') |
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
324 return redirect(url('changeset_home', |
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
325 repo_name=c.repo_name, revision='tip')) |
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
326 |
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
327 return render('files/files_edit.html') |
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
328 |
2457
01e005cabd4d
moved login required into seperate calls for files due to optional API access option
Marcin Kuzminski <marcin@python-works.com>
parents:
2456
diff
changeset
|
329 @LoginRequired() |
1483
7b67b0dcad6d
Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents:
1480
diff
changeset
|
330 @HasRepoPermissionAnyDecorator('repository.write', 'repository.admin') |
7b67b0dcad6d
Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents:
1480
diff
changeset
|
331 def add(self, repo_name, revision, f_path): |
2727
5899fe08f063
Forbid adding files and editing from web interface while repo is locked
Marcin Kuzminski <marcin@python-works.com>
parents:
2688
diff
changeset
|
332 |
5899fe08f063
Forbid adding files and editing from web interface while repo is locked
Marcin Kuzminski <marcin@python-works.com>
parents:
2688
diff
changeset
|
333 repo = Repository.get_by_repo_name(repo_name) |
5899fe08f063
Forbid adding files and editing from web interface while repo is locked
Marcin Kuzminski <marcin@python-works.com>
parents:
2688
diff
changeset
|
334 if repo.enable_locking and repo.locked[0]: |
5899fe08f063
Forbid adding files and editing from web interface while repo is locked
Marcin Kuzminski <marcin@python-works.com>
parents:
2688
diff
changeset
|
335 h.flash(_('This repository is has been locked by %s on %s') |
5899fe08f063
Forbid adding files and editing from web interface while repo is locked
Marcin Kuzminski <marcin@python-works.com>
parents:
2688
diff
changeset
|
336 % (h.person_by_id(repo.locked[0]), |
5899fe08f063
Forbid adding files and editing from web interface while repo is locked
Marcin Kuzminski <marcin@python-works.com>
parents:
2688
diff
changeset
|
337 h.fmt_date(h.time_to_datetime(repo.locked[1]))), |
5899fe08f063
Forbid adding files and editing from web interface while repo is locked
Marcin Kuzminski <marcin@python-works.com>
parents:
2688
diff
changeset
|
338 'warning') |
5899fe08f063
Forbid adding files and editing from web interface while repo is locked
Marcin Kuzminski <marcin@python-works.com>
parents:
2688
diff
changeset
|
339 return redirect(h.url('files_home', |
5899fe08f063
Forbid adding files and editing from web interface while repo is locked
Marcin Kuzminski <marcin@python-works.com>
parents:
2688
diff
changeset
|
340 repo_name=repo_name, revision='tip')) |
5899fe08f063
Forbid adding files and editing from web interface while repo is locked
Marcin Kuzminski <marcin@python-works.com>
parents:
2688
diff
changeset
|
341 |
1483
7b67b0dcad6d
Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents:
1480
diff
changeset
|
342 r_post = request.POST |
1485
269905fac50a
added uploading of files from web interface directly into repo
Marcin Kuzminski <marcin@python-works.com>
parents:
1484
diff
changeset
|
343 c.cs = self.__get_cs_or_redirect(revision, repo_name, |
1483
7b67b0dcad6d
Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents:
1480
diff
changeset
|
344 redirect_after=False) |
7b67b0dcad6d
Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents:
1480
diff
changeset
|
345 if c.cs is None: |
7b67b0dcad6d
Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents:
1480
diff
changeset
|
346 c.cs = EmptyChangeset(alias=c.rhodecode_repo.alias) |
3237
f5dd76e2a7af
disable file editing when not on branch head fixes issue #462
Marcin Kuzminski <marcin@python-works.com>
parents:
3061
diff
changeset
|
347 c.default_message = (_('Added file via RhodeCode')) |
1483
7b67b0dcad6d
Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents:
1480
diff
changeset
|
348 c.f_path = f_path |
7b67b0dcad6d
Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents:
1480
diff
changeset
|
349 |
7b67b0dcad6d
Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents:
1480
diff
changeset
|
350 if r_post: |
7b67b0dcad6d
Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents:
1480
diff
changeset
|
351 unix_mode = 0 |
7b67b0dcad6d
Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents:
1480
diff
changeset
|
352 content = convert_line_endings(r_post.get('content'), unix_mode) |
7b67b0dcad6d
Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents:
1480
diff
changeset
|
353 |
3237
f5dd76e2a7af
disable file editing when not on branch head fixes issue #462
Marcin Kuzminski <marcin@python-works.com>
parents:
3061
diff
changeset
|
354 message = r_post.get('message') or c.default_message |
3559
328eb707fe3f
added more strict checks for file path in add file controller
Marcin Kuzminski <marcin@python-works.com>
parents:
3547
diff
changeset
|
355 filename = r_post.get('filename') |
1483
7b67b0dcad6d
Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents:
1480
diff
changeset
|
356 location = r_post.get('location') |
1485
269905fac50a
added uploading of files from web interface directly into repo
Marcin Kuzminski <marcin@python-works.com>
parents:
1484
diff
changeset
|
357 file_obj = r_post.get('upload_file', None) |
269905fac50a
added uploading of files from web interface directly into repo
Marcin Kuzminski <marcin@python-works.com>
parents:
1484
diff
changeset
|
358 |
269905fac50a
added uploading of files from web interface directly into repo
Marcin Kuzminski <marcin@python-works.com>
parents:
1484
diff
changeset
|
359 if file_obj is not None and hasattr(file_obj, 'filename'): |
269905fac50a
added uploading of files from web interface directly into repo
Marcin Kuzminski <marcin@python-works.com>
parents:
1484
diff
changeset
|
360 filename = file_obj.filename |
269905fac50a
added uploading of files from web interface directly into repo
Marcin Kuzminski <marcin@python-works.com>
parents:
1484
diff
changeset
|
361 content = file_obj.file |
269905fac50a
added uploading of files from web interface directly into repo
Marcin Kuzminski <marcin@python-works.com>
parents:
1484
diff
changeset
|
362 |
1483
7b67b0dcad6d
Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents:
1480
diff
changeset
|
363 if not content: |
7b67b0dcad6d
Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents:
1480
diff
changeset
|
364 h.flash(_('No content'), category='warning') |
7b67b0dcad6d
Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents:
1480
diff
changeset
|
365 return redirect(url('changeset_home', repo_name=c.repo_name, |
7b67b0dcad6d
Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents:
1480
diff
changeset
|
366 revision='tip')) |
1484
1db451a44504
fixed small issues with adding new filenodes
Marcin Kuzminski <marcin@python-works.com>
parents:
1483
diff
changeset
|
367 if not filename: |
1db451a44504
fixed small issues with adding new filenodes
Marcin Kuzminski <marcin@python-works.com>
parents:
1483
diff
changeset
|
368 h.flash(_('No filename'), category='warning') |
1db451a44504
fixed small issues with adding new filenodes
Marcin Kuzminski <marcin@python-works.com>
parents:
1483
diff
changeset
|
369 return redirect(url('changeset_home', repo_name=c.repo_name, |
1485
269905fac50a
added uploading of files from web interface directly into repo
Marcin Kuzminski <marcin@python-works.com>
parents:
1484
diff
changeset
|
370 revision='tip')) |
3559
328eb707fe3f
added more strict checks for file path in add file controller
Marcin Kuzminski <marcin@python-works.com>
parents:
3547
diff
changeset
|
371 if location.startswith('/') or location.startswith('.') or '../' in location: |
328eb707fe3f
added more strict checks for file path in add file controller
Marcin Kuzminski <marcin@python-works.com>
parents:
3547
diff
changeset
|
372 h.flash(_('location must be relative path and must not ' |
328eb707fe3f
added more strict checks for file path in add file controller
Marcin Kuzminski <marcin@python-works.com>
parents:
3547
diff
changeset
|
373 'contain .. in path'), category='warning') |
328eb707fe3f
added more strict checks for file path in add file controller
Marcin Kuzminski <marcin@python-works.com>
parents:
3547
diff
changeset
|
374 return redirect(url('changeset_home', repo_name=c.repo_name, |
328eb707fe3f
added more strict checks for file path in add file controller
Marcin Kuzminski <marcin@python-works.com>
parents:
3547
diff
changeset
|
375 revision='tip')) |
3591
2b3a553eaaad
don't normalize path if it's empty on adding a file throught web interface
Marcin Kuzminski <marcin@python-works.com>
parents:
3573
diff
changeset
|
376 if location: |
2b3a553eaaad
don't normalize path if it's empty on adding a file throught web interface
Marcin Kuzminski <marcin@python-works.com>
parents:
3573
diff
changeset
|
377 location = os.path.normpath(location) |
3559
328eb707fe3f
added more strict checks for file path in add file controller
Marcin Kuzminski <marcin@python-works.com>
parents:
3547
diff
changeset
|
378 filename = os.path.basename(filename) |
328eb707fe3f
added more strict checks for file path in add file controller
Marcin Kuzminski <marcin@python-works.com>
parents:
3547
diff
changeset
|
379 node_path = os.path.join(location, filename) |
328eb707fe3f
added more strict checks for file path in add file controller
Marcin Kuzminski <marcin@python-works.com>
parents:
3547
diff
changeset
|
380 author = self.rhodecode_user.full_contact |
1483
7b67b0dcad6d
Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents:
1480
diff
changeset
|
381 |
7b67b0dcad6d
Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents:
1480
diff
changeset
|
382 try: |
7b67b0dcad6d
Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents:
1480
diff
changeset
|
383 self.scm_model.create_node(repo=c.rhodecode_repo, |
2199
31ebf7010566
various fixes for git and mercurial with InMemoryCommit backend and non-ascii files
Marcin Kuzminski <marcin@python-works.com>
parents:
2177
diff
changeset
|
384 repo_name=repo_name, cs=c.cs, |
3487
b39cb4d4e0be
it's safer to user user_id for IMC
Marcin Kuzminski <marcin@python-works.com>
parents:
3440
diff
changeset
|
385 user=self.rhodecode_user.user_id, |
2199
31ebf7010566
various fixes for git and mercurial with InMemoryCommit backend and non-ascii files
Marcin Kuzminski <marcin@python-works.com>
parents:
2177
diff
changeset
|
386 author=author, message=message, |
31ebf7010566
various fixes for git and mercurial with InMemoryCommit backend and non-ascii files
Marcin Kuzminski <marcin@python-works.com>
parents:
2177
diff
changeset
|
387 content=content, f_path=node_path) |
2570 | 388 h.flash(_('Successfully committed to %s') % node_path, |
1483
7b67b0dcad6d
Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents:
1480
diff
changeset
|
389 category='success') |
3559
328eb707fe3f
added more strict checks for file path in add file controller
Marcin Kuzminski <marcin@python-works.com>
parents:
3547
diff
changeset
|
390 except (NodeError, NodeAlreadyExistsError), e: |
1485
269905fac50a
added uploading of files from web interface directly into repo
Marcin Kuzminski <marcin@python-works.com>
parents:
1484
diff
changeset
|
391 h.flash(_(e), category='error') |
1483
7b67b0dcad6d
Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents:
1480
diff
changeset
|
392 except Exception: |
7b67b0dcad6d
Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents:
1480
diff
changeset
|
393 log.error(traceback.format_exc()) |
7b67b0dcad6d
Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents:
1480
diff
changeset
|
394 h.flash(_('Error occurred during commit'), category='error') |
7b67b0dcad6d
Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents:
1480
diff
changeset
|
395 return redirect(url('changeset_home', |
7b67b0dcad6d
Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents:
1480
diff
changeset
|
396 repo_name=c.repo_name, revision='tip')) |
7b67b0dcad6d
Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents:
1480
diff
changeset
|
397 |
7b67b0dcad6d
Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents:
1480
diff
changeset
|
398 return render('files/files_add.html') |
7b67b0dcad6d
Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents:
1480
diff
changeset
|
399 |
2457
01e005cabd4d
moved login required into seperate calls for files due to optional API access option
Marcin Kuzminski <marcin@python-works.com>
parents:
2456
diff
changeset
|
400 @LoginRequired() |
1305
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
401 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', |
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
402 'repository.admin') |
872
b956e6f415a2
implemented #91,
Marcin Kuzminski <marcin@python-works.com>
parents:
813
diff
changeset
|
403 def archivefile(self, repo_name, fname): |
945
05b59c48556f
fixed error when trying to make download on empty repository
Marcin Kuzminski <marcin@python-works.com>
parents:
942
diff
changeset
|
404 |
942
32318ec7bfc1
added branch/tag options to download links in summary
Marcin Kuzminski <marcin@python-works.com>
parents:
915
diff
changeset
|
405 fileformat = None |
32318ec7bfc1
added branch/tag options to download links in summary
Marcin Kuzminski <marcin@python-works.com>
parents:
915
diff
changeset
|
406 revision = None |
948
85ee0ea183e7
fixed archival in rhodecode to use new functions from vcs
Marcin Kuzminski <marcin@python-works.com>
parents:
945
diff
changeset
|
407 ext = None |
1450
2a8bf2a3da98
fixes #214 added support for downloading subrepos in download menu.
Marcin Kuzminski <marcin@python-works.com>
parents:
1401
diff
changeset
|
408 subrepos = request.GET.get('subrepos') == 'true' |
945
05b59c48556f
fixed error when trying to make download on empty repository
Marcin Kuzminski <marcin@python-works.com>
parents:
942
diff
changeset
|
409 |
1480
daa29da0f783
fixes for vcs settings module
Marcin Kuzminski <marcin@python-works.com>
parents:
1452
diff
changeset
|
410 for a_type, ext_data in settings.ARCHIVE_SPECS.items(): |
948
85ee0ea183e7
fixed archival in rhodecode to use new functions from vcs
Marcin Kuzminski <marcin@python-works.com>
parents:
945
diff
changeset
|
411 archive_spec = fname.split(ext_data[1]) |
85ee0ea183e7
fixed archival in rhodecode to use new functions from vcs
Marcin Kuzminski <marcin@python-works.com>
parents:
945
diff
changeset
|
412 if len(archive_spec) == 2 and archive_spec[1] == '': |
85ee0ea183e7
fixed archival in rhodecode to use new functions from vcs
Marcin Kuzminski <marcin@python-works.com>
parents:
945
diff
changeset
|
413 fileformat = a_type or ext_data[1] |
942
32318ec7bfc1
added branch/tag options to download links in summary
Marcin Kuzminski <marcin@python-works.com>
parents:
915
diff
changeset
|
414 revision = archive_spec[0] |
948
85ee0ea183e7
fixed archival in rhodecode to use new functions from vcs
Marcin Kuzminski <marcin@python-works.com>
parents:
945
diff
changeset
|
415 ext = ext_data[1] |
872
b956e6f415a2
implemented #91,
Marcin Kuzminski <marcin@python-works.com>
parents:
813
diff
changeset
|
416 |
b956e6f415a2
implemented #91,
Marcin Kuzminski <marcin@python-works.com>
parents:
813
diff
changeset
|
417 try: |
1045
3fc9183e05dd
another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents:
1044
diff
changeset
|
418 dbrepo = RepoModel().get_by_repo_name(repo_name) |
3625
260a7a01b054
follow Python conventions for boolean values
Mads Kiilerich <madski@unity3d.com>
parents:
3621
diff
changeset
|
419 if not dbrepo.enable_downloads: |
962
72f008ed9b18
implemented #84 downloads can be enabled/disabled per each repository from now.
Marcin Kuzminski <marcin@python-works.com>
parents:
961
diff
changeset
|
420 return _('downloads disabled') |
72f008ed9b18
implemented #84 downloads can be enabled/disabled per each repository from now.
Marcin Kuzminski <marcin@python-works.com>
parents:
961
diff
changeset
|
421 |
1809
ef0066e95be5
fix archive download for git
Marcin Kuzminski <marcin@python-works.com>
parents:
1789
diff
changeset
|
422 if c.rhodecode_repo.alias == 'hg': |
ef0066e95be5
fix archive download for git
Marcin Kuzminski <marcin@python-works.com>
parents:
1789
diff
changeset
|
423 # patch and reset hooks section of UI config to not run any |
ef0066e95be5
fix archive download for git
Marcin Kuzminski <marcin@python-works.com>
parents:
1789
diff
changeset
|
424 # hooks on fetching archives with subrepos |
ef0066e95be5
fix archive download for git
Marcin Kuzminski <marcin@python-works.com>
parents:
1789
diff
changeset
|
425 for k, v in c.rhodecode_repo._repo.ui.configitems('hooks'): |
ef0066e95be5
fix archive download for git
Marcin Kuzminski <marcin@python-works.com>
parents:
1789
diff
changeset
|
426 c.rhodecode_repo._repo.ui.setconfig('hooks', k, None) |
1664
65386911df2a
fixes issue with mercurial 2.0 and archival of subrepos.
Marcin Kuzminski <marcin@python-works.com>
parents:
1568
diff
changeset
|
427 |
1045
3fc9183e05dd
another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents:
1044
diff
changeset
|
428 cs = c.rhodecode_repo.get_changeset(revision) |
1480
daa29da0f783
fixes for vcs settings module
Marcin Kuzminski <marcin@python-works.com>
parents:
1452
diff
changeset
|
429 content_type = settings.ARCHIVE_SPECS[fileformat][0] |
872
b956e6f415a2
implemented #91,
Marcin Kuzminski <marcin@python-works.com>
parents:
813
diff
changeset
|
430 except ChangesetDoesNotExistError: |
b956e6f415a2
implemented #91,
Marcin Kuzminski <marcin@python-works.com>
parents:
813
diff
changeset
|
431 return _('Unknown revision %s') % revision |
945
05b59c48556f
fixed error when trying to make download on empty repository
Marcin Kuzminski <marcin@python-works.com>
parents:
942
diff
changeset
|
432 except EmptyRepositoryError: |
05b59c48556f
fixed error when trying to make download on empty repository
Marcin Kuzminski <marcin@python-works.com>
parents:
942
diff
changeset
|
433 return _('Empty repository') |
961
840ca7492dbe
fixed typo in exception
Marcin Kuzminski <marcin@python-works.com>
parents:
953
diff
changeset
|
434 except (ImproperArchiveTypeError, KeyError): |
948
85ee0ea183e7
fixed archival in rhodecode to use new functions from vcs
Marcin Kuzminski <marcin@python-works.com>
parents:
945
diff
changeset
|
435 return _('Unknown archive type') |
3490
c0ac34b8eb07
initial version of #788 tarball cache
Marcin Kuzminski <marcin@python-works.com>
parents:
3488
diff
changeset
|
436 # archive cache |
c0ac34b8eb07
initial version of #788 tarball cache
Marcin Kuzminski <marcin@python-works.com>
parents:
3488
diff
changeset
|
437 from rhodecode import CONFIG |
c0ac34b8eb07
initial version of #788 tarball cache
Marcin Kuzminski <marcin@python-works.com>
parents:
3488
diff
changeset
|
438 rev_name = cs.raw_id[:12] |
c0ac34b8eb07
initial version of #788 tarball cache
Marcin Kuzminski <marcin@python-works.com>
parents:
3488
diff
changeset
|
439 archive_name = '%s-%s%s' % (safe_str(repo_name.replace('/', '_')), |
c0ac34b8eb07
initial version of #788 tarball cache
Marcin Kuzminski <marcin@python-works.com>
parents:
3488
diff
changeset
|
440 safe_str(rev_name), ext) |
872
b956e6f415a2
implemented #91,
Marcin Kuzminski <marcin@python-works.com>
parents:
813
diff
changeset
|
441 |
3490
c0ac34b8eb07
initial version of #788 tarball cache
Marcin Kuzminski <marcin@python-works.com>
parents:
3488
diff
changeset
|
442 use_cached_archive = False # defines if we use cached version of archive |
c0ac34b8eb07
initial version of #788 tarball cache
Marcin Kuzminski <marcin@python-works.com>
parents:
3488
diff
changeset
|
443 archive_cache_enabled = CONFIG.get('archive_cache_dir') |
c0ac34b8eb07
initial version of #788 tarball cache
Marcin Kuzminski <marcin@python-works.com>
parents:
3488
diff
changeset
|
444 if not subrepos and archive_cache_enabled: |
c0ac34b8eb07
initial version of #788 tarball cache
Marcin Kuzminski <marcin@python-works.com>
parents:
3488
diff
changeset
|
445 #check if we it's ok to write |
c0ac34b8eb07
initial version of #788 tarball cache
Marcin Kuzminski <marcin@python-works.com>
parents:
3488
diff
changeset
|
446 if not os.path.isdir(CONFIG['archive_cache_dir']): |
c0ac34b8eb07
initial version of #788 tarball cache
Marcin Kuzminski <marcin@python-works.com>
parents:
3488
diff
changeset
|
447 os.makedirs(CONFIG['archive_cache_dir']) |
c0ac34b8eb07
initial version of #788 tarball cache
Marcin Kuzminski <marcin@python-works.com>
parents:
3488
diff
changeset
|
448 cached_archive_path = os.path.join(CONFIG['archive_cache_dir'], archive_name) |
c0ac34b8eb07
initial version of #788 tarball cache
Marcin Kuzminski <marcin@python-works.com>
parents:
3488
diff
changeset
|
449 if os.path.isfile(cached_archive_path): |
c0ac34b8eb07
initial version of #788 tarball cache
Marcin Kuzminski <marcin@python-works.com>
parents:
3488
diff
changeset
|
450 log.debug('Found cached archive in %s' % cached_archive_path) |
c0ac34b8eb07
initial version of #788 tarball cache
Marcin Kuzminski <marcin@python-works.com>
parents:
3488
diff
changeset
|
451 fd, archive = None, cached_archive_path |
c0ac34b8eb07
initial version of #788 tarball cache
Marcin Kuzminski <marcin@python-works.com>
parents:
3488
diff
changeset
|
452 use_cached_archive = True |
c0ac34b8eb07
initial version of #788 tarball cache
Marcin Kuzminski <marcin@python-works.com>
parents:
3488
diff
changeset
|
453 else: |
c0ac34b8eb07
initial version of #788 tarball cache
Marcin Kuzminski <marcin@python-works.com>
parents:
3488
diff
changeset
|
454 log.debug('Archive %s is not yet cached' % (archive_name)) |
c0ac34b8eb07
initial version of #788 tarball cache
Marcin Kuzminski <marcin@python-works.com>
parents:
3488
diff
changeset
|
455 |
c0ac34b8eb07
initial version of #788 tarball cache
Marcin Kuzminski <marcin@python-works.com>
parents:
3488
diff
changeset
|
456 if not use_cached_archive: |
c0ac34b8eb07
initial version of #788 tarball cache
Marcin Kuzminski <marcin@python-works.com>
parents:
3488
diff
changeset
|
457 #generate new archive |
c0ac34b8eb07
initial version of #788 tarball cache
Marcin Kuzminski <marcin@python-works.com>
parents:
3488
diff
changeset
|
458 try: |
c0ac34b8eb07
initial version of #788 tarball cache
Marcin Kuzminski <marcin@python-works.com>
parents:
3488
diff
changeset
|
459 fd, archive = tempfile.mkstemp() |
c0ac34b8eb07
initial version of #788 tarball cache
Marcin Kuzminski <marcin@python-works.com>
parents:
3488
diff
changeset
|
460 t = open(archive, 'wb') |
c0ac34b8eb07
initial version of #788 tarball cache
Marcin Kuzminski <marcin@python-works.com>
parents:
3488
diff
changeset
|
461 log.debug('Creating new temp archive in %s' % archive) |
c0ac34b8eb07
initial version of #788 tarball cache
Marcin Kuzminski <marcin@python-works.com>
parents:
3488
diff
changeset
|
462 cs.fill_archive(stream=t, kind=fileformat, subrepos=subrepos) |
c0ac34b8eb07
initial version of #788 tarball cache
Marcin Kuzminski <marcin@python-works.com>
parents:
3488
diff
changeset
|
463 if archive_cache_enabled: |
c0ac34b8eb07
initial version of #788 tarball cache
Marcin Kuzminski <marcin@python-works.com>
parents:
3488
diff
changeset
|
464 #if we generated the archive and use cache rename that |
c0ac34b8eb07
initial version of #788 tarball cache
Marcin Kuzminski <marcin@python-works.com>
parents:
3488
diff
changeset
|
465 log.debug('Storing new archive in %s' % cached_archive_path) |
c0ac34b8eb07
initial version of #788 tarball cache
Marcin Kuzminski <marcin@python-works.com>
parents:
3488
diff
changeset
|
466 shutil.move(archive, cached_archive_path) |
c0ac34b8eb07
initial version of #788 tarball cache
Marcin Kuzminski <marcin@python-works.com>
parents:
3488
diff
changeset
|
467 archive = cached_archive_path |
c0ac34b8eb07
initial version of #788 tarball cache
Marcin Kuzminski <marcin@python-works.com>
parents:
3488
diff
changeset
|
468 finally: |
c0ac34b8eb07
initial version of #788 tarball cache
Marcin Kuzminski <marcin@python-works.com>
parents:
3488
diff
changeset
|
469 t.close() |
2294
3c1d991755df
Use paste fileapp to properly send the archive size
Marcin Kuzminski <marcin@python-works.com>
parents:
2291
diff
changeset
|
470 |
2318
058e2743e7b7
fixes issue #455 Creating an archive generates an exception on Windows
Marcin Kuzminski <marcin@python-works.com>
parents:
2294
diff
changeset
|
471 def get_chunked_archive(archive): |
058e2743e7b7
fixes issue #455 Creating an archive generates an exception on Windows
Marcin Kuzminski <marcin@python-works.com>
parents:
2294
diff
changeset
|
472 stream = open(archive, 'rb') |
058e2743e7b7
fixes issue #455 Creating an archive generates an exception on Windows
Marcin Kuzminski <marcin@python-works.com>
parents:
2294
diff
changeset
|
473 while True: |
058e2743e7b7
fixes issue #455 Creating an archive generates an exception on Windows
Marcin Kuzminski <marcin@python-works.com>
parents:
2294
diff
changeset
|
474 data = stream.read(16 * 1024) |
058e2743e7b7
fixes issue #455 Creating an archive generates an exception on Windows
Marcin Kuzminski <marcin@python-works.com>
parents:
2294
diff
changeset
|
475 if not data: |
058e2743e7b7
fixes issue #455 Creating an archive generates an exception on Windows
Marcin Kuzminski <marcin@python-works.com>
parents:
2294
diff
changeset
|
476 stream.close() |
3490
c0ac34b8eb07
initial version of #788 tarball cache
Marcin Kuzminski <marcin@python-works.com>
parents:
3488
diff
changeset
|
477 if fd: # fd means we used temporary file |
c0ac34b8eb07
initial version of #788 tarball cache
Marcin Kuzminski <marcin@python-works.com>
parents:
3488
diff
changeset
|
478 os.close(fd) |
c0ac34b8eb07
initial version of #788 tarball cache
Marcin Kuzminski <marcin@python-works.com>
parents:
3488
diff
changeset
|
479 if not archive_cache_enabled: |
c0ac34b8eb07
initial version of #788 tarball cache
Marcin Kuzminski <marcin@python-works.com>
parents:
3488
diff
changeset
|
480 log.debug('Destroing temp archive %s' % archive) |
c0ac34b8eb07
initial version of #788 tarball cache
Marcin Kuzminski <marcin@python-works.com>
parents:
3488
diff
changeset
|
481 os.remove(archive) |
2318
058e2743e7b7
fixes issue #455 Creating an archive generates an exception on Windows
Marcin Kuzminski <marcin@python-works.com>
parents:
2294
diff
changeset
|
482 break |
058e2743e7b7
fixes issue #455 Creating an archive generates an exception on Windows
Marcin Kuzminski <marcin@python-works.com>
parents:
2294
diff
changeset
|
483 yield data |
1308
73b2fc324c1e
changes for archivals in rhodecode. Also made it work for git that way
Marcin Kuzminski <marcin@python-works.com>
parents:
1307
diff
changeset
|
484 |
3490
c0ac34b8eb07
initial version of #788 tarball cache
Marcin Kuzminski <marcin@python-works.com>
parents:
3488
diff
changeset
|
485 response.content_disposition = str('attachment; filename=%s' % (archive_name)) |
2318
058e2743e7b7
fixes issue #455 Creating an archive generates an exception on Windows
Marcin Kuzminski <marcin@python-works.com>
parents:
2294
diff
changeset
|
486 response.content_type = str(content_type) |
058e2743e7b7
fixes issue #455 Creating an archive generates an exception on Windows
Marcin Kuzminski <marcin@python-works.com>
parents:
2294
diff
changeset
|
487 return get_chunked_archive(archive) |
948
85ee0ea183e7
fixed archival in rhodecode to use new functions from vcs
Marcin Kuzminski <marcin@python-works.com>
parents:
945
diff
changeset
|
488 |
2457
01e005cabd4d
moved login required into seperate calls for files due to optional API access option
Marcin Kuzminski <marcin@python-works.com>
parents:
2456
diff
changeset
|
489 @LoginRequired() |
1305
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
490 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', |
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
491 'repository.admin') |
129
42d46deb124d
implemented simple diffs for history of files.
Marcin Kuzminski <marcin@python-works.com>
parents:
128
diff
changeset
|
492 def diff(self, repo_name, f_path): |
1752
f28dc032adf0
Added handling of ignore whitespace flag in changesets
Marcin Kuzminski <marcin@python-works.com>
parents:
1737
diff
changeset
|
493 ignore_whitespace = request.GET.get('ignorews') == '1' |
1768
5610fd9b6803
added line context control to diffs
Marcin Kuzminski <marcin@python-works.com>
parents:
1753
diff
changeset
|
494 line_context = request.GET.get('context', 3) |
1789
17caf4efe15c
implements #308 rewrote diffs to enable displaying full diff on each file
Marcin Kuzminski <marcin@python-works.com>
parents:
1768
diff
changeset
|
495 diff1 = request.GET.get('diff1', '') |
17caf4efe15c
implements #308 rewrote diffs to enable displaying full diff on each file
Marcin Kuzminski <marcin@python-works.com>
parents:
1768
diff
changeset
|
496 diff2 = request.GET.get('diff2', '') |
337
fa3835d34fc1
fixed bug when diff command was different than available options
Marcin Kuzminski <marcin@python-works.com>
parents:
335
diff
changeset
|
497 c.action = request.GET.get('diff') |
131
49c7e191c2cd
Implemented mercurial style diff-lib
Marcin Kuzminski <marcin@python-works.com>
parents:
130
diff
changeset
|
498 c.no_changes = diff1 == diff2 |
129
42d46deb124d
implemented simple diffs for history of files.
Marcin Kuzminski <marcin@python-works.com>
parents:
128
diff
changeset
|
499 c.f_path = f_path |
1273
64cb9612f9aa
Added show as raw into big diff
Marcin Kuzminski <marcin@python-works.com>
parents:
1245
diff
changeset
|
500 c.big_diff = False |
1789
17caf4efe15c
implements #308 rewrote diffs to enable displaying full diff on each file
Marcin Kuzminski <marcin@python-works.com>
parents:
1768
diff
changeset
|
501 c.anchor_url = anchor_url |
17caf4efe15c
implements #308 rewrote diffs to enable displaying full diff on each file
Marcin Kuzminski <marcin@python-works.com>
parents:
1768
diff
changeset
|
502 c.ignorews_url = _ignorews_url |
17caf4efe15c
implements #308 rewrote diffs to enable displaying full diff on each file
Marcin Kuzminski <marcin@python-works.com>
parents:
1768
diff
changeset
|
503 c.context_url = _context_url |
17caf4efe15c
implements #308 rewrote diffs to enable displaying full diff on each file
Marcin Kuzminski <marcin@python-works.com>
parents:
1768
diff
changeset
|
504 c.changes = OrderedDict() |
17caf4efe15c
implements #308 rewrote diffs to enable displaying full diff on each file
Marcin Kuzminski <marcin@python-works.com>
parents:
1768
diff
changeset
|
505 c.changes[diff2] = [] |
2931
4c7cc3a4c330
fixed issue with show at revision button. Some JS were not properly loaded due to ajaxified files view.
Marcin Kuzminski <marcin@python-works.com>
parents:
2930
diff
changeset
|
506 |
4c7cc3a4c330
fixed issue with show at revision button. Some JS were not properly loaded due to ajaxified files view.
Marcin Kuzminski <marcin@python-works.com>
parents:
2930
diff
changeset
|
507 #special case if we want a show rev only, it's impl here |
4c7cc3a4c330
fixed issue with show at revision button. Some JS were not properly loaded due to ajaxified files view.
Marcin Kuzminski <marcin@python-works.com>
parents:
2930
diff
changeset
|
508 #to reduce JS and callbacks |
2995
32471bd1f4ee
Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents:
2981
diff
changeset
|
509 |
2931
4c7cc3a4c330
fixed issue with show at revision button. Some JS were not properly loaded due to ajaxified files view.
Marcin Kuzminski <marcin@python-works.com>
parents:
2930
diff
changeset
|
510 if request.GET.get('show_rev'): |
4c7cc3a4c330
fixed issue with show at revision button. Some JS were not properly loaded due to ajaxified files view.
Marcin Kuzminski <marcin@python-works.com>
parents:
2930
diff
changeset
|
511 if str2bool(request.GET.get('annotate', 'False')): |
4c7cc3a4c330
fixed issue with show at revision button. Some JS were not properly loaded due to ajaxified files view.
Marcin Kuzminski <marcin@python-works.com>
parents:
2930
diff
changeset
|
512 _url = url('files_annotate_home', repo_name=c.repo_name, |
4c7cc3a4c330
fixed issue with show at revision button. Some JS were not properly loaded due to ajaxified files view.
Marcin Kuzminski <marcin@python-works.com>
parents:
2930
diff
changeset
|
513 revision=diff1, f_path=c.f_path) |
4c7cc3a4c330
fixed issue with show at revision button. Some JS were not properly loaded due to ajaxified files view.
Marcin Kuzminski <marcin@python-works.com>
parents:
2930
diff
changeset
|
514 else: |
4c7cc3a4c330
fixed issue with show at revision button. Some JS were not properly loaded due to ajaxified files view.
Marcin Kuzminski <marcin@python-works.com>
parents:
2930
diff
changeset
|
515 _url = url('files_home', repo_name=c.repo_name, |
4c7cc3a4c330
fixed issue with show at revision button. Some JS were not properly loaded due to ajaxified files view.
Marcin Kuzminski <marcin@python-works.com>
parents:
2930
diff
changeset
|
516 revision=diff1, f_path=c.f_path) |
4c7cc3a4c330
fixed issue with show at revision button. Some JS were not properly loaded due to ajaxified files view.
Marcin Kuzminski <marcin@python-works.com>
parents:
2930
diff
changeset
|
517 |
4c7cc3a4c330
fixed issue with show at revision button. Some JS were not properly loaded due to ajaxified files view.
Marcin Kuzminski <marcin@python-works.com>
parents:
2930
diff
changeset
|
518 return redirect(_url) |
275
2d61aa00e855
fixed bugs when putting empty or unknown changesets into diff
Marcin Kuzminski <marcin@python-works.com>
parents:
272
diff
changeset
|
519 try: |
544
d8778cde98f0
added limits to single file diffs
Marcin Kuzminski <marcin@python-works.com>
parents:
512
diff
changeset
|
520 if diff1 not in ['', None, 'None', '0' * 12, '0' * 40]: |
1045
3fc9183e05dd
another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents:
1044
diff
changeset
|
521 c.changeset_1 = c.rhodecode_repo.get_changeset(diff1) |
2995
32471bd1f4ee
Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents:
2981
diff
changeset
|
522 try: |
32471bd1f4ee
Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents:
2981
diff
changeset
|
523 node1 = c.changeset_1.get_node(f_path) |
3440
4725d097c3c0
check if given f_path in diff is not a dir by any chance
Marcin Kuzminski <marcin@python-works.com>
parents:
3267
diff
changeset
|
524 if node1.is_dir(): |
3563
8d8c4dddd174
fixed bad raise statement
Marcin Kuzminski <marcin@python-works.com>
parents:
3559
diff
changeset
|
525 raise NodeError('%s path is a %s not a file' |
8d8c4dddd174
fixed bad raise statement
Marcin Kuzminski <marcin@python-works.com>
parents:
3559
diff
changeset
|
526 % (node1, type(node1))) |
2995
32471bd1f4ee
Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents:
2981
diff
changeset
|
527 except NodeDoesNotExistError: |
32471bd1f4ee
Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents:
2981
diff
changeset
|
528 c.changeset_1 = EmptyChangeset(cs=diff1, |
32471bd1f4ee
Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents:
2981
diff
changeset
|
529 revision=c.changeset_1.revision, |
32471bd1f4ee
Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents:
2981
diff
changeset
|
530 repo=c.rhodecode_repo) |
32471bd1f4ee
Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents:
2981
diff
changeset
|
531 node1 = FileNode(f_path, '', changeset=c.changeset_1) |
275
2d61aa00e855
fixed bugs when putting empty or unknown changesets into diff
Marcin Kuzminski <marcin@python-works.com>
parents:
272
diff
changeset
|
532 else: |
1224
e76833cd555a
files: fixes error when passing a diff without parameters and caused server crash
Marcin Kuzminski <marcin@python-works.com>
parents:
1212
diff
changeset
|
533 c.changeset_1 = EmptyChangeset(repo=c.rhodecode_repo) |
2995
32471bd1f4ee
Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents:
2981
diff
changeset
|
534 node1 = FileNode(f_path, '', changeset=c.changeset_1) |
636
ffd07396d315
Fixes for raw_id, needed for git
Marcin Kuzminski <marcin@python-works.com>
parents:
629
diff
changeset
|
535 |
544
d8778cde98f0
added limits to single file diffs
Marcin Kuzminski <marcin@python-works.com>
parents:
512
diff
changeset
|
536 if diff2 not in ['', None, 'None', '0' * 12, '0' * 40]: |
1045
3fc9183e05dd
another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents:
1044
diff
changeset
|
537 c.changeset_2 = c.rhodecode_repo.get_changeset(diff2) |
2995
32471bd1f4ee
Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents:
2981
diff
changeset
|
538 try: |
32471bd1f4ee
Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents:
2981
diff
changeset
|
539 node2 = c.changeset_2.get_node(f_path) |
3563
8d8c4dddd174
fixed bad raise statement
Marcin Kuzminski <marcin@python-works.com>
parents:
3559
diff
changeset
|
540 if node2.is_dir(): |
8d8c4dddd174
fixed bad raise statement
Marcin Kuzminski <marcin@python-works.com>
parents:
3559
diff
changeset
|
541 raise NodeError('%s path is a %s not a file' |
8d8c4dddd174
fixed bad raise statement
Marcin Kuzminski <marcin@python-works.com>
parents:
3559
diff
changeset
|
542 % (node2, type(node2))) |
2995
32471bd1f4ee
Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents:
2981
diff
changeset
|
543 except NodeDoesNotExistError: |
32471bd1f4ee
Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents:
2981
diff
changeset
|
544 c.changeset_2 = EmptyChangeset(cs=diff2, |
32471bd1f4ee
Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents:
2981
diff
changeset
|
545 revision=c.changeset_2.revision, |
32471bd1f4ee
Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents:
2981
diff
changeset
|
546 repo=c.rhodecode_repo) |
32471bd1f4ee
Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents:
2981
diff
changeset
|
547 node2 = FileNode(f_path, '', changeset=c.changeset_2) |
275
2d61aa00e855
fixed bugs when putting empty or unknown changesets into diff
Marcin Kuzminski <marcin@python-works.com>
parents:
272
diff
changeset
|
548 else: |
1224
e76833cd555a
files: fixes error when passing a diff without parameters and caused server crash
Marcin Kuzminski <marcin@python-works.com>
parents:
1212
diff
changeset
|
549 c.changeset_2 = EmptyChangeset(repo=c.rhodecode_repo) |
2995
32471bd1f4ee
Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents:
2981
diff
changeset
|
550 node2 = FileNode(f_path, '', changeset=c.changeset_2) |
3037
789f20683559
fix error when diff path is a directory, edge case generated by google bots
Marcin Kuzminski <marcin@python-works.com>
parents:
3009
diff
changeset
|
551 except (RepositoryError, NodeError): |
2995
32471bd1f4ee
Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents:
2981
diff
changeset
|
552 log.error(traceback.format_exc()) |
1818
cf51bbfb120e
auto white-space removal
Marcin Kuzminski <marcin@python-works.com>
parents:
1810
diff
changeset
|
553 return redirect(url('files_home', repo_name=c.repo_name, |
1789
17caf4efe15c
implements #308 rewrote diffs to enable displaying full diff on each file
Marcin Kuzminski <marcin@python-works.com>
parents:
1768
diff
changeset
|
554 f_path=f_path)) |
275
2d61aa00e855
fixed bugs when putting empty or unknown changesets into diff
Marcin Kuzminski <marcin@python-works.com>
parents:
272
diff
changeset
|
555 |
337
fa3835d34fc1
fixed bug when diff command was different than available options
Marcin Kuzminski <marcin@python-works.com>
parents:
335
diff
changeset
|
556 if c.action == 'download': |
1753
1d1ccb873d00
moved soon-to-be-deleted code from vcs to rhodecode
Marcin Kuzminski <marcin@python-works.com>
parents:
1752
diff
changeset
|
557 _diff = diffs.get_gitdiff(node1, node2, |
1768
5610fd9b6803
added line context control to diffs
Marcin Kuzminski <marcin@python-works.com>
parents:
1753
diff
changeset
|
558 ignore_whitespace=ignore_whitespace, |
5610fd9b6803
added line context control to diffs
Marcin Kuzminski <marcin@python-works.com>
parents:
1753
diff
changeset
|
559 context=line_context) |
1789
17caf4efe15c
implements #308 rewrote diffs to enable displaying full diff on each file
Marcin Kuzminski <marcin@python-works.com>
parents:
1768
diff
changeset
|
560 diff = diffs.DiffProcessor(_diff, format='gitdiff') |
1044
f3402cb92fdf
changed raw and download diffs to gitdiff
Marcin Kuzminski <marcin@python-works.com>
parents:
1043
diff
changeset
|
561 |
160
0f7f93df5802
implemented rawdiff and diff download into diff view.
Marcin Kuzminski <marcin@python-works.com>
parents:
158
diff
changeset
|
562 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
|
563 response.content_type = 'text/plain' |
2083
60115135b77e
fixed raw_changeset for git, accidentally it was generated with hg patch headers
Marcin Kuzminski <marcin@python-works.com>
parents:
2046
diff
changeset
|
564 response.content_disposition = ( |
60115135b77e
fixed raw_changeset for git, accidentally it was generated with hg patch headers
Marcin Kuzminski <marcin@python-works.com>
parents:
2046
diff
changeset
|
565 'attachment; filename=%s' % diff_name |
60115135b77e
fixed raw_changeset for git, accidentally it was generated with hg patch headers
Marcin Kuzminski <marcin@python-works.com>
parents:
2046
diff
changeset
|
566 ) |
2995
32471bd1f4ee
Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents:
2981
diff
changeset
|
567 return diff.as_raw() |
636
ffd07396d315
Fixes for raw_id, needed for git
Marcin Kuzminski <marcin@python-works.com>
parents:
629
diff
changeset
|
568 |
337
fa3835d34fc1
fixed bug when diff command was different than available options
Marcin Kuzminski <marcin@python-works.com>
parents:
335
diff
changeset
|
569 elif c.action == 'raw': |
1753
1d1ccb873d00
moved soon-to-be-deleted code from vcs to rhodecode
Marcin Kuzminski <marcin@python-works.com>
parents:
1752
diff
changeset
|
570 _diff = diffs.get_gitdiff(node1, node2, |
1768
5610fd9b6803
added line context control to diffs
Marcin Kuzminski <marcin@python-works.com>
parents:
1753
diff
changeset
|
571 ignore_whitespace=ignore_whitespace, |
5610fd9b6803
added line context control to diffs
Marcin Kuzminski <marcin@python-works.com>
parents:
1753
diff
changeset
|
572 context=line_context) |
1789
17caf4efe15c
implements #308 rewrote diffs to enable displaying full diff on each file
Marcin Kuzminski <marcin@python-works.com>
parents:
1768
diff
changeset
|
573 diff = diffs.DiffProcessor(_diff, format='gitdiff') |
649
3765f0f479a2
fixed raw diff as purly raw without html
Marcin Kuzminski <marcin@python-works.com>
parents:
644
diff
changeset
|
574 response.content_type = 'text/plain' |
2995
32471bd1f4ee
Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents:
2981
diff
changeset
|
575 return diff.as_raw() |
662
373ee7031003
fixed annotation bug, added history to annotation.
Marcin Kuzminski <marcin@python-works.com>
parents:
649
diff
changeset
|
576 |
337
fa3835d34fc1
fixed bug when diff command was different than available options
Marcin Kuzminski <marcin@python-works.com>
parents:
335
diff
changeset
|
577 else: |
1789
17caf4efe15c
implements #308 rewrote diffs to enable displaying full diff on each file
Marcin Kuzminski <marcin@python-works.com>
parents:
1768
diff
changeset
|
578 fid = h.FID(diff2, node2.path) |
17caf4efe15c
implements #308 rewrote diffs to enable displaying full diff on each file
Marcin Kuzminski <marcin@python-works.com>
parents:
1768
diff
changeset
|
579 line_context_lcl = get_line_ctx(fid, request.GET) |
17caf4efe15c
implements #308 rewrote diffs to enable displaying full diff on each file
Marcin Kuzminski <marcin@python-works.com>
parents:
1768
diff
changeset
|
580 ign_whitespace_lcl = get_ignore_ws(fid, request.GET) |
1149
d162de13caec
memory optimizations, call diffs only when needed ie. after checking for binary, and cutoff limit.
Marcin Kuzminski <marcin@python-works.com>
parents:
1137
diff
changeset
|
581 |
1789
17caf4efe15c
implements #308 rewrote diffs to enable displaying full diff on each file
Marcin Kuzminski <marcin@python-works.com>
parents:
1768
diff
changeset
|
582 lim = request.GET.get('fulldiff') or self.cut_off_limit |
2109 | 583 _, cs1, cs2, diff, st = diffs.wrapped_diff(filenode_old=node1, |
1789
17caf4efe15c
implements #308 rewrote diffs to enable displaying full diff on each file
Marcin Kuzminski <marcin@python-works.com>
parents:
1768
diff
changeset
|
584 filenode_new=node2, |
17caf4efe15c
implements #308 rewrote diffs to enable displaying full diff on each file
Marcin Kuzminski <marcin@python-works.com>
parents:
1768
diff
changeset
|
585 cut_off_limit=lim, |
17caf4efe15c
implements #308 rewrote diffs to enable displaying full diff on each file
Marcin Kuzminski <marcin@python-works.com>
parents:
1768
diff
changeset
|
586 ignore_whitespace=ign_whitespace_lcl, |
17caf4efe15c
implements #308 rewrote diffs to enable displaying full diff on each file
Marcin Kuzminski <marcin@python-works.com>
parents:
1768
diff
changeset
|
587 line_context=line_context_lcl, |
17caf4efe15c
implements #308 rewrote diffs to enable displaying full diff on each file
Marcin Kuzminski <marcin@python-works.com>
parents:
1768
diff
changeset
|
588 enable_comments=False) |
2995
32471bd1f4ee
Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents:
2981
diff
changeset
|
589 op = '' |
32471bd1f4ee
Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents:
2981
diff
changeset
|
590 filename = node1.path |
32471bd1f4ee
Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents:
2981
diff
changeset
|
591 cs_changes = { |
32471bd1f4ee
Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents:
2981
diff
changeset
|
592 'fid': [cs1, cs2, op, filename, diff, st] |
32471bd1f4ee
Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents:
2981
diff
changeset
|
593 } |
32471bd1f4ee
Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents:
2981
diff
changeset
|
594 c.changes = cs_changes |
636
ffd07396d315
Fixes for raw_id, needed for git
Marcin Kuzminski <marcin@python-works.com>
parents:
629
diff
changeset
|
595 |
129
42d46deb124d
implemented simple diffs for history of files.
Marcin Kuzminski <marcin@python-works.com>
parents:
128
diff
changeset
|
596 return render('files/file_diff.html') |
636
ffd07396d315
Fixes for raw_id, needed for git
Marcin Kuzminski <marcin@python-works.com>
parents:
629
diff
changeset
|
597 |
2456
51b203e44202
Add authors into file view
Marcin Kuzminski <marcin@python-works.com>
parents:
2428
diff
changeset
|
598 def _get_node_history(self, cs, f_path, changesets=None): |
2977
cff9d4e1d821
Fixed issue when node didn't exists at 'tip' and we tried calculate history based on that assumption.
Marcin Kuzminski <marcin@python-works.com>
parents:
2973
diff
changeset
|
599 """ |
cff9d4e1d821
Fixed issue when node didn't exists at 'tip' and we tried calculate history based on that assumption.
Marcin Kuzminski <marcin@python-works.com>
parents:
2973
diff
changeset
|
600 get changesets history for given node |
cff9d4e1d821
Fixed issue when node didn't exists at 'tip' and we tried calculate history based on that assumption.
Marcin Kuzminski <marcin@python-works.com>
parents:
2973
diff
changeset
|
601 |
cff9d4e1d821
Fixed issue when node didn't exists at 'tip' and we tried calculate history based on that assumption.
Marcin Kuzminski <marcin@python-works.com>
parents:
2973
diff
changeset
|
602 :param cs: changeset to calculate history |
cff9d4e1d821
Fixed issue when node didn't exists at 'tip' and we tried calculate history based on that assumption.
Marcin Kuzminski <marcin@python-works.com>
parents:
2973
diff
changeset
|
603 :param f_path: path for node to calculate history for |
cff9d4e1d821
Fixed issue when node didn't exists at 'tip' and we tried calculate history based on that assumption.
Marcin Kuzminski <marcin@python-works.com>
parents:
2973
diff
changeset
|
604 :param changesets: if passed don't calculate history and take |
cff9d4e1d821
Fixed issue when node didn't exists at 'tip' and we tried calculate history based on that assumption.
Marcin Kuzminski <marcin@python-works.com>
parents:
2973
diff
changeset
|
605 changesets defined in this list |
cff9d4e1d821
Fixed issue when node didn't exists at 'tip' and we tried calculate history based on that assumption.
Marcin Kuzminski <marcin@python-works.com>
parents:
2973
diff
changeset
|
606 """ |
cff9d4e1d821
Fixed issue when node didn't exists at 'tip' and we tried calculate history based on that assumption.
Marcin Kuzminski <marcin@python-works.com>
parents:
2973
diff
changeset
|
607 # calculate history based on tip |
cff9d4e1d821
Fixed issue when node didn't exists at 'tip' and we tried calculate history based on that assumption.
Marcin Kuzminski <marcin@python-works.com>
parents:
2973
diff
changeset
|
608 tip_cs = c.rhodecode_repo.get_changeset() |
2456
51b203e44202
Add authors into file view
Marcin Kuzminski <marcin@python-works.com>
parents:
2428
diff
changeset
|
609 if changesets is None: |
2977
cff9d4e1d821
Fixed issue when node didn't exists at 'tip' and we tried calculate history based on that assumption.
Marcin Kuzminski <marcin@python-works.com>
parents:
2973
diff
changeset
|
610 try: |
cff9d4e1d821
Fixed issue when node didn't exists at 'tip' and we tried calculate history based on that assumption.
Marcin Kuzminski <marcin@python-works.com>
parents:
2973
diff
changeset
|
611 changesets = tip_cs.get_file_history(f_path) |
2981
6cd0f8f8aef1
Let the function calculating changeset history do all the work
Marcin Kuzminski <marcin@python-works.com>
parents:
2977
diff
changeset
|
612 except (NodeDoesNotExistError, ChangesetError): |
2977
cff9d4e1d821
Fixed issue when node didn't exists at 'tip' and we tried calculate history based on that assumption.
Marcin Kuzminski <marcin@python-works.com>
parents:
2973
diff
changeset
|
613 #this node is not present at tip ! |
cff9d4e1d821
Fixed issue when node didn't exists at 'tip' and we tried calculate history based on that assumption.
Marcin Kuzminski <marcin@python-works.com>
parents:
2973
diff
changeset
|
614 changesets = cs.get_file_history(f_path) |
128
9deb6f1d5b90
Implemented file history.
Marcin Kuzminski <marcin@python-works.com>
parents:
106
diff
changeset
|
615 hist_l = [] |
774
c47152c5fe01
added tags, and branches to file history select box, fixed annotation changeset errors crash on wrongly given revions
Marcin Kuzminski <marcin@python-works.com>
parents:
691
diff
changeset
|
616 |
c47152c5fe01
added tags, and branches to file history select box, fixed annotation changeset errors crash on wrongly given revions
Marcin Kuzminski <marcin@python-works.com>
parents:
691
diff
changeset
|
617 changesets_group = ([], _("Changesets")) |
c47152c5fe01
added tags, and branches to file history select box, fixed annotation changeset errors crash on wrongly given revions
Marcin Kuzminski <marcin@python-works.com>
parents:
691
diff
changeset
|
618 branches_group = ([], _("Branches")) |
c47152c5fe01
added tags, and branches to file history select box, fixed annotation changeset errors crash on wrongly given revions
Marcin Kuzminski <marcin@python-works.com>
parents:
691
diff
changeset
|
619 tags_group = ([], _("Tags")) |
2046
4e1e265af5ca
remove branch from git filenode history drop-down
Marcin Kuzminski <marcin@python-works.com>
parents:
2007
diff
changeset
|
620 _hg = cs.repository.alias == 'hg' |
128
9deb6f1d5b90
Implemented file history.
Marcin Kuzminski <marcin@python-works.com>
parents:
106
diff
changeset
|
621 for chs in changesets: |
3001
37c7abd34d44
implements #636, lazy loading of history and authors to speed up page responsiveness.
Marcin Kuzminski <marcin@python-works.com>
parents:
2995
diff
changeset
|
622 #_branch = '(%s)' % chs.branch if _hg else '' |
37c7abd34d44
implements #636, lazy loading of history and authors to speed up page responsiveness.
Marcin Kuzminski <marcin@python-works.com>
parents:
2995
diff
changeset
|
623 _branch = chs.branch |
3009
f0e19116f154
fixed file history tests
Marcin Kuzminski <marcin@python-works.com>
parents:
3001
diff
changeset
|
624 n_desc = 'r%s:%s (%s)' % (chs.revision, chs.short_id, _branch) |
774
c47152c5fe01
added tags, and branches to file history select box, fixed annotation changeset errors crash on wrongly given revions
Marcin Kuzminski <marcin@python-works.com>
parents:
691
diff
changeset
|
625 changesets_group[0].append((chs.raw_id, n_desc,)) |
c47152c5fe01
added tags, and branches to file history select box, fixed annotation changeset errors crash on wrongly given revions
Marcin Kuzminski <marcin@python-works.com>
parents:
691
diff
changeset
|
626 hist_l.append(changesets_group) |
c47152c5fe01
added tags, and branches to file history select box, fixed annotation changeset errors crash on wrongly given revions
Marcin Kuzminski <marcin@python-works.com>
parents:
691
diff
changeset
|
627 |
1045
3fc9183e05dd
another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents:
1044
diff
changeset
|
628 for name, chs in c.rhodecode_repo.branches.items(): |
774
c47152c5fe01
added tags, and branches to file history select box, fixed annotation changeset errors crash on wrongly given revions
Marcin Kuzminski <marcin@python-works.com>
parents:
691
diff
changeset
|
629 branches_group[0].append((chs, name),) |
c47152c5fe01
added tags, and branches to file history select box, fixed annotation changeset errors crash on wrongly given revions
Marcin Kuzminski <marcin@python-works.com>
parents:
691
diff
changeset
|
630 hist_l.append(branches_group) |
c47152c5fe01
added tags, and branches to file history select box, fixed annotation changeset errors crash on wrongly given revions
Marcin Kuzminski <marcin@python-works.com>
parents:
691
diff
changeset
|
631 |
1045
3fc9183e05dd
another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents:
1044
diff
changeset
|
632 for name, chs in c.rhodecode_repo.tags.items(): |
774
c47152c5fe01
added tags, and branches to file history select box, fixed annotation changeset errors crash on wrongly given revions
Marcin Kuzminski <marcin@python-works.com>
parents:
691
diff
changeset
|
633 tags_group[0].append((chs, name),) |
c47152c5fe01
added tags, and branches to file history select box, fixed annotation changeset errors crash on wrongly given revions
Marcin Kuzminski <marcin@python-works.com>
parents:
691
diff
changeset
|
634 hist_l.append(tags_group) |
3009
f0e19116f154
fixed file history tests
Marcin Kuzminski <marcin@python-works.com>
parents:
3001
diff
changeset
|
635 |
2981
6cd0f8f8aef1
Let the function calculating changeset history do all the work
Marcin Kuzminski <marcin@python-works.com>
parents:
2977
diff
changeset
|
636 return hist_l, changesets |
1452
8585fbf3ed06
Implemented #111 copy github node finder solution
Marcin Kuzminski <marcin@python-works.com>
parents:
1450
diff
changeset
|
637 |
2457
01e005cabd4d
moved login required into seperate calls for files due to optional API access option
Marcin Kuzminski <marcin@python-works.com>
parents:
2456
diff
changeset
|
638 @LoginRequired() |
1452
8585fbf3ed06
Implemented #111 copy github node finder solution
Marcin Kuzminski <marcin@python-works.com>
parents:
1450
diff
changeset
|
639 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', |
8585fbf3ed06
Implemented #111 copy github node finder solution
Marcin Kuzminski <marcin@python-works.com>
parents:
1450
diff
changeset
|
640 'repository.admin') |
2457
01e005cabd4d
moved login required into seperate calls for files due to optional API access option
Marcin Kuzminski <marcin@python-works.com>
parents:
2456
diff
changeset
|
641 @jsonify |
1452
8585fbf3ed06
Implemented #111 copy github node finder solution
Marcin Kuzminski <marcin@python-works.com>
parents:
1450
diff
changeset
|
642 def nodelist(self, repo_name, revision, f_path): |
8585fbf3ed06
Implemented #111 copy github node finder solution
Marcin Kuzminski <marcin@python-works.com>
parents:
1450
diff
changeset
|
643 if request.environ.get('HTTP_X_PARTIAL_XHR'): |
8585fbf3ed06
Implemented #111 copy github node finder solution
Marcin Kuzminski <marcin@python-works.com>
parents:
1450
diff
changeset
|
644 cs = self.__get_cs_or_redirect(revision, repo_name) |
1810
203af05539e0
implements #330 api method for listing nodes at particular revision
Marcin Kuzminski <marcin@python-works.com>
parents:
1809
diff
changeset
|
645 _d, _f = ScmModel().get_nodes(repo_name, cs.raw_id, f_path, |
203af05539e0
implements #330 api method for listing nodes at particular revision
Marcin Kuzminski <marcin@python-works.com>
parents:
1809
diff
changeset
|
646 flat=False) |
2428
530bd12fc18a
removed JSON array envelope from filter files function
Marcin Kuzminski <marcin@python-works.com>
parents:
2318
diff
changeset
|
647 return {'nodes': _d + _f} |