@@ -10,22 +10,16 @@ import net.minecraftforge.gitversion.gradle.common.GitVersionTools
1010import org.gradle.api.file.ConfigurableFileCollection
1111import org.gradle.api.file.Directory
1212import org.gradle.api.file.DirectoryProperty
13- import org.gradle.api.provider.Property
14- import org.gradle.api.provider.Provider
15- import org.gradle.api.provider.ProviderFactory
1613import org.gradle.api.provider.ValueSource
1714import org.gradle.api.provider.ValueSourceParameters
1815import org.gradle.process.ExecOperations
1916import org.gradle.process.JavaExecSpec
20- import org.gradle.process.ProcessExecutionException
2117
2218import javax.inject.Inject
2319import java.nio.charset.StandardCharsets
2420
25- import static net.minecraftforge.gitversion.gradle.GitVersionPlugin.LOGGER
26-
2721@CompileStatic
28- @PackageScope abstract class GitVersionValueSource implements ValueSource<String , Parameters > {
22+ @PackageScope abstract class GitVersionValueSource implements ValueSource<GitVersionValueResult , Parameters > {
2923 static interface Parameters extends ValueSourceParameters {
3024 ConfigurableFileCollection getClasspath ()
3125
@@ -37,8 +31,8 @@ import static net.minecraftforge.gitversion.gradle.GitVersionPlugin.LOGGER
3731 @Inject
3832 GitVersionValueSource () {}
3933
40- @PackageScope static Provider< GitVersionExtensionInternal.Output > of (GitVersionPlugin plugin , Directory projectDirectory ) {
41- plugin. getProviders(). of(GitVersionValueSource ) { spec ->
34+ @PackageScope static GitVersionExtensionInternal.Output of (GitVersionProblems problems , GitVersionPlugin plugin , Directory projectDirectory ) {
35+ var result = plugin. getProviders(). of(GitVersionValueSource ) { spec ->
4236 spec. parameters { parameters ->
4337 parameters. classpath. from(plugin. getTool(GitVersionTools . GITVERSION ). classpath)
4438 // NOTE: We are NOT manually setting the java launcher this time
@@ -47,20 +41,30 @@ import static net.minecraftforge.gitversion.gradle.GitVersionPlugin.LOGGER
4741
4842 parameters. projectPath. set(projectDirectory)
4943 }
50- }. map { Util . fromJson(it, GitVersionExtensionInternal.Output ) }
44+ }. get()
45+
46+ if (result. execFailure() != = null )
47+ problems. reportGitVersionFailure(result. errorOutput(), result. execFailure())
48+
49+ return result. output()
5150 }
5251
5352 @Override
54- String obtain () {
53+ GitVersionValueResult obtain () {
5554 final parameters = this . parameters
56- final output = new ByteArrayOutputStream ()
55+ final stdOut = new ByteArrayOutputStream ()
56+ final stdErr = new ByteArrayOutputStream ()
57+
58+ GitVersionExtensionInternal.Output output
59+ String errorOutput
60+ Throwable execFailure
5761
5862 Closure javaExecSpec = { JavaExecSpec exec ->
5963 exec. classpath = parameters. classpath
6064 exec. mainClass. set(GitVersionTools . GITVERSION . mainClass)
6165
62- exec. standardOutput = output
63- exec. errorOutput = Util . toLog( LOGGER . &error)
66+ exec. standardOutput = stdOut
67+ exec. errorOutput = stdErr
6468
6569 exec. args(
6670 ' --json' ,
@@ -70,19 +74,29 @@ import static net.minecraftforge.gitversion.gradle.GitVersionPlugin.LOGGER
7074
7175 try {
7276 this . execOperations. javaexec(javaExecSpec). rethrowFailure(). assertNormalExitValue()
73- } catch (ProcessExecutionException e) {
74- output. reset()
77+
78+ output = Util . fromJson(stdOut. toString(StandardCharsets . UTF_8 ), GitVersionExtensionInternal.Output )
79+ errorOutput = stdErr. toString(StandardCharsets . UTF_8 )
80+ execFailure = null
81+ } catch (Exception e) {
82+ stdOut. reset()
7583
7684 try {
7785 this . execOperations. javaexec(javaExecSpec. andThen { JavaExecSpec exec ->
7886 exec. args(' --disable-strict' )
87+ exec. errorOutput = new ByteArrayOutputStream ()
7988 }). rethrowFailure(). assertNormalExitValue()
80- } catch (ProcessExecutionException suppressed) {
89+
90+ output = Util . fromJson(stdOut. toString(StandardCharsets . UTF_8 ), GitVersionExtensionInternal.Output )
91+ } catch (Exception suppressed) {
8192 e. addSuppressed(suppressed)
82- throw e
93+ output = GitVersionExtensionInternal.Output . EMPTY
8394 }
95+
96+ errorOutput = stdErr. toString(StandardCharsets . UTF_8 )
97+ execFailure = e
8498 }
8599
86- output . toString( StandardCharsets . UTF_8 )
100+ return new GitVersionValueResult (output, errorOutput, execFailure )
87101 }
88102}
0 commit comments