diff --git a/bootstrap.py b/bootstrap-buildout.py similarity index 72% rename from bootstrap.py rename to bootstrap-buildout.py index 1b28969..a629566 100644 --- a/bootstrap.py +++ b/bootstrap-buildout.py @@ -35,7 +35,7 @@ Bootstraps a buildout-based project. Simply run this script in a directory containing a buildout.cfg, using the Python that you want bin/buildout to use. -Note that by using --find-links to point to local resources, you can keep +Note that by using --find-links to point to local resources, you can keep this script from going over the network. ''' @@ -56,6 +56,11 @@ parser.add_option("-c", "--config-file", "file to be used.")) parser.add_option("-f", "--find-links", 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() @@ -63,32 +68,42 @@ options, args = parser.parse_args() ###################################################################### # load/install setuptools -to_reload = False try: - import pkg_resources - import setuptools + if options.allow_site_packages: + import setuptools + import pkg_resources + from urllib.request import urlopen except ImportError: - ez = {} + from urllib2 import urlopen - try: - from urllib.request import urlopen - except ImportError: - from urllib2 import urlopen +ez = {} +exec(urlopen('https://bootstrap.pypa.io/ez_setup.py').read(), ez) - # XXX use a more permanent ez_setup.py URL when available. - exec(urlopen('https://bitbucket.org/pypa/setuptools/raw/0.7.2/ez_setup.py' - ).read(), ez) - setup_args = dict(to_dir=tmpeggs, download_delay=0) - ez['use_setuptools'](**setup_args) +if not options.allow_site_packages: + # ez_setup imports site, which adds site packages + # this will remove them from the path to ensure that incompatible versions + # of setuptools are not in the path + import site + # 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] - if to_reload: - reload(pkg_resources) - 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: - pkg_resources.working_set.add_entry(path) +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: + pkg_resources.working_set.add_entry(path) ###################################################################### # Install buildout @@ -119,10 +134,15 @@ if version is None and not options.accept_buildout_test_releases: _final_parts = '*final-', '*final' def _final_version(parsed_version): - for part in parsed_version: - if (part[:1] == '*') and (part not in _final_parts): - return False - return True + try: + return not parsed_version.is_prerelease + except AttributeError: + # Older setuptools + for part in parsed_version: + if (part[:1] == '*') and (part not in _final_parts): + return False + return True + index = setuptools.package_index.PackageIndex( search_path=[setuptools_path]) if find_links: @@ -149,8 +169,7 @@ cmd.append(requirement) import subprocess if subprocess.call(cmd, env=dict(os.environ, PYTHONPATH=setuptools_path)) != 0: raise Exception( - "Failed to execute command:\n%s", - repr(cmd)[1:-1]) + "Failed to execute command:\n%s" % repr(cmd)[1:-1]) ###################################################################### # Import and run buildout diff --git a/buildout.cfg b/buildout.cfg index c893dfe..fac6771 100644 --- a/buildout.cfg +++ b/buildout.cfg @@ -1,14 +1,19 @@ [buildout] -extends = https://raw.github.com/collective/buildout.plonetest/master/test-4.3.x.cfg -package-name = plone.app.discussion -package-extras = [test] -parts += +extends = http://dist.plone.org/release/4.3.4/versions.cfg +parts = + instance mkrelease pocompile code-analysis i18ndude update_translations +[instance] +recipe = plone.recipe.zope2instance +http-address = 8080 +user = admin:admin +eggs = Plone + [mkrelease] recipe = zc.recipe.egg eggs = jarn.mkrelease @@ -22,17 +27,6 @@ recipe = plone.recipe.codeanalysis directory = ${buildout:directory}/plone/app/discussion flake8-max-complexity = 50 -[versions] -plone.app.discussion = -zope.interface = 4.0.5 -plone.app.portlets = 2.5a1 -plone.dexterity = 2.2.1 -plone.app.querystring = 1.1.0 -plone.app.jquery = 1.8.3 -plone.app.testing = 4.2.4 -plone.app.vocabularies = 2.1.14 - - [i18ndude] recipe = zc.recipe.egg eggs = @@ -59,4 +53,9 @@ input = inline: $I18NDUDE sync --pot $BASE_PATH/i18n/plone.pot $BASE_PATH/i18n/plone-$LANG.po msgfmt --no-hash -o $BASE_PATH/i18n/plone-$LANG.mo $BASE_PATH/i18n/plone-$LANG.po done -mode = 755 \ No newline at end of file +mode = 755 + +[versions] +zope.interface = 4.0.5 +zc.buildout = 2.3.1 +setuptools = 8.0.4