mirror of
https://github.com/pypa/pip
synced 2023-12-13 21:30:23 +01:00
9894c8baac
* Move virtualenv creation out of TestPipEnvironment * Remove global state and force explicit use of TestPipEnvironment instances * Remove "backup" virtualenv copying and instead create new virtual environments each time. * Remove the monkeypatched "PyPICache" functionality * Remove things that were not being used anymore and were dead weight * Remove sitecustomize support which was primarily used to monkeypatch the "PyPICache" but was used in one or two other tests.
76 lines
2.5 KiB
Python
76 lines
2.5 KiB
Python
import os
|
|
import subprocess
|
|
from pip.vcs import subversion, git, bazaar, mercurial
|
|
from pip.backwardcompat import urlretrieve
|
|
from tests.lib import path_to_url
|
|
|
|
|
|
if hasattr(subprocess, "check_call"):
|
|
subprocess_call = subprocess.check_call
|
|
else:
|
|
subprocess_call = subprocess.call
|
|
|
|
|
|
CACHE_PATH = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'tests_cache')
|
|
|
|
|
|
def _create_initools_repository():
|
|
subprocess_call('svnadmin create INITools'.split(), cwd=_get_vcs_folder())
|
|
|
|
|
|
def _dump_initools_repository():
|
|
filename, _ = urlretrieve('http://bitbucket.org/hltbra/pip-initools-dump/raw/8b55c908a320/INITools_modified.dump')
|
|
initools_folder = os.path.join(_get_vcs_folder(), 'INITools')
|
|
devnull = open(os.devnull, 'w')
|
|
dump = open(filename)
|
|
subprocess_call(['svnadmin', 'load', initools_folder], stdin=dump, stdout=devnull)
|
|
dump.close()
|
|
devnull.close()
|
|
os.remove(filename)
|
|
|
|
|
|
def _create_svn_repository_for_initools():
|
|
tests_cache = _get_vcs_folder()
|
|
if not os.path.exists(os.path.join(tests_cache, 'INITools')):
|
|
_create_initools_repository()
|
|
_dump_initools_repository()
|
|
|
|
|
|
def _get_vcs_folder():
|
|
if not os.path.exists(CACHE_PATH):
|
|
os.mkdir(CACHE_PATH)
|
|
return CACHE_PATH
|
|
|
|
|
|
def _get_vcs_and_checkout_url(remote_repository):
|
|
tests_cache = _get_vcs_folder()
|
|
vcs_classes = {'svn': subversion.Subversion,
|
|
'git': git.Git,
|
|
'bzr': bazaar.Bazaar,
|
|
'hg': mercurial.Mercurial}
|
|
default_vcs = 'svn'
|
|
if '+' not in remote_repository:
|
|
remote_repository = '%s+%s' % (default_vcs, remote_repository)
|
|
vcs, repository_path = remote_repository.split('+', 1)
|
|
vcs_class = vcs_classes[vcs]
|
|
branch = ''
|
|
if vcs == 'svn':
|
|
branch = os.path.basename(remote_repository)
|
|
repository_name = os.path.basename(remote_repository[:-len(branch)-1]) # remove the slash
|
|
else:
|
|
repository_name = os.path.basename(remote_repository)
|
|
|
|
destination_path = os.path.join(tests_cache, repository_name)
|
|
if not os.path.exists(destination_path):
|
|
vcs_class(remote_repository).obtain(destination_path)
|
|
return '%s+%s' % (vcs, path_to_url('/'.join([tests_cache, repository_name, branch])))
|
|
|
|
|
|
def local_checkout(remote_repo):
|
|
if remote_repo.startswith('svn'):
|
|
_create_svn_repository_for_initools()
|
|
return _get_vcs_and_checkout_url(remote_repo)
|
|
|
|
|
|
def local_repo(remote_repo):
|
|
return local_checkout(remote_repo).split('+', 1)[1]
|