annotate rhodecode/controllers/files.py @ 4186:7e5f8c12a3fc kallithea-2.2.5-rebrand

First step in two-part process to rename directories to kallithea. This first step is to change all references in the files where they refer to the old directory name.
author Bradley M. Kuhn <bkuhn@sfconservancy.org>
date Wed, 02 Jul 2014 19:04:28 -0400
parents ffd45b185016
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 -*-
1206
a671db5bdd58 fixed license issue #149
Marcin Kuzminski <marcin@python-works.com>
parents: 1203
diff changeset
2 # 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
3 # 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
4 # 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
5 # (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
6 #
252
3782a6d698af licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 245
diff changeset
7 # 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
8 # 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
9 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3782a6d698af licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 245
diff changeset
10 # 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
11 #
252
3782a6d698af licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 245
diff changeset
12 # 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
13 # along with this program. If not, see <http://www.gnu.org/licenses/>.
4116
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
14 """
4186
7e5f8c12a3fc First step in two-part process to rename directories to kallithea.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4116
diff changeset
15 kallithea.controllers.files
4116
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
16 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
17
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
18 Files controller for RhodeCode
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
19
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
20 :created_on: Apr 21, 2010
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
21 :author: marcink
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
22 :copyright: (c) 2013 RhodeCode GmbH.
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
23 :license: GPLv3, see LICENSE for more details.
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
24 """
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
25
2291
982d8a80e048 archive file fixes for python 2.5
Marcin Kuzminski <marcin@python-works.com>
parents: 2277
diff changeset
26 from __future__ import with_statement
1200
3ecaa17d9dea added os.sep for files controller
Marcin Kuzminski <marcin@python-works.com>
parents: 1190
diff changeset
27 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
28 import logging
1305
166317d464f3 Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents: 1273
diff changeset
29 import traceback
2267
b872bc10f4ec cleanup code of get archive for repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 2255
diff changeset
30 import tempfile
3490
c0ac34b8eb07 initial version of #788 tarball cache
Marcin Kuzminski <marcin@python-works.com>
parents: 3488
diff changeset
31 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
32
1789
17caf4efe15c implements #308 rewrote diffs to enable displaying full diff on each file
Marcin Kuzminski <marcin@python-works.com>
parents: 1768
diff changeset
33 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
34 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
35 from pylons.controllers.util import redirect
4186
7e5f8c12a3fc First step in two-part process to rename directories to kallithea.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4116
diff changeset
36 from kallithea.lib.utils import jsonify, action_logger
812
30ad41c76fae fixes #79 cut off limit was added into .ini config files
Marcin Kuzminski <marcin@python-works.com>
parents: 774
diff changeset
37
4186
7e5f8c12a3fc First step in two-part process to rename directories to kallithea.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4116
diff changeset
38 from kallithea.lib import diffs
7e5f8c12a3fc First step in two-part process to rename directories to kallithea.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4116
diff changeset
39 from kallithea.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
40
4186
7e5f8c12a3fc First step in two-part process to rename directories to kallithea.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4116
diff changeset
41 from kallithea.lib.compat import OrderedDict
7e5f8c12a3fc First step in two-part process to rename directories to kallithea.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4116
diff changeset
42 from kallithea.lib.utils2 import convert_line_endings, detect_mode, safe_str,\
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
43 str2bool
4186
7e5f8c12a3fc First step in two-part process to rename directories to kallithea.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4116
diff changeset
44 from kallithea.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator
7e5f8c12a3fc First step in two-part process to rename directories to kallithea.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4116
diff changeset
45 from kallithea.lib.base import BaseRepoController, render
7e5f8c12a3fc First step in two-part process to rename directories to kallithea.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4116
diff changeset
46 from kallithea.lib.vcs.backends.base import EmptyChangeset
7e5f8c12a3fc First step in two-part process to rename directories to kallithea.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4116
diff changeset
47 from kallithea.lib.vcs.conf import settings
7e5f8c12a3fc First step in two-part process to rename directories to kallithea.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4116
diff changeset
48 from kallithea.lib.vcs.exceptions import RepositoryError, \
2109
8ecfed1d8f8b utils/conf
Marcin Kuzminski <marcin@python-works.com>
parents: 2083
diff changeset
49 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
50 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
51 NodeDoesNotExistError, ChangesetError, NodeError
4186
7e5f8c12a3fc First step in two-part process to rename directories to kallithea.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4116
diff changeset
52 from kallithea.lib.vcs.nodes import FileNode
2109
8ecfed1d8f8b utils/conf
Marcin Kuzminski <marcin@python-works.com>
parents: 2083
diff changeset
53
4186
7e5f8c12a3fc First step in two-part process to rename directories to kallithea.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4116
diff changeset
54 from kallithea.model.repo import RepoModel
7e5f8c12a3fc First step in two-part process to rename directories to kallithea.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4116
diff changeset
55 from kallithea.model.scm import ScmModel
7e5f8c12a3fc First step in two-part process to rename directories to kallithea.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4116
diff changeset
56 from kallithea.model.db import Repository
2109
8ecfed1d8f8b utils/conf
Marcin Kuzminski <marcin@python-works.com>
parents: 2083
diff changeset
57
4186
7e5f8c12a3fc First step in two-part process to rename directories to kallithea.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4116
diff changeset
58 from kallithea.controllers.changeset import anchor_url, _ignorews_url,\
1789
17caf4efe15c implements #308 rewrote diffs to enable displaying full diff on each file
Marcin Kuzminski <marcin@python-works.com>
parents: 1768
diff changeset
59 _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
60 from webob.exc import HTTPNotFound
4186
7e5f8c12a3fc First step in two-part process to rename directories to kallithea.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4116
diff changeset
61 from kallithea.lib.exceptions import NonRelativePathError, IMCCommitError
2109
8ecfed1d8f8b utils/conf
Marcin Kuzminski <marcin@python-works.com>
parents: 2083
diff changeset
62
1305
166317d464f3 Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents: 1273
diff changeset
63
93
aec4c0071cb3 added empty controllers for branches tags files graph, routing and test for them
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
64 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
65
1134
1dc5d169e85a fixed issue with vcs stream
Marcin Kuzminski <marcin@python-works.com>
parents: 1132
diff changeset
66
1045
3fc9183e05dd another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents: 1044
diff changeset
67 class FilesController(BaseRepoController):
636
ffd07396d315 Fixes for raw_id, needed for git
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
68
99
5b57295601b6 Updated basic files browser with, pygments
Marcin Kuzminski <marcin@python-works.com>
parents: 93
diff changeset
69 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
70 super(FilesController, self).__before__()
813
e8b5be26fb78 fixed small issue made on latest patches
Marcin Kuzminski <marcin@python-works.com>
parents: 812
diff changeset
71 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
72
1483
7b67b0dcad6d Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents: 1480
diff changeset
73 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
74 """
1137
82344ce0a892 clean and fixes in files controller
Marcin Kuzminski <marcin@python-works.com>
parents: 1134
diff changeset
75 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
76 proper message
1203
6832ef664673 source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents: 1200
diff changeset
77
1045
3fc9183e05dd another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents: 1044
diff changeset
78 :param rev: revision to fetch
3fc9183e05dd another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents: 1044
diff changeset
79 :param repo_name: repo name to redirect after
3fc9183e05dd another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents: 1044
diff changeset
80 """
3fc9183e05dd another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents: 1044
diff changeset
81
3fc9183e05dd another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents: 1044
diff changeset
82 try:
3fc9183e05dd another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents: 1044
diff changeset
83 return c.rhodecode_repo.get_changeset(rev)
3fc9183e05dd another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents: 1044
diff changeset
84 except EmptyRepositoryError, e:
1483
7b67b0dcad6d Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents: 1480
diff changeset
85 if not redirect_after:
7b67b0dcad6d Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents: 1480
diff changeset
86 return None
7b67b0dcad6d Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents: 1480
diff changeset
87 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
88 repo_name=c.repo_name,
4116
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
89 revision=0, f_path='', anchor='edit')
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
90 add_new = h.link_to(_('Click here to add new file'), url_, class_="alert-link")
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
91 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
92 category='warning')
1045
3fc9183e05dd another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents: 1044
diff changeset
93 redirect(h.url('summary_home', repo_name=repo_name))
4116
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
94 except(ChangesetDoesNotExistError, LookupError), e:
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
95 log.error(traceback.format_exc())
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
96 msg = _('Such revision does not exist for this repository')
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
97 h.flash(msg, category='error')
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
98 raise HTTPNotFound()
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
99 except RepositoryError, e:
4077
0e1023147334 Use safe_str on flash messages.
Marcin Kuzminski <marcin@python-works.com>
parents: 4072
diff changeset
100 h.flash(safe_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
101 raise HTTPNotFound()
1045
3fc9183e05dd another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents: 1044
diff changeset
102
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
103 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
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 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
106 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
107
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
108 :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
109 :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
110 :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
111 """
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
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 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
114 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
115 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
116 raise RepositoryError('given path is a directory')
4116
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
117 except(ChangesetDoesNotExistError,), e:
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
118 log.error(traceback.format_exc())
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
119 msg = _('Such revision does not exist for this repository')
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
120 h.flash(msg, category='error')
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
121 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
122 except RepositoryError, e:
4077
0e1023147334 Use safe_str on flash messages.
Marcin Kuzminski <marcin@python-works.com>
parents: 4072
diff changeset
123 h.flash(safe_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
124 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
125
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
126 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
127
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
128 @LoginRequired()
1305
166317d464f3 Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents: 1273
diff changeset
129 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
166317d464f3 Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents: 1273
diff changeset
130 'repository.admin')
2177
ee07357d9265 unified annotation view with file source view
Marcin Kuzminski <marcin@python-works.com>
parents: 2109
diff changeset
131 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
132 # 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
133 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
134 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
135 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
136
1137
82344ce0a892 clean and fixes in files controller
Marcin Kuzminski <marcin@python-works.com>
parents: 1134
diff changeset
137 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
138 c.branch = request.GET.get('branch', None)
82344ce0a892 clean and fixes in files controller
Marcin Kuzminski <marcin@python-works.com>
parents: 1134
diff changeset
139 c.f_path = f_path
2177
ee07357d9265 unified annotation view with file source view
Marcin Kuzminski <marcin@python-works.com>
parents: 2109
diff changeset
140 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
141 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
142 cur_rev = c.changeset.revision
636
ffd07396d315 Fixes for raw_id, needed for git
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
143
1789
17caf4efe15c implements #308 rewrote diffs to enable displaying full diff on each file
Marcin Kuzminski <marcin@python-works.com>
parents: 1768
diff changeset
144 # prev link
1137
82344ce0a892 clean and fixes in files controller
Marcin Kuzminski <marcin@python-works.com>
parents: 1134
diff changeset
145 try:
82344ce0a892 clean and fixes in files controller
Marcin Kuzminski <marcin@python-works.com>
parents: 1134
diff changeset
146 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
147 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
148 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
149 if c.branch:
82344ce0a892 clean and fixes in files controller
Marcin Kuzminski <marcin@python-works.com>
parents: 1134
diff changeset
150 c.url_prev += '?branch=%s' % c.branch
82344ce0a892 clean and fixes in files controller
Marcin Kuzminski <marcin@python-works.com>
parents: 1134
diff changeset
151 except (ChangesetDoesNotExistError, VCSError):
82344ce0a892 clean and fixes in files controller
Marcin Kuzminski <marcin@python-works.com>
parents: 1134
diff changeset
152 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
153
1789
17caf4efe15c implements #308 rewrote diffs to enable displaying full diff on each file
Marcin Kuzminski <marcin@python-works.com>
parents: 1768
diff changeset
154 # next link
1137
82344ce0a892 clean and fixes in files controller
Marcin Kuzminski <marcin@python-works.com>
parents: 1134
diff changeset
155 try:
82344ce0a892 clean and fixes in files controller
Marcin Kuzminski <marcin@python-works.com>
parents: 1134
diff changeset
156 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
157 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
158 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
159 if c.branch:
82344ce0a892 clean and fixes in files controller
Marcin Kuzminski <marcin@python-works.com>
parents: 1134
diff changeset
160 c.url_next += '?branch=%s' % c.branch
82344ce0a892 clean and fixes in files controller
Marcin Kuzminski <marcin@python-works.com>
parents: 1134
diff changeset
161 except (ChangesetDoesNotExistError, VCSError):
82344ce0a892 clean and fixes in files controller
Marcin Kuzminski <marcin@python-works.com>
parents: 1134
diff changeset
162 c.url_next = '#'
636
ffd07396d315 Fixes for raw_id, needed for git
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
163
1789
17caf4efe15c implements #308 rewrote diffs to enable displaying full diff on each file
Marcin Kuzminski <marcin@python-works.com>
parents: 1768
diff changeset
164 # files or dirs
1137
82344ce0a892 clean and fixes in files controller
Marcin Kuzminski <marcin@python-works.com>
parents: 1134
diff changeset
165 try:
1737
61eda8bf70d0 new files views
Marcin Kuzminski <marcin@python-works.com>
parents: 1664
diff changeset
166 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
167
1737
61eda8bf70d0 new files views
Marcin Kuzminski <marcin@python-works.com>
parents: 1664
diff changeset
168 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
169 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
170 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
171 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
172 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
173 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
174 #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
175 _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
176 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
177 _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
178 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
179 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
180 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
181
2456
51b203e44202 Add authors into file view
Marcin Kuzminski <marcin@python-works.com>
parents: 2428
diff changeset
182 c.authors = []
51b203e44202 Add authors into file view
Marcin Kuzminski <marcin@python-works.com>
parents: 2428
diff changeset
183 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
184 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
185 else:
2456
51b203e44202 Add authors into file view
Marcin Kuzminski <marcin@python-works.com>
parents: 2428
diff changeset
186 c.authors = c.file_history = []
644
c8bd0e6cc3da some changes for #45.
Marcin Kuzminski <marcin@python-works.com>
parents: 636
diff changeset
187 except RepositoryError, e:
4077
0e1023147334 Use safe_str on flash messages.
Marcin Kuzminski <marcin@python-works.com>
parents: 4072
diff changeset
188 h.flash(safe_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
189 raise HTTPNotFound()
644
c8bd0e6cc3da some changes for #45.
Marcin Kuzminski <marcin@python-works.com>
parents: 636
diff changeset
190
2686
269c6e0b54cc Reimplemented file-browser using partial-ajax
Marcin Kuzminski <marcin@python-works.com>
parents: 2684
diff changeset
191 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
192 return render('files/files_ypjax.html')
269c6e0b54cc Reimplemented file-browser using partial-ajax
Marcin Kuzminski <marcin@python-works.com>
parents: 2684
diff changeset
193
128
9deb6f1d5b90 Implemented file history.
Marcin Kuzminski <marcin@python-works.com>
parents: 106
diff changeset
194 return render('files/files.html')
9deb6f1d5b90 Implemented file history.
Marcin Kuzminski <marcin@python-works.com>
parents: 106
diff changeset
195
3749
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3654
diff changeset
196 @LoginRequired()
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3654
diff changeset
197 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3654
diff changeset
198 'repository.admin')
4116
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
199 @jsonify
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
200 def history(self, repo_name, revision, f_path):
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
201 changeset = self.__get_cs_or_redirect(revision, repo_name)
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
202 f_path = f_path
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
203 _file = changeset.get_node(f_path)
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
204 if _file.is_file():
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
205 file_history, _hist = self._get_node_history(changeset, f_path)
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
206
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
207 res = []
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
208 for obj in file_history:
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
209 res.append({
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
210 'text': obj[1],
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
211 'children': [{'id': o[0], 'text': o[1]} for o in obj[0]]
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
212 })
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
213
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
214 data = {
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
215 'more': False,
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
216 'results': res
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
217 }
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
218 return data
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
219
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
220 @LoginRequired()
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
221 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
222 'repository.admin')
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
223 def authors(self, repo_name, revision, f_path):
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
224 changeset = self.__get_cs_or_redirect(revision, repo_name)
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
225 f_path = f_path
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
226 _file = changeset.get_node(f_path)
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
227 if _file.is_file():
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
228 file_history, _hist = self._get_node_history(changeset, f_path)
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
229 c.authors = []
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
230 for a in set([x.author for x in _hist]):
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
231 c.authors.append((h.email(a), h.person(a)))
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
232 return render('files/files_history_box.html')
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
233
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
234 @LoginRequired()
1305
166317d464f3 Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents: 1273
diff changeset
235 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
166317d464f3 Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents: 1273
diff changeset
236 'repository.admin')
147
873fd2dc62c2 Added rawfile support, and few fixes for file
Marcin Kuzminski <marcin@python-works.com>
parents: 145
diff changeset
237 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
238 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
239 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
240
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
241 response.content_disposition = 'attachment; filename=%s' % \
2255
95800dad44d0 fixes for tests on Windows
Marcin Kuzminski <marcin@python-works.com>
parents: 2199
diff changeset
242 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
243
160
0f7f93df5802 implemented rawdiff and diff download into diff view.
Marcin Kuzminski <marcin@python-works.com>
parents: 158
diff changeset
244 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
245 return file_node.content
2461
015a42e970a6 whitespace cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 2457
diff changeset
246
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
247 @LoginRequired()
1305
166317d464f3 Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents: 1273
diff changeset
248 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
166317d464f3 Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents: 1273
diff changeset
249 'repository.admin')
485
9836541b0509 added limit for showing pygemntized source codes larger than 250kb.
Marcin Kuzminski <marcin@python-works.com>
parents: 438
diff changeset
250 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
251 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
252 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
253
1241
ed5270522724 changed raw action to show images instead of saying about binary file
Marcin Kuzminski <marcin@python-works.com>
parents: 1224
diff changeset
254 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
255 # 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
256 # 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
257 # 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
258 # 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
259
ed5270522724 changed raw action to show images instead of saying about binary file
Marcin Kuzminski <marcin@python-works.com>
parents: 1224
diff changeset
260 # 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
261 '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
262 '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
263 '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
264 '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
265 '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
266 }
ed5270522724 changed raw action to show images instead of saying about binary file
Marcin Kuzminski <marcin@python-works.com>
parents: 1224
diff changeset
267
ed5270522724 changed raw action to show images instead of saying about binary file
Marcin Kuzminski <marcin@python-works.com>
parents: 1224
diff changeset
268 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
269 try:
ed5270522724 changed raw action to show images instead of saying about binary file
Marcin Kuzminski <marcin@python-works.com>
parents: 1224
diff changeset
270 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
271 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
272 # 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
273 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
274 # 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
275 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
276 else:
ed5270522724 changed raw action to show images instead of saying about binary file
Marcin Kuzminski <marcin@python-works.com>
parents: 1224
diff changeset
277 # 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
278 # 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
279 # Note: underlying vcs library fakes text/plain mimetype if the
1245
5f2fbab7c429 PEP8ify - controllers
Marcin Kuzminski <marcin@python-works.com>
parents: 1241
diff changeset
280 # mimetype can not be determined and it thinks it is not
5f2fbab7c429 PEP8ify - controllers
Marcin Kuzminski <marcin@python-works.com>
parents: 1241
diff changeset
281 # binary.This might lead to erroneous text display in some
5f2fbab7c429 PEP8ify - controllers
Marcin Kuzminski <marcin@python-works.com>
parents: 1241
diff changeset
282 # cases, but helps in other cases, like with text files
5f2fbab7c429 PEP8ify - controllers
Marcin Kuzminski <marcin@python-works.com>
parents: 1241
diff changeset
283 # 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
284 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
285
ed5270522724 changed raw action to show images instead of saying about binary file
Marcin Kuzminski <marcin@python-works.com>
parents: 1224
diff changeset
286 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
287 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
288 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
289
ed5270522724 changed raw action to show images instead of saying about binary file
Marcin Kuzminski <marcin@python-works.com>
parents: 1224
diff changeset
290 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
291 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
292 return file_node.content
636
ffd07396d315 Fixes for raw_id, needed for git
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
293
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
294 @LoginRequired()
1305
166317d464f3 Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents: 1273
diff changeset
295 @HasRepoPermissionAnyDecorator('repository.write', 'repository.admin')
4116
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
296 def delete(self, repo_name, revision, f_path):
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
297 repo = c.rhodecode_db_repo
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
298 if repo.enable_locking and repo.locked[0]:
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
299 h.flash(_('This repository is has been locked by %s on %s')
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
300 % (h.person_by_id(repo.locked[0]),
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
301 h.fmt_date(h.time_to_datetime(repo.locked[1]))),
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
302 'warning')
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
303 return redirect(h.url('files_home',
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
304 repo_name=repo_name, revision='tip'))
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
305
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
306 # check if revision is a branch identifier- basically we cannot
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
307 # create multiple heads via file editing
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
308 _branches = repo.scm_instance.branches
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
309 # check if revision is a branch name or branch hash
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
310 if revision not in _branches.keys() + _branches.values():
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
311 h.flash(_('You can only delete files with revision '
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
312 'being a valid branch '), category='warning')
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
313 return redirect(h.url('files_home',
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
314 repo_name=repo_name, revision='tip',
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
315 f_path=f_path))
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
316
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
317 r_post = request.POST
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
318
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
319 c.cs = self.__get_cs_or_redirect(revision, repo_name)
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
320 c.file = self.__get_filenode_or_redirect(repo_name, c.cs, f_path)
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
321
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
322 c.default_message = _('Deleted file %s via RhodeCode') % (f_path)
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
323 c.f_path = f_path
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
324 node_path = f_path
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
325 author = self.rhodecode_user.full_contact
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
326
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
327 if r_post:
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
328 message = r_post.get('message') or c.default_message
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
329
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
330 try:
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
331 nodes = {
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
332 node_path: {
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
333 'content': ''
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
334 }
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
335 }
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
336 self.scm_model.delete_nodes(
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
337 user=c.rhodecode_user.user_id, repo=c.rhodecode_db_repo,
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
338 message=message,
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
339 nodes=nodes,
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
340 parent_cs=c.cs,
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
341 author=author,
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
342 )
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
343
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
344 h.flash(_('Successfully deleted file %s') % f_path,
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
345 category='success')
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
346 except Exception:
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
347 log.error(traceback.format_exc())
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
348 h.flash(_('Error occurred during commit'), category='error')
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
349 return redirect(url('changeset_home',
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
350 repo_name=c.repo_name, revision='tip'))
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
351
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
352 return render('files/files_delete.html')
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
353
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
354 @LoginRequired()
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
355 @HasRepoPermissionAnyDecorator('repository.write', 'repository.admin')
1305
166317d464f3 Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents: 1273
diff changeset
356 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
357 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
358 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
359 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
360 % (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
361 h.fmt_date(h.time_to_datetime(repo.locked[1]))),
4070
008e460c5b9d fixes issue #860.
Marcin Kuzminski <marcin@python-works.com>
parents: 4060
diff changeset
362 'warning')
2727
5899fe08f063 Forbid adding files and editing from web interface while repo is locked
Marcin Kuzminski <marcin@python-works.com>
parents: 2688
diff changeset
363 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
364 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
365
3237
f5dd76e2a7af disable file editing when not on branch head fixes issue #462
Marcin Kuzminski <marcin@python-works.com>
parents: 3061
diff changeset
366 # 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
367 # 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
368 _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
369 # 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
370 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
371 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
372 '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
373 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
374 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
375 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
376
1305
166317d464f3 Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents: 1273
diff changeset
377 r_post = request.POST
166317d464f3 Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents: 1273
diff changeset
378
166317d464f3 Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents: 1273
diff changeset
379 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
380 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
381
1313
856be614d9a4 disabled edition of binary files
Marcin Kuzminski <marcin@python-works.com>
parents: 1312
diff changeset
382 if c.file.is_binary:
856be614d9a4 disabled edition of binary files
Marcin Kuzminski <marcin@python-works.com>
parents: 1312
diff changeset
383 return redirect(url('files_home', repo_name=c.repo_name,
4070
008e460c5b9d fixes issue #860.
Marcin Kuzminski <marcin@python-works.com>
parents: 4060
diff changeset
384 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
385 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
386 c.f_path = f_path
166317d464f3 Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents: 1273
diff changeset
387
166317d464f3 Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents: 1273
diff changeset
388 if r_post:
166317d464f3 Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents: 1273
diff changeset
389
166317d464f3 Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents: 1273
diff changeset
390 old_content = c.file.content
1306
6e1d24503383 Added support for ascendent characters for inMemoryCommit
Marcin Kuzminski <marcin@python-works.com>
parents: 1305
diff changeset
391 sl = old_content.splitlines(1)
6e1d24503383 Added support for ascendent characters for inMemoryCommit
Marcin Kuzminski <marcin@python-works.com>
parents: 1305
diff changeset
392 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
393 # 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
394 mode = detect_mode(first_line, 0)
3839
9dec870411e0 Added more tests for web based file edit and add
Marcin Kuzminski <marcin@python-works.com>
parents: 3749
diff changeset
395 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
396
3237
f5dd76e2a7af disable file editing when not on branch head fixes issue #462
Marcin Kuzminski <marcin@python-works.com>
parents: 3061
diff changeset
397 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
398 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
399
166317d464f3 Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents: 1273
diff changeset
400 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
401 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
402 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
403 revision='tip'))
1305
166317d464f3 Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents: 1273
diff changeset
404 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
405 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
406 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
407 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
408 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
409 content=content, f_path=f_path)
2570
94ae02ca5f00 i18n improve
Takumi IINO <trot.thunder@gmail.com>
parents: 2536
diff changeset
410 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
411 category='success')
1311
6705eeebc41b moved out commit into scm model, and added cache invalidation after commit.
Marcin Kuzminski <marcin@python-works.com>
parents: 1308
diff changeset
412 except Exception:
1305
166317d464f3 Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents: 1273
diff changeset
413 log.error(traceback.format_exc())
166317d464f3 Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents: 1273
diff changeset
414 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
415 return redirect(url('changeset_home',
166317d464f3 Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents: 1273
diff changeset
416 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
417
166317d464f3 Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents: 1273
diff changeset
418 return render('files/files_edit.html')
166317d464f3 Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents: 1273
diff changeset
419
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
420 @LoginRequired()
1483
7b67b0dcad6d Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents: 1480
diff changeset
421 @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
422 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
423
5899fe08f063 Forbid adding files and editing from web interface while repo is locked
Marcin Kuzminski <marcin@python-works.com>
parents: 2688
diff changeset
424 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
425 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
426 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
427 % (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
428 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
429 'warning')
5899fe08f063 Forbid adding files and editing from web interface while repo is locked
Marcin Kuzminski <marcin@python-works.com>
parents: 2688
diff changeset
430 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
431 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
432
1483
7b67b0dcad6d Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents: 1480
diff changeset
433 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
434 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
435 redirect_after=False)
7b67b0dcad6d Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents: 1480
diff changeset
436 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
437 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
438 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
439 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
440
7b67b0dcad6d Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents: 1480
diff changeset
441 if r_post:
7b67b0dcad6d Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents: 1480
diff changeset
442 unix_mode = 0
3839
9dec870411e0 Added more tests for web based file edit and add
Marcin Kuzminski <marcin@python-works.com>
parents: 3749
diff changeset
443 content = convert_line_endings(r_post.get('content', ''), unix_mode)
1483
7b67b0dcad6d Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents: 1480
diff changeset
444
3237
f5dd76e2a7af disable file editing when not on branch head fixes issue #462
Marcin Kuzminski <marcin@python-works.com>
parents: 3061
diff changeset
445 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
446 filename = r_post.get('filename')
3839
9dec870411e0 Added more tests for web based file edit and add
Marcin Kuzminski <marcin@python-works.com>
parents: 3749
diff changeset
447 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
448 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
449
269905fac50a added uploading of files from web interface directly into repo
Marcin Kuzminski <marcin@python-works.com>
parents: 1484
diff changeset
450 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
451 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
452 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
453
4072
bf5c2c75c976 fixes issue #856 file upload >1000 bytes on windows throws exception.
Marcin Kuzminski <marcin@python-works.com>
parents: 4070
diff changeset
454 if hasattr(content, 'file'):
bf5c2c75c976 fixes issue #856 file upload >1000 bytes on windows throws exception.
Marcin Kuzminski <marcin@python-works.com>
parents: 4070
diff changeset
455 # non posix systems store real file under file attr
bf5c2c75c976 fixes issue #856 file upload >1000 bytes on windows throws exception.
Marcin Kuzminski <marcin@python-works.com>
parents: 4070
diff changeset
456 content = content.file
bf5c2c75c976 fixes issue #856 file upload >1000 bytes on windows throws exception.
Marcin Kuzminski <marcin@python-works.com>
parents: 4070
diff changeset
457
1483
7b67b0dcad6d Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents: 1480
diff changeset
458 if not content:
7b67b0dcad6d Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents: 1480
diff changeset
459 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
460 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
461 revision='tip'))
1484
1db451a44504 fixed small issues with adding new filenodes
Marcin Kuzminski <marcin@python-works.com>
parents: 1483
diff changeset
462 if not filename:
1db451a44504 fixed small issues with adding new filenodes
Marcin Kuzminski <marcin@python-works.com>
parents: 1483
diff changeset
463 h.flash(_('No filename'), category='warning')
1db451a44504 fixed small issues with adding new filenodes
Marcin Kuzminski <marcin@python-works.com>
parents: 1483
diff changeset
464 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
465 revision='tip'))
3840
dc4644865e8b Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents: 3839
diff changeset
466 #strip all crap out of file, just leave the basename
3559
328eb707fe3f added more strict checks for file path in add file controller
Marcin Kuzminski <marcin@python-works.com>
parents: 3547
diff changeset
467 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
468 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
469 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
470
7b67b0dcad6d Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents: 1480
diff changeset
471 try:
3840
dc4644865e8b Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents: 3839
diff changeset
472 nodes = {
dc4644865e8b Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents: 3839
diff changeset
473 node_path: {
dc4644865e8b Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents: 3839
diff changeset
474 'content': content
dc4644865e8b Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents: 3839
diff changeset
475 }
dc4644865e8b Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents: 3839
diff changeset
476 }
dc4644865e8b Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents: 3839
diff changeset
477 self.scm_model.create_nodes(
dc4644865e8b Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents: 3839
diff changeset
478 user=c.rhodecode_user.user_id, repo=c.rhodecode_db_repo,
dc4644865e8b Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents: 3839
diff changeset
479 message=message,
dc4644865e8b Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents: 3839
diff changeset
480 nodes=nodes,
dc4644865e8b Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents: 3839
diff changeset
481 parent_cs=c.cs,
dc4644865e8b Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents: 3839
diff changeset
482 author=author,
dc4644865e8b Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents: 3839
diff changeset
483 )
dc4644865e8b Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents: 3839
diff changeset
484
2570
94ae02ca5f00 i18n improve
Takumi IINO <trot.thunder@gmail.com>
parents: 2536
diff changeset
485 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
486 category='success')
3840
dc4644865e8b Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents: 3839
diff changeset
487 except NonRelativePathError, e:
dc4644865e8b Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents: 3839
diff changeset
488 h.flash(_('Location must be relative path and must not '
dc4644865e8b Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents: 3839
diff changeset
489 'contain .. in path'), category='warning')
dc4644865e8b Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents: 3839
diff changeset
490 return redirect(url('changeset_home', repo_name=c.repo_name,
dc4644865e8b Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents: 3839
diff changeset
491 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
492 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
493 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
494 except Exception:
7b67b0dcad6d Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents: 1480
diff changeset
495 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
496 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
497 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
498 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
499
7b67b0dcad6d Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents: 1480
diff changeset
500 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
501
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
502 @LoginRequired()
1305
166317d464f3 Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents: 1273
diff changeset
503 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
166317d464f3 Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents: 1273
diff changeset
504 'repository.admin')
872
b956e6f415a2 implemented #91,
Marcin Kuzminski <marcin@python-works.com>
parents: 813
diff changeset
505 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
506
942
32318ec7bfc1 added branch/tag options to download links in summary
Marcin Kuzminski <marcin@python-works.com>
parents: 915
diff changeset
507 fileformat = None
32318ec7bfc1 added branch/tag options to download links in summary
Marcin Kuzminski <marcin@python-works.com>
parents: 915
diff changeset
508 revision = None
948
85ee0ea183e7 fixed archival in rhodecode to use new functions from vcs
Marcin Kuzminski <marcin@python-works.com>
parents: 945
diff changeset
509 ext = None
1450
2a8bf2a3da98 fixes #214 added support for downloading subrepos in download menu.
Marcin Kuzminski <marcin@python-works.com>
parents: 1401
diff changeset
510 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
511
1480
daa29da0f783 fixes for vcs settings module
Marcin Kuzminski <marcin@python-works.com>
parents: 1452
diff changeset
512 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
513 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
514 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
515 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
516 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
517 ext = ext_data[1]
872
b956e6f415a2 implemented #91,
Marcin Kuzminski <marcin@python-works.com>
parents: 813
diff changeset
518
b956e6f415a2 implemented #91,
Marcin Kuzminski <marcin@python-works.com>
parents: 813
diff changeset
519 try:
1045
3fc9183e05dd another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents: 1044
diff changeset
520 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
521 if not dbrepo.enable_downloads:
3654
ec6354949623 Fix a lot of casings - use standard casing in most places
Mads Kiilerich <madski@unity3d.com>
parents: 3625
diff changeset
522 return _('Downloads disabled')
962
72f008ed9b18 implemented #84 downloads can be enabled/disabled per each repository from now.
Marcin Kuzminski <marcin@python-works.com>
parents: 961
diff changeset
523
1809
ef0066e95be5 fix archive download for git
Marcin Kuzminski <marcin@python-works.com>
parents: 1789
diff changeset
524 if c.rhodecode_repo.alias == 'hg':
ef0066e95be5 fix archive download for git
Marcin Kuzminski <marcin@python-works.com>
parents: 1789
diff changeset
525 # 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
526 # hooks on fetching archives with subrepos
ef0066e95be5 fix archive download for git
Marcin Kuzminski <marcin@python-works.com>
parents: 1789
diff changeset
527 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
528 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
529
1045
3fc9183e05dd another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents: 1044
diff changeset
530 cs = c.rhodecode_repo.get_changeset(revision)
1480
daa29da0f783 fixes for vcs settings module
Marcin Kuzminski <marcin@python-works.com>
parents: 1452
diff changeset
531 content_type = settings.ARCHIVE_SPECS[fileformat][0]
872
b956e6f415a2 implemented #91,
Marcin Kuzminski <marcin@python-works.com>
parents: 813
diff changeset
532 except ChangesetDoesNotExistError:
b956e6f415a2 implemented #91,
Marcin Kuzminski <marcin@python-works.com>
parents: 813
diff changeset
533 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
534 except EmptyRepositoryError:
05b59c48556f fixed error when trying to make download on empty repository
Marcin Kuzminski <marcin@python-works.com>
parents: 942
diff changeset
535 return _('Empty repository')
961
840ca7492dbe fixed typo in exception
Marcin Kuzminski <marcin@python-works.com>
parents: 953
diff changeset
536 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
537 return _('Unknown archive type')
3490
c0ac34b8eb07 initial version of #788 tarball cache
Marcin Kuzminski <marcin@python-works.com>
parents: 3488
diff changeset
538 # archive cache
4186
7e5f8c12a3fc First step in two-part process to rename directories to kallithea.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4116
diff changeset
539 from kallithea import CONFIG
3490
c0ac34b8eb07 initial version of #788 tarball cache
Marcin Kuzminski <marcin@python-works.com>
parents: 3488
diff changeset
540 rev_name = cs.raw_id[:12]
c0ac34b8eb07 initial version of #788 tarball cache
Marcin Kuzminski <marcin@python-works.com>
parents: 3488
diff changeset
541 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
542 safe_str(rev_name), ext)
872
b956e6f415a2 implemented #91,
Marcin Kuzminski <marcin@python-works.com>
parents: 813
diff changeset
543
3490
c0ac34b8eb07 initial version of #788 tarball cache
Marcin Kuzminski <marcin@python-works.com>
parents: 3488
diff changeset
544 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
545 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
546 if not subrepos and archive_cache_enabled:
c0ac34b8eb07 initial version of #788 tarball cache
Marcin Kuzminski <marcin@python-works.com>
parents: 3488
diff changeset
547 #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
548 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
549 os.makedirs(CONFIG['archive_cache_dir'])
c0ac34b8eb07 initial version of #788 tarball cache
Marcin Kuzminski <marcin@python-works.com>
parents: 3488
diff changeset
550 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
551 if os.path.isfile(cached_archive_path):
c0ac34b8eb07 initial version of #788 tarball cache
Marcin Kuzminski <marcin@python-works.com>
parents: 3488
diff changeset
552 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
553 fd, archive = None, cached_archive_path
c0ac34b8eb07 initial version of #788 tarball cache
Marcin Kuzminski <marcin@python-works.com>
parents: 3488
diff changeset
554 use_cached_archive = True
c0ac34b8eb07 initial version of #788 tarball cache
Marcin Kuzminski <marcin@python-works.com>
parents: 3488
diff changeset
555 else:
c0ac34b8eb07 initial version of #788 tarball cache
Marcin Kuzminski <marcin@python-works.com>
parents: 3488
diff changeset
556 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
557
c0ac34b8eb07 initial version of #788 tarball cache
Marcin Kuzminski <marcin@python-works.com>
parents: 3488
diff changeset
558 if not use_cached_archive:
4116
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
559 # generate new archive
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
560 temp_stream = None
3490
c0ac34b8eb07 initial version of #788 tarball cache
Marcin Kuzminski <marcin@python-works.com>
parents: 3488
diff changeset
561 try:
c0ac34b8eb07 initial version of #788 tarball cache
Marcin Kuzminski <marcin@python-works.com>
parents: 3488
diff changeset
562 fd, archive = tempfile.mkstemp()
4116
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
563 temp_stream = open(archive, 'wb')
3490
c0ac34b8eb07 initial version of #788 tarball cache
Marcin Kuzminski <marcin@python-works.com>
parents: 3488
diff changeset
564 log.debug('Creating new temp archive in %s' % archive)
4116
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
565 cs.fill_archive(stream=temp_stream, kind=fileformat, subrepos=subrepos)
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
566 if not subrepos and archive_cache_enabled:
3490
c0ac34b8eb07 initial version of #788 tarball cache
Marcin Kuzminski <marcin@python-works.com>
parents: 3488
diff changeset
567 #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
568 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
569 shutil.move(archive, cached_archive_path)
c0ac34b8eb07 initial version of #788 tarball cache
Marcin Kuzminski <marcin@python-works.com>
parents: 3488
diff changeset
570 archive = cached_archive_path
c0ac34b8eb07 initial version of #788 tarball cache
Marcin Kuzminski <marcin@python-works.com>
parents: 3488
diff changeset
571 finally:
4116
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
572 if temp_stream:
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
573 temp_stream.close()
2294
3c1d991755df Use paste fileapp to properly send the archive size
Marcin Kuzminski <marcin@python-works.com>
parents: 2291
diff changeset
574
2318
058e2743e7b7 fixes issue #455 Creating an archive generates an exception on Windows
Marcin Kuzminski <marcin@python-works.com>
parents: 2294
diff changeset
575 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
576 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
577 while True:
058e2743e7b7 fixes issue #455 Creating an archive generates an exception on Windows
Marcin Kuzminski <marcin@python-works.com>
parents: 2294
diff changeset
578 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
579 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
580 stream.close()
3490
c0ac34b8eb07 initial version of #788 tarball cache
Marcin Kuzminski <marcin@python-works.com>
parents: 3488
diff changeset
581 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
582 os.close(fd)
c0ac34b8eb07 initial version of #788 tarball cache
Marcin Kuzminski <marcin@python-works.com>
parents: 3488
diff changeset
583 if not archive_cache_enabled:
c0ac34b8eb07 initial version of #788 tarball cache
Marcin Kuzminski <marcin@python-works.com>
parents: 3488
diff changeset
584 log.debug('Destroing temp archive %s' % archive)
c0ac34b8eb07 initial version of #788 tarball cache
Marcin Kuzminski <marcin@python-works.com>
parents: 3488
diff changeset
585 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
586 break
058e2743e7b7 fixes issue #455 Creating an archive generates an exception on Windows
Marcin Kuzminski <marcin@python-works.com>
parents: 2294
diff changeset
587 yield data
3868
e262494ca099 store download archive actions in journal
Marcin Kuzminski <marcin@python-works.com>
parents: 3840
diff changeset
588 # store download action
e262494ca099 store download archive actions in journal
Marcin Kuzminski <marcin@python-works.com>
parents: 3840
diff changeset
589 action_logger(user=c.rhodecode_user,
e262494ca099 store download archive actions in journal
Marcin Kuzminski <marcin@python-works.com>
parents: 3840
diff changeset
590 action='user_downloaded_archive:%s' % (archive_name),
e262494ca099 store download archive actions in journal
Marcin Kuzminski <marcin@python-works.com>
parents: 3840
diff changeset
591 repo=repo_name, ipaddr=self.ip_addr, commit=True)
3490
c0ac34b8eb07 initial version of #788 tarball cache
Marcin Kuzminski <marcin@python-works.com>
parents: 3488
diff changeset
592 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
593 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
594 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
595
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
596 @LoginRequired()
1305
166317d464f3 Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents: 1273
diff changeset
597 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
166317d464f3 Added server side file editing with commit
Marcin Kuzminski <marcin@python-works.com>
parents: 1273
diff changeset
598 'repository.admin')
129
42d46deb124d implemented simple diffs for history of files.
Marcin Kuzminski <marcin@python-works.com>
parents: 128
diff changeset
599 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
600 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
601 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
602 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
603 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
604 c.action = request.GET.get('diff')
131
49c7e191c2cd Implemented mercurial style diff-lib
Marcin Kuzminski <marcin@python-works.com>
parents: 130
diff changeset
605 c.no_changes = diff1 == diff2
129
42d46deb124d implemented simple diffs for history of files.
Marcin Kuzminski <marcin@python-works.com>
parents: 128
diff changeset
606 c.f_path = f_path
1273
64cb9612f9aa Added show as raw into big diff
Marcin Kuzminski <marcin@python-works.com>
parents: 1245
diff changeset
607 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
608 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
609 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
610 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
611 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
612 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
613
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
614 #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
615 #to reduce JS and callbacks
2995
32471bd1f4ee Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents: 2981
diff changeset
616
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
617 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
618 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
619 _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
620 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
621 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
622 _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
623 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
624
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
625 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
626 try:
544
d8778cde98f0 added limits to single file diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 512
diff changeset
627 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
628 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
629 try:
32471bd1f4ee Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents: 2981
diff changeset
630 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
631 if node1.is_dir():
3563
8d8c4dddd174 fixed bad raise statement
Marcin Kuzminski <marcin@python-works.com>
parents: 3559
diff changeset
632 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
633 % (node1, type(node1)))
2995
32471bd1f4ee Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents: 2981
diff changeset
634 except NodeDoesNotExistError:
32471bd1f4ee Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents: 2981
diff changeset
635 c.changeset_1 = EmptyChangeset(cs=diff1,
32471bd1f4ee Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents: 2981
diff changeset
636 revision=c.changeset_1.revision,
32471bd1f4ee Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents: 2981
diff changeset
637 repo=c.rhodecode_repo)
32471bd1f4ee Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents: 2981
diff changeset
638 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
639 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
640 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
641 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
642
544
d8778cde98f0 added limits to single file diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 512
diff changeset
643 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
644 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
645 try:
32471bd1f4ee Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents: 2981
diff changeset
646 node2 = c.changeset_2.get_node(f_path)
3563
8d8c4dddd174 fixed bad raise statement
Marcin Kuzminski <marcin@python-works.com>
parents: 3559
diff changeset
647 if node2.is_dir():
8d8c4dddd174 fixed bad raise statement
Marcin Kuzminski <marcin@python-works.com>
parents: 3559
diff changeset
648 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
649 % (node2, type(node2)))
2995
32471bd1f4ee Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents: 2981
diff changeset
650 except NodeDoesNotExistError:
32471bd1f4ee Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents: 2981
diff changeset
651 c.changeset_2 = EmptyChangeset(cs=diff2,
32471bd1f4ee Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents: 2981
diff changeset
652 revision=c.changeset_2.revision,
32471bd1f4ee Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents: 2981
diff changeset
653 repo=c.rhodecode_repo)
32471bd1f4ee Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents: 2981
diff changeset
654 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
655 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
656 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
657 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
658 except (RepositoryError, NodeError):
2995
32471bd1f4ee Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents: 2981
diff changeset
659 log.error(traceback.format_exc())
1818
cf51bbfb120e auto white-space removal
Marcin Kuzminski <marcin@python-works.com>
parents: 1810
diff changeset
660 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
661 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
662
337
fa3835d34fc1 fixed bug when diff command was different than available options
Marcin Kuzminski <marcin@python-works.com>
parents: 335
diff changeset
663 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
664 _diff = diffs.get_gitdiff(node1, node2,
1768
5610fd9b6803 added line context control to diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 1753
diff changeset
665 ignore_whitespace=ignore_whitespace,
5610fd9b6803 added line context control to diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 1753
diff changeset
666 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
667 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
668
160
0f7f93df5802 implemented rawdiff and diff download into diff view.
Marcin Kuzminski <marcin@python-works.com>
parents: 158
diff changeset
669 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
670 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
671 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
672 '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
673 )
2995
32471bd1f4ee Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents: 2981
diff changeset
674 return diff.as_raw()
636
ffd07396d315 Fixes for raw_id, needed for git
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
675
337
fa3835d34fc1 fixed bug when diff command was different than available options
Marcin Kuzminski <marcin@python-works.com>
parents: 335
diff changeset
676 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
677 _diff = diffs.get_gitdiff(node1, node2,
1768
5610fd9b6803 added line context control to diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 1753
diff changeset
678 ignore_whitespace=ignore_whitespace,
5610fd9b6803 added line context control to diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 1753
diff changeset
679 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
680 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
681 response.content_type = 'text/plain'
2995
32471bd1f4ee Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents: 2981
diff changeset
682 return diff.as_raw()
662
373ee7031003 fixed annotation bug, added history to annotation.
Marcin Kuzminski <marcin@python-works.com>
parents: 649
diff changeset
683
337
fa3835d34fc1 fixed bug when diff command was different than available options
Marcin Kuzminski <marcin@python-works.com>
parents: 335
diff changeset
684 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
685 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
686 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
687 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
688
1789
17caf4efe15c implements #308 rewrote diffs to enable displaying full diff on each file
Marcin Kuzminski <marcin@python-works.com>
parents: 1768
diff changeset
689 lim = request.GET.get('fulldiff') or self.cut_off_limit
2109
8ecfed1d8f8b utils/conf
Marcin Kuzminski <marcin@python-works.com>
parents: 2083
diff changeset
690 _, 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
691 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
692 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
693 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
694 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
695 enable_comments=False)
2995
32471bd1f4ee Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents: 2981
diff changeset
696 op = ''
32471bd1f4ee Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents: 2981
diff changeset
697 filename = node1.path
32471bd1f4ee Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents: 2981
diff changeset
698 cs_changes = {
32471bd1f4ee Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents: 2981
diff changeset
699 'fid': [cs1, cs2, op, filename, diff, st]
32471bd1f4ee Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents: 2981
diff changeset
700 }
32471bd1f4ee Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents: 2981
diff changeset
701 c.changes = cs_changes
636
ffd07396d315 Fixes for raw_id, needed for git
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
702
129
42d46deb124d implemented simple diffs for history of files.
Marcin Kuzminski <marcin@python-works.com>
parents: 128
diff changeset
703 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
704
4043
a1bc4af25ec5 Implemented issue #387 side-by-side diffs view
Marcin Kuzminski <marcin@python-works.com>
parents: 3960
diff changeset
705 @LoginRequired()
a1bc4af25ec5 Implemented issue #387 side-by-side diffs view
Marcin Kuzminski <marcin@python-works.com>
parents: 3960
diff changeset
706 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
a1bc4af25ec5 Implemented issue #387 side-by-side diffs view
Marcin Kuzminski <marcin@python-works.com>
parents: 3960
diff changeset
707 'repository.admin')
a1bc4af25ec5 Implemented issue #387 side-by-side diffs view
Marcin Kuzminski <marcin@python-works.com>
parents: 3960
diff changeset
708 def diff_2way(self, repo_name, f_path):
a1bc4af25ec5 Implemented issue #387 side-by-side diffs view
Marcin Kuzminski <marcin@python-works.com>
parents: 3960
diff changeset
709 diff1 = request.GET.get('diff1', '')
a1bc4af25ec5 Implemented issue #387 side-by-side diffs view
Marcin Kuzminski <marcin@python-works.com>
parents: 3960
diff changeset
710 diff2 = request.GET.get('diff2', '')
a1bc4af25ec5 Implemented issue #387 side-by-side diffs view
Marcin Kuzminski <marcin@python-works.com>
parents: 3960
diff changeset
711 try:
a1bc4af25ec5 Implemented issue #387 side-by-side diffs view
Marcin Kuzminski <marcin@python-works.com>
parents: 3960
diff changeset
712 if diff1 not in ['', None, 'None', '0' * 12, '0' * 40]:
a1bc4af25ec5 Implemented issue #387 side-by-side diffs view
Marcin Kuzminski <marcin@python-works.com>
parents: 3960
diff changeset
713 c.changeset_1 = c.rhodecode_repo.get_changeset(diff1)
a1bc4af25ec5 Implemented issue #387 side-by-side diffs view
Marcin Kuzminski <marcin@python-works.com>
parents: 3960
diff changeset
714 try:
a1bc4af25ec5 Implemented issue #387 side-by-side diffs view
Marcin Kuzminski <marcin@python-works.com>
parents: 3960
diff changeset
715 node1 = c.changeset_1.get_node(f_path)
a1bc4af25ec5 Implemented issue #387 side-by-side diffs view
Marcin Kuzminski <marcin@python-works.com>
parents: 3960
diff changeset
716 if node1.is_dir():
a1bc4af25ec5 Implemented issue #387 side-by-side diffs view
Marcin Kuzminski <marcin@python-works.com>
parents: 3960
diff changeset
717 raise NodeError('%s path is a %s not a file'
a1bc4af25ec5 Implemented issue #387 side-by-side diffs view
Marcin Kuzminski <marcin@python-works.com>
parents: 3960
diff changeset
718 % (node1, type(node1)))
a1bc4af25ec5 Implemented issue #387 side-by-side diffs view
Marcin Kuzminski <marcin@python-works.com>
parents: 3960
diff changeset
719 except NodeDoesNotExistError:
a1bc4af25ec5 Implemented issue #387 side-by-side diffs view
Marcin Kuzminski <marcin@python-works.com>
parents: 3960
diff changeset
720 c.changeset_1 = EmptyChangeset(cs=diff1,
a1bc4af25ec5 Implemented issue #387 side-by-side diffs view
Marcin Kuzminski <marcin@python-works.com>
parents: 3960
diff changeset
721 revision=c.changeset_1.revision,
a1bc4af25ec5 Implemented issue #387 side-by-side diffs view
Marcin Kuzminski <marcin@python-works.com>
parents: 3960
diff changeset
722 repo=c.rhodecode_repo)
a1bc4af25ec5 Implemented issue #387 side-by-side diffs view
Marcin Kuzminski <marcin@python-works.com>
parents: 3960
diff changeset
723 node1 = FileNode(f_path, '', changeset=c.changeset_1)
a1bc4af25ec5 Implemented issue #387 side-by-side diffs view
Marcin Kuzminski <marcin@python-works.com>
parents: 3960
diff changeset
724 else:
a1bc4af25ec5 Implemented issue #387 side-by-side diffs view
Marcin Kuzminski <marcin@python-works.com>
parents: 3960
diff changeset
725 c.changeset_1 = EmptyChangeset(repo=c.rhodecode_repo)
a1bc4af25ec5 Implemented issue #387 side-by-side diffs view
Marcin Kuzminski <marcin@python-works.com>
parents: 3960
diff changeset
726 node1 = FileNode(f_path, '', changeset=c.changeset_1)
a1bc4af25ec5 Implemented issue #387 side-by-side diffs view
Marcin Kuzminski <marcin@python-works.com>
parents: 3960
diff changeset
727
a1bc4af25ec5 Implemented issue #387 side-by-side diffs view
Marcin Kuzminski <marcin@python-works.com>
parents: 3960
diff changeset
728 if diff2 not in ['', None, 'None', '0' * 12, '0' * 40]:
a1bc4af25ec5 Implemented issue #387 side-by-side diffs view
Marcin Kuzminski <marcin@python-works.com>
parents: 3960
diff changeset
729 c.changeset_2 = c.rhodecode_repo.get_changeset(diff2)
a1bc4af25ec5 Implemented issue #387 side-by-side diffs view
Marcin Kuzminski <marcin@python-works.com>
parents: 3960
diff changeset
730 try:
a1bc4af25ec5 Implemented issue #387 side-by-side diffs view
Marcin Kuzminski <marcin@python-works.com>
parents: 3960
diff changeset
731 node2 = c.changeset_2.get_node(f_path)
a1bc4af25ec5 Implemented issue #387 side-by-side diffs view
Marcin Kuzminski <marcin@python-works.com>
parents: 3960
diff changeset
732 if node2.is_dir():
a1bc4af25ec5 Implemented issue #387 side-by-side diffs view
Marcin Kuzminski <marcin@python-works.com>
parents: 3960
diff changeset
733 raise NodeError('%s path is a %s not a file'
a1bc4af25ec5 Implemented issue #387 side-by-side diffs view
Marcin Kuzminski <marcin@python-works.com>
parents: 3960
diff changeset
734 % (node2, type(node2)))
a1bc4af25ec5 Implemented issue #387 side-by-side diffs view
Marcin Kuzminski <marcin@python-works.com>
parents: 3960
diff changeset
735 except NodeDoesNotExistError:
a1bc4af25ec5 Implemented issue #387 side-by-side diffs view
Marcin Kuzminski <marcin@python-works.com>
parents: 3960
diff changeset
736 c.changeset_2 = EmptyChangeset(cs=diff2,
a1bc4af25ec5 Implemented issue #387 side-by-side diffs view
Marcin Kuzminski <marcin@python-works.com>
parents: 3960
diff changeset
737 revision=c.changeset_2.revision,
a1bc4af25ec5 Implemented issue #387 side-by-side diffs view
Marcin Kuzminski <marcin@python-works.com>
parents: 3960
diff changeset
738 repo=c.rhodecode_repo)
a1bc4af25ec5 Implemented issue #387 side-by-side diffs view
Marcin Kuzminski <marcin@python-works.com>
parents: 3960
diff changeset
739 node2 = FileNode(f_path, '', changeset=c.changeset_2)
a1bc4af25ec5 Implemented issue #387 side-by-side diffs view
Marcin Kuzminski <marcin@python-works.com>
parents: 3960
diff changeset
740 else:
a1bc4af25ec5 Implemented issue #387 side-by-side diffs view
Marcin Kuzminski <marcin@python-works.com>
parents: 3960
diff changeset
741 c.changeset_2 = EmptyChangeset(repo=c.rhodecode_repo)
a1bc4af25ec5 Implemented issue #387 side-by-side diffs view
Marcin Kuzminski <marcin@python-works.com>
parents: 3960
diff changeset
742 node2 = FileNode(f_path, '', changeset=c.changeset_2)
a1bc4af25ec5 Implemented issue #387 side-by-side diffs view
Marcin Kuzminski <marcin@python-works.com>
parents: 3960
diff changeset
743 except (RepositoryError, NodeError):
a1bc4af25ec5 Implemented issue #387 side-by-side diffs view
Marcin Kuzminski <marcin@python-works.com>
parents: 3960
diff changeset
744 log.error(traceback.format_exc())
a1bc4af25ec5 Implemented issue #387 side-by-side diffs view
Marcin Kuzminski <marcin@python-works.com>
parents: 3960
diff changeset
745 return redirect(url('files_home', repo_name=c.repo_name,
a1bc4af25ec5 Implemented issue #387 side-by-side diffs view
Marcin Kuzminski <marcin@python-works.com>
parents: 3960
diff changeset
746 f_path=f_path))
a1bc4af25ec5 Implemented issue #387 side-by-side diffs view
Marcin Kuzminski <marcin@python-works.com>
parents: 3960
diff changeset
747 c.node1 = node1
a1bc4af25ec5 Implemented issue #387 side-by-side diffs view
Marcin Kuzminski <marcin@python-works.com>
parents: 3960
diff changeset
748 c.node2 = node2
a1bc4af25ec5 Implemented issue #387 side-by-side diffs view
Marcin Kuzminski <marcin@python-works.com>
parents: 3960
diff changeset
749 c.cs1 = c.changeset_1
a1bc4af25ec5 Implemented issue #387 side-by-side diffs view
Marcin Kuzminski <marcin@python-works.com>
parents: 3960
diff changeset
750 c.cs2 = c.changeset_2
a1bc4af25ec5 Implemented issue #387 side-by-side diffs view
Marcin Kuzminski <marcin@python-works.com>
parents: 3960
diff changeset
751
a1bc4af25ec5 Implemented issue #387 side-by-side diffs view
Marcin Kuzminski <marcin@python-works.com>
parents: 3960
diff changeset
752 return render('files/diff_2way.html')
a1bc4af25ec5 Implemented issue #387 side-by-side diffs view
Marcin Kuzminski <marcin@python-works.com>
parents: 3960
diff changeset
753
2456
51b203e44202 Add authors into file view
Marcin Kuzminski <marcin@python-works.com>
parents: 2428
diff changeset
754 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
755 """
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
756 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
757
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
758 :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
759 :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
760 :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
761 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
762 """
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
763 # 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
764 tip_cs = c.rhodecode_repo.get_changeset()
2456
51b203e44202 Add authors into file view
Marcin Kuzminski <marcin@python-works.com>
parents: 2428
diff changeset
765 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
766 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
767 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
768 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
769 #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
770 changesets = cs.get_file_history(f_path)
128
9deb6f1d5b90 Implemented file history.
Marcin Kuzminski <marcin@python-works.com>
parents: 106
diff changeset
771 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
772
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
773 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
774 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
775 tags_group = ([], _("Tags"))
2046
4e1e265af5ca remove branch from git filenode history drop-down
Marcin Kuzminski <marcin@python-works.com>
parents: 2007
diff changeset
776 _hg = cs.repository.alias == 'hg'
128
9deb6f1d5b90 Implemented file history.
Marcin Kuzminski <marcin@python-works.com>
parents: 106
diff changeset
777 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
778 #_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
779 _branch = chs.branch
3009
f0e19116f154 fixed file history tests
Marcin Kuzminski <marcin@python-works.com>
parents: 3001
diff changeset
780 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
781 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
782 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
783
1045
3fc9183e05dd another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents: 1044
diff changeset
784 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
785 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
786 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
787
1045
3fc9183e05dd another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents: 1044
diff changeset
788 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
789 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
790 hist_l.append(tags_group)
3009
f0e19116f154 fixed file history tests
Marcin Kuzminski <marcin@python-works.com>
parents: 3001
diff changeset
791
2981
6cd0f8f8aef1 Let the function calculating changeset history do all the work
Marcin Kuzminski <marcin@python-works.com>
parents: 2977
diff changeset
792 return hist_l, changesets
1452
8585fbf3ed06 Implemented #111 copy github node finder solution
Marcin Kuzminski <marcin@python-works.com>
parents: 1450
diff changeset
793
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
794 @LoginRequired()
1452
8585fbf3ed06 Implemented #111 copy github node finder solution
Marcin Kuzminski <marcin@python-works.com>
parents: 1450
diff changeset
795 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
8585fbf3ed06 Implemented #111 copy github node finder solution
Marcin Kuzminski <marcin@python-works.com>
parents: 1450
diff changeset
796 '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
797 @jsonify
1452
8585fbf3ed06 Implemented #111 copy github node finder solution
Marcin Kuzminski <marcin@python-works.com>
parents: 1450
diff changeset
798 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
799 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
800 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
801 _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
802 flat=False)
2428
530bd12fc18a removed JSON array envelope from filter files function
Marcin Kuzminski <marcin@python-works.com>
parents: 2318
diff changeset
803 return {'nodes': _d + _f}