- show Git editor file paths instead of the submitted git command - surface follow-up commit message editors during interactive rebase reword - add rename-commit UI tests for editor and amend-message solution paths - add broader embedded level solution scenarios for alternate Git workflows
61 lines
2.4 KiB
Kotlin
61 lines
2.4 KiB
Kotlin
package solutions.tretter.githugandroid
|
|
|
|
/**
|
|
* Port of the upstream ruby-githug `find_old_branch` level.
|
|
*
|
|
* Setup documents the repository shape the learner explores. Evaluation is kept
|
|
* state-based whenever the exercise changes repository objects; answer-only
|
|
* levels intentionally validate the answer entered at the prompt.
|
|
*/
|
|
internal fun findOldBranchLevel(): Level = level(
|
|
id = "find_old_branch",
|
|
title = "Find Old Branch",
|
|
description = "You have been working on a branch but got distracted by a major issue. Switch back to that branch even though you forgot the name of it.",
|
|
hints = listOf("Ever played with the `git reflog` command?"),
|
|
commandSuggestions = listOf("git checkout solve_world_hunger"),
|
|
setup = {
|
|
RepoState(
|
|
initialized = true,
|
|
headBranch = "master",
|
|
files = listOf(
|
|
GitFile("myfile.txt", "THIS TEXT DOESN'T MATTER\n", tracked = true),
|
|
GitFile("TODO", "FIND THE JOKER\n", tracked = true),
|
|
),
|
|
branches = mapOf(
|
|
"blowup_sun_for_ransom" to 1,
|
|
"cure_common_cold" to 1,
|
|
"master" to 2,
|
|
"solve_world_hunger" to 2,
|
|
),
|
|
)
|
|
},
|
|
nativeSetup = {
|
|
resetFiles()
|
|
write("myfile.txt", "THIS TEXT DOESN'T MATTER\n")
|
|
addCommit("initial commit", "myfile.txt")
|
|
git("branch", "blowup_sun_for_ransom")
|
|
git("branch", "cure_common_cold")
|
|
checkoutNew("solve_world_hunger")
|
|
write("TODO", "FIX WORLD HUNGER\n")
|
|
addCommit("commit todo", "TODO")
|
|
checkout("master")
|
|
write("TODO", "FIND THE JOKER\n")
|
|
addCommit("commit another todo", "TODO")
|
|
true
|
|
},
|
|
validator = repoPredicate { repo -> repo.headBranch == "solve_world_hunger" },
|
|
testCases = listOf(
|
|
levelTestCase("checkout old branch", "git checkout solve_world_hunger"),
|
|
levelTestCase("switch old branch", "git switch solve_world_hunger"),
|
|
),
|
|
setupChecks = listOf(
|
|
levelSetupCheck(
|
|
"upstream branch puzzle shape is present",
|
|
"find_old_branch should start on master with upstream distractor branches and solve_world_hunger.",
|
|
) { repo ->
|
|
repo.headBranch == "master" &&
|
|
repo.branches.keys == setOf("blowup_sun_for_ransom", "cure_common_cold", "master", "solve_world_hunger")
|
|
},
|
|
),
|
|
)
|