To minimize what seems to be an increased risk of segfaults when using virtualenv with system packages, this commit introduces an alternative, which does away with the general system package availability, but adds symlinks to two svn related system packages when running checks.

- Legacy-Id: 12208
This commit is contained in:
Henrik Levkowetz 2016-10-25 00:11:31 +00:00
parent 4e77d64ac4
commit 17bf44af3c
2 changed files with 27 additions and 6 deletions

View file

@ -1,7 +1,10 @@
import os
import sys
import time
from textwrap import dedent
import debug # pyflakes:ignore
from django.conf import settings
from django.core import checks
from django.utils.module_loading import import_string
@ -213,6 +216,19 @@ def check_cache(app_configs, **kwargs):
@checks.register('cache')
def check_svn_import(app_configs, **kwargs):
errors = []
#
site_packages_dir = None
for p in sys.path:
if ('/env/' in p or '/venv/' in p) and '/site-packages' in p:
site_packages_dir = p
break
if site_packages_dir:
for path in settings.SVN_PACKAGES:
dir, name = os.path.split(path)
package_link = os.path.join(site_packages_dir, name)
if not os.path.exists(package_link):
os.symlink(path, package_link)
#
if settings.SERVER_MODE == 'production':
try:
import svn # pyflakes:ignore
@ -225,14 +241,15 @@ def check_svn_import(app_configs, **kwargs):
However, the subversion bindings seem to be unavailable. The subversion
bindings are not available for install using pip, but must be supplied by
the system package manager. In order to be available within a python
virtualenv, the virtualenv must have been created with the
--system-site-packages flag, so that the packages installed by the system
package manager are visible.
the system package manager. In order to be available within the python
virtualenv, ietf.checks.check_svn_import() tries to create a symlink from
the configured location of the system-provided svn package to the
site-packages directory of the virtualenv. If you get this message, that has
failed to provide the svn package.
Please install 'python-subversion' (Debian), 'subversion-python' (RedHat,
CentOS, Fedora), 'subversion-python27bindings' (BSD); and set up a
virtualenv using the --system-site-packages flag. Further tips are
CentOS, Fedora), 'subversion-python27bindings' (BSD); and provide the
correct path to the svn package in settings.SVN_PACKAGE. Further tips are
available at https://trac.edgewall.org/wiki/TracSubversion.
""").replace('\n', '\n ').rstrip(),

View file

@ -666,6 +666,10 @@ TRAC_WIKI_URL_PATTERN = "https://trac.ietf.org/trac/%s/wiki"
TRAC_ISSUE_URL_PATTERN = "https://trac.ietf.org/trac/%s/report/1"
TRAC_SVN_DIR_PATTERN = "/a/svn/group/%s"
TRAC_SVN_URL_PATTERN = "https://svn.ietf.org/svn/group/%s/"
SVN_PACKAGES = [
"/usr/lib/python2.7/dist-packages/svn",
"/usr/lib/python2.7/dist-packages/libsvn",
]
TRAC_ENV_OPTIONS = [
('project', 'name', "{name} Wiki"),