|
@@ -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()
|
|
|
+}
|