From 76402466273254cf18acc95faff0d2cb89b8508f Mon Sep 17 00:00:00 2001 From: Edwin Jakobs Date: Sat, 28 Aug 2021 00:05:42 +0200 Subject: [PATCH] Change GitArchiver to use the new requestAsset event --- orx-jvm/orx-git-archiver/README.md | 20 +++++++++ .../src/demo/kotlin/GitArchiverDemo01.kt | 10 ++++- .../src/main/kotlin/GitArchiver.kt | 44 ++++++++++++------- orx-jvm/orx-gui/src/main/kotlin/Gui.kt | 19 ++++++-- 4 files changed, 71 insertions(+), 22 deletions(-) create mode 100644 orx-jvm/orx-git-archiver/README.md diff --git a/orx-jvm/orx-git-archiver/README.md b/orx-jvm/orx-git-archiver/README.md new file mode 100644 index 00000000..d5eff46e --- /dev/null +++ b/orx-jvm/orx-git-archiver/README.md @@ -0,0 +1,20 @@ +# orx-git-archiver + +An extension that hooks into `Program.requestAssets` to commit +changed code to Git and provide filenames based on the commit hash. + +## How do I use it? + +```kotlin +application { + program { + extend(GitArchiver()) { + + + } + extend(Screenshots()) + } +} +``` +Now when a screenshot is taken, first all uncommitted code is committed to git. +The screenshot is saved with the first 7 characters of the commit hash in the filename. diff --git a/orx-jvm/orx-git-archiver/src/demo/kotlin/GitArchiverDemo01.kt b/orx-jvm/orx-git-archiver/src/demo/kotlin/GitArchiverDemo01.kt index 7b7febce..f9ebbc71 100644 --- a/orx-jvm/orx-git-archiver/src/demo/kotlin/GitArchiverDemo01.kt +++ b/orx-jvm/orx-git-archiver/src/demo/kotlin/GitArchiverDemo01.kt @@ -1,11 +1,17 @@ import org.openrndr.applicationSynchronous import org.openrndr.extensions.Screenshots +import org.openrndr.extensions.SingleScreenshot fun main() = applicationSynchronous { program { + if (System.getProperty("takeScreenshot") == "true") { + extend(SingleScreenshot()) { + this.outputFile = System.getProperty("screenshotPath") + } + } val ga = extend(GitArchiver()) { - commitOnRun = false - commitOnProduceAssets = false + commitOnRun = true + commitOnRequestAssets = false } extend(Screenshots()) extend { diff --git a/orx-jvm/orx-git-archiver/src/main/kotlin/GitArchiver.kt b/orx-jvm/orx-git-archiver/src/main/kotlin/GitArchiver.kt index e911d733..59191e14 100644 --- a/orx-jvm/orx-git-archiver/src/main/kotlin/GitArchiver.kt +++ b/orx-jvm/orx-git-archiver/src/main/kotlin/GitArchiver.kt @@ -1,30 +1,39 @@ +package org.openrndr.extra.gitarchiver + import mu.KotlinLogging import org.eclipse.jgit.api.Git +import org.eclipse.jgit.api.errors.EmptyCommitException import org.eclipse.jgit.internal.storage.file.FileRepository import org.eclipse.jgit.lib.Constants import org.openrndr.AssetMetadata import org.openrndr.Extension import org.openrndr.Program +import java.io.File + +val logger = KotlinLogging.logger { } -val logger = KotlinLogging.logger { } class GitArchiver : Extension { override var enabled: Boolean = true var commitOnRun = false - var commitOnProduceAssets = true + var commitOnRequestAssets = true var autoCommitMessage = "auto commit" private val repo = FileRepository(".git") - private val git = Git(repo) + private val git = Git.open(File(".")) fun commitChanges() { - git.add().addFilepattern("src").call() - git.commit().setMessage(autoCommitMessage).call() + try { + git.commit().setAll(true).setAllowEmpty(false).setMessage(autoCommitMessage).call() + logger.info { "git repository is now at ${commitHash.take(7)}" } + } catch (e: EmptyCommitException) { + logger.info { "no changes" } + } } - fun tag(name: String) : Boolean { + fun tag(name: String): Boolean { val existing = git.tagList().call().find { it.name == name } if (existing != null) { git.tag().setName(name).call() @@ -34,11 +43,11 @@ class GitArchiver : Extension { return existing != null } - val commitHash:String - get() { - val id = repo.resolve(Constants.HEAD) - return id.name - } + val commitHash: String + get() { + val id = repo.resolve(Constants.HEAD) + return id.name + } override fun setup(program: Program) { val oldMetadataFunction = program.assetMetadata @@ -46,15 +55,18 @@ class GitArchiver : Extension { val oldMetadata = oldMetadataFunction() val commitHash = this.commitHash.take(7) program.assetProperties["git-commit-hash"] = commitHash - logger.info { "current commit hash '$commitHash'" } - AssetMetadata(oldMetadata.programName, "${oldMetadata.assetBaseName}$commitHash", program.assetProperties.mapValues { it.value }) + AssetMetadata( + oldMetadata.programName, + "${oldMetadata.assetBaseName}-$commitHash", + program.assetProperties.mapValues { it.value }) } - program.produceAssets.listen { - if (commitOnProduceAssets) { + program.requestAssets.listeners.add(0, { + if (commitOnRequestAssets) { commitChanges() } - } + }) + if (commitOnRun) { commitChanges() diff --git a/orx-jvm/orx-gui/src/main/kotlin/Gui.kt b/orx-jvm/orx-gui/src/main/kotlin/Gui.kt index 533beb9a..bc6d5cd6 100644 --- a/orx-jvm/orx-gui/src/main/kotlin/Gui.kt +++ b/orx-jvm/orx-gui/src/main/kotlin/Gui.kt @@ -2,6 +2,7 @@ package org.openrndr.extra.gui import com.google.gson.Gson import com.google.gson.reflect.TypeToken +import mu.KotlinLogging import org.openrndr.* import org.openrndr.color.ColorRGBa import org.openrndr.dialogs.getDefaultPathForContext @@ -67,11 +68,15 @@ private fun setAndPersist(compartmentLabel: String, property: KMutable state.parameterValues[property.name] = value } +private val logger = KotlinLogging.logger { } + @Suppress("unused", "UNCHECKED_CAST") class GUI : Extension { private var onChangeListener: ((name: String, value: Any?) -> Unit)? = null override var enabled = true + var listenToProduceAssetsEvent = true + var visible = true set(value) { if (field != value) { @@ -101,13 +106,19 @@ class GUI : Extension { val collapsed = ElementClass("collapsed") override fun setup(program: Program) { + program.produceAssets.listen { + if (listenToProduceAssetsEvent) { + val targetDir = File("gui-parameters") + if (!targetDir.exists()) { targetDir.mkdir() } + val targetFile = File(targetDir, "${it.assetMetadata.assetBaseName}.json") + logger.info("Saving parameters to '${targetFile.absolutePath}") + saveParameters(targetFile) + } + } + program.keyboard.keyDown.listen { if (it.key == KEY_F11) { - println("f11 pressed") visible = !visible - - - } if (it.key == KEY_LEFT_SHIFT) {