code: code fixes and small adjustments
This commit is contained in:
parent
686eb87294
commit
3ea058d91b
5 changed files with 49 additions and 38 deletions
|
|
@ -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):
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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):
|
||||
|
|
|
|||
|
|
@ -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):
|
||||
|
|
|
|||
1
rhodecode/lib/vcs/compat.py
Normal file
1
rhodecode/lib/vcs/compat.py
Normal file
|
|
@ -0,0 +1 @@
|
|||
from pyramid.compat import configparser
|
||||
Loading…
Add table
Add a link
Reference in a new issue