Commit 12a26264 authored by Jondy Zhao's avatar Jondy Zhao Committed by Cédric de Saint Martin

Add option 'promises'

parent 864e286f
......@@ -158,6 +158,14 @@ Supported options
compile directory is stored in ``options['compile-directory']``.
Accepted values are ``true`` or ``false``, defaults to ``false``.
``promises``
List the pathes and files should be existed after install part. The
file or path must be absolute path. One line one item
If any item doesn't exist, the recipe shows a warning message. The
default value is empty.
``dependencies``
List all the depended parts:
......@@ -279,7 +287,7 @@ Let's create a buildout to build and install the package.
>>> write('buildout.cfg',
... """
... [buildout]
... newest = false
... newest = true
... parts = package
...
... [package]
......@@ -298,6 +306,33 @@ default build options.
building package
installing package
Check option "promises"
>>> write('buildout.cfg',
... """
... [buildout]
... newest = false
... parts = packagex
...
... [packagex]
... recipe = slapos.recipe.cmmi
... url = file://%s/package-0.0.0.tar.gz
... promises = /usr/bin/myfoo
... """ % src)
This will download, extract and build our demo package with the
default build options.
>>> print system(buildout)
Uninstalling package.
Installing packagex.
packagex: [ENV] TMP = /sample_buildout/parts/packagex/tmp
packagex: Extracting package to /sample_buildout/parts/packagex__compile__
configure --prefix=/sample_buildout/parts/packagex
building package
installing package
packagex: could not find promise "/usr/bin/myfoo"
As we can see the configure script was called with the ``--prefix``
option by default followed by calls to ``make`` and ``make install``.
......
......@@ -43,6 +43,7 @@ class Recipe(object):
options['prefix'] = options['location'] if prefix == '' else prefix
options['url'] = options.get('url', '').strip()
options['path'] = options.get('path', '').strip()
options['promises'] = options.get('promises', '')
# Check dependencies, all the dependent parts will be installed first. It
# seems once part is referenced, for example, self.buildout[part], it will
......@@ -179,7 +180,16 @@ class Recipe(object):
log.error('Command failed: %s: %s' % (e, cmd))
raise zc.buildout.UserError('System error')
return files.split()
def check_promises(self):
result = True
log = logging.getLogger(self.name)
for path in self.options['promises'].splitlines():
if not os.path.exists(path):
result = False
log.warning('could not find promise "%s"' % path)
return result
def call_script(self, script):
"""This method is copied from z3c.recipe.runscript.
......@@ -342,6 +352,9 @@ class Recipe(object):
os.chdir(current_dir)
shutil.rmtree(tmp_path)
# Check promises
self.check_promises()
if self.options['url']:
if self.options.get('keep-compile-dir',
self.buildout['buildout'].get('keep-compile-dir', '')).lower() in ('true', 'yes', '1', 'on'):
......
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