I wrote some recipes that extend the base zc.recipe.egg recipes. They
currently live in my own namespace for development. The recipe code has
good test coverage and documentation. I'm wondering if there's any
interesting in incorporating them into zc.recipe.egg. If so, I'll be
happy to integrate it and commit or submit patches. If not, I'll just
release it as z3c.recipe.egg.
The editable recipe adds support for downloading source distributions
using easy_install. A svn checkout can be done if the appropriate
find-link is available. Also, it also allows build-directory to be
specified and as such if build-directory is not in the part directory,
the source distribution will be preserved when buildout is run. So
among other things, this allow for preserving source distributions in
development. Unfortunately, this duplicates the effort in ???. I
should have released sooner.
The setup recipe simply calls arbitrary setup.py commands in specified
source distributions. I use this, for example, in buildout files that
release multiple projects at once.
Below I've attached the documentation for the two recipes for further
view. You can see or checkout the source here:
https://svn.plone.org/svn/collective/grouparchy/grouparchy.recipe.egg/trunk/
Ross
;-*-Doctest-*-
======================
Editable Distributions
======================
The grouparchy.recipe.egg.Editable recipe use the easy_install
--editable and --build-directory options to download a source
distribution.
If no build-directory is specified the part directory will be used.
>>> write(sample_buildout, 'buildout.cfg',
... """
... [buildout]
... parts = demoneeded
...
... [demoneeded]
... recipe = grouparchy.recipe.egg:editable
... find-links = %(server)s
... """ % dict(server=link_server))
>>> print system(buildout),
Installing demoneeded.
>>> ls(sample_buildout, 'parts', 'demoneeded')
d demoneeded
If the develop option is true then the distributions will be
installed in develop mode.
>>> write(sample_buildout, 'buildout.cfg',
... """
... [buildout]
... parts = demoneeded
...
... [demoneeded]
... recipe = grouparchy.recipe.egg:editable
... find-links = %(server)s
... eggs = demoneeded
... develop = true
... """ % dict(server=link_server))
>>> print system(buildout),
Uninstalling demoneeded.
Installing demoneeded.
Develop: '/sample-buildout/parts/demoneeded/demoneeded'
>>> ls(sample_buildout, 'develop-eggs')
- demoneeded.egg-link
- grouparchy.recipe.egg.egg-link
- zc.recipe.egg.egg-link
Multiple distributions can be specified.
>>> write(sample_buildout, 'buildout.cfg',
... """
... [buildout]
... parts = demoneeded
...
... [demoneeded]
... recipe = grouparchy.recipe.egg:editable
... find-links = %(server)s
... eggs = demoneeded
... extdemo
... """ % dict(server=link_server))
>>> print system(buildout),
Uninstalling demoneeded.
Installing demoneeded.
>>> ls(sample_buildout, 'parts', 'demoneeded')
d demoneeded
d extdemo
If a new qualifying version is available then the part will be
reinstalled.
>>> write(
... sample_buildout, 'parts', 'demoneeded', 'demoneeded',
... 'setup.py', """
... from setuptools import setup
... setup(name='demoneeded', py_modules=['eggrecipedemobeeded'],
... zip_safe=True, version='1.3', author='bob',
... url='bob', author_email='bob')
... """)
>>> import os
>>> sdist(os.path.join(
... sample_buildout, 'parts', 'demoneeded', 'demoneeded'),
... sample_eggs)
>>> print system(buildout),
Uninstalling demoneeded.
Installing demoneeded.
>>> ls(sample_buildout, 'parts', 'demoneeded')
d demoneeded
d extdemo
>>> cat(
... sample_buildout, 'parts', 'demoneeded', 'demoneeded',
... 'setup.py')
<BLANKLINE>
from setuptools import setup
setup(name='demoneeded', py_modules=['eggrecipedemobeeded'],
zip_safe=True, version='1.3', author='bob',
url='bob', author_email='bob')
If the part is not to be reinstalled, running buildout in offline or
non-newest mode, the recipe preserves the existing installation.
>>> print system(buildout+' -No'),
Updating demoneeded.
>>> ls(sample_buildout, 'parts', 'demoneeded')
d demoneeded
d extdemo
If the part is to be reinstalled and buildout is run in offline or
non-newest mode, the recipe does nothing.
>>> write(sample_buildout, 'buildout.cfg',
... """
... [buildout]
... parts = demoneeded
...
... [demoneeded]
... recipe = grouparchy.recipe.egg:editable
... find-links = %(server)s
... eggs = demoneeded
... """ % dict(server=link_server))
>>> print system(buildout+' -N'),
Uninstalling demoneeded.
Installing demoneeded.
>>> ls(sample_buildout, 'parts')
>>> write(sample_buildout, 'buildout.cfg',
... """
... [buildout]
... parts = demoneeded
...
... [demoneeded]
... recipe = grouparchy.recipe.egg:editable
... find-links = %(server)s
... eggs = demoneeded
... extdemo
... """ % dict(server=link_server))
>>> print system(buildout+' -o'),
Uninstalling demoneeded.
Installing demoneeded.
>>> ls(sample_buildout, 'parts')
If build-directory is specified, the source distributions will be
extracted there.
>>> mkdir(sample_buildout, 'src')
>>> write(sample_buildout, 'buildout.cfg',
... """
... [buildout]
... parts = demoneeded
...
... [demoneeded]
... recipe = grouparchy.recipe.egg:editable
... find-links = %(server)s
... eggs = demoneeded
... extdemo
... build-directory = src
... """ % dict(server=link_server))
>>> print system(buildout),
Uninstalling demoneeded.
Installing demoneeded.
>>> ls(sample_buildout, 'parts')
>>> ls(sample_buildout, 'src')
d demoneeded
d extdemo
If the build directory is present, it will not be removed when the
part is installed preserving any changes.
>>> write(
... sample_buildout, 'src', 'demoneeded', 'setup.py', """
... from setuptools import setup
... setup(name='demoneeded', py_modules=['eggrecipedemobeeded'],
... zip_safe=True, version='1.4', author='bob',
... url='bob', author_email='bob')
... """)
>>> write(sample_buildout, 'buildout.cfg',
... """
... [buildout]
... parts = demo
...
... [demo]
... recipe = grouparchy.recipe.egg:editable
... find-links = %(server)s
... eggs = demoneeded
... extdemo
... build-directory = src
... """ % dict(server=link_server))
>>> print system(buildout),
Uninstalling demoneeded.
Installing demo.
>>> ls(sample_buildout, 'src')
d demoneeded
d extdemo
>>> cat(
... sample_buildout, 'src', 'demoneeded', 'setup.py')
<BLANKLINE>
from setuptools import setup
setup(name='demoneeded', py_modules=['eggrecipedemobeeded'],
zip_safe=True, version='1.4', author='bob',
url='bob', author_email='bob')
;-*-Doctest-*-
=====================
Running Setup Scripts
=====================
The grouparchy.recipe.egg.Setup recipe calls arbitrary setup.py
commands on a distribution in a buildout.
The buildout requires only the setup argument which specifies a setup
script or the directory containing a setup.py script.
>>> write(sample_buildout, 'buildout.cfg',
... """
... [buildout]
... parts = foo
...
... [foo]
... recipe = grouparchy.recipe.egg:setup
... setup = foo
... args = sdist
... """)
The seupt script is run with the specified arguments.
>>> print system(buildout),
Installing foo.
Running setup script '/sample-buildout/foo/setup.py'.
running sdist
running egg_info
creating foo.egg-info
writing foo.egg-info/PKG-INFO
writing top-level names to foo.egg-info/top_level.txt
writing dependency_links to foo.egg-info/dependency_links.txt
writing manifest file 'foo.egg-info/SOURCES.txt'
writing manifest file 'foo.egg-info/SOURCES.txt'
creating foo-0.0.0
creating foo-0.0.0/foo
creating foo-0.0.0/foo.egg-info
making hard links in foo-0.0.0...
hard linking README.txt -> foo-0.0.0
hard linking setup.py -> foo-0.0.0
hard linking foo/__init__.py -> foo-0.0.0/foo
hard linking foo.egg-info/PKG-INFO -> foo-0.0.0/foo.egg-info
hard linking foo.egg-info/SOURCES.txt -> foo-0.0.0/foo.egg-info
hard linking foo.egg-info/dependency_links.txt -> foo-0.0.0/foo.egg-info
hard linking foo.egg-info/top_level.txt -> foo-0.0.0/foo.egg-info
Writing foo-0.0.0/setup.cfg
creating dist
tar -cf dist/foo-0.0.0.tar foo-0.0.0
gzip -f9 dist/foo-0.0.0.tar
removing 'foo-0.0.0' (and everything under it)
>>> ls(sample_buildout, 'foo', 'dist')
- foo-0.0.0.tar.gz
>>> remove(sample_buildout, 'foo', 'dist', 'foo-0.0.0.tar.gz')
The setup script is also run on update.
>>> print system(buildout),
Updating foo.
Running setup script '/sample-buildout/foo/setup.py'.
running sdist
running egg_info
writing foo.egg-info/PKG-INFO
writing top-level names to foo.egg-info/top_level.txt
writing dependency_links to foo.egg-info/dependency_links.txt
writing manifest file 'foo.egg-info/SOURCES.txt'
creating foo-0.0.0
creating foo-0.0.0/foo
creating foo-0.0.0/foo.egg-info
making hard links in foo-0.0.0...
hard linking README.txt -> foo-0.0.0
hard linking setup.py -> foo-0.0.0
hard linking foo/__init__.py -> foo-0.0.0/foo
hard linking foo.egg-info/PKG-INFO -> foo-0.0.0/foo.egg-info
hard linking foo.egg-info/SOURCES.txt -> foo-0.0.0/foo.egg-info
hard linking foo.egg-info/dependency_links.txt -> foo-0.0.0/foo.egg-info
hard linking foo.egg-info/top_level.txt -> foo-0.0.0/foo.egg-info
Writing foo-0.0.0/setup.cfg
tar -cf dist/foo-0.0.0.tar foo-0.0.0
gzip -f9 dist/foo-0.0.0.tar
removing 'foo-0.0.0' (and everything under it)
>>> ls(sample_buildout, 'foo', 'dist')
- foo-0.0.0.tar.gz
>>> remove(sample_buildout, 'foo', 'dist', 'foo-0.0.0.tar.gz')
Multiple setup directories or scripts can be specified. Add the
second distribution.
>>> write(sample_buildout, 'buildout.cfg',
... """
... [buildout]
... parts = foo
...
... [foo]
... recipe = grouparchy.recipe.egg:setup
... setup =
... foo
... bar
... args = sdist
... """)
Now the buildout will run the setup script on both.
>>> print system(buildout),
Uninstalling foo.
Installing foo.
Running setup script '/sample-buildout/foo/setup.py'.
running sdist
running egg_info
writing foo.egg-info/PKG-INFO
writing top-level names to foo.egg-info/top_level.txt
writing dependency_links to foo.egg-info/dependency_links.txt
writing manifest file 'foo.egg-info/SOURCES.txt'
creating foo-0.0.0
creating foo-0.0.0/foo
creating foo-0.0.0/foo.egg-info
making hard links in foo-0.0.0...
hard linking README.txt -> foo-0.0.0
hard linking setup.py -> foo-0.0.0
hard linking foo/__init__.py -> foo-0.0.0/foo
hard linking foo.egg-info/PKG-INFO -> foo-0.0.0/foo.egg-info
hard linking foo.egg-info/SOURCES.txt -> foo-0.0.0/foo.egg-info
hard linking foo.egg-info/dependency_links.txt -> foo-0.0.0/foo.egg-info
hard linking foo.egg-info/top_level.txt -> foo-0.0.0/foo.egg-info
Writing foo-0.0.0/setup.cfg
tar -cf dist/foo-0.0.0.tar foo-0.0.0
gzip -f9 dist/foo-0.0.0.tar
removing 'foo-0.0.0' (and everything under it)
Running setup script '/sample-buildout/bar/setup.py'.
running sdist
running egg_info
creating bar.egg-info
writing bar.egg-info/PKG-INFO
writing top-level names to bar.egg-info/top_level.txt
writing dependency_links to bar.egg-info/dependency_links.txt
writing manifest file 'bar.egg-info/SOURCES.txt'
writing manifest file 'bar.egg-info/SOURCES.txt'
creating bar-0.0.0
creating bar-0.0.0/bar
creating bar-0.0.0/bar.egg-info
making hard links in bar-0.0.0...
hard linking README.txt -> bar-0.0.0
hard linking setup.py -> bar-0.0.0
hard linking bar/__init__.py -> bar-0.0.0/bar
hard linking bar.egg-info/PKG-INFO -> bar-0.0.0/bar.egg-info
hard linking bar.egg-info/SOURCES.txt -> bar-0.0.0/bar.egg-info
hard linking bar.egg-info/dependency_links.txt -> bar-0.0.0/bar.egg-info
hard linking bar.egg-info/top_level.txt -> bar-0.0.0/bar.egg-info
Writing bar-0.0.0/setup.cfg
creating dist
tar -cf dist/bar-0.0.0.tar bar-0.0.0
gzip -f9 dist/bar-0.0.0.tar
removing 'bar-0.0.0' (and everything under it)
>>> ls(sample_buildout, 'foo', 'dist')
- foo-0.0.0.tar.gz
>>> ls(sample_buildout, 'bar', 'dist')
- bar-0.0.0.tar.gz
>>> remove(sample_buildout, 'foo', 'dist', 'foo-0.0.0.tar.gz')
>>> remove(sample_buildout, 'bar', 'dist', 'bar-0.0.0.tar.gz')
If the develop option is true then the distributions will be
installed in develop mode.
>>> write(sample_buildout, 'buildout.cfg',
... """
... [buildout]
... parts = foo
...
... [foo]
... recipe = grouparchy.recipe.egg:setup
... setup = foo
... bar
... develop = true
... """)
>>> print system(buildout),
Uninstalling foo.
Installing foo.
Develop: '/sample-buildout/foo'
Develop: '/sample-buildout/bar'
>>> ls(sample_buildout, 'develop-eggs')
- bar.egg-link
- foo.egg-link
- grouparchy.recipe.egg.egg-link
- zc.recipe.egg.egg-link
_______________________________________________
Distutils-SIG maillist - [email protected]
http://mail.python.org/mailman/listinfo/distutils-sig