Commit ef7d9fd2 authored by Tres Seaver's avatar Tres Seaver

Update to latest bootstrap.

parent a1640078
...@@ -18,7 +18,11 @@ The script accepts buildout command-line options, so you can ...@@ -18,7 +18,11 @@ The script accepts buildout command-line options, so you can
use the -c option to specify an alternate configuration file. use the -c option to specify an alternate configuration file.
""" """
import os, shutil, sys, tempfile import os
import shutil
import sys
import tempfile
from optparse import OptionParser from optparse import OptionParser
tmpeggs = tempfile.mkdtemp() tmpeggs = tempfile.mkdtemp()
...@@ -31,8 +35,8 @@ Bootstraps a buildout-based project. ...@@ -31,8 +35,8 @@ Bootstraps a buildout-based project.
Simply run this script in a directory containing a buildout.cfg, using the Simply run this script in a directory containing a buildout.cfg, using the
Python that you want bin/buildout to use. Python that you want bin/buildout to use.
Note that by using --setup-source and --download-base to point to Note that by using --find-links to point to local resources, you can keep
local resources, you can keep this script from going over the network. this script from going over the network.
''' '''
parser = OptionParser(usage=usage) parser = OptionParser(usage=usage)
...@@ -52,37 +56,52 @@ parser.add_option("-c", "--config-file", ...@@ -52,37 +56,52 @@ parser.add_option("-c", "--config-file",
"file to be used.")) "file to be used."))
parser.add_option("-f", "--find-links", parser.add_option("-f", "--find-links",
help=("Specify a URL to search for buildout releases")) help=("Specify a URL to search for buildout releases"))
parser.add_option("--allow-site-packages",
action="store_true", default=False,
help=("Let bootstrap.py use existing site packages"))
parser.add_option("--setuptools-version",
help="use a specific setuptools version")
options, args = parser.parse_args() options, args = parser.parse_args()
###################################################################### ######################################################################
# load/install distribute # load/install setuptools
to_reload = False
try: try:
import pkg_resources, setuptools if options.allow_site_packages:
if not hasattr(pkg_resources, '_distribute'): import setuptools
to_reload = True import pkg_resources
raise ImportError
except ImportError:
ez = {}
try:
from urllib.request import urlopen from urllib.request import urlopen
except ImportError: except ImportError:
from urllib2 import urlopen from urllib2 import urlopen
exec(urlopen('http://python-distribute.org/distribute_setup.py').read(), ez) ez = {}
setup_args = dict(to_dir=tmpeggs, download_delay=0, no_fake=True) exec(urlopen('https://bootstrap.pypa.io/ez_setup.py').read(), ez)
ez['use_setuptools'](**setup_args)
if to_reload: if not options.allow_site_packages:
reload(pkg_resources) # ez_setup imports site, which adds site packages
import pkg_resources # this will remove them from the path to ensure that incompatible versions
# This does not (always?) update the default working set. We will # of setuptools are not in the path
# do it. import site
for path in sys.path: # inside a virtualenv, there is no 'getsitepackages'.
# We can't remove these reliably
if hasattr(site, 'getsitepackages'):
for sitepackage_path in site.getsitepackages():
sys.path[:] = [x for x in sys.path if sitepackage_path not in x]
setup_args = dict(to_dir=tmpeggs, download_delay=0)
if options.setuptools_version is not None:
setup_args['version'] = options.setuptools_version
ez['use_setuptools'](**setup_args)
import setuptools
import pkg_resources
# This does not (always?) update the default working set. We will
# do it.
for path in sys.path:
if path not in pkg_resources.working_set.entries: if path not in pkg_resources.working_set.entries:
pkg_resources.working_set.add_entry(path) pkg_resources.working_set.add_entry(path)
...@@ -104,8 +123,8 @@ find_links = os.environ.get( ...@@ -104,8 +123,8 @@ find_links = os.environ.get(
if find_links: if find_links:
cmd.extend(['-f', find_links]) cmd.extend(['-f', find_links])
distribute_path = ws.find( setuptools_path = ws.find(
pkg_resources.Requirement.parse('distribute')).location pkg_resources.Requirement.parse('setuptools')).location
requirement = 'zc.buildout' requirement = 'zc.buildout'
version = options.version version = options.version
...@@ -113,13 +132,19 @@ if version is None and not options.accept_buildout_test_releases: ...@@ -113,13 +132,19 @@ if version is None and not options.accept_buildout_test_releases:
# Figure out the most recent final version of zc.buildout. # Figure out the most recent final version of zc.buildout.
import setuptools.package_index import setuptools.package_index
_final_parts = '*final-', '*final' _final_parts = '*final-', '*final'
def _final_version(parsed_version): def _final_version(parsed_version):
try:
return not parsed_version.is_prerelease
except AttributeError:
# Older setuptools
for part in parsed_version: for part in parsed_version:
if (part[:1] == '*') and (part not in _final_parts): if (part[:1] == '*') and (part not in _final_parts):
return False return False
return True return True
index = setuptools.package_index.PackageIndex( index = setuptools.package_index.PackageIndex(
search_path=[distribute_path]) search_path=[setuptools_path])
if find_links: if find_links:
index.add_find_links((find_links,)) index.add_find_links((find_links,))
req = pkg_resources.Requirement.parse(requirement) req = pkg_resources.Requirement.parse(requirement)
...@@ -142,10 +167,9 @@ if version: ...@@ -142,10 +167,9 @@ if version:
cmd.append(requirement) cmd.append(requirement)
import subprocess import subprocess
if subprocess.call(cmd, env=dict(os.environ, PYTHONPATH=distribute_path)) != 0: if subprocess.call(cmd, env=dict(os.environ, PYTHONPATH=setuptools_path)) != 0:
raise Exception( raise Exception(
"Failed to execute command:\n%s", "Failed to execute command:\n%s" % repr(cmd)[1:-1])
repr(cmd)[1:-1])
###################################################################### ######################################################################
# Import and run buildout # Import and run buildout
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment