48 lines
1.7 KiB
Groovy
48 lines
1.7 KiB
Groovy
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"
|
|
}
|
|
}
|
|
|
|
/** Returns the number of revisions up to the current commit */
|
|
abstract class GitRevCountSource implements ValueSource<Integer, ValueSourceParameters.None> {
|
|
@Inject abstract ExecOperations getExecOperations()
|
|
|
|
@Override Integer obtain() {
|
|
try {
|
|
def output = new ByteArrayOutputStream()
|
|
|
|
execOperations.exec {
|
|
it.commandLine 'git', 'rev-list', '--first-parent', '--count', 'HEAD'
|
|
it.standardOutput = output
|
|
}
|
|
|
|
return output.toString().trim().toInteger()
|
|
} catch (GradleException ignore) {
|
|
// Git executable unavailable, or we are not building in a git repo. Fall through:
|
|
}
|
|
return -1
|
|
}
|
|
}
|
|
|
|
ext.getGitSha = { providers.of(GitShaValueSource) {}.get() }
|
|
|
|
ext.getGitRevCount = { providers.of(GitRevCountSource) {}.get() }
|