Files
@ 3505a6be2988
Branch filter:
Location: kallithea/setup.py - annotation
3505a6be2988
5.2 KiB
text/x-python
repogroups: fix private repo recursion check
The purpose of this check is to ensure that we don't recursively assign
"default" user perms for a repo with the "private" flag set (because in
that case, the "default" user perms should always be "no access").
(The check, and this fix, is of course only applicable to Kallithea
instances that have anonymous access enabled to begin with.)
However, the check was only functional if the user was specified as a
username. This is apparently always the case when Kallithea is running,
but was not e.g. the case in the test suite, which consistently passed
a user ID instead of a username.
This commit ensures that the user is always resolved before the check is
made. There's no significant overhead to this, as the code immediately
calls RepoModel().grant_user_permission, which resolved the user anyway.
This change just moves the database lookup a bit earlier.
Fixing this revealed the matching test case to be broken, so it has been
fixed as well.
Down the road, we should eliminate Kallithea's bizarre practice of
passing around usernames and user IDs, in favor of passing actual User
objects. That'll get rid of mistakes like these, as well as repeated
needless database lookups.
The purpose of this check is to ensure that we don't recursively assign
"default" user perms for a repo with the "private" flag set (because in
that case, the "default" user perms should always be "no access").
(The check, and this fix, is of course only applicable to Kallithea
instances that have anonymous access enabled to begin with.)
However, the check was only functional if the user was specified as a
username. This is apparently always the case when Kallithea is running,
but was not e.g. the case in the test suite, which consistently passed
a user ID instead of a username.
This commit ensures that the user is always resolved before the check is
made. There's no significant overhead to this, as the code immediately
calls RepoModel().grant_user_permission, which resolved the user anyway.
This change just moves the database lookup a bit earlier.
Fixing this revealed the matching test case to be broken, so it has been
fixed as well.
Down the road, we should eliminate Kallithea's bizarre practice of
passing around usernames and user IDs, in favor of passing actual User
objects. That'll get rid of mistakes like these, as well as repeated
needless database lookups.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 | bf011c9f7f58 266a3cbc0302 9382e88eae22 65c27fd21769 9382e88eae22 9382e88eae22 a922e91a4f02 a9a1560dad79 9382e88eae22 9382e88eae22 9382e88eae22 9382e88eae22 9382e88eae22 9382e88eae22 9382e88eae22 9382e88eae22 9382e88eae22 9382e88eae22 9382e88eae22 9382e88eae22 9382e88eae22 9382e88eae22 7e5f8c12a3fc 9382e88eae22 9382e88eae22 9382e88eae22 9382e88eae22 9382e88eae22 9382e88eae22 9382e88eae22 9382e88eae22 9382e88eae22 9382e88eae22 9382e88eae22 3a1cf70e0f42 2d7a94f3eaae 9382e88eae22 7894a440e134 9ec73e01e5b1 1f43d08ce5a8 f6fcb21db7b3 de37fcbce8c5 9382e88eae22 ed11cb3e905e 1a080d4e926e 8c2e96646545 298bac3757a7 5cf18f89ab3e 4f2e231df222 175813f77851 9382e88eae22 4034eb731b33 d1d9d249846b ffd45b185016 ffd45b185016 b5859022ac69 f19d8fd8e35a 9382e88eae22 9382e88eae22 d4f6dc38d625 ffd45b185016 bda2bd2558b1 9382e88eae22 953ee49f3b30 5cf18f89ab3e 9382e88eae22 880a39e5d8df 880a39e5d8df 880a39e5d8df fc6063e6630b cc48c1541c7e fc6063e6630b fc6063e6630b fc6063e6630b fc6063e6630b fc6063e6630b fc6063e6630b fc6063e6630b fc6063e6630b cc48c1541c7e fc6063e6630b a60cd29ba7e2 b0e2c949c34b 2afa6b8c2ade 2afa6b8c2ade 65c27fd21769 65c27fd21769 24c0d584ba86 326a9336fbe5 faad9dd06b58 266a3cbc0302 266a3cbc0302 7e5f8c12a3fc 266a3cbc0302 266a3cbc0302 266a3cbc0302 266a3cbc0302 2afa6b8c2ade 266a3cbc0302 65c27fd21769 7c732f2047f8 d69aa464f373 266a3cbc0302 7c732f2047f8 7c732f2047f8 266a3cbc0302 ad2e97c6f17f 2642f128ad46 a922e91a4f02 c79e4f89bfd3 c79e4f89bfd3 c79e4f89bfd3 c79e4f89bfd3 c79e4f89bfd3 c79e4f89bfd3 c79e4f89bfd3 c79e4f89bfd3 c79e4f89bfd3 c79e4f89bfd3 a922e91a4f02 564e40829f80 a922e91a4f02 24c0d584ba86 9382e88eae22 ad2e97c6f17f 2642f128ad46 2d7a94f3eaae f4807acf643d 9382e88eae22 3315e9263a53 880a39e5d8df 9382e88eae22 2642f128ad46 a60cd29ba7e2 dd676fdeda0f 2642f128ad46 65c27fd21769 20dc7a5eb748 7e5f8c12a3fc 564e40829f80 564e40829f80 0e6035a85980 564e40829f80 20dc7a5eb748 20dc7a5eb748 20dc7a5eb748 7ac09514a178 9793473d74be 9793473d74be 9793473d74be 7ac09514a178 564e40829f80 7e5f8c12a3fc 564e40829f80 564e40829f80 564e40829f80 341beaa9edba 341beaa9edba 7e5f8c12a3fc b1679034b6c4 7e5f8c12a3fc 7e5f8c12a3fc 7e5f8c12a3fc 7e5f8c12a3fc 7e5f8c12a3fc 7e5f8c12a3fc c436f337e253 cf73bd884a53 2dad9708c89f 564e40829f80 564e40829f80 | #!/usr/bin/env python2
# -*- coding: utf-8 -*-
import os
import sys
import platform
if sys.version_info < (2, 6) or sys.version_info >= (3,):
raise Exception('Kallithea requires python 2.6 or 2.7')
here = os.path.abspath(os.path.dirname(__file__))
def _get_meta_var(name, data, callback_handler=None):
import re
matches = re.compile(r'(?:%s)\s*=\s*(.*)' % name).search(data)
if matches:
if not callable(callback_handler):
callback_handler = lambda v: v
return callback_handler(eval(matches.groups()[0]))
_meta = open(os.path.join(here, 'kallithea', '__init__.py'), 'rb')
_metadata = _meta.read()
_meta.close()
callback = lambda V: ('.'.join(map(str, V[:3])) + '.'.join(V[3:]))
__version__ = _get_meta_var('VERSION', _metadata, callback)
__license__ = _get_meta_var('__license__', _metadata)
__author__ = _get_meta_var('__author__', _metadata)
__url__ = _get_meta_var('__url__', _metadata)
# defines current platform
__platform__ = platform.system()
is_windows = __platform__ in ['Windows']
requirements = [
"alembic>=0.8.0,<0.9",
"waitress>=0.8.8,<1.0",
"webob>=1.7,<2",
"Pylons>=1.0.0,<=1.0.2",
"Beaker>=1.7.0,<2",
"WebHelpers==1.3",
"formencode>=1.2.4,<=1.2.6",
"SQLAlchemy>=1.0,<1.1",
"Mako>=0.9.0,<=1.0.0",
"pygments>=1.5",
"whoosh>=2.5.0,<=2.5.7",
"celery>=3.1,<3.2",
"babel>=0.9.6,<2.4",
"python-dateutil>=1.5.0,<2.0.0",
"markdown==2.2.1",
"docutils>=0.8.1",
"URLObject==2.3.4",
"Routes==1.13",
"dulwich>=0.14.1",
"mercurial>=2.9,<4.2",
]
if sys.version_info < (2, 7):
requirements.append("importlib==1.0.1")
requirements.append("argparse")
if not is_windows:
requirements.append("bcrypt>=3.1.0")
dependency_links = [
]
classifiers = [
'Development Status :: 4 - Beta',
'Environment :: Web Environment',
'Framework :: Pylons',
'Intended Audience :: Developers',
'License :: OSI Approved :: GNU General Public License (GPL)',
'Operating System :: OS Independent',
'Programming Language :: Python',
'Programming Language :: Python :: 2.6',
'Programming Language :: Python :: 2.7',
'Topic :: Software Development :: Version Control',
]
# additional files from project that goes somewhere in the filesystem
# relative to sys.prefix
data_files = []
description = ('Kallithea is a fast and powerful management tool '
'for Mercurial and Git with a built in push/pull server, '
'full text search and code-review.')
keywords = ' '.join([
'kallithea', 'mercurial', 'git', 'code review',
'repo groups', 'ldap', 'repository management', 'hgweb replacement',
'hgwebdir', 'gitweb replacement', 'serving hgweb',
])
# long description
README_FILE = 'README.rst'
try:
long_description = open(README_FILE).read()
except IOError as err:
sys.stderr.write(
"[WARNING] Cannot find file specified as long_description (%s)\n"
% README_FILE
)
long_description = description
import setuptools
# monkey patch setuptools to use distutils owner/group functionality
from setuptools.command import sdist
sdist_org = sdist.sdist
class sdist_new(sdist_org):
def initialize_options(self):
sdist_org.initialize_options(self)
self.owner = self.group = 'root'
sdist.sdist = sdist_new
packages = setuptools.find_packages(exclude=['ez_setup'])
setuptools.setup(
name='Kallithea',
version=__version__,
description=description,
long_description=long_description,
keywords=keywords,
license=__license__,
author=__author__,
author_email='kallithea@sfconservancy.org',
dependency_links=dependency_links,
url=__url__,
install_requires=requirements,
classifiers=classifiers,
setup_requires=['PasteScript>=1.6.3'],
data_files=data_files,
packages=packages,
include_package_data=True,
message_extractors={'kallithea': [
('**.py', 'python', None),
('templates/**.mako', 'mako', {'input_encoding': 'utf-8'}),
('templates/**.html', 'mako', {'input_encoding': 'utf-8'}),
('public/**', 'ignore', None)]},
zip_safe=False,
paster_plugins=['PasteScript', 'Pylons'],
entry_points="""
[console_scripts]
kallithea-api = kallithea.bin.kallithea_api:main
kallithea-gist = kallithea.bin.kallithea_gist:main
kallithea-config = kallithea.bin.kallithea_config:main
[paste.app_factory]
main = kallithea.config.middleware:make_app
[paste.app_install]
main = pylons.util:PylonsInstaller
[paste.global_paster_command]
setup-db=kallithea.lib.paster_commands.setup_db:Command
cleanup-repos=kallithea.lib.paster_commands.cleanup:Command
update-repoinfo=kallithea.lib.paster_commands.update_repoinfo:Command
make-rcext=kallithea.lib.paster_commands.make_rcextensions:Command
repo-scan=kallithea.lib.paster_commands.repo_scan:Command
cache-keys=kallithea.lib.paster_commands.cache_keys:Command
ishell=kallithea.lib.paster_commands.ishell:Command
make-index=kallithea.lib.paster_commands.make_index:Command
upgrade-db=kallithea.lib.dbmigrate:UpgradeDb
celeryd=kallithea.lib.paster_commands.celeryd:Command
install-iis=kallithea.lib.paster_commands.install_iis:Command
""",
)
|