diff options
author | Zuul <zuul@review.opendev.org> | 2023-02-17 23:07:01 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2023-02-17 23:07:01 +0000 |
commit | d57942a41b9077152b29e0f40f30e904a62a8fbc (patch) | |
tree | 7467f1a5c41b7664af113f2074865cafc2ee191e /tests | |
parent | 5a2017ed56e64d5ca38c1b13c8e03a2dcfe3abb4 (diff) | |
parent | ac534577c3b001a6d70dd54d57b1e604b93a70f7 (diff) | |
download | zuul-d57942a41b9077152b29e0f40f30e904a62a8fbc.tar.gz |
Merge "Cleanup old rebase-merge dirs on repo reset"8.2.0
Diffstat (limited to 'tests')
-rw-r--r-- | tests/unit/test_merger_repo.py | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/tests/unit/test_merger_repo.py b/tests/unit/test_merger_repo.py index 7806db347..f907cb8b4 100644 --- a/tests/unit/test_merger_repo.py +++ b/tests/unit/test_merger_repo.py @@ -163,6 +163,64 @@ class TestMergerRepo(ZuulTestCase): work_repo.reset() work_repo.checkout("foobar") + def test_rebase_merge_conflict_abort(self): + """Test that a failed rebase is properly aborted and related + directories are cleaned up.""" + parent_path = os.path.join(self.upstream_root, 'org/project1') + parent_repo = git.Repo(parent_path) + parent_repo.create_head("feature") + + files = {"test.txt": "master"} + self.create_commit("org/project1", files=files, head="master", + message="Add master file") + + files = {"test.txt": "feature"} + self.create_commit("org/project1", files=files, head="feature", + message="Add feature file") + + work_repo = Repo(parent_path, self.workspace_root, + "none@example.org", "User Name", "0", "0") + + item = {"ref": "refs/heads/feature"} + # We expect the rebase to fail because of a conflict, but the + # rebase will be aborted. + with testtools.ExpectedException(git.exc.GitCommandError): + work_repo.rebaseMerge(item, "master") + + # Assert that the failed rebase doesn't leave any temporary + # directories behind. + self.assertFalse( + os.path.exists(f"{work_repo.local_path}/.git/rebase-merge")) + self.assertFalse( + os.path.exists(f"{work_repo.local_path}/.git/rebase-apply")) + + def test_rebase_merge_conflict_reset_cleanup(self): + """Test temporary directories of a failed rebase merge are + removed on repo reset.""" + parent_path = os.path.join(self.upstream_root, 'org/project1') + parent_repo = git.Repo(parent_path) + parent_repo.create_head("feature") + + files = {"master.txt": "master"} + self.create_commit("org/project1", files=files, head="master", + message="Add master file") + + files = {"feature.txt": "feature"} + self.create_commit("org/project1", files=files, head="feature", + message="Add feature file") + + work_repo = Repo(parent_path, self.workspace_root, + "none@example.org", "User Name", "0", "0") + + # Simulate leftovers from a failed rebase + os.mkdir(f"{work_repo.local_path}/.git/rebase-merge") + os.mkdir(f"{work_repo.local_path}/.git/rebase-apply") + + # Resetting the repo should clean up any leaked directories + work_repo.reset() + item = {"ref": "refs/heads/feature"} + work_repo.rebaseMerge(item, "master") + def test_set_refs(self): parent_path = os.path.join(self.upstream_root, 'org/project1') remote_sha = self.create_commit('org/project1') |