Mercurial > kallithea
annotate rhodecode/controllers/files.py @ 2501:044c31d67ccc beta
make get_action always return action
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Thu, 21 Jun 2012 17:51:01 +0200 |
parents | 015a42e970a6 |
children | aaa41736ae51 |
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 |
812
30ad41c76fae
fixes #79 cut off limit was added into .ini config files
Marcin Kuzminski <marcin@python-works.com>
parents:
774
diff
changeset
|
30 |
1789
17caf4efe15c
implements #308 rewrote diffs to enable displaying full diff on each file
Marcin Kuzminski <marcin@python-works.com>
parents:
1768
diff
changeset
|
31 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
|
32 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
|
33 from pylons.controllers.util import redirect |
1452
8585fbf3ed06
Implemented #111 copy github node finder solution
Marcin Kuzminski <marcin@python-works.com>
parents:
1450
diff
changeset
|
34 from pylons.decorators import jsonify |
2294
3c1d991755df
Use paste fileapp to properly send the archive size
Marcin Kuzminski <marcin@python-works.com>
parents:
2291
diff
changeset
|
35 from paste.fileapp import FileApp, _FileIter |
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 |
2109 | 41 from rhodecode.lib.utils2 import convert_line_endings, detect_mode, safe_str |
1305
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
42 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
|
43 from rhodecode.lib.base import BaseRepoController, render |
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
44 from rhodecode.lib.utils import EmptyChangeset |
2109 | 45 from rhodecode.lib.vcs.conf import settings |
46 from rhodecode.lib.vcs.exceptions import RepositoryError, \ | |
47 ChangesetDoesNotExistError, EmptyRepositoryError, \ | |
48 ImproperArchiveTypeError, VCSError, NodeAlreadyExistsError | |
49 from rhodecode.lib.vcs.nodes import FileNode | |
50 | |
1305
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
51 from rhodecode.model.repo import RepoModel |
2109 | 52 from rhodecode.model.scm import ScmModel |
2255
95800dad44d0
fixes for tests on Windows
Marcin Kuzminski <marcin@python-works.com>
parents:
2199
diff
changeset
|
53 from rhodecode.model.db import Repository |
2109 | 54 |
1789
17caf4efe15c
implements #308 rewrote diffs to enable displaying full diff on each file
Marcin Kuzminski <marcin@python-works.com>
parents:
1768
diff
changeset
|
55 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
|
56 _context_url, get_line_ctx, get_ignore_ws |
2109 | 57 |
1305
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
58 |
93
aec4c0071cb3
added empty controllers for branches tags files graph, routing and test for them
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
59 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
|
60 |
1134
1dc5d169e85a
fixed issue with vcs stream
Marcin Kuzminski <marcin@python-works.com>
parents:
1132
diff
changeset
|
61 |
1045
3fc9183e05dd
another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents:
1044
diff
changeset
|
62 class FilesController(BaseRepoController): |
636
ffd07396d315
Fixes for raw_id, needed for git
Marcin Kuzminski <marcin@python-works.com>
parents:
629
diff
changeset
|
63 |
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
|
64 |
99
5b57295601b6
Updated basic files browser with, pygments
Marcin Kuzminski <marcin@python-works.com>
parents:
93
diff
changeset
|
65 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
|
66 super(FilesController, self).__before__() |
813
e8b5be26fb78
fixed small issue made on latest patches
Marcin Kuzminski <marcin@python-works.com>
parents:
812
diff
changeset
|
67 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
|
68 |
1483
7b67b0dcad6d
Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents:
1480
diff
changeset
|
69 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
|
70 """ |
1137
82344ce0a892
clean and fixes in files controller
Marcin Kuzminski <marcin@python-works.com>
parents:
1134
diff
changeset
|
71 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
|
72 proper message |
1203
6832ef664673
source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents:
1200
diff
changeset
|
73 |
1045
3fc9183e05dd
another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents:
1044
diff
changeset
|
74 :param rev: revision to fetch |
3fc9183e05dd
another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents:
1044
diff
changeset
|
75 :param repo_name: repo name to redirect after |
3fc9183e05dd
another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents:
1044
diff
changeset
|
76 """ |
3fc9183e05dd
another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents:
1044
diff
changeset
|
77 |
3fc9183e05dd
another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents:
1044
diff
changeset
|
78 try: |
3fc9183e05dd
another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents:
1044
diff
changeset
|
79 return c.rhodecode_repo.get_changeset(rev) |
3fc9183e05dd
another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents:
1044
diff
changeset
|
80 except EmptyRepositoryError, e: |
1483
7b67b0dcad6d
Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents:
1480
diff
changeset
|
81 if not redirect_after: |
7b67b0dcad6d
Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents:
1480
diff
changeset
|
82 return None |
7b67b0dcad6d
Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents:
1480
diff
changeset
|
83 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
|
84 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
|
85 revision=0, f_path='') |
269905fac50a
added uploading of files from web interface directly into repo
Marcin Kuzminski <marcin@python-works.com>
parents:
1484
diff
changeset
|
86 add_new = '<a href="%s">[%s]</a>' % (url_, _('add new')) |
269905fac50a
added uploading of files from web interface directly into repo
Marcin Kuzminski <marcin@python-works.com>
parents:
1484
diff
changeset
|
87 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
|
88 category='warning') |
1045
3fc9183e05dd
another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents:
1044
diff
changeset
|
89 redirect(h.url('summary_home', repo_name=repo_name)) |
3fc9183e05dd
another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents:
1044
diff
changeset
|
90 |
3fc9183e05dd
another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents:
1044
diff
changeset
|
91 except RepositoryError, e: |
3fc9183e05dd
another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents:
1044
diff
changeset
|
92 h.flash(str(e), category='warning') |
3fc9183e05dd
another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents:
1044
diff
changeset
|
93 redirect(h.url('files_home', repo_name=repo_name, revision='tip')) |
3fc9183e05dd
another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents:
1044
diff
changeset
|
94 |
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
|
95 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
|
96 """ |
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 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
|
98 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
|
99 |
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
|
100 :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
|
101 :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
|
102 :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
|
103 """ |
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 |
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 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
|
106 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
|
107 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
|
108 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
|
109 except RepositoryError, e: |
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 h.flash(str(e), category='warning') |
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 redirect(h.url('files_home', 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
|
112 revision=cs.raw_id)) |
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
|
113 |
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 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
|
115 |
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
|
116 @LoginRequired() |
1305
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
117 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', |
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
118 'repository.admin') |
2177
ee07357d9265
unified annotation view with file source view
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
119 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
|
120 # 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
|
121 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
|
122 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
|
123 cs = self.__get_cs_or_redirect(post_revision, repo_name) |
1137
82344ce0a892
clean and fixes in files controller
Marcin Kuzminski <marcin@python-works.com>
parents:
1134
diff
changeset
|
124 redirect(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
|
125 revision=cs.raw_id, f_path=f_path)) |
636
ffd07396d315
Fixes for raw_id, needed for git
Marcin Kuzminski <marcin@python-works.com>
parents:
629
diff
changeset
|
126 |
1137
82344ce0a892
clean and fixes in files controller
Marcin Kuzminski <marcin@python-works.com>
parents:
1134
diff
changeset
|
127 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
|
128 c.branch = request.GET.get('branch', None) |
82344ce0a892
clean and fixes in files controller
Marcin Kuzminski <marcin@python-works.com>
parents:
1134
diff
changeset
|
129 c.f_path = f_path |
2177
ee07357d9265
unified annotation view with file source view
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
130 c.annotate = annotate |
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(): |
2456
51b203e44202
Add authors into file view
Marcin Kuzminski <marcin@python-works.com>
parents:
2428
diff
changeset
|
158 _hist = c.changeset.get_file_history(f_path) |
51b203e44202
Add authors into file view
Marcin Kuzminski <marcin@python-works.com>
parents:
2428
diff
changeset
|
159 c.file_history = self._get_node_history(c.changeset, f_path, |
51b203e44202
Add authors into file view
Marcin Kuzminski <marcin@python-works.com>
parents:
2428
diff
changeset
|
160 _hist) |
51b203e44202
Add authors into file view
Marcin Kuzminski <marcin@python-works.com>
parents:
2428
diff
changeset
|
161 c.authors = [] |
51b203e44202
Add authors into file view
Marcin Kuzminski <marcin@python-works.com>
parents:
2428
diff
changeset
|
162 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
|
163 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
|
164 else: |
2456
51b203e44202
Add authors into file view
Marcin Kuzminski <marcin@python-works.com>
parents:
2428
diff
changeset
|
165 c.authors = c.file_history = [] |
644
c8bd0e6cc3da
some changes for #45.
Marcin Kuzminski <marcin@python-works.com>
parents:
636
diff
changeset
|
166 except RepositoryError, e: |
c8bd0e6cc3da
some changes for #45.
Marcin Kuzminski <marcin@python-works.com>
parents:
636
diff
changeset
|
167 h.flash(str(e), category='warning') |
1137
82344ce0a892
clean and fixes in files controller
Marcin Kuzminski <marcin@python-works.com>
parents:
1134
diff
changeset
|
168 redirect(h.url('files_home', repo_name=repo_name, |
82344ce0a892
clean and fixes in files controller
Marcin Kuzminski <marcin@python-works.com>
parents:
1134
diff
changeset
|
169 revision=revision)) |
644
c8bd0e6cc3da
some changes for #45.
Marcin Kuzminski <marcin@python-works.com>
parents:
636
diff
changeset
|
170 |
128
9deb6f1d5b90
Implemented file history.
Marcin Kuzminski <marcin@python-works.com>
parents:
106
diff
changeset
|
171 return render('files/files.html') |
9deb6f1d5b90
Implemented file history.
Marcin Kuzminski <marcin@python-works.com>
parents:
106
diff
changeset
|
172 |
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
|
173 @LoginRequired() |
1305
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
174 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', |
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
175 'repository.admin') |
147
873fd2dc62c2
Added rawfile support, and few fixes for file
Marcin Kuzminski <marcin@python-works.com>
parents:
145
diff
changeset
|
176 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
|
177 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
|
178 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
|
179 |
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
|
180 response.content_disposition = 'attachment; filename=%s' % \ |
2255
95800dad44d0
fixes for tests on Windows
Marcin Kuzminski <marcin@python-works.com>
parents:
2199
diff
changeset
|
181 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
|
182 |
160
0f7f93df5802
implemented rawdiff and diff download into diff view.
Marcin Kuzminski <marcin@python-works.com>
parents:
158
diff
changeset
|
183 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
|
184 return file_node.content |
2461
015a42e970a6
whitespace cleanup
Marcin Kuzminski <marcin@python-works.com>
parents:
2457
diff
changeset
|
185 |
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
|
186 @LoginRequired() |
1305
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
187 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', |
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
188 'repository.admin') |
485
9836541b0509
added limit for showing pygemntized source codes larger than 250kb.
Marcin Kuzminski <marcin@python-works.com>
parents:
438
diff
changeset
|
189 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
|
190 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
|
191 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
|
192 |
1241
ed5270522724
changed raw action to show images instead of saying about binary file
Marcin Kuzminski <marcin@python-works.com>
parents:
1224
diff
changeset
|
193 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
|
194 # 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
|
195 # 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
|
196 # 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
|
197 # 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
|
198 |
ed5270522724
changed raw action to show images instead of saying about binary file
Marcin Kuzminski <marcin@python-works.com>
parents:
1224
diff
changeset
|
199 # 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
|
200 '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
|
201 '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
|
202 '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
|
203 '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
|
204 '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
|
205 } |
ed5270522724
changed raw action to show images instead of saying about binary file
Marcin Kuzminski <marcin@python-works.com>
parents:
1224
diff
changeset
|
206 |
ed5270522724
changed raw action to show images instead of saying about binary file
Marcin Kuzminski <marcin@python-works.com>
parents:
1224
diff
changeset
|
207 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
|
208 try: |
ed5270522724
changed raw action to show images instead of saying about binary file
Marcin Kuzminski <marcin@python-works.com>
parents:
1224
diff
changeset
|
209 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
|
210 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
|
211 # 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
|
212 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
|
213 # 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
|
214 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
|
215 else: |
ed5270522724
changed raw action to show images instead of saying about binary file
Marcin Kuzminski <marcin@python-works.com>
parents:
1224
diff
changeset
|
216 # 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
|
217 # 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
|
218 # Note: underlying vcs library fakes text/plain mimetype if the |
1245
5f2fbab7c429
PEP8ify - controllers
Marcin Kuzminski <marcin@python-works.com>
parents:
1241
diff
changeset
|
219 # mimetype can not be determined and it thinks it is not |
5f2fbab7c429
PEP8ify - controllers
Marcin Kuzminski <marcin@python-works.com>
parents:
1241
diff
changeset
|
220 # binary.This might lead to erroneous text display in some |
5f2fbab7c429
PEP8ify - controllers
Marcin Kuzminski <marcin@python-works.com>
parents:
1241
diff
changeset
|
221 # cases, but helps in other cases, like with text files |
5f2fbab7c429
PEP8ify - controllers
Marcin Kuzminski <marcin@python-works.com>
parents:
1241
diff
changeset
|
222 # 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
|
223 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
|
224 |
ed5270522724
changed raw action to show images instead of saying about binary file
Marcin Kuzminski <marcin@python-works.com>
parents:
1224
diff
changeset
|
225 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
|
226 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
|
227 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
|
228 |
ed5270522724
changed raw action to show images instead of saying about binary file
Marcin Kuzminski <marcin@python-works.com>
parents:
1224
diff
changeset
|
229 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
|
230 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
|
231 return file_node.content |
636
ffd07396d315
Fixes for raw_id, needed for git
Marcin Kuzminski <marcin@python-works.com>
parents:
629
diff
changeset
|
232 |
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
|
233 @LoginRequired() |
1305
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
234 @HasRepoPermissionAnyDecorator('repository.write', 'repository.admin') |
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
235 def edit(self, repo_name, revision, f_path): |
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
236 r_post = request.POST |
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
237 |
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
238 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
|
239 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
|
240 |
1313
856be614d9a4
disabled edition of binary files
Marcin Kuzminski <marcin@python-works.com>
parents:
1312
diff
changeset
|
241 if c.file.is_binary: |
856be614d9a4
disabled edition of binary files
Marcin Kuzminski <marcin@python-works.com>
parents:
1312
diff
changeset
|
242 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
|
243 revision=c.cs.raw_id, f_path=f_path)) |
856be614d9a4
disabled edition of binary files
Marcin Kuzminski <marcin@python-works.com>
parents:
1312
diff
changeset
|
244 |
1305
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
245 c.f_path = f_path |
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
246 |
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
247 if r_post: |
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
248 |
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
249 old_content = c.file.content |
1306
6e1d24503383
Added support for ascendent characters for inMemoryCommit
Marcin Kuzminski <marcin@python-works.com>
parents:
1305
diff
changeset
|
250 sl = old_content.splitlines(1) |
6e1d24503383
Added support for ascendent characters for inMemoryCommit
Marcin Kuzminski <marcin@python-works.com>
parents:
1305
diff
changeset
|
251 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
|
252 # 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
|
253 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
|
254 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
|
255 |
1305
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
256 message = r_post.get('message') or (_('Edited %s via RhodeCode') |
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
257 % (f_path)) |
1311
6705eeebc41b
moved out commit into scm model, and added cache invalidation after commit.
Marcin Kuzminski <marcin@python-works.com>
parents:
1308
diff
changeset
|
258 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
|
259 |
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
260 if content == old_content: |
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
261 h.flash(_('No changes'), |
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
262 category='warning') |
1306
6e1d24503383
Added support for ascendent characters for inMemoryCommit
Marcin Kuzminski <marcin@python-works.com>
parents:
1305
diff
changeset
|
263 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
|
264 revision='tip')) |
6e1d24503383
Added support for ascendent characters for inMemoryCommit
Marcin Kuzminski <marcin@python-works.com>
parents:
1305
diff
changeset
|
265 |
1305
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
266 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
|
267 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
|
268 repo_name=repo_name, cs=c.cs, |
1312
70a5a9a57864
logged local commit with special action via action_logger,
Marcin Kuzminski <marcin@python-works.com>
parents:
1311
diff
changeset
|
269 user=self.rhodecode_user, |
1311
6705eeebc41b
moved out commit into scm model, and added cache invalidation after commit.
Marcin Kuzminski <marcin@python-works.com>
parents:
1308
diff
changeset
|
270 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
|
271 content=content, f_path=f_path) |
1305
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
272 h.flash(_('Successfully committed to %s' % f_path), |
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
273 category='success') |
1306
6e1d24503383
Added support for ascendent characters for inMemoryCommit
Marcin Kuzminski <marcin@python-works.com>
parents:
1305
diff
changeset
|
274 |
1311
6705eeebc41b
moved out commit into scm model, and added cache invalidation after commit.
Marcin Kuzminski <marcin@python-works.com>
parents:
1308
diff
changeset
|
275 except Exception: |
1305
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
276 log.error(traceback.format_exc()) |
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
277 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
|
278 return redirect(url('changeset_home', |
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
279 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
|
280 |
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
281 return render('files/files_edit.html') |
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
282 |
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
|
283 @LoginRequired() |
1483
7b67b0dcad6d
Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents:
1480
diff
changeset
|
284 @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
|
285 def add(self, repo_name, revision, f_path): |
7b67b0dcad6d
Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents:
1480
diff
changeset
|
286 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
|
287 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
|
288 redirect_after=False) |
7b67b0dcad6d
Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents:
1480
diff
changeset
|
289 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
|
290 c.cs = EmptyChangeset(alias=c.rhodecode_repo.alias) |
7b67b0dcad6d
Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents:
1480
diff
changeset
|
291 |
7b67b0dcad6d
Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents:
1480
diff
changeset
|
292 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
|
293 |
7b67b0dcad6d
Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents:
1480
diff
changeset
|
294 if r_post: |
7b67b0dcad6d
Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents:
1480
diff
changeset
|
295 unix_mode = 0 |
7b67b0dcad6d
Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents:
1480
diff
changeset
|
296 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
|
297 |
7b67b0dcad6d
Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents:
1480
diff
changeset
|
298 message = r_post.get('message') or (_('Added %s via RhodeCode') |
7b67b0dcad6d
Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents:
1480
diff
changeset
|
299 % (f_path)) |
7b67b0dcad6d
Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents:
1480
diff
changeset
|
300 location = r_post.get('location') |
7b67b0dcad6d
Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents:
1480
diff
changeset
|
301 filename = r_post.get('filename') |
1485
269905fac50a
added uploading of files from web interface directly into repo
Marcin Kuzminski <marcin@python-works.com>
parents:
1484
diff
changeset
|
302 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
|
303 |
269905fac50a
added uploading of files from web interface directly into repo
Marcin Kuzminski <marcin@python-works.com>
parents:
1484
diff
changeset
|
304 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
|
305 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
|
306 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
|
307 |
1483
7b67b0dcad6d
Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents:
1480
diff
changeset
|
308 node_path = os.path.join(location, filename) |
7b67b0dcad6d
Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents:
1480
diff
changeset
|
309 author = self.rhodecode_user.full_contact |
7b67b0dcad6d
Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents:
1480
diff
changeset
|
310 |
7b67b0dcad6d
Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents:
1480
diff
changeset
|
311 if not content: |
7b67b0dcad6d
Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents:
1480
diff
changeset
|
312 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
|
313 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
|
314 revision='tip')) |
1484
1db451a44504
fixed small issues with adding new filenodes
Marcin Kuzminski <marcin@python-works.com>
parents:
1483
diff
changeset
|
315 if not filename: |
1db451a44504
fixed small issues with adding new filenodes
Marcin Kuzminski <marcin@python-works.com>
parents:
1483
diff
changeset
|
316 h.flash(_('No filename'), category='warning') |
1db451a44504
fixed small issues with adding new filenodes
Marcin Kuzminski <marcin@python-works.com>
parents:
1483
diff
changeset
|
317 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
|
318 revision='tip')) |
1483
7b67b0dcad6d
Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents:
1480
diff
changeset
|
319 |
7b67b0dcad6d
Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents:
1480
diff
changeset
|
320 try: |
7b67b0dcad6d
Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents:
1480
diff
changeset
|
321 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
|
322 repo_name=repo_name, cs=c.cs, |
31ebf7010566
various fixes for git and mercurial with InMemoryCommit backend and non-ascii files
Marcin Kuzminski <marcin@python-works.com>
parents:
2177
diff
changeset
|
323 user=self.rhodecode_user, |
31ebf7010566
various fixes for git and mercurial with InMemoryCommit backend and non-ascii files
Marcin Kuzminski <marcin@python-works.com>
parents:
2177
diff
changeset
|
324 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
|
325 content=content, f_path=node_path) |
1483
7b67b0dcad6d
Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents:
1480
diff
changeset
|
326 h.flash(_('Successfully committed to %s' % node_path), |
7b67b0dcad6d
Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents:
1480
diff
changeset
|
327 category='success') |
1485
269905fac50a
added uploading of files from web interface directly into repo
Marcin Kuzminski <marcin@python-works.com>
parents:
1484
diff
changeset
|
328 except NodeAlreadyExistsError, e: |
269905fac50a
added uploading of files from web interface directly into repo
Marcin Kuzminski <marcin@python-works.com>
parents:
1484
diff
changeset
|
329 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
|
330 except Exception: |
7b67b0dcad6d
Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents:
1480
diff
changeset
|
331 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
|
332 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
|
333 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
|
334 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
|
335 |
7b67b0dcad6d
Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents:
1480
diff
changeset
|
336 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
|
337 |
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
|
338 @LoginRequired() |
1305
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
339 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', |
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
340 'repository.admin') |
872
b956e6f415a2
implemented #91,
Marcin Kuzminski <marcin@python-works.com>
parents:
813
diff
changeset
|
341 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
|
342 |
942
32318ec7bfc1
added branch/tag options to download links in summary
Marcin Kuzminski <marcin@python-works.com>
parents:
915
diff
changeset
|
343 fileformat = None |
32318ec7bfc1
added branch/tag options to download links in summary
Marcin Kuzminski <marcin@python-works.com>
parents:
915
diff
changeset
|
344 revision = None |
948
85ee0ea183e7
fixed archival in rhodecode to use new functions from vcs
Marcin Kuzminski <marcin@python-works.com>
parents:
945
diff
changeset
|
345 ext = None |
1450
2a8bf2a3da98
fixes #214 added support for downloading subrepos in download menu.
Marcin Kuzminski <marcin@python-works.com>
parents:
1401
diff
changeset
|
346 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
|
347 |
1480
daa29da0f783
fixes for vcs settings module
Marcin Kuzminski <marcin@python-works.com>
parents:
1452
diff
changeset
|
348 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
|
349 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
|
350 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
|
351 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
|
352 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
|
353 ext = ext_data[1] |
872
b956e6f415a2
implemented #91,
Marcin Kuzminski <marcin@python-works.com>
parents:
813
diff
changeset
|
354 |
b956e6f415a2
implemented #91,
Marcin Kuzminski <marcin@python-works.com>
parents:
813
diff
changeset
|
355 try: |
1045
3fc9183e05dd
another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents:
1044
diff
changeset
|
356 dbrepo = RepoModel().get_by_repo_name(repo_name) |
1038
5554aa9c2480
another major code rafactor, reimplemented (almost from scratch)
Marcin Kuzminski <marcin@python-works.com>
parents:
962
diff
changeset
|
357 if dbrepo.enable_downloads is False: |
962
72f008ed9b18
implemented #84 downloads can be enabled/disabled per each repository from now.
Marcin Kuzminski <marcin@python-works.com>
parents:
961
diff
changeset
|
358 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
|
359 |
1809
ef0066e95be5
fix archive download for git
Marcin Kuzminski <marcin@python-works.com>
parents:
1789
diff
changeset
|
360 if c.rhodecode_repo.alias == 'hg': |
ef0066e95be5
fix archive download for git
Marcin Kuzminski <marcin@python-works.com>
parents:
1789
diff
changeset
|
361 # 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
|
362 # hooks on fetching archives with subrepos |
ef0066e95be5
fix archive download for git
Marcin Kuzminski <marcin@python-works.com>
parents:
1789
diff
changeset
|
363 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
|
364 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
|
365 |
1045
3fc9183e05dd
another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents:
1044
diff
changeset
|
366 cs = c.rhodecode_repo.get_changeset(revision) |
1480
daa29da0f783
fixes for vcs settings module
Marcin Kuzminski <marcin@python-works.com>
parents:
1452
diff
changeset
|
367 content_type = settings.ARCHIVE_SPECS[fileformat][0] |
872
b956e6f415a2
implemented #91,
Marcin Kuzminski <marcin@python-works.com>
parents:
813
diff
changeset
|
368 except ChangesetDoesNotExistError: |
b956e6f415a2
implemented #91,
Marcin Kuzminski <marcin@python-works.com>
parents:
813
diff
changeset
|
369 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
|
370 except EmptyRepositoryError: |
05b59c48556f
fixed error when trying to make download on empty repository
Marcin Kuzminski <marcin@python-works.com>
parents:
942
diff
changeset
|
371 return _('Empty repository') |
961
840ca7492dbe
fixed typo in exception
Marcin Kuzminski <marcin@python-works.com>
parents:
953
diff
changeset
|
372 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
|
373 return _('Unknown archive type') |
872
b956e6f415a2
implemented #91,
Marcin Kuzminski <marcin@python-works.com>
parents:
813
diff
changeset
|
374 |
2318
058e2743e7b7
fixes issue #455 Creating an archive generates an exception on Windows
Marcin Kuzminski <marcin@python-works.com>
parents:
2294
diff
changeset
|
375 fd, archive = tempfile.mkstemp() |
058e2743e7b7
fixes issue #455 Creating an archive generates an exception on Windows
Marcin Kuzminski <marcin@python-works.com>
parents:
2294
diff
changeset
|
376 t = open(archive, 'wb') |
058e2743e7b7
fixes issue #455 Creating an archive generates an exception on Windows
Marcin Kuzminski <marcin@python-works.com>
parents:
2294
diff
changeset
|
377 cs.fill_archive(stream=t, kind=fileformat, subrepos=subrepos) |
058e2743e7b7
fixes issue #455 Creating an archive generates an exception on Windows
Marcin Kuzminski <marcin@python-works.com>
parents:
2294
diff
changeset
|
378 t.close() |
2294
3c1d991755df
Use paste fileapp to properly send the archive size
Marcin Kuzminski <marcin@python-works.com>
parents:
2291
diff
changeset
|
379 |
2318
058e2743e7b7
fixes issue #455 Creating an archive generates an exception on Windows
Marcin Kuzminski <marcin@python-works.com>
parents:
2294
diff
changeset
|
380 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
|
381 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
|
382 while True: |
058e2743e7b7
fixes issue #455 Creating an archive generates an exception on Windows
Marcin Kuzminski <marcin@python-works.com>
parents:
2294
diff
changeset
|
383 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
|
384 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
|
385 stream.close() |
058e2743e7b7
fixes issue #455 Creating an archive generates an exception on Windows
Marcin Kuzminski <marcin@python-works.com>
parents:
2294
diff
changeset
|
386 os.close(fd) |
058e2743e7b7
fixes issue #455 Creating an archive generates an exception on Windows
Marcin Kuzminski <marcin@python-works.com>
parents:
2294
diff
changeset
|
387 os.remove(archive) |
058e2743e7b7
fixes issue #455 Creating an archive generates an exception on Windows
Marcin Kuzminski <marcin@python-works.com>
parents:
2294
diff
changeset
|
388 break |
058e2743e7b7
fixes issue #455 Creating an archive generates an exception on Windows
Marcin Kuzminski <marcin@python-works.com>
parents:
2294
diff
changeset
|
389 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
|
390 |
2318
058e2743e7b7
fixes issue #455 Creating an archive generates an exception on Windows
Marcin Kuzminski <marcin@python-works.com>
parents:
2294
diff
changeset
|
391 response.content_disposition = str('attachment; filename=%s-%s%s' \ |
058e2743e7b7
fixes issue #455 Creating an archive generates an exception on Windows
Marcin Kuzminski <marcin@python-works.com>
parents:
2294
diff
changeset
|
392 % (repo_name, revision[:12], ext)) |
058e2743e7b7
fixes issue #455 Creating an archive generates an exception on Windows
Marcin Kuzminski <marcin@python-works.com>
parents:
2294
diff
changeset
|
393 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
|
394 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
|
395 |
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
|
396 @LoginRequired() |
1305
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
397 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', |
166317d464f3
Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents:
1273
diff
changeset
|
398 'repository.admin') |
129
42d46deb124d
implemented simple diffs for history of files.
Marcin Kuzminski <marcin@python-works.com>
parents:
128
diff
changeset
|
399 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
|
400 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
|
401 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
|
402 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
|
403 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
|
404 c.action = request.GET.get('diff') |
131
49c7e191c2cd
Implemented mercurial style diff-lib
Marcin Kuzminski <marcin@python-works.com>
parents:
130
diff
changeset
|
405 c.no_changes = diff1 == diff2 |
129
42d46deb124d
implemented simple diffs for history of files.
Marcin Kuzminski <marcin@python-works.com>
parents:
128
diff
changeset
|
406 c.f_path = f_path |
1273
64cb9612f9aa
Added show as raw into big diff
Marcin Kuzminski <marcin@python-works.com>
parents:
1245
diff
changeset
|
407 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
|
408 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
|
409 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
|
410 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
|
411 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
|
412 c.changes[diff2] = [] |
275
2d61aa00e855
fixed bugs when putting empty or unknown changesets into diff
Marcin Kuzminski <marcin@python-works.com>
parents:
272
diff
changeset
|
413 try: |
544
d8778cde98f0
added limits to single file diffs
Marcin Kuzminski <marcin@python-works.com>
parents:
512
diff
changeset
|
414 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
|
415 c.changeset_1 = c.rhodecode_repo.get_changeset(diff1) |
275
2d61aa00e855
fixed bugs when putting empty or unknown changesets into diff
Marcin Kuzminski <marcin@python-works.com>
parents:
272
diff
changeset
|
416 node1 = c.changeset_1.get_node(f_path) |
2d61aa00e855
fixed bugs when putting empty or unknown changesets into diff
Marcin Kuzminski <marcin@python-works.com>
parents:
272
diff
changeset
|
417 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
|
418 c.changeset_1 = EmptyChangeset(repo=c.rhodecode_repo) |
544
d8778cde98f0
added limits to single file diffs
Marcin Kuzminski <marcin@python-works.com>
parents:
512
diff
changeset
|
419 node1 = FileNode('.', '', changeset=c.changeset_1) |
636
ffd07396d315
Fixes for raw_id, needed for git
Marcin Kuzminski <marcin@python-works.com>
parents:
629
diff
changeset
|
420 |
544
d8778cde98f0
added limits to single file diffs
Marcin Kuzminski <marcin@python-works.com>
parents:
512
diff
changeset
|
421 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
|
422 c.changeset_2 = c.rhodecode_repo.get_changeset(diff2) |
275
2d61aa00e855
fixed bugs when putting empty or unknown changesets into diff
Marcin Kuzminski <marcin@python-works.com>
parents:
272
diff
changeset
|
423 node2 = c.changeset_2.get_node(f_path) |
2d61aa00e855
fixed bugs when putting empty or unknown changesets into diff
Marcin Kuzminski <marcin@python-works.com>
parents:
272
diff
changeset
|
424 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
|
425 c.changeset_2 = EmptyChangeset(repo=c.rhodecode_repo) |
544
d8778cde98f0
added limits to single file diffs
Marcin Kuzminski <marcin@python-works.com>
parents:
512
diff
changeset
|
426 node2 = FileNode('.', '', 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
|
427 except RepositoryError: |
1818
cf51bbfb120e
auto white-space removal
Marcin Kuzminski <marcin@python-works.com>
parents:
1810
diff
changeset
|
428 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
|
429 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
|
430 |
337
fa3835d34fc1
fixed bug when diff command was different than available options
Marcin Kuzminski <marcin@python-works.com>
parents:
335
diff
changeset
|
431 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
|
432 _diff = diffs.get_gitdiff(node1, node2, |
1768
5610fd9b6803
added line context control to diffs
Marcin Kuzminski <marcin@python-works.com>
parents:
1753
diff
changeset
|
433 ignore_whitespace=ignore_whitespace, |
5610fd9b6803
added line context control to diffs
Marcin Kuzminski <marcin@python-works.com>
parents:
1753
diff
changeset
|
434 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
|
435 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
|
436 |
160
0f7f93df5802
implemented rawdiff and diff download into diff view.
Marcin Kuzminski <marcin@python-works.com>
parents:
158
diff
changeset
|
437 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
|
438 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
|
439 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
|
440 '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
|
441 ) |
160
0f7f93df5802
implemented rawdiff and diff download into diff view.
Marcin Kuzminski <marcin@python-works.com>
parents:
158
diff
changeset
|
442 return diff.raw_diff() |
636
ffd07396d315
Fixes for raw_id, needed for git
Marcin Kuzminski <marcin@python-works.com>
parents:
629
diff
changeset
|
443 |
337
fa3835d34fc1
fixed bug when diff command was different than available options
Marcin Kuzminski <marcin@python-works.com>
parents:
335
diff
changeset
|
444 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
|
445 _diff = diffs.get_gitdiff(node1, node2, |
1768
5610fd9b6803
added line context control to diffs
Marcin Kuzminski <marcin@python-works.com>
parents:
1753
diff
changeset
|
446 ignore_whitespace=ignore_whitespace, |
5610fd9b6803
added line context control to diffs
Marcin Kuzminski <marcin@python-works.com>
parents:
1753
diff
changeset
|
447 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
|
448 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
|
449 response.content_type = 'text/plain' |
3765f0f479a2
fixed raw diff as purly raw without html
Marcin Kuzminski <marcin@python-works.com>
parents:
644
diff
changeset
|
450 return diff.raw_diff() |
662
373ee7031003
fixed annotation bug, added history to annotation.
Marcin Kuzminski <marcin@python-works.com>
parents:
649
diff
changeset
|
451 |
337
fa3835d34fc1
fixed bug when diff command was different than available options
Marcin Kuzminski <marcin@python-works.com>
parents:
335
diff
changeset
|
452 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
|
453 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
|
454 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
|
455 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
|
456 |
1789
17caf4efe15c
implements #308 rewrote diffs to enable displaying full diff on each file
Marcin Kuzminski <marcin@python-works.com>
parents:
1768
diff
changeset
|
457 lim = request.GET.get('fulldiff') or self.cut_off_limit |
2109 | 458 _, 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
|
459 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
|
460 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
|
461 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
|
462 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
|
463 enable_comments=False) |
1273
64cb9612f9aa
Added show as raw into big diff
Marcin Kuzminski <marcin@python-works.com>
parents:
1245
diff
changeset
|
464 |
1789
17caf4efe15c
implements #308 rewrote diffs to enable displaying full diff on each file
Marcin Kuzminski <marcin@python-works.com>
parents:
1768
diff
changeset
|
465 c.changes = [('', node2, diff, cs1, cs2, st,)] |
636
ffd07396d315
Fixes for raw_id, needed for git
Marcin Kuzminski <marcin@python-works.com>
parents:
629
diff
changeset
|
466 |
129
42d46deb124d
implemented simple diffs for history of files.
Marcin Kuzminski <marcin@python-works.com>
parents:
128
diff
changeset
|
467 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
|
468 |
2456
51b203e44202
Add authors into file view
Marcin Kuzminski <marcin@python-works.com>
parents:
2428
diff
changeset
|
469 def _get_node_history(self, cs, f_path, changesets=None): |
51b203e44202
Add authors into file view
Marcin Kuzminski <marcin@python-works.com>
parents:
2428
diff
changeset
|
470 if changesets is None: |
51b203e44202
Add authors into file view
Marcin Kuzminski <marcin@python-works.com>
parents:
2428
diff
changeset
|
471 changesets = cs.get_file_history(f_path) |
128
9deb6f1d5b90
Implemented file history.
Marcin Kuzminski <marcin@python-works.com>
parents:
106
diff
changeset
|
472 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
|
473 |
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
|
474 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
|
475 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
|
476 tags_group = ([], _("Tags")) |
2046
4e1e265af5ca
remove branch from git filenode history drop-down
Marcin Kuzminski <marcin@python-works.com>
parents:
2007
diff
changeset
|
477 _hg = cs.repository.alias == 'hg' |
128
9deb6f1d5b90
Implemented file history.
Marcin Kuzminski <marcin@python-works.com>
parents:
106
diff
changeset
|
478 for chs in changesets: |
2046
4e1e265af5ca
remove branch from git filenode history drop-down
Marcin Kuzminski <marcin@python-works.com>
parents:
2007
diff
changeset
|
479 _branch = '(%s)' % chs.branch if _hg else '' |
4e1e265af5ca
remove branch from git filenode history drop-down
Marcin Kuzminski <marcin@python-works.com>
parents:
2007
diff
changeset
|
480 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
|
481 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
|
482 |
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
|
483 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
|
484 |
1045
3fc9183e05dd
another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents:
1044
diff
changeset
|
485 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
|
486 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
|
487 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
|
488 |
1045
3fc9183e05dd
another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents:
1044
diff
changeset
|
489 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
|
490 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
|
491 hist_l.append(tags_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
|
492 |
128
9deb6f1d5b90
Implemented file history.
Marcin Kuzminski <marcin@python-works.com>
parents:
106
diff
changeset
|
493 return hist_l |
1452
8585fbf3ed06
Implemented #111 copy github node finder solution
Marcin Kuzminski <marcin@python-works.com>
parents:
1450
diff
changeset
|
494 |
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
|
495 @LoginRequired() |
1452
8585fbf3ed06
Implemented #111 copy github node finder solution
Marcin Kuzminski <marcin@python-works.com>
parents:
1450
diff
changeset
|
496 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', |
8585fbf3ed06
Implemented #111 copy github node finder solution
Marcin Kuzminski <marcin@python-works.com>
parents:
1450
diff
changeset
|
497 '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
|
498 @jsonify |
1452
8585fbf3ed06
Implemented #111 copy github node finder solution
Marcin Kuzminski <marcin@python-works.com>
parents:
1450
diff
changeset
|
499 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
|
500 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
|
501 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
|
502 _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
|
503 flat=False) |
2428
530bd12fc18a
removed JSON array envelope from filter files function
Marcin Kuzminski <marcin@python-works.com>
parents:
2318
diff
changeset
|
504 return {'nodes': _d + _f} |