Commit 059971ab authored by Jim Fulton's avatar Jim Fulton

You can now create develop eggs for setup scripts that don't use setuptools.

parent a4abc524
...@@ -420,16 +420,7 @@ class Buildout(dict): ...@@ -420,16 +420,7 @@ class Buildout(dict):
setup = os.path.join(setup, 'setup.py') setup = os.path.join(setup, 'setup.py')
self._logger.info("Develop: %s", setup) self._logger.info("Develop: %s", setup)
os.chdir(os.path.dirname(setup))
args = [
zc.buildout.easy_install._safe_arg(setup),
'-q', 'develop', '-mxN',
'-f', zc.buildout.easy_install._safe_arg(
' '.join(self._links)
),
'-d', zc.buildout.easy_install._safe_arg(dest),
]
if self._log_level <= logging.DEBUG: if self._log_level <= logging.DEBUG:
if self._log_level == logging.DEBUG: if self._log_level == logging.DEBUG:
...@@ -439,10 +430,32 @@ class Buildout(dict): ...@@ -439,10 +430,32 @@ class Buildout(dict):
self._logger.debug("in: %s\n%r", self._logger.debug("in: %s\n%r",
os.path.dirname(setup), args) os.path.dirname(setup), args)
args.append(env) fd, tsetup = tempfile.mkstemp()
assert os.spawnle( try:
os.P_WAIT, sys.executable, sys.executable, *args os.write(fd, runsetup_template % dict(
) == 0 setuptools=pkg_resources_loc,
setupdir=os.path.dirname(setup),
setup=setup,
__file__ = setup,
))
args = [
zc.buildout.easy_install._safe_arg(tsetup),
'-q', 'develop', '-mxN',
'-f', zc.buildout.easy_install._safe_arg(
' '.join(self._links)
),
'-d', zc.buildout.easy_install._safe_arg(dest),
]
assert os.spawnl(
os.P_WAIT, sys.executable, sys.executable,
*args) == 0
finally:
os.close(fd)
os.remove(tsetup)
except: except:
# if we had an error, we need to roll back changes, by # if we had an error, we need to roll back changes, by
# removing any files we created. # removing any files we created.
...@@ -452,6 +465,8 @@ class Buildout(dict): ...@@ -452,6 +465,8 @@ class Buildout(dict):
for f in os.listdir(dest) for f in os.listdir(dest)
if f not in old_files if f not in old_files
])) ]))
raise
else: else:
self._sanity_check_develop_eggs_files(dest, old_files) self._sanity_check_develop_eggs_files(dest, old_files)
return '\n'.join([os.path.join(dest, f) return '\n'.join([os.path.join(dest, f)
...@@ -725,15 +740,10 @@ class Buildout(dict): ...@@ -725,15 +740,10 @@ class Buildout(dict):
self._logger.info("Running setup script %s", setup) self._logger.info("Running setup script %s", setup)
setup = os.path.abspath(setup) setup = os.path.abspath(setup)
setuptools = pkg_resources.working_set.find(
pkg_resources.Requirement.parse('setuptools')
).location
fd, tsetup = tempfile.mkstemp() fd, tsetup = tempfile.mkstemp()
try: try:
os.write(fd, runsetup_template % dict( os.write(fd, runsetup_template % dict(
setuptools=setuptools, setuptools=pkg_resources_loc,
setupdir=os.path.dirname(setup), setupdir=os.path.dirname(setup),
setup=setup, setup=setup,
__file__ = setup, __file__ = setup,
......
...@@ -25,6 +25,33 @@ os_path_sep = os.path.sep ...@@ -25,6 +25,33 @@ os_path_sep = os.path.sep
if os_path_sep == '\\': if os_path_sep == '\\':
os_path_sep *= 2 os_path_sep *= 2
def develop_w_non_setuptools_setup_scripts():
"""
We should be able to deal with setup scripts that aren't setuptools based.
>>> mkdir('foo')
>>> write('foo', 'setup.py',
... '''
... from distutils.core import setup
... setup(name="foo")
... ''')
>>> write('buildout.cfg',
... '''
... [buildout]
... develop = foo
... parts =
... ''')
>>> print system(join('bin', 'buildout')),
buildout: Develop: /sample-buildout/foo/setup.py
>>> ls('develop-eggs')
- foo.egg-link
"""
def buildout_error_handling(): def buildout_error_handling():
r"""Buildout error handling r"""Buildout error handling
......
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