diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 8be60e9..7401455 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -11,8 +11,8 @@ android { applicationId = "solutions.tretter.githugandroid" minSdk = 26 targetSdk = 34 - versionCode = 74 - versionName = "0.1.73" + versionCode = 75 + versionName = "0.1.74" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" vectorDrawables.useSupportLibrary = true diff --git a/app/src/main/java/solutions/tretter/githugandroid/GameModels.kt b/app/src/main/java/solutions/tretter/githugandroid/GameModels.kt index b3b1a34..bceae17 100644 --- a/app/src/main/java/solutions/tretter/githugandroid/GameModels.kt +++ b/app/src/main/java/solutions/tretter/githugandroid/GameModels.kt @@ -28,6 +28,7 @@ data class RepoState( val currentDir: String = ".", val tags: List = emptyList(), val remotes: Map = emptyMap(), + val config: Map = emptyMap(), ) data class Level( @@ -53,6 +54,7 @@ val RepoStateSaver = listSaver( state.currentDir, state.tags, state.remotes.flatMap { listOf(it.key, it.value) }, + state.config.flatMap { listOf(it.key, it.value) }, ) }, restore = { saved -> @@ -63,6 +65,7 @@ val RepoStateSaver = listSaver( val branchParts = saved[4] as List<*> val tags = saved[6] as List<*> val remoteParts = saved[7] as List<*> + val configParts = saved.getOrNull(8) as? List<*> ?: emptyList() RepoState( initialized = initialized, headBranch = headBranch, @@ -81,6 +84,7 @@ val RepoStateSaver = listSaver( currentDir = saved[5] as String, tags = tags.filterIsInstance(), remotes = remoteParts.chunked(2).associate { (it[0] as String) to (it[1] as String) }, + config = configParts.chunked(2).associate { (it[0] as String) to (it[1] as String) }, ) } ) @@ -117,6 +121,11 @@ object GitSandboxEngine { !repo.initialized -> repo to listOf("fatal: not a git repository") parts.size >= 2 && parts[1] == "help" -> repo to commandReferenceLines() parts.size >= 2 && parts[1] == "status" -> repo to statusLines(repo) + parts.size >= 4 && parts[1] == "config" -> { + val key = parts[2] + val value = parts.drop(3).joinToString(" ") + repo.copy(config = repo.config + (key to value)) to emptyList() + } parts.size >= 3 && parts[1] == "add" -> { val target = parts[2] if (target != "." && repo.files.none { it.name == target }) { diff --git a/app/src/main/java/solutions/tretter/githugandroid/levels/CoreLevels.kt b/app/src/main/java/solutions/tretter/githugandroid/levels/CoreLevels.kt index 4e3f215..abd3865 100644 --- a/app/src/main/java/solutions/tretter/githugandroid/levels/CoreLevels.kt +++ b/app/src/main/java/solutions/tretter/githugandroid/levels/CoreLevels.kt @@ -17,7 +17,9 @@ internal fun coreLevels(): List = listOf( hints = listOf("Use `git config user.name ...` and `git config user.email ...`."), commandSuggestions = listOf("git config user.name GitHug", "git config user.email githug@example.com"), setup = { RepoState(initialized = true, branches = mapOf("master" to 0)) }, - validator = repoPredicate { it.initialized }, + validator = repoPredicate { repo -> + repo.config["user.name"] == "GitHug" && repo.config["user.email"] == "githug@example.com" + }, ), level( id = "add",