aboutsummaryrefslogtreecommitdiff
path: root/cbc
diff options
context:
space:
mode:
Diffstat (limited to 'cbc')
-rw-r--r--cbc/__init__.py5
-rwxr-xr-xcbc/cli/build.py7
-rw-r--r--cbc/utils.py60
3 files changed, 50 insertions, 22 deletions
diff --git a/cbc/__init__.py b/cbc/__init__.py
index 7fc79f7..ae6d351 100644
--- a/cbc/__init__.py
+++ b/cbc/__init__.py
@@ -3,3 +3,8 @@ from . import meta
from . import utils
from . import parsers
from . import cli
+
+try:
+ from .version import __version__
+except ImportError:
+ __version__ = 'unknown'
diff --git a/cbc/cli/build.py b/cbc/cli/build.py
index ce5fa62..ad0151a 100755
--- a/cbc/cli/build.py
+++ b/cbc/cli/build.py
@@ -1,9 +1,10 @@
#!/usr/bin/env python
import argparse
import os
+import traceback
import conda_build.metadata
import cbc
-
+from cbc.exceptions import CondaBuildError
def main():
no_upload = ''
@@ -80,8 +81,8 @@ def main():
if not built:
print('Failure occurred building: {0}'.format(conda_metadata.dist()))
continue
- except cbc.exceptions.CondaBuildError as cbe:
- print(cbe)
+ except CondaBuildError as cbe:
+ print(traceback.format_exc())
continue
print('Installing Conda package...')
diff --git a/cbc/utils.py b/cbc/utils.py
index 0dbfa83..a88fc95 100644
--- a/cbc/utils.py
+++ b/cbc/utils.py
@@ -1,4 +1,6 @@
import json
+import sys
+import inspect
from .meta import MetaData
from .exceptions import CondaBuildError
from subprocess import Popen, PIPE, STDOUT, check_output, CalledProcessError
@@ -13,23 +15,42 @@ def combine_args(args):
return ' '.join(args)
-def run_process(command, callback=None):
- if not isinstance(command, list):
- raise TypeError('Expecting a list instance, got: {0}'.format(type(command)))
- process = Popen(command, stdout=PIPE)
+def run_process(command, callbacks=None):
+ callback_failed = False
+ callback_status = None
+ callback_message = ''
+ process = Popen(command, stdout=PIPE, stderr=STDOUT)
+
+ # Poll process for new output until finished
while True:
- output = process.stdout.readline()
- output = output.decode()
- if not output and process.poll() is not None:
+ nextline = process.stdout.readline().decode()
+ if nextline == '' and process.poll() != None:
break
- if output:
- print(output.strip())
- # Perform user-defined parsing of output
- if callback is not None:
- if not callback(output.strip()):
- process.kill()
+ sys.stdout.write(nextline)
+ sys.stdout.flush()
+
+ output = process.communicate()[0]
+ output = output.decode()
+
+ #Callbacks don't work yet. Sigh.
+ if callbacks is not None:
+ if not isinstance(callbacks, list):
+ raise TypeError('Expecting a list instance, got: {0}'.format(type(command)))
- return process.poll()
+ for callback in callbacks:
+ callback_status, callback_message = callback(output)
+ if not callback_status:
+ callback_failed = True
+ #Stop processing future callbacks here?
+
+ exitCode = process.returncode
+
+ if callback_failed:
+ raise CondaBuildError(callback_message)
+ elif exitCode == 0:
+ return exitCode
+ else:
+ raise CalledProcessError(exitCode, combine_args(command))
def conda_search(metadata):
@@ -57,7 +78,7 @@ def conda_install(pkgname, args=[]):
try:
run_process(command)
except CalledProcessError as cpe:
- print('{0}\nexit={1}'.format(' '.join(cpe.cmd), cpe.returncode))
+ print(cpe)
def conda_reinstall(pkgname, args=[]):
@@ -69,7 +90,7 @@ def conda_reinstall(pkgname, args=[]):
try:
run_process(command)
except CalledProcessError as cpe:
- print('{0}\nexit={1}'.format(combine_args(cpe.cmd), cpe.returncode))
+ print(cpe)
def conda_builder(metadata, args=[]):
@@ -79,13 +100,14 @@ def conda_builder(metadata, args=[]):
def check_bad_egg(output):
bad_egg = 'UNKNOWN.egg-info'
if bad_egg in output:
- raise CondaBuildError('Bad setuptools metadata produced UNKNOWN.egg-info instead of {0}*.egg-info!'.format(metadata.local['package']['name']))
+ return False, '{0}: Bad setuptools metadata produced UNKNOWN.egg-info instead of {1}*.egg-info!'.format(inspect.currentframe().f_code.co_name, metadata.local['package']['name'])
+ return True, ''
command = 'conda build {0} {1}'.format(combine_args(args), metadata.env.pkgdir).split()
+ callbacks = [check_bad_egg]
try:
- run_process(command, check_bad_egg)
- #OK Conda, let's play rough. stdout/stderr only, no exit for you.
+ run_process(command, callbacks)
except SystemExit:
print('Discarding SystemExit issued by setuptools')
except CalledProcessError as cpe: