-
Notifications
You must be signed in to change notification settings - Fork 4.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add simpler API to capture external process output as build input
There are two new methods, `exec` and `javaexec` in the ProviderFactory class. These are similar to the existing methods of ExecOperations and reuse the same configuration DSL classes. The returned providers have convenient methods to read the process' output during the configuration time or to wire it as an input to the task. The outputs become parts of the configuration cache fingerprint if used during the configuration time, so the wrapped process is re-executed every time build is started.
- Loading branch information
Showing
25 changed files
with
2,145 additions
and
7 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
99 changes: 99 additions & 0 deletions
99
subprojects/core-api/src/main/java/org/gradle/process/ExecOutput.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,99 @@ | ||
/* | ||
* Copyright 2021 the original author or authors. | ||
* | ||
* Licensed under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
*/ | ||
|
||
package org.gradle.process; | ||
|
||
import org.gradle.api.Incubating; | ||
import org.gradle.api.provider.Provider; | ||
|
||
/** | ||
* Provides lazy access to the output of the external process. | ||
* | ||
* @since 7.5 | ||
*/ | ||
@Incubating | ||
public interface ExecOutput { | ||
/** | ||
* Returns a provider of the execution result. | ||
* | ||
* <p> | ||
* The external process is executed only once and only when the value is requested for the first | ||
* time. | ||
* </p> | ||
* <p> | ||
* If starting the process results in exception then the ensuing exception is permanently | ||
* propagated to callers of {@link Provider#get}, {@link Provider#getOrElse}, | ||
* {@link Provider#getOrNull} and {@link Provider#isPresent}. | ||
* </p> | ||
* | ||
* @return provider of the execution result. | ||
*/ | ||
Provider<ExecResult> getResult(); | ||
|
||
/** | ||
* Gets a handle to the content of the process' standard output. | ||
* | ||
* @return handle of the standard output of the process. | ||
*/ | ||
StandardStreamContent getStandardOutput(); | ||
|
||
/** | ||
* Gets a handle to the content of the process' standard error output. | ||
* | ||
* @return handle of the standard error output of the process. | ||
*/ | ||
StandardStreamContent getStandardError(); | ||
|
||
/** | ||
* A handle to access content of the process' standard stream (the standard output of the | ||
* standard error output). | ||
* | ||
* @since 7.5 | ||
*/ | ||
@Incubating | ||
interface StandardStreamContent { | ||
/** | ||
* Gets a provider for the standard stream's content that returns it as a String. The output | ||
* is decoded using the default encoding of the JVM running the build. | ||
* | ||
* <p> | ||
* The external process is executed only once and only when the value is requested for the | ||
* first time. | ||
* </p> | ||
* <p> | ||
* If starting the process results in exception then the ensuing exception is permanently | ||
* propagated to callers of {@link Provider#get}, {@link Provider#getOrElse}, | ||
* {@link Provider#getOrNull} and {@link Provider#isPresent}. | ||
* </p> | ||
*/ | ||
Provider<String> getAsText(); | ||
|
||
/** | ||
* Gets a provider for the standard stream's content that returns it as a byte array. | ||
* | ||
* <p> | ||
* The external process is executed only once and only when the value is requested for the | ||
* first time. | ||
* </p> | ||
* <p> | ||
* If starting the process results in exception then the ensuing exception is permanently | ||
* propagated to callers of {@link Provider#get}, {@link Provider#getOrElse}, | ||
* {@link Provider#getOrNull} and {@link Provider#isPresent}. | ||
* </p> | ||
*/ | ||
Provider<byte[]> getAsBytes(); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
39 changes: 39 additions & 0 deletions
39
subprojects/core/src/main/java/org/gradle/process/internal/DefaultExecSpecFactory.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
/* | ||
* Copyright 2021 the original author or authors. | ||
* | ||
* Licensed under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
*/ | ||
|
||
package org.gradle.process.internal; | ||
|
||
import org.gradle.api.internal.provider.sources.process.ExecSpecFactory; | ||
import org.gradle.process.ExecSpec; | ||
import org.gradle.process.JavaExecSpec; | ||
|
||
public class DefaultExecSpecFactory implements ExecSpecFactory { | ||
private final ExecActionFactory execActionFactory; | ||
|
||
public DefaultExecSpecFactory(ExecActionFactory execActionFactory) { | ||
this.execActionFactory = execActionFactory; | ||
} | ||
|
||
@Override | ||
public ExecSpec newExecSpec() { | ||
return execActionFactory.newExecAction(); | ||
} | ||
|
||
@Override | ||
public JavaExecSpec newJavaExecSpec() { | ||
return execActionFactory.newJavaExecAction(); | ||
} | ||
} |
Oops, something went wrong.