diff --git a/common/src/main/java/org/implab/gradle/common/dsl/CommandSpec.java b/common/src/main/java/org/implab/gradle/common/dsl/TaskCommandSpecMixin.java rename from common/src/main/java/org/implab/gradle/common/dsl/CommandSpec.java rename to common/src/main/java/org/implab/gradle/common/dsl/TaskCommandSpecMixin.java --- a/common/src/main/java/org/implab/gradle/common/dsl/CommandSpec.java +++ b/common/src/main/java/org/implab/gradle/common/dsl/TaskCommandSpecMixin.java @@ -3,7 +3,7 @@ package org.implab.gradle.common.dsl; import org.gradle.api.provider.ListProperty; -public interface CommandSpec { +public interface TaskCommandSpecMixin { ListProperty getCommandLine(); void commandLine(Object arg0, Object... args); diff --git a/common/src/main/java/org/implab/gradle/common/dsl/TaskDependency.java b/common/src/main/java/org/implab/gradle/common/dsl/TaskDependency.java deleted file mode 100644 --- a/common/src/main/java/org/implab/gradle/common/dsl/TaskDependency.java +++ /dev/null @@ -1,22 +0,0 @@ -package org.implab.gradle.common.dsl; - -import org.gradle.api.Buildable; -import org.gradle.api.tasks.TaskProvider; - -public interface TaskDependency { - - Object reference(); - - public static TaskDependency named(String name) { - return () -> name; - } - - public static TaskDependency provider(TaskProvider provider) { - return () -> provider; - } - - public static TaskDependency buildable(Buildable dependency) { - return () -> dependency; - } - -} diff --git a/common/src/main/java/org/implab/gradle/common/dsl/EnvironmentSpec.java b/common/src/main/java/org/implab/gradle/common/dsl/TaskEnvSpecMixin.java rename from common/src/main/java/org/implab/gradle/common/dsl/EnvironmentSpec.java rename to common/src/main/java/org/implab/gradle/common/dsl/TaskEnvSpecMixin.java --- a/common/src/main/java/org/implab/gradle/common/dsl/EnvironmentSpec.java +++ b/common/src/main/java/org/implab/gradle/common/dsl/TaskEnvSpecMixin.java @@ -6,6 +6,7 @@ import java.util.Map; import org.gradle.api.Action; import org.gradle.api.file.DirectoryProperty; import org.gradle.api.provider.MapProperty; +import org.gradle.api.provider.Property; import org.implab.gradle.common.utils.Closures; import org.implab.gradle.common.utils.Values; @@ -16,7 +17,10 @@ import groovy.lang.Closure; * working directory and environment variables for the processes started within * this shell. */ -public interface EnvironmentSpec { +public interface TaskEnvSpecMixin { + + /** Inherit environment from current process */ + Property getInheritEnvironment(); /** Working directory */ DirectoryProperty getWorkingDirectory(); diff --git a/common/src/main/java/org/implab/gradle/common/dsl/PipeSpec.java b/common/src/main/java/org/implab/gradle/common/dsl/TaskPipeSpecMixin.java rename from common/src/main/java/org/implab/gradle/common/dsl/PipeSpec.java rename to common/src/main/java/org/implab/gradle/common/dsl/TaskPipeSpecMixin.java --- a/common/src/main/java/org/implab/gradle/common/dsl/PipeSpec.java +++ b/common/src/main/java/org/implab/gradle/common/dsl/TaskPipeSpecMixin.java @@ -3,7 +3,7 @@ package org.implab.gradle.common.dsl; import org.eclipse.jdt.annotation.NonNullByDefault; @NonNullByDefault -public interface PipeSpec { +public interface TaskPipeSpecMixin { RedirectToSpec getStdout(); RedirectToSpec getStderr(); diff --git a/common/src/main/java/org/implab/gradle/common/tasks/ShellExecTask.java b/common/src/main/java/org/implab/gradle/common/tasks/ShellExecTask.java --- a/common/src/main/java/org/implab/gradle/common/tasks/ShellExecTask.java +++ b/common/src/main/java/org/implab/gradle/common/tasks/ShellExecTask.java @@ -9,13 +9,14 @@ import org.gradle.api.DefaultTask; import org.gradle.api.file.DirectoryProperty; import org.gradle.api.provider.ListProperty; import org.gradle.api.provider.MapProperty; +import org.gradle.api.provider.Property; import org.gradle.api.tasks.Internal; import org.gradle.api.tasks.TaskAction; -import org.implab.gradle.common.dsl.CommandSpec; -import org.implab.gradle.common.dsl.PipeSpec; +import org.implab.gradle.common.dsl.TaskCommandSpecMixin; +import org.implab.gradle.common.dsl.TaskPipeSpecMixin; import org.implab.gradle.common.dsl.RedirectFromSpec; import org.implab.gradle.common.dsl.RedirectToSpec; -import org.implab.gradle.common.dsl.EnvironmentSpec; +import org.implab.gradle.common.dsl.TaskEnvSpecMixin; import org.implab.gradle.common.exec.ExecBuilder; import org.implab.gradle.common.utils.ObjectsMixin; import org.implab.gradle.common.utils.Strings; @@ -23,7 +24,7 @@ import org.implab.gradle.common.utils.Th public abstract class ShellExecTask extends DefaultTask - implements CommandSpec, PipeSpec, EnvironmentSpec, ObjectsMixin { + implements TaskCommandSpecMixin, TaskPipeSpecMixin, TaskEnvSpecMixin, ObjectsMixin { private final RedirectToSpec redirectStderr = new RedirectToSpec(); @@ -33,6 +34,10 @@ public abstract class ShellExecTask @Internal @Override + public abstract Property getInheritEnvironment(); + + @Internal + @Override public abstract DirectoryProperty getWorkingDirectory(); @Internal diff --git a/common/src/main/java/org/implab/gradle/common/utils/Closures.java b/common/src/main/java/org/implab/gradle/common/utils/Closures.java --- a/common/src/main/java/org/implab/gradle/common/utils/Closures.java +++ b/common/src/main/java/org/implab/gradle/common/utils/Closures.java @@ -11,10 +11,7 @@ public final class Closures { } public static Action action(Closure closure) { - return arg -> { - closure.setDelegate(arg); - closure.call(arg); - }; + return arg -> apply(closure, arg); } public static void apply(Closure action, Object target) { diff --git a/common/src/main/java/org/implab/gradle/common/utils/Values.java b/common/src/main/java/org/implab/gradle/common/utils/Values.java --- a/common/src/main/java/org/implab/gradle/common/utils/Values.java +++ b/common/src/main/java/org/implab/gradle/common/utils/Values.java @@ -66,6 +66,10 @@ public final class Values { return () -> new ArrayIterator<>(values); } + public static Optional optional(Provider provider) { + return provider.isPresent() ? Optional.of(provider.get()) : Optional.empty(); + } + private static class ArrayIterator implements Iterator { private final T[] data;