Skip to content

Commit

Permalink
Merge ff9c99f into 0c8b3c8
Browse files Browse the repository at this point in the history
  • Loading branch information
arcivanov committed Apr 12, 2018
2 parents 0c8b3c8 + ff9c99f commit f542518
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 8 deletions.
6 changes: 6 additions & 0 deletions src/main/python/pybuilder/errors.py
Expand Up @@ -94,6 +94,12 @@ def __init__(self, plugin, message=""):
"Missing plugin '%s': %s", plugin, message)


class MissingPluginDependencyException(PyBuilderException):
def __init__(self, dependency, message=""):
super(MissingPluginDependencyException, self).__init__(
"Missing plugin dependency '%s': %s", dependency, message)


class UnspecifiedPluginNameException(PyBuilderException):
def __init__(self, plugin):
super(UnspecifiedPluginNameException, self).__init__(
Expand Down
27 changes: 20 additions & 7 deletions src/main/python/pybuilder/plugins/core_plugin.py
Expand Up @@ -20,10 +20,11 @@
import shutil
from os.path import join

from pybuilder.core import init, task, description, depends, optional
from pybuilder.utils import safe_log_file_name
# Plugin install_dependencies_plugin can reload pip_common and pip_utils. Do not use from ... import ...
from pybuilder import pip_utils
from pybuilder.core import init, task, description, depends, optional
from pybuilder.errors import MissingPluginDependencyException
from pybuilder.utils import safe_log_file_name, tail, read_file


@init
Expand Down Expand Up @@ -63,21 +64,33 @@ def prepare(project, logger):
plugin_dependency_versions = pip_utils.get_package_version(project.plugin_dependencies, logger)
for plugin_dependency in project.plugin_dependencies:
logger.debug("Processing plugin dependency %s" % plugin_dependency)
if plugin_dependency.name.lower() not in plugin_dependency_versions \
or not pip_utils.version_satisfies_spec(plugin_dependency.version,
plugin_dependency_versions[plugin_dependency.name.lower()]):
dependency_name = plugin_dependency.name.lower()
no_version_installed = dependency_name not in plugin_dependency_versions
if not no_version_installed:
version_satisfies = pip_utils.version_satisfies_spec(plugin_dependency.version,
plugin_dependency_versions[dependency_name])
if no_version_installed or not version_satisfies:
logger.info("Installing plugin dependency %s" % plugin_dependency)
log_file = project.expand_path("$dir_reports",
safe_log_file_name("dependency_%s_install.log" % plugin_dependency))
pip_utils.pip_install(
install_targets=pip_utils.as_pip_install_target(plugin_dependency),
install_targets = pip_utils.as_pip_install_target(plugin_dependency)
result = pip_utils.pip_install(
install_targets=install_targets,
index_url=project.get_property("install_dependencies_index_url"),
extra_index_url=project.get_property("install_dependencies_extra_index_url"),
verbose=project.get_property("verbose"),
logger=logger,
force_reinstall=plugin_dependency.url is not None,
outfile_name=log_file,
error_file_name=log_file)
if result:
log_lines = list(tail(log_file))
log = log_lines[-1] if not project.get_property("verbose") else "\n".join(log_lines)
if no_version_installed:
logger.debug("Failed to install '%s':\n%s", plugin_dependency, "\n".join(read_file(log_file)))
raise MissingPluginDependencyException(",".join(install_targets), log)
else:
logger.error("Failed to install '%s':\n%s", plugin_dependency, log)


@task
Expand Down
2 changes: 1 addition & 1 deletion src/main/python/pybuilder/utils.py
Expand Up @@ -207,7 +207,7 @@ def tail(file_path, lines=20):
try:
import tailer
except ImportError:
return read_file(file_path)
return (l[:len(l)] for l in read_file(file_path))

with open(file_path) as f:
return tailer.tail(f, lines)
Expand Down
2 changes: 2 additions & 0 deletions travis_build.sh
Expand Up @@ -28,4 +28,6 @@ else
echo "Running PR Build"
fi

PYTHONIOENCODING=utf8
export PYTHONIOENCODING
./build.py $PYB_ARGS

0 comments on commit f542518

Please sign in to comment.