##// END OF EJS Templates
env-variables: make it safer if there's a syntax problem inside .ini file....
env-variables: make it safer if there's a syntax problem inside .ini file. It's better to not crash, since it means server wont start. Let users fix problems instead of breaking the startup because of that.

File last commit:

r2908:76c75f2d default
r3237:5cf82ecc default
Show More
exceptions.py
215 lines | 5.3 KiB | text/x-python | PythonLexer
project: added all source files and assets
r1 # -*- coding: utf-8 -*-
release: update copyright year to 2018
r2487 # Copyright (C) 2014-2018 RhodeCode GmbH
project: added all source files and assets
r1 #
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License, version 3
# (only), as published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# This program is dual-licensed. If you wish to learn more about the
# RhodeCode Enterprise Edition, including its added features, Support services,
# and proprietary license terms, please see https://rhodecode.com/licenses/
"""
Custom vcs exceptions module.
"""
logging: log traceback for errors that are known to help debugging.
r2449 import logging
project: added all source files and assets
r1 import functools
import urllib2
Martin Bornhold
vcs: Fix vcsserver startup with http backend.
r964
logging: log traceback for errors that are known to help debugging.
r2449 log = logging.getLogger(__name__)
dan
vcs-error: replace disable_vcs middleware with vcs and http exceptions...
r682
class VCSCommunicationError(Exception):
pass
class HttpVCSCommunicationError(VCSCommunicationError):
pass
project: added all source files and assets
r1
class VCSError(Exception):
pass
class RepositoryError(VCSError):
pass
class RepositoryRequirementError(RepositoryError):
pass
class VCSBackendNotSupportedError(VCSError):
"""
Exception raised when VCSServer does not support requested backend
"""
class EmptyRepositoryError(RepositoryError):
pass
class TagAlreadyExistError(RepositoryError):
pass
class TagDoesNotExistError(RepositoryError):
pass
class BranchAlreadyExistError(RepositoryError):
pass
class BranchDoesNotExistError(RepositoryError):
pass
class CommitError(RepositoryError):
"""
Exceptions related to an existing commit
"""
class CommitDoesNotExistError(CommitError):
pass
class CommittingError(RepositoryError):
"""
Exceptions happening while creating a new commit
"""
class NothingChangedError(CommittingError):
pass
class NodeError(VCSError):
pass
class RemovedFileNodeError(NodeError):
pass
class NodeAlreadyExistsError(CommittingError):
pass
class NodeAlreadyChangedError(CommittingError):
pass
class NodeDoesNotExistError(CommittingError):
pass
class NodeNotChangedError(CommittingError):
pass
class NodeAlreadyAddedError(CommittingError):
pass
class NodeAlreadyRemovedError(CommittingError):
pass
Martin Bornhold
subrepo: Add exception for subrepo merge errors.
r1107 class SubrepoMergeError(RepositoryError):
"""
This happens if we try to merge a repository which contains subrepos and
the subrepos cannot be merged. The subrepos are not merged itself but
their references in the root repo are merged.
"""
project: added all source files and assets
r1 class ImproperArchiveTypeError(VCSError):
pass
class CommandError(VCSError):
pass
class UnhandledException(VCSError):
"""
Signals that something unexpected went wrong.
This usually means we have a programming error on the side of the VCSServer
and should inspect the logfile of the VCSServer to find more details.
"""
_EXCEPTION_MAP = {
'abort': RepositoryError,
'archive': ImproperArchiveTypeError,
'error': RepositoryError,
'lookup': CommitDoesNotExistError,
'repo_locked': RepositoryError,
'requirement': RepositoryRequirementError,
'unhandled': UnhandledException,
# TODO: johbo: Define our own exception for this and stop abusing
# urllib's exception class.
'url_error': urllib2.URLError,
Martin Bornhold
subrepo: Add exception for subrepo merge errors.
r1107 'subrepo_merge_error': SubrepoMergeError,
project: added all source files and assets
r1 }
def map_vcs_exceptions(func):
"""
Utility to decorate functions so that plain exceptions are translated.
The translation is based on `exc_map` which maps a `str` indicating
the error type into an exception class representing this error inside
of the vcs layer.
"""
@functools.wraps(func)
def wrapper(*args, **kwargs):
try:
return func(*args, **kwargs)
except Exception as e:
# The error middleware adds information if it finds
# __traceback_info__ in a frame object. This way the remote
# traceback information is made available in error reports.
vcs-server: expose remote tracebacks from http backend using the Pyro4AwareFormatter.
r1257 remote_tb = getattr(e, '_vcs_server_traceback', None)
exceptions: improve handling of exception that are unhandled....
r2183 __traceback_info__ = None
project: added all source files and assets
r1 if remote_tb:
exceptions: improve handling of exception that are unhandled....
r2183 if isinstance(remote_tb, basestring):
remote_tb = [remote_tb]
project: added all source files and assets
r1 __traceback_info__ = (
vcs-server: expose remote tracebacks from http backend using the Pyro4AwareFormatter.
r1257 'Found VCSServer remote traceback information:\n\n' +
project: added all source files and assets
r1 '\n'.join(remote_tb))
# Avoid that remote_tb also appears in the frame
del remote_tb
# Special vcs errors had an attribute "_vcs_kind" which is used
# to translate them to the proper exception class in the vcs
# client layer.
kind = getattr(e, '_vcs_kind', None)
exceptions: improve handling of exception that are unhandled....
r2183
project: added all source files and assets
r1 if kind:
exceptions: improve handling of exception that are unhandled....
r2183 if any(e.args):
args = e.args
else:
args = [__traceback_info__ or 'unhandledException']
exceptions: don't log error the lookup method errors. This happens so often we spam...
r2908 if __traceback_info__ and kind not in ['unhandled', 'lookup']:
logging: log traceback for errors that are known to help debugging.
r2449 # for other than unhandled errors also log the traceback
# can be usefull for debugging
log.error(__traceback_info__)
exceptions: improve handling of exception that are unhandled....
r2183 raise _EXCEPTION_MAP[kind](*args)
project: added all source files and assets
r1 else:
raise
return wrapper