diff --git a/pygradle-plugin/src/main/groovy/com/linkedin/gradle/python/tasks/AbstractPythonMainSourceDefaultTask.java b/pygradle-plugin/src/main/groovy/com/linkedin/gradle/python/tasks/AbstractPythonMainSourceDefaultTask.java index b91c673b..b366eb59 100644 --- a/pygradle-plugin/src/main/groovy/com/linkedin/gradle/python/tasks/AbstractPythonMainSourceDefaultTask.java +++ b/pygradle-plugin/src/main/groovy/com/linkedin/gradle/python/tasks/AbstractPythonMainSourceDefaultTask.java @@ -76,6 +76,7 @@ public String[] standardExcludes() { return new String[]{"**/*.pyc", "**/*.pyo", "**/__pycache__/", "**/*.egg-info/"}; } + @Internal public PythonExtension getPythonExtension() { if (null == extension) { extension = getProject().getExtensions().getByType(PythonExtension.class); diff --git a/pygradle-plugin/src/main/groovy/com/linkedin/gradle/python/tasks/BuildWheelsTask.groovy b/pygradle-plugin/src/main/groovy/com/linkedin/gradle/python/tasks/BuildWheelsTask.groovy index a2f14fee..b619274b 100644 --- a/pygradle-plugin/src/main/groovy/com/linkedin/gradle/python/tasks/BuildWheelsTask.groovy +++ b/pygradle-plugin/src/main/groovy/com/linkedin/gradle/python/tasks/BuildWheelsTask.groovy @@ -162,6 +162,7 @@ class BuildWheelsTask extends DefaultTask implements SupportsWheelCache, Support } @Override + @Internal String getReason() { return lastInstallMessage } diff --git a/pygradle-plugin/src/main/groovy/com/linkedin/gradle/python/tasks/Flake8Task.java b/pygradle-plugin/src/main/groovy/com/linkedin/gradle/python/tasks/Flake8Task.java index ed55ecb6..5c66bd6a 100644 --- a/pygradle-plugin/src/main/groovy/com/linkedin/gradle/python/tasks/Flake8Task.java +++ b/pygradle-plugin/src/main/groovy/com/linkedin/gradle/python/tasks/Flake8Task.java @@ -22,6 +22,8 @@ import org.apache.commons.io.FileUtils; import org.gradle.api.logging.Logger; import org.gradle.api.logging.Logging; +import org.gradle.api.tasks.Input; +import org.gradle.api.tasks.Optional; import org.gradle.process.ExecResult; import java.io.File; @@ -53,6 +55,8 @@ public void setIgnoreRules(Set ignoreRules) { this.ignoreRules = ignoreRules; } + @Input + @Optional public Set getIgnoreRules() { return ignoreRules; } diff --git a/pygradle-plugin/src/main/groovy/com/linkedin/gradle/python/tasks/GetProbedTagsTask.java b/pygradle-plugin/src/main/groovy/com/linkedin/gradle/python/tasks/GetProbedTagsTask.java index 1ceba84f..56d0dd41 100644 --- a/pygradle-plugin/src/main/groovy/com/linkedin/gradle/python/tasks/GetProbedTagsTask.java +++ b/pygradle-plugin/src/main/groovy/com/linkedin/gradle/python/tasks/GetProbedTagsTask.java @@ -20,6 +20,7 @@ import com.linkedin.gradle.python.tasks.provides.ProvidesVenv; import com.linkedin.gradle.python.wheel.EditablePythonAbiContainer; import org.gradle.api.DefaultTask; +import org.gradle.api.tasks.Input; import org.gradle.api.tasks.TaskAction; @@ -46,6 +47,7 @@ public void setEditablePythonAbiContainer(EditablePythonAbiContainer editablePyt this.editablePythonAbiContainer = editablePythonAbiContainer; } + @Input public PythonDetails getPythonDetails() { return pythonDetails; } diff --git a/pygradle-plugin/src/main/groovy/com/linkedin/gradle/python/tasks/InstallVirtualEnvironmentTask.java b/pygradle-plugin/src/main/groovy/com/linkedin/gradle/python/tasks/InstallVirtualEnvironmentTask.java index cb186ef2..015e2af7 100644 --- a/pygradle-plugin/src/main/groovy/com/linkedin/gradle/python/tasks/InstallVirtualEnvironmentTask.java +++ b/pygradle-plugin/src/main/groovy/com/linkedin/gradle/python/tasks/InstallVirtualEnvironmentTask.java @@ -28,6 +28,7 @@ import org.gradle.api.artifacts.Configuration; import org.gradle.api.tasks.Input; import org.gradle.api.tasks.InputFiles; +import org.gradle.api.tasks.Internal; import org.gradle.api.tasks.Optional; import org.gradle.api.tasks.OutputFile; import org.gradle.api.tasks.TaskAction; @@ -59,6 +60,7 @@ public void installVEnv() { } @Override + @Internal public String getReason() { return container.getCommandOutput(); } @@ -67,6 +69,7 @@ public void setPythonDetails(PythonDetails pythonDetails) { this.pythonDetails = pythonDetails; } + @Input public PythonDetails getPythonDetails() { return pythonDetails; } diff --git a/pygradle-plugin/src/main/groovy/com/linkedin/gradle/python/tasks/ParallelWheelGenerationTask.java b/pygradle-plugin/src/main/groovy/com/linkedin/gradle/python/tasks/ParallelWheelGenerationTask.java index 3e8a4a73..af6b81ce 100644 --- a/pygradle-plugin/src/main/groovy/com/linkedin/gradle/python/tasks/ParallelWheelGenerationTask.java +++ b/pygradle-plugin/src/main/groovy/com/linkedin/gradle/python/tasks/ParallelWheelGenerationTask.java @@ -263,12 +263,14 @@ public void setPackageSettings(PackageSettings settings) { } @Override + @Internal public PackageSettings getPackageSettings() { return this.packageSettings; } @Nullable @Override + @Internal public Spec getPackageExcludeFilter() { return packageFilter; } diff --git a/pygradle-plugin/src/main/groovy/com/linkedin/gradle/python/tasks/PipInstallTask.groovy b/pygradle-plugin/src/main/groovy/com/linkedin/gradle/python/tasks/PipInstallTask.groovy index eb1a3120..a85fbac0 100644 --- a/pygradle-plugin/src/main/groovy/com/linkedin/gradle/python/tasks/PipInstallTask.groovy +++ b/pygradle-plugin/src/main/groovy/com/linkedin/gradle/python/tasks/PipInstallTask.groovy @@ -40,6 +40,7 @@ import org.gradle.api.file.FileCollection import org.gradle.api.specs.Spec import org.gradle.api.tasks.Input import org.gradle.api.tasks.InputFiles +import org.gradle.api.tasks.Internal import org.gradle.api.tasks.Optional import org.gradle.api.tasks.TaskAction import org.gradle.internal.logging.progress.ProgressLogger @@ -71,16 +72,21 @@ class PipInstallTask extends DefaultTask implements FailureReasonProvider, Suppo Map environment @Input - @Optional boolean sorted = true + @Internal PackageSettings packageSettings + + @Internal EnvironmentMerger environmentMerger = new DefaultEnvironmentMerger() + + @Internal ExternalExec externalExec = new ProjectExternalExec(getProject()) /** * Will return true when the package should be excluded from being installed. */ + @Internal Spec packageExcludeFilter = null private String lastInstallMessage = null @@ -156,6 +162,7 @@ class PipInstallTask extends DefaultTask implements FailureReasonProvider, Suppo } @Override + @Internal String getReason() { return lastInstallMessage } diff --git a/pygradle-plugin/src/main/groovy/com/linkedin/gradle/python/tasks/PyCoverageTask.groovy b/pygradle-plugin/src/main/groovy/com/linkedin/gradle/python/tasks/PyCoverageTask.groovy index 16879a39..1cc83859 100644 --- a/pygradle-plugin/src/main/groovy/com/linkedin/gradle/python/tasks/PyCoverageTask.groovy +++ b/pygradle-plugin/src/main/groovy/com/linkedin/gradle/python/tasks/PyCoverageTask.groovy @@ -45,7 +45,7 @@ class PyCoverageTask extends PyTestTask { PyCoverageTask() { super() - stdOut = new TeeOutputStream(stdOut, outputStream) + stdOut = new TeeOutputStream(System.out, outputStream) } /** diff --git a/pygradle-plugin/src/main/groovy/com/linkedin/gradle/python/tasks/action/ProbeVenvInfoAction.java b/pygradle-plugin/src/main/groovy/com/linkedin/gradle/python/tasks/action/ProbeVenvInfoAction.java index febd797b..d4d0fab0 100644 --- a/pygradle-plugin/src/main/groovy/com/linkedin/gradle/python/tasks/action/ProbeVenvInfoAction.java +++ b/pygradle-plugin/src/main/groovy/com/linkedin/gradle/python/tasks/action/ProbeVenvInfoAction.java @@ -27,11 +27,11 @@ import org.gradle.api.logging.Logging; import java.io.File; -import java.io.FileOutputStream; import java.io.FileReader; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import java.nio.file.Files; public class ProbeVenvInfoAction { @@ -72,17 +72,23 @@ public static void getProbedTags(Project project, private static void doProbe(Project project, PythonDetails pythonDetails, EditablePythonAbiContainer editablePythonAbiContainer) throws IOException { - InputStream wheelApiResource = ProbeVenvInfoAction.class.getClassLoader() - .getResourceAsStream("templates/wheel-api.py"); - byte[] buffer = new byte[wheelApiResource.available()]; - wheelApiResource.read(buffer); + + File probeDir = new File(project.getBuildDir(), PROBE_DIR_NAME); probeDir.mkdirs(); - OutputStream outStream = new FileOutputStream(getPythonFileForSupportedWheels(probeDir)); - outStream.write(buffer); + + try (InputStream wheelApiResource = ProbeVenvInfoAction.class.getClassLoader() + .getResourceAsStream("templates/wheel-api.py"); + OutputStream outStream = Files.newOutputStream(getPythonFileForSupportedWheels(probeDir).toPath())) { + byte[] buffer = new byte[10240]; + int length; + while ((length = wheelApiResource.read(buffer)) > 0) { + outStream.write(buffer, 0, length); + } + } File supportedAbiFormatsFile = getSupportedAbiFormatsFile(probeDir, pythonDetails); project.exec(execSpec -> {