diff --git a/bin/git-check-assertions b/bin/git-check-assertions index 5501358..4ebc513 100755 --- a/bin/git-check-assertions +++ b/bin/git-check-assertions @@ -84,6 +84,7 @@ for commit_hash in "${commits[@]}"; do printf '%s\n' "$block" | sed 's/^/> /' if ! bash -euo pipefail -c "$block"; then echo "git-check-assertions block failed in $commit_hash" >&2 + git restore -q . echo "Returning to $orig_ref" git checkout -q "$orig_ref" exit 1 diff --git a/test/git-check-assertions.bats b/test/git-check-assertions.bats index 2e45490..1755820 100755 --- a/test/git-check-assertions.bats +++ b/test/git-check-assertions.bats @@ -99,6 +99,16 @@ commit_with_assertion() { assert_size_zero ../test } +@test "should restore worktree after a failure" { + git checkout -b feature + commit_with_assertion $'echo blah >> readme\nexit 3' + + run git-check-assertions + + assert_failure + assert_size_zero readme +} + @test "assertions should run against the version of the code inside of the commit" { git checkout -b feature echo commit1 >readme