Accept alternate squash solution

- validate the upstream requirement of exactly two commits
- accept soft reset followed by a replacement commit
- reject resetting to one commit without creating the squashed commit
- document squash validation parity
This commit is contained in:
Joe Tretter
2026-06-08 15:12:28 -05:00
parent 06c60356e5
commit a70350000c
3 changed files with 12 additions and 4 deletions

View File

@@ -28,11 +28,19 @@ internal fun squashLevel(): Level = level(
addCommit("Updating README (squash this commit into Adding README)", "README")
true
},
validator = repoPredicate { repo -> repo.commits.size <= 2 && repo.commits.any { it.message == "Adding README" } },
validator = repoPredicate { repo -> repo.commits.size == 2 },
testCases = listOf(
levelTestCase(
"interactive squash",
"GIT_SEQUENCE_EDITOR=\"sed -i '2,\$s/^pick /squash /'\" GIT_EDITOR=true git rebase -i HEAD~4",
),
levelTestCase(
"soft reset and recommit",
"git reset --soft HEAD~4",
"git commit -m \"New commit message\"",
),
),
negativeTestCases = listOf(
levelTestCase("reset without replacement commit", "git reset --soft HEAD~4"),
),
)