Browse Source

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.
pull/3327/head
mcclure 3 years ago committed by GitHub
parent
commit
ab364712fe
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 14
      app/build.gradle
  2. 27
      app/getGitSha.gradle

14
app/build.gradle

@ -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

@ -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()
}
Loading…
Cancel
Save