A buildout extension to move non-used eggs to a specified directory
Project description
Buildout Garbage Collector
Introduction
The buildout.gc extensions can be used to ensure your egg directory only contains ‘used’ eggs. The extension can report, move unused eggs to a specified directory or just remove egss.
This package is fork of https://github.com/thepjot/buildout.eggscleaner
Installation
Garbase Collector is a buildout extensions, can add it like so
[buildout] extensions = buildout.gc
Options
- old-eggs-directory
The directory you want buildout.gc to move your unused eggs to. Should an excact egg already exist, we remove the one in the ‘’used’’ eggs directory
- old-eggs-remove
Remove eggs instead of moving
- old-eggs-factor
Remove/move eggs directories when number unused eggs less <total_egss> * <factor>. Some times buildout out can be failed and in this case this extension determinate that ALL packages are not used. This parameter prevent removing ALL eggs in this case.
Example
[buildout] extensions = buildout.gc old-eggs-directory = ${buildout:directory}/old-eggs/
Tested with
zc.buildout: 2.xx python: 2.4.6, 2.6.8, 2.7.12, 3.3, 3.5
Working with other extensions
I looked at how buildout.dumppickedversions works and made this extension work in a similar manner. This extension will run alongside that one perfectly well.
Example outputs
Moving eggs
Moved unused egg: webcouturier.dropdownmenu-2.3-py2.6.egg Moved unused egg: collective.uploadify-1.0-py2.6.egg Moved unused egg: collective.simplesocial-1.6-py2.6.egg Moved unused egg: collective.autopermission-1.0b2-py2.6.egg
Reporting
Don't have a 'old-eggs-directory' or 'old-eggs-remove' set, only reporting Can add it by adding 'old-eggs-directory = ${buildout:directory}/old-eggs' to your [buildout] Found unused egg: webcouturier.dropdownmenu-2.3-py2.6.egg Found unused egg: plone.recipe.command-1.1-py2.6.egg Found unused egg: collective.uploadify-1.0-py2.6.egg Found unused egg: Products.DocFinderTab-1.0.5-py2.6.egg Found unused egg: collective.simplesocial-1.6-py2.6.egg Found unused egg: collective.autopermission-1.0b2-py2.6.egg Found unused egg: Products.Clouseau-1.0-py2.6.egg
Detailed Documentation
Let’s create an egg to use it in our tests:
>>> mkdir('myegg') >>> write('myegg', 'setup.py', ... ''' ... from setuptools import setup ... setup(name='myegg', version='1.0',) ... ''') >>> write('myegg', 'README', '') >>> print_(system(buildout+' setup myegg bdist_egg')), # doctest: +ELLIPSIS Running setup script 'myegg... ... >>> mkdir('baregg') >>> write('baregg', 'setup.py', ... ''' ... from setuptools import setup ... setup(name='baregg', version='1.0',) ... ''') >>> write('baregg', 'README', '') >>> print_(system(buildout+' setup baregg bdist_egg')), # doctest: +ELLIPSIS Running setup script 'baregg... ...
Now let’s create a buildout to install the egg and to use buildout.gc:
>>> write('buildout.cfg', ... ''' ... [buildout] ... index = http://pypi.python.org/simple ... extensions = buildout.gc ... eggs-directory = ${buildout:directory}/eggs ... parts = foo ... find-links += %s ... [foo] ... recipe = zc.recipe.egg ... eggs = myegg ... ''' % join('myegg', 'dist'))
Running the buildout will print information about unused eggs:
>>> print_(system(buildout)), # doctest: +ELLIPSIS Installing foo. Getting distribution for 'myegg'. ... Don't have a 'old-eggs-directory' or 'old-eggs-remove' set, only reporting ...
When we only want to report unused eggs we omit the old-eggs-directory and old-eggs-remove options.
>>> write('buildout.cfg', ... ''' ... [buildout] ... index = http://pypi.python.org/simple ... extensions = buildout.gc ... eggs-directory = ${buildout:directory}/eggs ... parts = foo ... find-links += %s ... [foo] ... recipe = zc.recipe.egg ... eggs = baregg ... ''' % join('baregg', 'dist'))>>> print_(system(buildout)) # doctest:+ELLIPSIS Uninstalling foo. Installing foo. Getting distribution for 'baregg'. Got baregg 1.0. Don't have a 'old-eggs-directory' or 'old-eggs-remove' set, only reporting Can add it by adding 'old-eggs-directory = ${buildout:directory}/old-eggs' to your [buildout] Found unused egg: myegg... <BLANKLINE>
Check that indeed nothing has been moved nor deleted:
>>> assert 'myegg' in ''.join(os.listdir('eggs'))
If we want to move unused eggs, we just add an old-eggs-directory option and give a directory target:
>>> write('buildout.cfg', ... ''' ... [buildout] ... index = http://pypi.python.org/simple ... extensions = buildout.gc ... eggs-directory = ${buildout:directory}/eggs ... old-eggs-directory = ${buildout:directory}/old-eggs ... parts = foo ... find-links += %s ... [foo] ... recipe = zc.recipe.egg ... eggs = baregg ... ''' % join('baregg', 'dist')) >>> print_(system(buildout)) # doctest:+ELLIPSIS Updating foo. Moved unused egg: myegg... <BLANKLINE>
Check that indeed ‘myegg’ has been moved:
>>> assert 'myegg' not in ''.join(os.listdir('eggs')), 'myegg has not been moved out of egg dir' >>> assert 'myegg' in ''.join(os.listdir('old-eggs')), 'myegg has not been moved to old-egg dir'
And baregg is still present:
>>> assert 'baregg' in ''.join(os.listdir('eggs')), 'baregg is not present in egg dir'
If we want to remove unused eggs, we just add an old-eggs-remove option:
>>> write('buildout.cfg', ... ''' ... [buildout] ... index = http://pypi.python.org/simple ... extensions = buildout.gc ... eggs-directory = ${buildout:directory}/eggs ... old-eggs-directory = ${buildout:directory}/old-eggs ... old-eggs-remove = true ... parts = foo ... find-links += %s ... [foo] ... recipe = zc.recipe.egg ... eggs = myegg ... ''' % join('myegg', 'dist')) >>> print_(system(buildout)) # doctest:+ELLIPSIS Uninstalling foo. Installing foo. Getting distribution for 'myegg'. Got myegg 1.0. Moved unused egg: baregg... <BLANKLINE>
Check that indeed ‘baregg’ has been removed:
>>> assert 'baregg' not in ''.join(os.listdir('eggs')), 'baregg has not been removed' >>> assert 'baregg' not in ''.join(os.listdir('old-eggs')), 'baregg has been moved to old-egg dir'
And ‘myegg’ is still present:
>>> assert 'myegg' in ''.join(os.listdir('eggs')), 'myegg is not present in egg dir'
Contributors
Peter Uittenbroek, Author
Anton Tagunov
Change history
1.2.dev
Fixed incorrect messages after restarting of buildout.
1.0 (2016-01-21)
Created public fork
0.1.5 (2012-08-17)
Redid documentation [thepjot]
Added doctest [thepjot]
0.1 (internal release)
Creation [thepjot]
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file buildout.gc-1.2.tar.gz
.
File metadata
- Download URL: buildout.gc-1.2.tar.gz
- Upload date:
- Size: 6.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | b7003132509c8c164d2902710a2626064c6460c02cf008873f8b8d624805e0d3 |
|
MD5 | 6060b41dd2dd5d454745d739192522ee |
|
BLAKE2b-256 | a466fec0abd4c2503ec1cef72f97bfa1a9ea044621c283fee390c80d83cee76a |