code: code fixes and small adjustments

This commit is contained in:
Marcin Kuzminski 2018-02-20 17:49:26 +01:00
parent 686eb87294
commit 3ea058d91b
5 changed files with 49 additions and 38 deletions

View file

@ -209,7 +209,9 @@ class RepoAppView(BaseAppView):
try:
self.rhodecode_vcs_repo = self.db_repo.scm_instance()
if self.rhodecode_vcs_repo:
self.path_filter = PathFilter(self.rhodecode_vcs_repo.get_path_permissions(c.auth_user.username))
path_perms = self.rhodecode_vcs_repo.get_path_permissions(
c.auth_user.username)
self.path_filter = PathFilter(path_perms)
else:
self.path_filter = PathFilter(None)
except RepositoryRequirementError as e:
@ -218,7 +220,7 @@ class RepoAppView(BaseAppView):
self.rhodecode_vcs_repo = None
self.path_filter = None
c.path_filter = self.path_filter # used by atom_feed_entry.mako
c.path_filter = self.path_filter # used by atom_feed_entry.mako
if (not c.repository_requirements_missing
and self.rhodecode_vcs_repo is None):
@ -244,7 +246,8 @@ class RepoAppView(BaseAppView):
return default
def _get_f_path(self, matchdict, default=None):
return self.path_filter.assert_path_permissions(self._get_f_path_unchecked(matchdict, default))
f_path_match = self._get_f_path_unchecked(matchdict, default)
return self.path_filter.assert_path_permissions(f_path_match)
class PathFilter(object):

View file

@ -639,10 +639,8 @@ class BaseRepository(object):
warnings.warn("Use in_memory_commit instead", DeprecationWarning)
return self.in_memory_commit
#
def get_path_permissions(self, username):
"""
Returns a path permission checker or None if not supported
:param username: session user name
@ -1677,18 +1675,20 @@ class PatternPathPermissionChecker(BasePathPermissionChecker):
def __init__(self, includes, excludes):
self.includes = includes
self.excludes = excludes
self.includes_re = [] if not includes else [re.compile(fnmatch.translate(pattern)) for pattern in includes]
self.excludes_re = [] if not excludes else [re.compile(fnmatch.translate(pattern)) for pattern in excludes]
self.includes_re = [] if not includes else [
re.compile(fnmatch.translate(pattern)) for pattern in includes]
self.excludes_re = [] if not excludes else [
re.compile(fnmatch.translate(pattern)) for pattern in excludes]
@property
def has_full_access(self):
return '*' in self.includes and not self.excludes
def has_access(self, path):
for re in self.excludes_re:
if re.match(path):
for regex in self.excludes_re:
if regex.match(path):
return False
for re in self.includes_re:
if re.match(path):
for regex in self.includes_re:
if regex.match(path):
return True
return False
return False

View file

@ -28,7 +28,6 @@ from itertools import chain
from StringIO import StringIO
from zope.cachedescriptors.property import Lazy as LazyProperty
from pyramid.compat import configparser
from rhodecode.lib.datelib import utcdate_fromtimestamp
from rhodecode.lib.utils import safe_unicode, safe_str
@ -40,6 +39,7 @@ from rhodecode.lib.vcs.nodes import (
FileNode, DirNode, NodeKind, RootNode, SubModuleNode,
ChangedFileNodesGenerator, AddedFileNodesGenerator,
RemovedFileNodesGenerator, LargeFileNode)
from rhodecode.lib.vcs.compat import configparser
class GitCommit(base.BaseCommit):

View file

@ -21,10 +21,9 @@
"""
HG repository module
"""
import ConfigParser
import os
import logging
import binascii
import os
import shutil
import urllib
@ -32,8 +31,7 @@ from zope.cachedescriptors.property import Lazy as LazyProperty
from rhodecode.lib.compat import OrderedDict
from rhodecode.lib.datelib import (
date_to_timestamp_plus_offset, utcdate_fromtimestamp, makedate,
date_astimestamp)
date_to_timestamp_plus_offset, utcdate_fromtimestamp, makedate)
from rhodecode.lib.utils import safe_unicode, safe_str
from rhodecode.lib.vcs import connection, exceptions
from rhodecode.lib.vcs.backends.base import (
@ -45,6 +43,7 @@ from rhodecode.lib.vcs.backends.hg.inmemory import MercurialInMemoryCommit
from rhodecode.lib.vcs.exceptions import (
EmptyRepositoryError, RepositoryError, TagAlreadyExistError,
TagDoesNotExistError, CommitDoesNotExistError, SubrepoMergeError)
from rhodecode.lib.vcs.compat import configparser
hexlify = binascii.hexlify
nullid = "\0" * 20
@ -778,6 +777,7 @@ class MercurialRepository(BaseRepository):
else:
merge_possible = True
needs_push = False
if merge_possible:
try:
merge_commit_id, needs_push = shadow_repo._local_merge(
@ -892,36 +892,43 @@ class MercurialRepository(BaseRepository):
self._remote.invalidate_vcs_cache()
def get_path_permissions(self, username):
hgacl_file = self.path + '/.hg/hgacl'
hgacl_file = os.path.join(self.path, '.hg/hgacl')
def read_patterns(suffix):
svalue = None
try:
svalue = hgacl.get('narrowhgacl', username + suffix)
except configparser.NoOptionError:
try:
svalue = hgacl.get('narrowhgacl', 'default' + suffix)
except configparser.NoOptionError:
pass
if not svalue:
return None
result = ['/']
for pattern in svalue.split():
result.append(pattern)
if '*' not in pattern and '?' not in pattern:
result.append(pattern + '/*')
return result
if os.path.exists(hgacl_file):
try:
hgacl = ConfigParser.RawConfigParser()
hgacl = configparser.RawConfigParser()
hgacl.read(hgacl_file)
def read_patterns(suffix):
svalue = None
try:
svalue = hgacl.get('narrowhgacl', username + suffix)
except ConfigParser.NoOptionError:
try:
svalue = hgacl.get('narrowhgacl', 'default' + suffix)
except ConfigParser.NoOptionError:
pass
if not svalue:
return None
result = ['/']
for pattern in svalue.split():
result.append(pattern)
if '*' not in pattern and '?' not in pattern:
result.append(pattern + '/*')
return result
includes = read_patterns('.includes')
excludes = read_patterns('.excludes')
return BasePathPermissionChecker.create_from_patterns(includes, excludes)
return BasePathPermissionChecker.create_from_patterns(
includes, excludes)
except BaseException as e:
raise exceptions.RepositoryRequirementError('Cannot read ACL settings for {}: {}'.format(self.name, e))
msg = 'Cannot read ACL settings from {} on {}: {}'.format(
hgacl_file, self.name, e)
raise exceptions.RepositoryRequirementError(msg)
else:
return None
class MercurialIndexBasedCollectionGenerator(CollectionGenerator):
def _commit_factory(self, commit_id):

View file

@ -0,0 +1 @@
from pyramid.compat import configparser