annotate kallithea/controllers/changeset.py @ 7092:aa25ef34ebab

auth: refactor to introduce @LoginRequired(allow_default_user=True) and deprecate @NotAnonymous() It was error prone that @LoginRequired defaulted to allow anonymous users (if 'default' user is enabled). See also 245b4e3abf39. Refactor code to make it more explicit and safe by default: Deprecate @NotAnonymous by making it the default of @LoginRequired. That will make it safe by default. To preserve same functionality, set allow_default_user=True in all the cases where @LoginRequired was *not* followed by @NotAnonymous or other permission checks - that was done with some script hacks: sed -i 's/@LoginRequired(\(..*\))/@LoginRequired(\1, allow_default_user=True)/g' `hg mani` sed -i 's/@LoginRequired()/@LoginRequired(allow_default_user=True)/g' `hg mani` perl -0pi -e 's/\@LoginRequired\(allow_default_user=True\)\n\s*\@NotAnonymous\(\)/\@LoginRequired()/g' `hg mani` perl -0pi -e 's/\@LoginRequired\(allow_default_user=True\)(\n\s*\@Has(Repo)?Permission)/\@LoginRequired()\1/g' `hg mani` It has been reviewed that all uses of allow_default_user=True are in places where the there indeed wasn't any checking for default user before. These may or may not be correct, but now they are explicit and can be spotted and fixed. The few remaining uses of @NotAnonymous should probably be removed somehow.
author Mads Kiilerich <mads@kiilerich.com>
date Sun, 21 Jan 2018 02:49:15 +0100
parents 205daed7185b
children 9f976d75b04c
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: 691
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: 1131
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: 1131
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.changeset
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
6215
5eec79420ce3 Turbogears2 migration: remove some references to Pylons in comments
Thomas De Schampheleire <thomas.de.schampheleire@gmail.com>
parents: 6195
diff changeset
18 changeset controller showing changes between revisions
4116
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
19
4211
1948ede028ef RhodeCode GmbH is not the sole author of this work
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4208
diff changeset
20 This file was forked by the Kallithea project in July 2014.
1948ede028ef RhodeCode GmbH is not the sole author of this work
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4208
diff changeset
21 Original author and date, and relevant copyright and licensing information is below:
4116
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
22 :created_on: Apr 25, 2010
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
23 :author: marcink
4211
1948ede028ef RhodeCode GmbH is not the sole author of this work
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4208
diff changeset
24 :copyright: (c) 2013 RhodeCode GmbH, and others.
4208
ad38f9f93b3b Correct licensing information in individual files.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4197
diff changeset
25 :license: GPLv3, see LICENSE.md for more details.
4116
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
26 """
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
27
812
30ad41c76fae fixes #79 cut off limit was added into .ini config files
Marcin Kuzminski <marcin@python-works.com>
parents: 691
diff changeset
28 import logging
30ad41c76fae fixes #79 cut off limit was added into .ini config files
Marcin Kuzminski <marcin@python-works.com>
parents: 691
diff changeset
29 import traceback
1776
22333ddd1a40 implements #307, configurable diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 1768
diff changeset
30 from collections import defaultdict
812
30ad41c76fae fixes #79 cut off limit was added into .ini config files
Marcin Kuzminski <marcin@python-works.com>
parents: 691
diff changeset
31
6553
e9ac5698281d tg: minimize future diff by some mocking and replacing some pylons imports with tg
Mads Kiilerich <mads@kiilerich.com>
parents: 6532
diff changeset
32 from tg import tmpl_context as c, request, response
e9ac5698281d tg: minimize future diff by some mocking and replacing some pylons imports with tg
Mads Kiilerich <mads@kiilerich.com>
parents: 6532
diff changeset
33 from tg.i18n import ugettext as _
5543
d9b78d8f1db3 cleanup: replace redirect with WebOb exceptions
Søren Løvborg <sorenl@unity3d.com>
parents: 5374
diff changeset
34 from webob.exc import HTTPFound, HTTPForbidden, HTTPBadRequest, HTTPNotFound
d9b78d8f1db3 cleanup: replace redirect with WebOb exceptions
Søren Løvborg <sorenl@unity3d.com>
parents: 5374
diff changeset
35
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.vcs.exceptions import RepositoryError, \
6041
0bac887ea148 changeset: don't crash with unhandled EmptyRepositoryError when visiting (non-existing) changeset in an empty repo
Mads Kiilerich <madski@unity3d.com>
parents: 5815
diff changeset
37 ChangesetDoesNotExistError, EmptyRepositoryError
1776
22333ddd1a40 implements #307, configurable diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 1768
diff changeset
38
4186
7e5f8c12a3fc First step in two-part process to rename directories to kallithea.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4116
diff changeset
39 import kallithea.lib.helpers as h
7092
aa25ef34ebab auth: refactor to introduce @LoginRequired(allow_default_user=True) and deprecate @NotAnonymous()
Mads Kiilerich <mads@kiilerich.com>
parents: 6968
diff changeset
40 from kallithea.lib.auth import LoginRequired, HasRepoPermissionLevelDecorator
6449
0122959e1f1d lib: move jsonify from utils to base
Thomas De Schampheleire <thomas.de.schampheleire@gmail.com>
parents: 6434
diff changeset
41 from kallithea.lib.base import BaseRepoController, render, jsonify
4186
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.utils import action_logger
7e5f8c12a3fc First step in two-part process to rename directories to kallithea.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4116
diff changeset
43 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
44 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
45 from kallithea.model.db import ChangesetComment, ChangesetStatus
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.model.comment import ChangesetCommentsModel
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.model.changeset_status import ChangesetStatusModel
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.model.meta import Session
7e5f8c12a3fc First step in two-part process to rename directories to kallithea.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4116
diff changeset
49 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
50 from kallithea.lib.exceptions import StatusChangeOnClosedPullRequestError
7e5f8c12a3fc First step in two-part process to rename directories to kallithea.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4116
diff changeset
51 from kallithea.lib.vcs.backends.base import EmptyChangeset
4422
d51a6f5e57d1 cleanup: remove unused Python imports, found with pyflakes
Mads Kiilerich <madski@unity3d.com>
parents: 4401
diff changeset
52 from kallithea.lib.utils2 import safe_unicode
4352
c733124b6262 pull requests: show graph when displaying PR
Mads Kiilerich <madski@unity3d.com>
parents: 4330
diff changeset
53 from kallithea.lib.graphmod import graph_data
193
50a39f923f31 Added file annotation template. Bumped version to 0.6.8. Changelog and changeset are now cleaned with js, it's still very beta.
Marcin Kuzminski <marcin@python-works.com>
parents: 103
diff changeset
54
103
665b344927f4 Added changeset controllers
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
55 log = logging.getLogger(__name__)
665b344927f4 Added changeset controllers
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
56
1212
50e41777675d pep8ify
Marcin Kuzminski <marcin@python-works.com>
parents: 1206
diff changeset
57
2161
e8c016815ab9 added hidden fulldiff GET param for disabling big diff cut off limit.
Marcin Kuzminski <marcin@python-works.com>
parents: 2123
diff changeset
58 def _update_with_GET(params, GET):
e8c016815ab9 added hidden fulldiff GET param for disabling big diff cut off limit.
Marcin Kuzminski <marcin@python-works.com>
parents: 2123
diff changeset
59 for k in ['diff1', 'diff2', 'diff']:
e8c016815ab9 added hidden fulldiff GET param for disabling big diff cut off limit.
Marcin Kuzminski <marcin@python-works.com>
parents: 2123
diff changeset
60 params[k] += GET.getall(k)
e8c016815ab9 added hidden fulldiff GET param for disabling big diff cut off limit.
Marcin Kuzminski <marcin@python-works.com>
parents: 2123
diff changeset
61
e8c016815ab9 added hidden fulldiff GET param for disabling big diff cut off limit.
Marcin Kuzminski <marcin@python-works.com>
parents: 2123
diff changeset
62
e8c016815ab9 added hidden fulldiff GET param for disabling big diff cut off limit.
Marcin Kuzminski <marcin@python-works.com>
parents: 2123
diff changeset
63 def anchor_url(revision, path, GET):
1776
22333ddd1a40 implements #307, configurable diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 1768
diff changeset
64 fid = h.FID(revision, path)
2161
e8c016815ab9 added hidden fulldiff GET param for disabling big diff cut off limit.
Marcin Kuzminski <marcin@python-works.com>
parents: 2123
diff changeset
65 return h.url.current(anchor=fid, **dict(GET))
1787
d4a7b6c82efe code garden for changeset ranges and comments
Marcin Kuzminski <marcin@python-works.com>
parents: 1776
diff changeset
66
1776
22333ddd1a40 implements #307, configurable diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 1768
diff changeset
67
22333ddd1a40 implements #307, configurable diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 1768
diff changeset
68 def get_ignore_ws(fid, GET):
2161
e8c016815ab9 added hidden fulldiff GET param for disabling big diff cut off limit.
Marcin Kuzminski <marcin@python-works.com>
parents: 2123
diff changeset
69 ig_ws_global = GET.get('ignorews')
1787
d4a7b6c82efe code garden for changeset ranges and comments
Marcin Kuzminski <marcin@python-works.com>
parents: 1776
diff changeset
70 ig_ws = filter(lambda k: k.startswith('WS'), GET.getall(fid))
1776
22333ddd1a40 implements #307, configurable diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 1768
diff changeset
71 if ig_ws:
4889
5a1cd703a888 changeset: don't crash on malformed whitespace parameter - return 400 Bad Request
Andrew Shadura <andrew@shadura.me>
parents: 4746
diff changeset
72 try:
5a1cd703a888 changeset: don't crash on malformed whitespace parameter - return 400 Bad Request
Andrew Shadura <andrew@shadura.me>
parents: 4746
diff changeset
73 return int(ig_ws[0].split(':')[-1])
5a1cd703a888 changeset: don't crash on malformed whitespace parameter - return 400 Bad Request
Andrew Shadura <andrew@shadura.me>
parents: 4746
diff changeset
74 except ValueError:
5a1cd703a888 changeset: don't crash on malformed whitespace parameter - return 400 Bad Request
Andrew Shadura <andrew@shadura.me>
parents: 4746
diff changeset
75 raise HTTPBadRequest()
1776
22333ddd1a40 implements #307, configurable diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 1768
diff changeset
76 return ig_ws_global
22333ddd1a40 implements #307, configurable diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 1768
diff changeset
77
1787
d4a7b6c82efe code garden for changeset ranges and comments
Marcin Kuzminski <marcin@python-works.com>
parents: 1776
diff changeset
78
2161
e8c016815ab9 added hidden fulldiff GET param for disabling big diff cut off limit.
Marcin Kuzminski <marcin@python-works.com>
parents: 2123
diff changeset
79 def _ignorews_url(GET, fileid=None):
e8c016815ab9 added hidden fulldiff GET param for disabling big diff cut off limit.
Marcin Kuzminski <marcin@python-works.com>
parents: 2123
diff changeset
80 fileid = str(fileid) if fileid else None
1776
22333ddd1a40 implements #307, configurable diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 1768
diff changeset
81 params = defaultdict(list)
2161
e8c016815ab9 added hidden fulldiff GET param for disabling big diff cut off limit.
Marcin Kuzminski <marcin@python-works.com>
parents: 2123
diff changeset
82 _update_with_GET(params, GET)
4401
4df61d1bd2d5 spelling: let's call it 'whitespace' without space or hyphen
Mads Kiilerich <madski@unity3d.com>
parents: 4368
diff changeset
83 lbl = _('Show whitespace')
2161
e8c016815ab9 added hidden fulldiff GET param for disabling big diff cut off limit.
Marcin Kuzminski <marcin@python-works.com>
parents: 2123
diff changeset
84 ig_ws = get_ignore_ws(fileid, GET)
e8c016815ab9 added hidden fulldiff GET param for disabling big diff cut off limit.
Marcin Kuzminski <marcin@python-works.com>
parents: 2123
diff changeset
85 ln_ctx = get_line_ctx(fileid, GET)
1776
22333ddd1a40 implements #307, configurable diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 1768
diff changeset
86 # global option
22333ddd1a40 implements #307, configurable diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 1768
diff changeset
87 if fileid is None:
22333ddd1a40 implements #307, configurable diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 1768
diff changeset
88 if ig_ws is None:
22333ddd1a40 implements #307, configurable diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 1768
diff changeset
89 params['ignorews'] += [1]
4401
4df61d1bd2d5 spelling: let's call it 'whitespace' without space or hyphen
Mads Kiilerich <madski@unity3d.com>
parents: 4368
diff changeset
90 lbl = _('Ignore whitespace')
1776
22333ddd1a40 implements #307, configurable diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 1768
diff changeset
91 ctx_key = 'context'
22333ddd1a40 implements #307, configurable diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 1768
diff changeset
92 ctx_val = ln_ctx
22333ddd1a40 implements #307, configurable diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 1768
diff changeset
93 # per file options
22333ddd1a40 implements #307, configurable diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 1768
diff changeset
94 else:
22333ddd1a40 implements #307, configurable diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 1768
diff changeset
95 if ig_ws is None:
22333ddd1a40 implements #307, configurable diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 1768
diff changeset
96 params[fileid] += ['WS:1']
4401
4df61d1bd2d5 spelling: let's call it 'whitespace' without space or hyphen
Mads Kiilerich <madski@unity3d.com>
parents: 4368
diff changeset
97 lbl = _('Ignore whitespace')
1776
22333ddd1a40 implements #307, configurable diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 1768
diff changeset
98
22333ddd1a40 implements #307, configurable diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 1768
diff changeset
99 ctx_key = fileid
22333ddd1a40 implements #307, configurable diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 1768
diff changeset
100 ctx_val = 'C:%s' % ln_ctx
22333ddd1a40 implements #307, configurable diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 1768
diff changeset
101 # if we have passed in ln_ctx pass it along to our params
22333ddd1a40 implements #307, configurable diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 1768
diff changeset
102 if ln_ctx:
22333ddd1a40 implements #307, configurable diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 1768
diff changeset
103 params[ctx_key] += [ctx_val]
1787
d4a7b6c82efe code garden for changeset ranges and comments
Marcin Kuzminski <marcin@python-works.com>
parents: 1776
diff changeset
104
1776
22333ddd1a40 implements #307, configurable diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 1768
diff changeset
105 params['anchor'] = fileid
4629
834d7bbfb18e text_strikethrough.png: use new icon-strike font
Sean Farley <sean.michael.farley@gmail.com>
parents: 4454
diff changeset
106 icon = h.literal('<i class="icon-strike"></i>')
6434
1ab38cd72704 template: use Bootstrap tooltips and popover instead of handmade tooltips
domruf <dominikruf@gmail.com>
parents: 6319
diff changeset
107 return h.link_to(icon, h.url.current(**params), title=lbl, **{'data-toggle': 'tooltip'})
1776
22333ddd1a40 implements #307, configurable diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 1768
diff changeset
108
1787
d4a7b6c82efe code garden for changeset ranges and comments
Marcin Kuzminski <marcin@python-works.com>
parents: 1776
diff changeset
109
1776
22333ddd1a40 implements #307, configurable diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 1768
diff changeset
110 def get_line_ctx(fid, GET):
2161
e8c016815ab9 added hidden fulldiff GET param for disabling big diff cut off limit.
Marcin Kuzminski <marcin@python-works.com>
parents: 2123
diff changeset
111 ln_ctx_global = GET.get('context')
2995
32471bd1f4ee Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents: 2978
diff changeset
112 if fid:
32471bd1f4ee Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents: 2978
diff changeset
113 ln_ctx = filter(lambda k: k.startswith('C'), GET.getall(fid))
32471bd1f4ee Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents: 2978
diff changeset
114 else:
32471bd1f4ee Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents: 2978
diff changeset
115 _ln_ctx = filter(lambda k: k.startswith('C'), GET)
6864
7691290837d2 codingstyle: trivial whitespace fixes
Lars Kruse <devel@sumpfralle.de>
parents: 6558
diff changeset
116 ln_ctx = GET.get(_ln_ctx[0]) if _ln_ctx else ln_ctx_global
2995
32471bd1f4ee Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents: 2978
diff changeset
117 if ln_ctx:
32471bd1f4ee Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents: 2978
diff changeset
118 ln_ctx = [ln_ctx]
1787
d4a7b6c82efe code garden for changeset ranges and comments
Marcin Kuzminski <marcin@python-works.com>
parents: 1776
diff changeset
119
1776
22333ddd1a40 implements #307, configurable diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 1768
diff changeset
120 if ln_ctx:
22333ddd1a40 implements #307, configurable diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 1768
diff changeset
121 retval = ln_ctx[0].split(':')[-1]
22333ddd1a40 implements #307, configurable diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 1768
diff changeset
122 else:
22333ddd1a40 implements #307, configurable diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 1768
diff changeset
123 retval = ln_ctx_global
22333ddd1a40 implements #307, configurable diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 1768
diff changeset
124
22333ddd1a40 implements #307, configurable diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 1768
diff changeset
125 try:
22333ddd1a40 implements #307, configurable diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 1768
diff changeset
126 return int(retval)
3631
10b4e34841a4 Don't catch all exceptions
Marcin Kuzminski <marcin@python-works.com>
parents: 3619
diff changeset
127 except Exception:
2995
32471bd1f4ee Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents: 2978
diff changeset
128 return 3
1776
22333ddd1a40 implements #307, configurable diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 1768
diff changeset
129
1787
d4a7b6c82efe code garden for changeset ranges and comments
Marcin Kuzminski <marcin@python-works.com>
parents: 1776
diff changeset
130
2161
e8c016815ab9 added hidden fulldiff GET param for disabling big diff cut off limit.
Marcin Kuzminski <marcin@python-works.com>
parents: 2123
diff changeset
131 def _context_url(GET, fileid=None):
1776
22333ddd1a40 implements #307, configurable diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 1768
diff changeset
132 """
22333ddd1a40 implements #307, configurable diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 1768
diff changeset
133 Generates url for context lines
1787
d4a7b6c82efe code garden for changeset ranges and comments
Marcin Kuzminski <marcin@python-works.com>
parents: 1776
diff changeset
134
1776
22333ddd1a40 implements #307, configurable diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 1768
diff changeset
135 :param fileid:
22333ddd1a40 implements #307, configurable diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 1768
diff changeset
136 """
2161
e8c016815ab9 added hidden fulldiff GET param for disabling big diff cut off limit.
Marcin Kuzminski <marcin@python-works.com>
parents: 2123
diff changeset
137
e8c016815ab9 added hidden fulldiff GET param for disabling big diff cut off limit.
Marcin Kuzminski <marcin@python-works.com>
parents: 2123
diff changeset
138 fileid = str(fileid) if fileid else None
e8c016815ab9 added hidden fulldiff GET param for disabling big diff cut off limit.
Marcin Kuzminski <marcin@python-works.com>
parents: 2123
diff changeset
139 ig_ws = get_ignore_ws(fileid, GET)
e8c016815ab9 added hidden fulldiff GET param for disabling big diff cut off limit.
Marcin Kuzminski <marcin@python-works.com>
parents: 2123
diff changeset
140 ln_ctx = (get_line_ctx(fileid, GET) or 3) * 2
1776
22333ddd1a40 implements #307, configurable diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 1768
diff changeset
141
22333ddd1a40 implements #307, configurable diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 1768
diff changeset
142 params = defaultdict(list)
2161
e8c016815ab9 added hidden fulldiff GET param for disabling big diff cut off limit.
Marcin Kuzminski <marcin@python-works.com>
parents: 2123
diff changeset
143 _update_with_GET(params, GET)
1776
22333ddd1a40 implements #307, configurable diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 1768
diff changeset
144
22333ddd1a40 implements #307, configurable diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 1768
diff changeset
145 # global option
22333ddd1a40 implements #307, configurable diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 1768
diff changeset
146 if fileid is None:
22333ddd1a40 implements #307, configurable diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 1768
diff changeset
147 if ln_ctx > 0:
22333ddd1a40 implements #307, configurable diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 1768
diff changeset
148 params['context'] += [ln_ctx]
22333ddd1a40 implements #307, configurable diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 1768
diff changeset
149
22333ddd1a40 implements #307, configurable diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 1768
diff changeset
150 if ig_ws:
22333ddd1a40 implements #307, configurable diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 1768
diff changeset
151 ig_ws_key = 'ignorews'
22333ddd1a40 implements #307, configurable diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 1768
diff changeset
152 ig_ws_val = 1
22333ddd1a40 implements #307, configurable diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 1768
diff changeset
153
22333ddd1a40 implements #307, configurable diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 1768
diff changeset
154 # per file option
22333ddd1a40 implements #307, configurable diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 1768
diff changeset
155 else:
22333ddd1a40 implements #307, configurable diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 1768
diff changeset
156 params[fileid] += ['C:%s' % ln_ctx]
22333ddd1a40 implements #307, configurable diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 1768
diff changeset
157 ig_ws_key = fileid
22333ddd1a40 implements #307, configurable diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 1768
diff changeset
158 ig_ws_val = 'WS:%s' % 1
1787
d4a7b6c82efe code garden for changeset ranges and comments
Marcin Kuzminski <marcin@python-works.com>
parents: 1776
diff changeset
159
1776
22333ddd1a40 implements #307, configurable diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 1768
diff changeset
160 if ig_ws:
22333ddd1a40 implements #307, configurable diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 1768
diff changeset
161 params[ig_ws_key] += [ig_ws_val]
22333ddd1a40 implements #307, configurable diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 1768
diff changeset
162
5127
86b1f3cfe836 spelling: fix title casing on various translated strings
Mads Kiilerich <madski@unity3d.com>
parents: 5068
diff changeset
163 lbl = _('Increase diff context to %(num)s lines') % {'num': ln_ctx}
1776
22333ddd1a40 implements #307, configurable diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 1768
diff changeset
164
22333ddd1a40 implements #307, configurable diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 1768
diff changeset
165 params['anchor'] = fileid
4630
5839c1842bff table_add.png: use new icon-sort font
Sean Farley <sean.michael.farley@gmail.com>
parents: 4629
diff changeset
166 icon = h.literal('<i class="icon-sort"></i>')
6434
1ab38cd72704 template: use Bootstrap tooltips and popover instead of handmade tooltips
domruf <dominikruf@gmail.com>
parents: 6319
diff changeset
167 return h.link_to(icon, h.url.current(**params), title=lbl, **{'data-toggle': 'tooltip'})
1776
22333ddd1a40 implements #307, configurable diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 1768
diff changeset
168
1787
d4a7b6c82efe code garden for changeset ranges and comments
Marcin Kuzminski <marcin@python-works.com>
parents: 1776
diff changeset
169
5666
b3ddd87f214f comments: extract common comment creation functionality for changesets and pullrequests
Mads Kiilerich <madski@unity3d.com>
parents: 5664
diff changeset
170 # Could perhaps be nice to have in the model but is too high level ...
b3ddd87f214f comments: extract common comment creation functionality for changesets and pullrequests
Mads Kiilerich <madski@unity3d.com>
parents: 5664
diff changeset
171 def create_comment(text, status, f_path, line_no, revision=None, pull_request_id=None, closing_pr=None):
b3ddd87f214f comments: extract common comment creation functionality for changesets and pullrequests
Mads Kiilerich <madski@unity3d.com>
parents: 5664
diff changeset
172 """Comment functionality shared between changesets and pullrequests"""
5667
7834f845505a comments: use inline comment infrastructure for general comments too
Mads Kiilerich <madski@unity3d.com>
parents: 5666
diff changeset
173 f_path = f_path or None
7834f845505a comments: use inline comment infrastructure for general comments too
Mads Kiilerich <madski@unity3d.com>
parents: 5666
diff changeset
174 line_no = line_no or None
7834f845505a comments: use inline comment infrastructure for general comments too
Mads Kiilerich <madski@unity3d.com>
parents: 5666
diff changeset
175
5666
b3ddd87f214f comments: extract common comment creation functionality for changesets and pullrequests
Mads Kiilerich <madski@unity3d.com>
parents: 5664
diff changeset
176 comment = ChangesetCommentsModel().create(
b3ddd87f214f comments: extract common comment creation functionality for changesets and pullrequests
Mads Kiilerich <madski@unity3d.com>
parents: 5664
diff changeset
177 text=text,
b3ddd87f214f comments: extract common comment creation functionality for changesets and pullrequests
Mads Kiilerich <madski@unity3d.com>
parents: 5664
diff changeset
178 repo=c.db_repo.repo_id,
6452
3dcf1f82311a controllers: avoid setting request state in controller instances - set it in the thread global request variable
Mads Kiilerich <mads@kiilerich.com>
parents: 6449
diff changeset
179 author=request.authuser.user_id,
5666
b3ddd87f214f comments: extract common comment creation functionality for changesets and pullrequests
Mads Kiilerich <madski@unity3d.com>
parents: 5664
diff changeset
180 revision=revision,
b3ddd87f214f comments: extract common comment creation functionality for changesets and pullrequests
Mads Kiilerich <madski@unity3d.com>
parents: 5664
diff changeset
181 pull_request=pull_request_id,
b3ddd87f214f comments: extract common comment creation functionality for changesets and pullrequests
Mads Kiilerich <madski@unity3d.com>
parents: 5664
diff changeset
182 f_path=f_path,
b3ddd87f214f comments: extract common comment creation functionality for changesets and pullrequests
Mads Kiilerich <madski@unity3d.com>
parents: 5664
diff changeset
183 line_no=line_no,
b3ddd87f214f comments: extract common comment creation functionality for changesets and pullrequests
Mads Kiilerich <madski@unity3d.com>
parents: 5664
diff changeset
184 status_change=ChangesetStatus.get_status_lbl(status) if status else None,
b3ddd87f214f comments: extract common comment creation functionality for changesets and pullrequests
Mads Kiilerich <madski@unity3d.com>
parents: 5664
diff changeset
185 closing_pr=closing_pr,
b3ddd87f214f comments: extract common comment creation functionality for changesets and pullrequests
Mads Kiilerich <madski@unity3d.com>
parents: 5664
diff changeset
186 )
b3ddd87f214f comments: extract common comment creation functionality for changesets and pullrequests
Mads Kiilerich <madski@unity3d.com>
parents: 5664
diff changeset
187
b3ddd87f214f comments: extract common comment creation functionality for changesets and pullrequests
Mads Kiilerich <madski@unity3d.com>
parents: 5664
diff changeset
188 return comment
b3ddd87f214f comments: extract common comment creation functionality for changesets and pullrequests
Mads Kiilerich <madski@unity3d.com>
parents: 5664
diff changeset
189
b3ddd87f214f comments: extract common comment creation functionality for changesets and pullrequests
Mads Kiilerich <madski@unity3d.com>
parents: 5664
diff changeset
190
1045
3fc9183e05dd another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents: 1038
diff changeset
191 class ChangesetController(BaseRepoController):
636
ffd07396d315 Fixes for raw_id, needed for git
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
192
6558
4517e212f09a controllers: rename __before__ to _before in preparation of TurboGears2
Thomas De Schampheleire <thomas.de.schampheleire@gmail.com>
parents: 6553
diff changeset
193 def _before(self, *args, **kwargs):
4517e212f09a controllers: rename __before__ to _before in preparation of TurboGears2
Thomas De Schampheleire <thomas.de.schampheleire@gmail.com>
parents: 6553
diff changeset
194 super(ChangesetController, self)._before(*args, **kwargs)
1130
1cecc7db3106 fixed some limits in changesets and changelogs
Marcin Kuzminski <marcin@python-works.com>
parents: 1125
diff changeset
195 c.affected_files_cut_off = 60
4116
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
196
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
197 def __load_data(self):
2368
5143b8df576c Added mentions autocomplete into main comments form
Marcin Kuzminski <marcin@python-works.com>
parents: 2189
diff changeset
198 repo_model = RepoModel()
5143b8df576c Added mentions autocomplete into main comments form
Marcin Kuzminski <marcin@python-works.com>
parents: 2189
diff changeset
199 c.users_array = repo_model.get_users_js()
636
ffd07396d315 Fixes for raw_id, needed for git
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
200
3750
244f184f5fc3 moved around some code in changeset controllers to properly log which function was decorated.
Marcin Kuzminski <marcin@python-works.com>
parents: 3749
diff changeset
201 def _index(self, revision, method):
5667
7834f845505a comments: use inline comment infrastructure for general comments too
Mads Kiilerich <madski@unity3d.com>
parents: 5666
diff changeset
202 c.pull_request = None
1776
22333ddd1a40 implements #307, configurable diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 1768
diff changeset
203 c.anchor_url = anchor_url
22333ddd1a40 implements #307, configurable diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 1768
diff changeset
204 c.ignorews_url = _ignorews_url
22333ddd1a40 implements #307, configurable diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 1768
diff changeset
205 c.context_url = _context_url
6906
b343a4599178 diffs: cleanup of variable naming around cut_off_limit
Mads Kiilerich <mads@kiilerich.com>
parents: 6864
diff changeset
206 c.fulldiff = request.GET.get('fulldiff') # for reporting number of changed files
6864
7691290837d2 codingstyle: trivial whitespace fixes
Lars Kruse <devel@sumpfralle.de>
parents: 6558
diff changeset
207 # get ranges of revisions if preset
977
28524453bb76 started work on #93 added rev ranges view, checkboxes in changelog to view ranges of changes
Marcin Kuzminski <marcin@python-works.com>
parents: 902
diff changeset
208 rev_range = revision.split('...')[:2]
1787
d4a7b6c82efe code garden for changeset ranges and comments
Marcin Kuzminski <marcin@python-works.com>
parents: 1776
diff changeset
209 enable_comments = True
4368
3136811db1af compare: introduce .cs_repo as the repo for .cs_changes - sometimes it is org, sometimes other
Mads Kiilerich <madski@unity3d.com>
parents: 4367
diff changeset
210 c.cs_repo = c.db_repo
543
a99e23e6c1e8 fixes #13 large initial commits and changesets are cut of now to not freeze the application.
Marcin Kuzminski <marcin@python-works.com>
parents: 512
diff changeset
211 try:
977
28524453bb76 started work on #93 added rev ranges view, checkboxes in changelog to view ranges of changes
Marcin Kuzminski <marcin@python-works.com>
parents: 902
diff changeset
212 if len(rev_range) == 2:
1787
d4a7b6c82efe code garden for changeset ranges and comments
Marcin Kuzminski <marcin@python-works.com>
parents: 1776
diff changeset
213 enable_comments = False
977
28524453bb76 started work on #93 added rev ranges view, checkboxes in changelog to view ranges of changes
Marcin Kuzminski <marcin@python-works.com>
parents: 902
diff changeset
214 rev_start = rev_range[0]
28524453bb76 started work on #93 added rev ranges view, checkboxes in changelog to view ranges of changes
Marcin Kuzminski <marcin@python-works.com>
parents: 902
diff changeset
215 rev_end = rev_range[1]
4196
06e49be38d78 Rename rhodecode_repo to db_repo_scm_instance
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4195
diff changeset
216 rev_ranges = c.db_repo_scm_instance.get_changesets(start=rev_start,
3023
c2a206162062 Basic implementation of cherry picking changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 2996
diff changeset
217 end=rev_end)
977
28524453bb76 started work on #93 added rev ranges view, checkboxes in changelog to view ranges of changes
Marcin Kuzminski <marcin@python-works.com>
parents: 902
diff changeset
218 else:
4196
06e49be38d78 Rename rhodecode_repo to db_repo_scm_instance
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4195
diff changeset
219 rev_ranges = [c.db_repo_scm_instance.get_changeset(revision)]
983
57a2b792a3a1 fixed error for single changeset
Marcin Kuzminski <marcin@python-works.com>
parents: 978
diff changeset
220
57a2b792a3a1 fixed error for single changeset
Marcin Kuzminski <marcin@python-works.com>
parents: 978
diff changeset
221 c.cs_ranges = list(rev_ranges)
1656
833f9dec0a06 implemented #44 - branch filtering in changelog, aka branch browser
Marcin Kuzminski <marcin@python-works.com>
parents: 1514
diff changeset
222 if not c.cs_ranges:
833f9dec0a06 implemented #44 - branch filtering in changelog, aka branch browser
Marcin Kuzminski <marcin@python-works.com>
parents: 1514
diff changeset
223 raise RepositoryError('Changeset range returned empty result')
983
57a2b792a3a1 fixed error for single changeset
Marcin Kuzminski <marcin@python-works.com>
parents: 978
diff changeset
224
6041
0bac887ea148 changeset: don't crash with unhandled EmptyRepositoryError when visiting (non-existing) changeset in an empty repo
Mads Kiilerich <madski@unity3d.com>
parents: 5815
diff changeset
225 except (ChangesetDoesNotExistError, EmptyRepositoryError):
5186
5fb4e6f884ce changeset: reduce log level of stack trace on innocent exceptions
Thomas De Schampheleire <thomas.de.schampheleire@gmail.com>
parents: 5148
diff changeset
226 log.debug(traceback.format_exc())
4116
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
227 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
228 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
229 raise HTTPNotFound()
977
28524453bb76 started work on #93 added rev ranges view, checkboxes in changelog to view ranges of changes
Marcin Kuzminski <marcin@python-works.com>
parents: 902
diff changeset
230
28524453bb76 started work on #93 added rev ranges view, checkboxes in changelog to view ranges of changes
Marcin Kuzminski <marcin@python-works.com>
parents: 902
diff changeset
231 c.changes = OrderedDict()
1789
17caf4efe15c implements #308 rewrote diffs to enable displaying full diff on each file
Marcin Kuzminski <marcin@python-works.com>
parents: 1787
diff changeset
232
17caf4efe15c implements #308 rewrote diffs to enable displaying full diff on each file
Marcin Kuzminski <marcin@python-works.com>
parents: 1787
diff changeset
233 c.lines_added = 0 # count of lines added
17caf4efe15c implements #308 rewrote diffs to enable displaying full diff on each file
Marcin Kuzminski <marcin@python-works.com>
parents: 1787
diff changeset
234 c.lines_deleted = 0 # count of lines removes
17caf4efe15c implements #308 rewrote diffs to enable displaying full diff on each file
Marcin Kuzminski <marcin@python-works.com>
parents: 1787
diff changeset
235
2217
76947224bf27 Implemented initial code-review status of changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 2216
diff changeset
236 c.changeset_statuses = ChangesetStatus.STATUSES
4330
773980a93cdd changesets: simplify calculation of PR comments on changesets
Mads Kiilerich <madski@unity3d.com>
parents: 4301
diff changeset
237 comments = dict()
2215
2c2bdaeca912 code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents: 2189
diff changeset
238 c.statuses = []
1677
7276b170ce8b #71 code-review
Marcin Kuzminski <marcin@python-works.com>
parents: 1676
diff changeset
239 c.inline_comments = []
7276b170ce8b #71 code-review
Marcin Kuzminski <marcin@python-works.com>
parents: 1676
diff changeset
240 c.inline_cnt = 0
2995
32471bd1f4ee Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents: 2978
diff changeset
241
1274
7a0004efde12 Added extra check for very large diffs in changesets, sometimes for very large diffs the diff parser could kill CPU.
Marcin Kuzminski <marcin@python-works.com>
parents: 1259
diff changeset
242 # Iterate over ranges (default changeset view is always one changeset)
977
28524453bb76 started work on #93 added rev ranges view, checkboxes in changelog to view ranges of changes
Marcin Kuzminski <marcin@python-works.com>
parents: 902
diff changeset
243 for changeset in c.cs_ranges:
2995
32471bd1f4ee Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents: 2978
diff changeset
244 if method == 'show':
3176
7ec5f9c1df45 show comments from pull requests into associated changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 3141
diff changeset
245 c.statuses.extend([ChangesetStatusModel().get_status(
4195
9581233e9275 Rename rhodecode_db_repo to db_repo - it stores db repo abstractions
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4187
diff changeset
246 c.db_repo.repo_id, changeset.raw_id)])
2215
2c2bdaeca912 code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents: 2189
diff changeset
247
4330
773980a93cdd changesets: simplify calculation of PR comments on changesets
Mads Kiilerich <madski@unity3d.com>
parents: 4301
diff changeset
248 # Changeset comments
773980a93cdd changesets: simplify calculation of PR comments on changesets
Mads Kiilerich <madski@unity3d.com>
parents: 4301
diff changeset
249 comments.update((com.comment_id, com)
773980a93cdd changesets: simplify calculation of PR comments on changesets
Mads Kiilerich <madski@unity3d.com>
parents: 4301
diff changeset
250 for com in ChangesetCommentsModel()
773980a93cdd changesets: simplify calculation of PR comments on changesets
Mads Kiilerich <madski@unity3d.com>
parents: 4301
diff changeset
251 .get_comments(c.db_repo.repo_id,
773980a93cdd changesets: simplify calculation of PR comments on changesets
Mads Kiilerich <madski@unity3d.com>
parents: 4301
diff changeset
252 revision=changeset.raw_id))
3176
7ec5f9c1df45 show comments from pull requests into associated changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 3141
diff changeset
253
4330
773980a93cdd changesets: simplify calculation of PR comments on changesets
Mads Kiilerich <madski@unity3d.com>
parents: 4301
diff changeset
254 # Status change comments - mostly from pull requests
6319
f4059fe16118 db: rename ChangesetStatus.changeset_comment_id to comment_id
Søren Løvborg <sorenl@unity3d.com>
parents: 6303
diff changeset
255 comments.update((st.comment_id, st.comment)
4330
773980a93cdd changesets: simplify calculation of PR comments on changesets
Mads Kiilerich <madski@unity3d.com>
parents: 4301
diff changeset
256 for st in ChangesetStatusModel()
773980a93cdd changesets: simplify calculation of PR comments on changesets
Mads Kiilerich <madski@unity3d.com>
parents: 4301
diff changeset
257 .get_statuses(c.db_repo.repo_id,
5278
1ae14a2ceba0 changeset: make code more stable against unexpected comments
Mads Kiilerich <madski@unity3d.com>
parents: 5186
diff changeset
258 changeset.raw_id, with_revisions=True)
6319
f4059fe16118 db: rename ChangesetStatus.changeset_comment_id to comment_id
Søren Løvborg <sorenl@unity3d.com>
parents: 6303
diff changeset
259 if st.comment_id is not None)
3176
7ec5f9c1df45 show comments from pull requests into associated changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 3141
diff changeset
260
5598
edb24bc0f71a cleanup: consistent space before line continuation backslash
Mads Kiilerich <madski@unity3d.com>
parents: 5571
diff changeset
261 inlines = ChangesetCommentsModel() \
4195
9581233e9275 Rename rhodecode_db_repo to db_repo - it stores db repo abstractions
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4187
diff changeset
262 .get_inline_comments(c.db_repo.repo_id,
2995
32471bd1f4ee Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents: 2978
diff changeset
263 revision=changeset.raw_id)
32471bd1f4ee Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents: 2978
diff changeset
264 c.inline_comments.extend(inlines)
32471bd1f4ee Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents: 2978
diff changeset
265
32471bd1f4ee Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents: 2978
diff changeset
266 cs2 = changeset.raw_id
4044
af733fa965b0 fixed diffs vs Empty changeset
Marcin Kuzminski <marcin@python-works.com>
parents: 3960
diff changeset
267 cs1 = changeset.parents[0].raw_id if changeset.parents else EmptyChangeset().raw_id
2995
32471bd1f4ee Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents: 2978
diff changeset
268 context_lcl = get_line_ctx('', request.GET)
5571
bedb8905c6f8 changeset: drop unused variables
Jiří Suchan <yed@vanyli.net>
parents: 5570
diff changeset
269 ign_whitespace_lcl = get_ignore_ws('', request.GET)
977
28524453bb76 started work on #93 added rev ranges view, checkboxes in changelog to view ranges of changes
Marcin Kuzminski <marcin@python-works.com>
parents: 902
diff changeset
270
6938
6fde53180c50 diffs: wrap vcs repo get_diff
Mads Kiilerich <mads@kiilerich.com>
parents: 6916
diff changeset
271 raw_diff = diffs.get_diff(c.db_repo_scm_instance, cs1, cs2,
2995
32471bd1f4ee Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents: 2978
diff changeset
272 ignore_whitespace=ign_whitespace_lcl, context=context_lcl)
6906
b343a4599178 diffs: cleanup of variable naming around cut_off_limit
Mads Kiilerich <mads@kiilerich.com>
parents: 6864
diff changeset
273 diff_limit = None if c.fulldiff else self.cut_off_limit
6303
1cf51cd05e36 diff: use list instead of OrderedDict - keep it simple
Mads Kiilerich <madski@unity3d.com>
parents: 6234
diff changeset
274 file_diff_data = []
2995
32471bd1f4ee Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents: 2978
diff changeset
275 if method == 'show':
6909
54199f3aab93 diffs: drop the noop as_raw method - just use the raw diff directly and with proper variable naming
Mads Kiilerich <mads@kiilerich.com>
parents: 6908
diff changeset
276 diff_processor = diffs.DiffProcessor(raw_diff,
54199f3aab93 diffs: drop the noop as_raw method - just use the raw diff directly and with proper variable naming
Mads Kiilerich <mads@kiilerich.com>
parents: 6908
diff changeset
277 vcs=c.db_repo_scm_instance.alias,
54199f3aab93 diffs: drop the noop as_raw method - just use the raw diff directly and with proper variable naming
Mads Kiilerich <mads@kiilerich.com>
parents: 6908
diff changeset
278 diff_limit=diff_limit)
6914
e85f08375dc6 diffs: drop the DiffLimitExceeded container - just make it a flag available as property
Mads Kiilerich <mads@kiilerich.com>
parents: 6913
diff changeset
279 c.limited_diff = diff_processor.limited_diff
6913
24a9bec8138c diffs: inline prepare() into __init__ and make the result available as .parsed
Mads Kiilerich <mads@kiilerich.com>
parents: 6909
diff changeset
280 for f in diff_processor.parsed:
2995
32471bd1f4ee Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents: 2978
diff changeset
281 st = f['stats']
3821
ce4b7023a492 diff parser: redefined operations stats for changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3750
diff changeset
282 c.lines_added += st['added']
ce4b7023a492 diff parser: redefined operations stats for changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3750
diff changeset
283 c.lines_deleted += st['deleted']
6192
72acb38da217 diff: minor cleanups
Mads Kiilerich <madski@unity3d.com>
parents: 6041
diff changeset
284 filename = f['filename']
72acb38da217 diff: minor cleanups
Mads Kiilerich <madski@unity3d.com>
parents: 6041
diff changeset
285 fid = h.FID(changeset.raw_id, filename)
6193
dc4cb1d4e084 diff: rework data structure used by diff_block.diff_block (used for changeset diffs)
Mads Kiilerich <madski@unity3d.com>
parents: 6192
diff changeset
286 url_fid = h.FID('', filename)
6916
182570502b6a diffs: move as_html and _safe_id from method to a pure function - avoid calling the method as function
Mads Kiilerich <mads@kiilerich.com>
parents: 6914
diff changeset
287 html_diff = diffs.as_html(enable_comments=enable_comments, parsed_lines=[f])
182570502b6a diffs: move as_html and _safe_id from method to a pure function - avoid calling the method as function
Mads Kiilerich <mads@kiilerich.com>
parents: 6914
diff changeset
288 file_diff_data.append((fid, url_fid, f['operation'], f['old_filename'], filename, html_diff, st))
2995
32471bd1f4ee Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents: 2978
diff changeset
289 else:
32471bd1f4ee Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents: 2978
diff changeset
290 # downloads/raw we only need RAW diff nothing else
6909
54199f3aab93 diffs: drop the noop as_raw method - just use the raw diff directly and with proper variable naming
Mads Kiilerich <mads@kiilerich.com>
parents: 6908
diff changeset
291 file_diff_data.append(('', None, None, None, raw_diff, None))
6193
dc4cb1d4e084 diff: rework data structure used by diff_block.diff_block (used for changeset diffs)
Mads Kiilerich <madski@unity3d.com>
parents: 6192
diff changeset
292 c.changes[changeset.raw_id] = (cs1, cs2, file_diff_data)
636
ffd07396d315 Fixes for raw_id, needed for git
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
293
6864
7691290837d2 codingstyle: trivial whitespace fixes
Lars Kruse <devel@sumpfralle.de>
parents: 6558
diff changeset
294 # sort comments in creation order
4330
773980a93cdd changesets: simplify calculation of PR comments on changesets
Mads Kiilerich <madski@unity3d.com>
parents: 4301
diff changeset
295 c.comments = [com for com_id, com in sorted(comments.items())]
3176
7ec5f9c1df45 show comments from pull requests into associated changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 3141
diff changeset
296
1677
7276b170ce8b #71 code-review
Marcin Kuzminski <marcin@python-works.com>
parents: 1676
diff changeset
297 # count inline comments
2440
1bc579bcd67a - pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents: 2439
diff changeset
298 for __, lines in c.inline_comments:
1677
7276b170ce8b #71 code-review
Marcin Kuzminski <marcin@python-works.com>
parents: 1676
diff changeset
299 for comments in lines.values():
7276b170ce8b #71 code-review
Marcin Kuzminski <marcin@python-works.com>
parents: 1676
diff changeset
300 c.inline_cnt += len(comments)
7276b170ce8b #71 code-review
Marcin Kuzminski <marcin@python-works.com>
parents: 1676
diff changeset
301
977
28524453bb76 started work on #93 added rev ranges view, checkboxes in changelog to view ranges of changes
Marcin Kuzminski <marcin@python-works.com>
parents: 902
diff changeset
302 if len(c.cs_ranges) == 1:
28524453bb76 started work on #93 added rev ranges view, checkboxes in changelog to view ranges of changes
Marcin Kuzminski <marcin@python-works.com>
parents: 902
diff changeset
303 c.changeset = c.cs_ranges[0]
2995
32471bd1f4ee Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents: 2978
diff changeset
304 c.parent_tmpl = ''.join(['# Parent %s\n' % x.raw_id
32471bd1f4ee Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents: 2978
diff changeset
305 for x in c.changeset.parents])
32471bd1f4ee Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents: 2978
diff changeset
306 if method == 'download':
32471bd1f4ee Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents: 2978
diff changeset
307 response.content_type = 'text/plain'
2996
ebe3e388bbb3 new patch function, and urls schema.
Marcin Kuzminski <marcin@python-works.com>
parents: 2995
diff changeset
308 response.content_disposition = 'attachment; filename=%s.diff' \
ebe3e388bbb3 new patch function, and urls schema.
Marcin Kuzminski <marcin@python-works.com>
parents: 2995
diff changeset
309 % revision[:12]
6909
54199f3aab93 diffs: drop the noop as_raw method - just use the raw diff directly and with proper variable naming
Mads Kiilerich <mads@kiilerich.com>
parents: 6908
diff changeset
310 return raw_diff
2996
ebe3e388bbb3 new patch function, and urls schema.
Marcin Kuzminski <marcin@python-works.com>
parents: 2995
diff changeset
311 elif method == 'patch':
ebe3e388bbb3 new patch function, and urls schema.
Marcin Kuzminski <marcin@python-works.com>
parents: 2995
diff changeset
312 response.content_type = 'text/plain'
6909
54199f3aab93 diffs: drop the noop as_raw method - just use the raw diff directly and with proper variable naming
Mads Kiilerich <mads@kiilerich.com>
parents: 6908
diff changeset
313 c.diff = safe_unicode(raw_diff)
2996
ebe3e388bbb3 new patch function, and urls schema.
Marcin Kuzminski <marcin@python-works.com>
parents: 2995
diff changeset
314 return render('changeset/patch_changeset.html')
2995
32471bd1f4ee Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents: 2978
diff changeset
315 elif method == 'raw':
32471bd1f4ee Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents: 2978
diff changeset
316 response.content_type = 'text/plain'
6909
54199f3aab93 diffs: drop the noop as_raw method - just use the raw diff directly and with proper variable naming
Mads Kiilerich <mads@kiilerich.com>
parents: 6908
diff changeset
317 return raw_diff
2995
32471bd1f4ee Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents: 2978
diff changeset
318 elif method == 'show':
4116
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
319 self.__load_data()
2995
32471bd1f4ee Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents: 2978
diff changeset
320 if len(c.cs_ranges) == 1:
32471bd1f4ee Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents: 2978
diff changeset
321 return render('changeset/changeset.html')
32471bd1f4ee Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents: 2978
diff changeset
322 else:
4297
7a5977429125 compare: show how many changesets the compared repo is behind
Mads Kiilerich <madski@unity3d.com>
parents: 4211
diff changeset
323 c.cs_ranges_org = None
4367
7879d8d88672 pull requests: show changeset comment and status flags in the changelog for PRs
Mads Kiilerich <madski@unity3d.com>
parents: 4364
diff changeset
324 c.cs_comments = {}
4352
c733124b6262 pull requests: show graph when displaying PR
Mads Kiilerich <madski@unity3d.com>
parents: 4330
diff changeset
325 revs = [ctx.revision for ctx in reversed(c.cs_ranges)]
6532
33b71a130b16 templates: properly escape inline JavaScript values
Søren Løvborg <sorenl@unity3d.com>
parents: 6520
diff changeset
326 c.jsdata = graph_data(c.db_repo_scm_instance, revs)
2995
32471bd1f4ee Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents: 2978
diff changeset
327 return render('changeset/changeset_range.html')
543
a99e23e6c1e8 fixes #13 large initial commits and changesets are cut of now to not freeze the application.
Marcin Kuzminski <marcin@python-works.com>
parents: 512
diff changeset
328
3749
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3695
diff changeset
329 @LoginRequired()
6511
a17c8e5f6712 auth: simplify repository permission checks
Søren Løvborg <sorenl@unity3d.com>
parents: 6452
diff changeset
330 @HasRepoPermissionLevelDecorator('read')
3750
244f184f5fc3 moved around some code in changeset controllers to properly log which function was decorated.
Marcin Kuzminski <marcin@python-works.com>
parents: 3749
diff changeset
331 def index(self, revision, method='show'):
244f184f5fc3 moved around some code in changeset controllers to properly log which function was decorated.
Marcin Kuzminski <marcin@python-works.com>
parents: 3749
diff changeset
332 return self._index(revision, method=method)
244f184f5fc3 moved around some code in changeset controllers to properly log which function was decorated.
Marcin Kuzminski <marcin@python-works.com>
parents: 3749
diff changeset
333
244f184f5fc3 moved around some code in changeset controllers to properly log which function was decorated.
Marcin Kuzminski <marcin@python-works.com>
parents: 3749
diff changeset
334 @LoginRequired()
6511
a17c8e5f6712 auth: simplify repository permission checks
Søren Løvborg <sorenl@unity3d.com>
parents: 6452
diff changeset
335 @HasRepoPermissionLevelDecorator('read')
2996
ebe3e388bbb3 new patch function, and urls schema.
Marcin Kuzminski <marcin@python-works.com>
parents: 2995
diff changeset
336 def changeset_raw(self, revision):
3750
244f184f5fc3 moved around some code in changeset controllers to properly log which function was decorated.
Marcin Kuzminski <marcin@python-works.com>
parents: 3749
diff changeset
337 return self._index(revision, method='raw')
2996
ebe3e388bbb3 new patch function, and urls schema.
Marcin Kuzminski <marcin@python-works.com>
parents: 2995
diff changeset
338
3749
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3695
diff changeset
339 @LoginRequired()
6511
a17c8e5f6712 auth: simplify repository permission checks
Søren Løvborg <sorenl@unity3d.com>
parents: 6452
diff changeset
340 @HasRepoPermissionLevelDecorator('read')
2996
ebe3e388bbb3 new patch function, and urls schema.
Marcin Kuzminski <marcin@python-works.com>
parents: 2995
diff changeset
341 def changeset_patch(self, revision):
3750
244f184f5fc3 moved around some code in changeset controllers to properly log which function was decorated.
Marcin Kuzminski <marcin@python-works.com>
parents: 3749
diff changeset
342 return self._index(revision, method='patch')
2996
ebe3e388bbb3 new patch function, and urls schema.
Marcin Kuzminski <marcin@python-works.com>
parents: 2995
diff changeset
343
3749
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3695
diff changeset
344 @LoginRequired()
6511
a17c8e5f6712 auth: simplify repository permission checks
Søren Løvborg <sorenl@unity3d.com>
parents: 6452
diff changeset
345 @HasRepoPermissionLevelDecorator('read')
2996
ebe3e388bbb3 new patch function, and urls schema.
Marcin Kuzminski <marcin@python-works.com>
parents: 2995
diff changeset
346 def changeset_download(self, revision):
3750
244f184f5fc3 moved around some code in changeset controllers to properly log which function was decorated.
Marcin Kuzminski <marcin@python-works.com>
parents: 3749
diff changeset
347 return self._index(revision, method='download')
1670
d2de0c2f02cd #77 code review
Marcin Kuzminski <marcin@python-works.com>
parents: 1656
diff changeset
348
3749
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3695
diff changeset
349 @LoginRequired()
6511
a17c8e5f6712 auth: simplify repository permission checks
Søren Løvborg <sorenl@unity3d.com>
parents: 6452
diff changeset
350 @HasRepoPermissionLevelDecorator('read')
2187
b61e540122f2 #415: Adding comment to changeset causes reload
Marcin Kuzminski <marcin@python-works.com>
parents: 2161
diff changeset
351 @jsonify
1670
d2de0c2f02cd #77 code review
Marcin Kuzminski <marcin@python-works.com>
parents: 1656
diff changeset
352 def comment(self, repo_name, revision):
5667
7834f845505a comments: use inline comment infrastructure for general comments too
Mads Kiilerich <madski@unity3d.com>
parents: 5666
diff changeset
353 assert request.environ.get('HTTP_X_PARTIAL_XHR')
7834f845505a comments: use inline comment infrastructure for general comments too
Mads Kiilerich <madski@unity3d.com>
parents: 5666
diff changeset
354
2296
e5c0f201ca0b Add changeset status change into emails
Marcin Kuzminski <marcin@python-works.com>
parents: 2286
diff changeset
355 status = request.POST.get('changeset_status')
5068
140f2811fc6f comments: avoid storing 'No comments' text when changing status
Thomas De Schampheleire <thomas.de.schampheleire@gmail.com>
parents: 4917
diff changeset
356 text = request.POST.get('text', '').strip()
2296
e5c0f201ca0b Add changeset status change into emails
Marcin Kuzminski <marcin@python-works.com>
parents: 2286
diff changeset
357
5666
b3ddd87f214f comments: extract common comment creation functionality for changesets and pullrequests
Mads Kiilerich <madski@unity3d.com>
parents: 5664
diff changeset
358 c.comment = create_comment(
b3ddd87f214f comments: extract common comment creation functionality for changesets and pullrequests
Mads Kiilerich <madski@unity3d.com>
parents: 5664
diff changeset
359 text,
b3ddd87f214f comments: extract common comment creation functionality for changesets and pullrequests
Mads Kiilerich <madski@unity3d.com>
parents: 5664
diff changeset
360 status,
2187
b61e540122f2 #415: Adding comment to changeset causes reload
Marcin Kuzminski <marcin@python-works.com>
parents: 2161
diff changeset
361 revision=revision,
b61e540122f2 #415: Adding comment to changeset causes reload
Marcin Kuzminski <marcin@python-works.com>
parents: 2161
diff changeset
362 f_path=request.POST.get('f_path'),
2296
e5c0f201ca0b Add changeset status change into emails
Marcin Kuzminski <marcin@python-works.com>
parents: 2286
diff changeset
363 line_no=request.POST.get('line'),
2187
b61e540122f2 #415: Adding comment to changeset causes reload
Marcin Kuzminski <marcin@python-works.com>
parents: 2161
diff changeset
364 )
2217
76947224bf27 Implemented initial code-review status of changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 2216
diff changeset
365
76947224bf27 Implemented initial code-review status of changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 2216
diff changeset
366 # get status if set !
4357
c666a68e2a4d comments: drop change_changeset_status - the value from 'No change' is enough
Mads Kiilerich <madski@unity3d.com>
parents: 4352
diff changeset
367 if status:
2677
4fbbc65e8cd5 Forbid changing changset status when it is associated with a closed pull request
Marcin Kuzminski <marcin@python-works.com>
parents: 2541
diff changeset
368 # if latest status was from pull request and it's closed
5667
7834f845505a comments: use inline comment infrastructure for general comments too
Mads Kiilerich <madski@unity3d.com>
parents: 5666
diff changeset
369 # disallow changing status ! RLY?
2677
4fbbc65e8cd5 Forbid changing changset status when it is associated with a closed pull request
Marcin Kuzminski <marcin@python-works.com>
parents: 2541
diff changeset
370 try:
4fbbc65e8cd5 Forbid changing changset status when it is associated with a closed pull request
Marcin Kuzminski <marcin@python-works.com>
parents: 2541
diff changeset
371 ChangesetStatusModel().set_status(
4195
9581233e9275 Rename rhodecode_db_repo to db_repo - it stores db repo abstractions
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4187
diff changeset
372 c.db_repo.repo_id,
2677
4fbbc65e8cd5 Forbid changing changset status when it is associated with a closed pull request
Marcin Kuzminski <marcin@python-works.com>
parents: 2541
diff changeset
373 status,
6452
3dcf1f82311a controllers: avoid setting request state in controller instances - set it in the thread global request variable
Mads Kiilerich <mads@kiilerich.com>
parents: 6449
diff changeset
374 request.authuser.user_id,
5666
b3ddd87f214f comments: extract common comment creation functionality for changesets and pullrequests
Mads Kiilerich <madski@unity3d.com>
parents: 5664
diff changeset
375 c.comment,
2677
4fbbc65e8cd5 Forbid changing changset status when it is associated with a closed pull request
Marcin Kuzminski <marcin@python-works.com>
parents: 2541
diff changeset
376 revision=revision,
5667
7834f845505a comments: use inline comment infrastructure for general comments too
Mads Kiilerich <madski@unity3d.com>
parents: 5666
diff changeset
377 dont_allow_on_closed_pull_request=True,
2677
4fbbc65e8cd5 Forbid changing changset status when it is associated with a closed pull request
Marcin Kuzminski <marcin@python-works.com>
parents: 2541
diff changeset
378 )
4fbbc65e8cd5 Forbid changing changset status when it is associated with a closed pull request
Marcin Kuzminski <marcin@python-works.com>
parents: 2541
diff changeset
379 except StatusChangeOnClosedPullRequestError:
5667
7834f845505a comments: use inline comment infrastructure for general comments too
Mads Kiilerich <madski@unity3d.com>
parents: 5666
diff changeset
380 log.debug('cannot change status on %s with closed pull request', revision)
7834f845505a comments: use inline comment infrastructure for general comments too
Mads Kiilerich <madski@unity3d.com>
parents: 5666
diff changeset
381 raise HTTPBadRequest()
7834f845505a comments: use inline comment infrastructure for general comments too
Mads Kiilerich <madski@unity3d.com>
parents: 5666
diff changeset
382
6452
3dcf1f82311a controllers: avoid setting request state in controller instances - set it in the thread global request variable
Mads Kiilerich <mads@kiilerich.com>
parents: 6449
diff changeset
383 action_logger(request.authuser,
2375
bc2d8c03c050 Implemented #467 Journal logs comments on changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 2368
diff changeset
384 'user_commented_revision:%s' % revision,
6520
10f16cf8289e cleanup: remove SQLAlchemy session argument to action_logger
Søren Løvborg <sorenl@unity3d.com>
parents: 6511
diff changeset
385 c.db_repo, request.ip_addr)
2375
bc2d8c03c050 Implemented #467 Journal logs comments on changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 2368
diff changeset
386
2677
4fbbc65e8cd5 Forbid changing changset status when it is associated with a closed pull request
Marcin Kuzminski <marcin@python-works.com>
parents: 2541
diff changeset
387 Session().commit()
2375
bc2d8c03c050 Implemented #467 Journal logs comments on changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 2368
diff changeset
388
2187
b61e540122f2 #415: Adding comment to changeset causes reload
Marcin Kuzminski <marcin@python-works.com>
parents: 2161
diff changeset
389 data = {
b61e540122f2 #415: Adding comment to changeset causes reload
Marcin Kuzminski <marcin@python-works.com>
parents: 2161
diff changeset
390 'target_id': h.safeid(h.safe_unicode(request.POST.get('f_path'))),
b61e540122f2 #415: Adding comment to changeset causes reload
Marcin Kuzminski <marcin@python-works.com>
parents: 2161
diff changeset
391 }
5666
b3ddd87f214f comments: extract common comment creation functionality for changesets and pullrequests
Mads Kiilerich <madski@unity3d.com>
parents: 5664
diff changeset
392 if c.comment is not None:
b3ddd87f214f comments: extract common comment creation functionality for changesets and pullrequests
Mads Kiilerich <madski@unity3d.com>
parents: 5664
diff changeset
393 data.update(c.comment.get_dict())
2188
56e96d4e9f6e white space cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 2187
diff changeset
394 data.update({'rendered_text':
56e96d4e9f6e white space cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 2187
diff changeset
395 render('changeset/changeset_comment_block.html')})
2189
3052f90c568a fixed main comments, prevent from sending inline comments if text is empty
Marcin Kuzminski <marcin@python-works.com>
parents: 2188
diff changeset
396
2187
b61e540122f2 #415: Adding comment to changeset causes reload
Marcin Kuzminski <marcin@python-works.com>
parents: 2161
diff changeset
397 return data
1670
d2de0c2f02cd #77 code review
Marcin Kuzminski <marcin@python-works.com>
parents: 1656
diff changeset
398
3749
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3695
diff changeset
399 @LoginRequired()
6511
a17c8e5f6712 auth: simplify repository permission checks
Søren Løvborg <sorenl@unity3d.com>
parents: 6452
diff changeset
400 @HasRepoPermissionLevelDecorator('read')
1670
d2de0c2f02cd #77 code review
Marcin Kuzminski <marcin@python-works.com>
parents: 1656
diff changeset
401 @jsonify
1716
7d1fc253549e notification to commit author + gardening
Marcin Kuzminski <marcin@python-works.com>
parents: 1713
diff changeset
402 def delete_comment(self, repo_name, comment_id):
5810
81057be7a5c1 auth: properly invoke PermFunctions (CVE-2016-3114)
Søren Løvborg <sorenl@unity3d.com>
parents: 5374
diff changeset
403 co = ChangesetComment.get_or_404(comment_id)
81057be7a5c1 auth: properly invoke PermFunctions (CVE-2016-3114)
Søren Løvborg <sorenl@unity3d.com>
parents: 5374
diff changeset
404 if co.repo.repo_name != repo_name:
81057be7a5c1 auth: properly invoke PermFunctions (CVE-2016-3114)
Søren Løvborg <sorenl@unity3d.com>
parents: 5374
diff changeset
405 raise HTTPNotFound()
6452
3dcf1f82311a controllers: avoid setting request state in controller instances - set it in the thread global request variable
Mads Kiilerich <mads@kiilerich.com>
parents: 6449
diff changeset
406 owner = co.author_id == request.authuser.user_id
6511
a17c8e5f6712 auth: simplify repository permission checks
Søren Løvborg <sorenl@unity3d.com>
parents: 6452
diff changeset
407 repo_admin = h.HasRepoPermissionLevel('admin')(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
408 if h.HasPermissionAny('hg.admin')() or repo_admin or owner:
1713
54687aa00724 Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents: 1712
diff changeset
409 ChangesetCommentsModel().delete(comment=co)
2677
4fbbc65e8cd5 Forbid changing changset status when it is associated with a closed pull request
Marcin Kuzminski <marcin@python-works.com>
parents: 2541
diff changeset
410 Session().commit()
1674
6f0143e5efe5 #71 code review
Marcin Kuzminski <marcin@python-works.com>
parents: 1670
diff changeset
411 return True
6f0143e5efe5 #71 code review
Marcin Kuzminski <marcin@python-works.com>
parents: 1670
diff changeset
412 else:
6f0143e5efe5 #71 code review
Marcin Kuzminski <marcin@python-works.com>
parents: 1670
diff changeset
413 raise HTTPForbidden()
2971
2bfcec6a3985 new tooltip implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 2815
diff changeset
414
3749
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3695
diff changeset
415 @LoginRequired()
6511
a17c8e5f6712 auth: simplify repository permission checks
Søren Løvborg <sorenl@unity3d.com>
parents: 6452
diff changeset
416 @HasRepoPermissionLevelDecorator('read')
2971
2bfcec6a3985 new tooltip implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 2815
diff changeset
417 @jsonify
2bfcec6a3985 new tooltip implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 2815
diff changeset
418 def changeset_info(self, repo_name, revision):
2978
b84a4ec93ab6 hanlde stripped or removed changesets on changeset info function
Marcin Kuzminski <marcin@python-works.com>
parents: 2971
diff changeset
419 if request.is_xhr:
b84a4ec93ab6 hanlde stripped or removed changesets on changeset info function
Marcin Kuzminski <marcin@python-works.com>
parents: 2971
diff changeset
420 try:
4196
06e49be38d78 Rename rhodecode_repo to db_repo_scm_instance
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4195
diff changeset
421 return c.db_repo_scm_instance.get_changeset(revision)
5374
d69aa464f373 cleanup: consistently use 'except ... as ...:'
Mads Kiilerich <madski@unity3d.com>
parents: 5306
diff changeset
422 except ChangesetDoesNotExistError as e:
2978
b84a4ec93ab6 hanlde stripped or removed changesets on changeset info function
Marcin Kuzminski <marcin@python-works.com>
parents: 2971
diff changeset
423 return EmptyChangeset(message=str(e))
2971
2bfcec6a3985 new tooltip implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 2815
diff changeset
424 else:
2bfcec6a3985 new tooltip implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 2815
diff changeset
425 raise HTTPBadRequest()
4116
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
426
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
427 @LoginRequired()
6511
a17c8e5f6712 auth: simplify repository permission checks
Søren Løvborg <sorenl@unity3d.com>
parents: 6452
diff changeset
428 @HasRepoPermissionLevelDecorator('read')
4116
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
429 @jsonify
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
430 def changeset_children(self, repo_name, revision):
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
431 if request.is_xhr:
4196
06e49be38d78 Rename rhodecode_repo to db_repo_scm_instance
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4195
diff changeset
432 changeset = c.db_repo_scm_instance.get_changeset(revision)
4116
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
433 result = {"results": []}
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
434 if changeset.children:
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
435 result = {"results": changeset.children}
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
436 return result
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
437 else:
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
438 raise HTTPBadRequest()
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
439
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
440 @LoginRequired()
6511
a17c8e5f6712 auth: simplify repository permission checks
Søren Løvborg <sorenl@unity3d.com>
parents: 6452
diff changeset
441 @HasRepoPermissionLevelDecorator('read')
4116
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
442 @jsonify
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
443 def changeset_parents(self, repo_name, revision):
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
444 if request.is_xhr:
4196
06e49be38d78 Rename rhodecode_repo to db_repo_scm_instance
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4195
diff changeset
445 changeset = c.db_repo_scm_instance.get_changeset(revision)
4116
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
446 result = {"results": []}
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
447 if changeset.parents:
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
448 result = {"results": changeset.parents}
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
449 return result
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
450 else:
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4077
diff changeset
451 raise HTTPBadRequest()