Auto-commit after successful build: update app gameplay/UI, improve build setup

Changed files:\napp/build.gradle.kts
app/src/main/java/solutions/tretter/githugandroid/GitEditorCommands.kt
app/src/main/java/solutions/tretter/githugandroid/GitHugApp.kt
app/src/main/java/solutions/tretter/githugandroid/GitMessageEditorDialog.kt
app/src/main/java/solutions/tretter/githugandroid/GitRuntime.kt
app/src/test/java/solutions/tretter/githugandroid/GitEditorCommandsTest.kt
This commit is contained in:
Joe Tretter
2026-05-02 23:03:00 -05:00
parent 01d10f31c2
commit 4963123b3b
6 changed files with 313 additions and 2 deletions

View File

@@ -0,0 +1,58 @@
package solutions.tretter.githugandroid
enum class GitEditorCommandKind {
COMMIT_MESSAGE,
TAG_MESSAGE,
}
data class GitEditorInvocation(
val command: String,
val kind: GitEditorCommandKind,
val title: String,
val initialContent: String = "",
)
fun parseGitEditorInvocation(command: String): GitEditorInvocation? {
val tokens = GitSandboxEngine.tokenizeCommand(command)
if (tokens.size < 2 || tokens[0] != "git") return null
return when (tokens[1]) {
"commit" -> parseGitCommitEditor(command, tokens.drop(2))
"tag" -> parseGitTagEditor(command, tokens.drop(2))
else -> null
}
}
private fun parseGitCommitEditor(command: String, arguments: List<String>): GitEditorInvocation? {
if (arguments.any { it == "--no-edit" || it == "-F" || it == "--file" || it.startsWith("--file=") }) return null
if (arguments.containsMessageOption()) return null
if ("-C" in arguments || "--reuse-message" in arguments || arguments.any { it.startsWith("--reuse-message=") }) return null
return GitEditorInvocation(
command = command,
kind = GitEditorCommandKind.COMMIT_MESSAGE,
title = "Edit Commit Message",
)
}
private fun parseGitTagEditor(command: String, arguments: List<String>): GitEditorInvocation? {
val needsMessage = arguments.any { it == "-a" || it == "-s" || it == "--annotate" || it == "--sign" }
if (!needsMessage) return null
if (arguments.any { it == "-F" || it == "--file" || it.startsWith("--file=") }) return null
if (arguments.containsMessageOption()) return null
return GitEditorInvocation(
command = command,
kind = GitEditorCommandKind.TAG_MESSAGE,
title = "Edit Tag Message",
)
}
private fun List<String>.containsMessageOption(): Boolean {
return any { argument ->
argument == "-m" ||
argument == "--message" ||
argument.startsWith("--message=") ||
(argument.startsWith("-") && !argument.startsWith("--") && argument.drop(1).contains('m'))
}
}