Previous attempt to fix git sha on non-git build broke git build. (#3322)

This uses unusual code provided by Mikhail Lopatkin of Gradle Inc:
https://github.com/gradle/gradle/issues/23914#issuecomment-1431909019
It wraps the git sha function in a "value source". This allows it to interact correctly with configuration caching.
Because the code is longer than before, it is now broken out into its own file getGitSha.gradle.
This commit is contained in:
mcclure 2023-02-16 14:20:52 -05:00 committed by GitHub
parent b760ebe004
commit ab364712fe
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 29 additions and 12 deletions

View file

@ -5,19 +5,9 @@ plugins {
alias(libs.plugins.kotlin.parcelize)
}
// For constructing gitSha only
def getGitSha = {
try { // Try-catch is necessary for build to work on non-git distributions
providers.exec {
commandLine 'git', 'rev-parse', 'HEAD'
executionResult.rethrowFailure() // Without this, sometimes it just stops immediately instead of throwing
}.standardOutput.asText.get().trim()
} catch (Exception e) {
"unknown"
}
}
apply from: 'getGitSha.gradle'
final def gitSha = getGitSha()
final def gitSha = ext.getGitSha()
// The app name
final def APP_NAME = "Tusky"

27
app/getGitSha.gradle Normal file
View file

@ -0,0 +1,27 @@
import org.gradle.api.provider.ValueSourceParameters
import javax.inject.Inject
// Must wrap this in a ValueSource in order to get well-defined fail behavior without confusing Gradle on repeat builds.
abstract class GitShaValueSource implements ValueSource<String, ValueSourceParameters.None> {
@Inject abstract ExecOperations getExecOperations()
@Override String obtain() {
try {
def output = new ByteArrayOutputStream()
execOperations.exec {
it.commandLine 'git', 'rev-parse', '--short=8', 'HEAD'
it.standardOutput = output
}
return output.toString().trim()
} catch (GradleException ignore) {
// Git executable unavailable, or we are not building in a git repo. Fall through:
}
return "unknown"
}
}
// Export closure
ext.getGitSha = {
providers.of(GitShaValueSource) {}.get()
}