# HG changeset patch # User Dan Villiom Podlaski Christiansen # Date 1272641736 -7200 # Node ID b5f1b629c62951f33965349e2935e1a0ff6a0429 # Parent 789eec0a339c55e02b8bf2f57d2b307b43bb2ced svn_swig_wrapper: improved handling of missing or outdated bindings. Instead of aborting with a generic message when Subversion bindings are missing, provide a helpful message. Also, the version check is refactored to make it easier to bump our requirements in the future. Finally, error messages are shorten so they fit in 80 columns along with the standard `abort: ' prefix. diff --git a/hgsubversion/svnwrap/svn_swig_wrapper.py b/hgsubversion/svnwrap/svn_swig_wrapper.py --- a/hgsubversion/svnwrap/svn_swig_wrapper.py +++ b/hgsubversion/svnwrap/svn_swig_wrapper.py @@ -14,22 +14,29 @@ warnings.filterwarnings('ignore', module='svn.core', category=DeprecationWarning) -from svn import client -from svn import core -from svn import delta -from svn import ra - from mercurial import util as hgutil +required_bindings = (1, 5, 0) + +try: + from svn import client + from svn import core + from svn import delta + from svn import ra + + current_bindings = (core.SVN_VER_MAJOR, core.SVN_VER_MINOR, + core.SVN_VER_MICRO) +except ImportError: + raise ImportError('Subversion %d.%d.%d or later required, ' + 'but no bindings were found' % required_bindings) + +if current_bindings < required_bindings: #pragma: no cover + raise ImportError('Subversion %d.%d.%d or later required, ' + 'but bindings for %d.%d.%d found' % + (required_bindings + current_bindings)) + def version(): - return '%d.%d.%d' % (core.SVN_VER_MAJOR, core.SVN_VER_MINOR, - core.SVN_VER_MICRO) - -if (core.SVN_VER_MAJOR, core.SVN_VER_MINOR, - core.SVN_VER_MICRO) < (1, 5, 0): #pragma: no cover - raise ImportError, ('You must have Subversion 1.5.0 or newer and ' - 'matching SWIG bindings. You appear to' - ' have %s' % version()) + return '%d.%d.%d' % current_bindings class SubversionRepoCanNotReplay(Exception): """Exception raised when the svn server is too old to have replay.