mirror of
https://gerrit.googlesource.com/git-repo
synced 2026-07-15 21:27:00 +00:00
project: handle corrupted projects in DeleteWorktree
Catch GitError from IsDirty() during DeleteWorktree so corrupted projects can be cleanly wiped instead of crashing. Bug: 515415221 Change-Id: Ic03ae77c30a722f9aa06f2220747251e0aea4ab7 Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/591001 Commit-Queue: Gavin Mak <gavinmak@google.com> Reviewed-by: Mike Frysinger <vapier@google.com> Tested-by: Gavin Mak <gavinmak@google.com>
This commit is contained in:
committed by
gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com
parent
e0bd39c691
commit
f7a24df00c
@@ -742,6 +742,30 @@ class ManifestPropertiesFetchedCorrectly(unittest.TestCase):
|
||||
result = fakeproj.Sync(use_local_gitdirs=True, mirror=True)
|
||||
self.assertFalse(result)
|
||||
|
||||
def test_delete_worktree_corrupted(self):
|
||||
"""Test DeleteWorktree gracefully handles corrupted projects."""
|
||||
for use_git_worktrees in (False, True):
|
||||
with self.subTest(use_git_worktrees=use_git_worktrees):
|
||||
with utils_for_test.TempGitTree() as tempdir:
|
||||
proj = _create_mock_project(tempdir)
|
||||
os.makedirs(os.path.join(tempdir, "worktree"))
|
||||
os.makedirs(os.path.join(tempdir, "gitdir"))
|
||||
proj.worktree = os.path.join(tempdir, "worktree")
|
||||
proj.gitdir = os.path.join(tempdir, "gitdir")
|
||||
proj.use_git_worktrees = use_git_worktrees
|
||||
|
||||
with mock.patch.object(
|
||||
proj,
|
||||
"IsDirty",
|
||||
side_effect=error.GitError("mock error"),
|
||||
):
|
||||
with self.assertRaises(project.DeleteWorktreeError):
|
||||
proj.DeleteWorktree(force=False)
|
||||
|
||||
self.assertTrue(proj.DeleteWorktree(force=True))
|
||||
self.assertFalse(os.path.exists(proj.worktree))
|
||||
self.assertFalse(os.path.exists(proj.gitdir))
|
||||
|
||||
|
||||
def _create_mock_project(
|
||||
tempdir,
|
||||
|
||||
Reference in New Issue
Block a user