From d7b95c2eaf4703153a568ad84d7278308274b746 Mon Sep 17 00:00:00 2001 From: Deepak kudi Date: Thu, 4 Jun 2026 08:43:27 +0530 Subject: [PATCH] fix(updater): sync dependency deletions --- .../workflows/dependencies/test_updater.py | 54 +++++++++++++++++++ .github/workflows/dependencies/updater.py | 8 ++- 2 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/dependencies/test_updater.py diff --git a/.github/workflows/dependencies/test_updater.py b/.github/workflows/dependencies/test_updater.py new file mode 100644 index 000000000..129e68339 --- /dev/null +++ b/.github/workflows/dependencies/test_updater.py @@ -0,0 +1,54 @@ +import os +import shutil +import tempfile +import unittest +from pathlib import Path +from unittest.mock import patch + +import updater + + +class DependencyApplyUpstreamChangesTest(unittest.TestCase): + def test_apply_upstream_changes_removes_stale_files(self): + with tempfile.TemporaryDirectory() as tmp: + tmp_path = Path(tmp) + worktree = tmp_path / "worktree" + source = tmp_path / "source" + target = worktree / "plugins" / "example" + + source.mkdir() + (source / "kept.zsh").write_text("new content") + (source / ".git").mkdir() + (source / ".github").mkdir() + + target.mkdir(parents=True) + (target / "kept.zsh").write_text("old content") + (target / "stale.zsh").write_text("stale content") + + def fake_clone(_remote_url, _ref, repo_dir, reclone=False): + shutil.copytree(source, repo_dir, dirs_exist_ok=True) + + dependency = updater.Dependency( + "plugins/example", + {"repo": "owner/repo", "branch": "main", "version": "old"}, + ) + + previous_cwd = os.getcwd() + try: + os.chdir(worktree) + with ( + patch.object(updater, "TMP_DIR", str(tmp_path / "tmp")), + patch.object(updater.Git, "clone", fake_clone), + ): + dependency._Dependency__apply_upstream_changes("new") + finally: + os.chdir(previous_cwd) + + self.assertEqual((target / "kept.zsh").read_text(), "new content") + self.assertFalse((target / "stale.zsh").exists()) + self.assertFalse((target / ".git").exists()) + self.assertFalse((target / ".github").exists()) + + +if __name__ == "__main__": + unittest.main() diff --git a/.github/workflows/dependencies/updater.py b/.github/workflows/dependencies/updater.py index 6fc93ad6e..54f6f4214 100644 --- a/.github/workflows/dependencies/updater.py +++ b/.github/workflows/dependencies/updater.py @@ -325,10 +325,16 @@ Check out the [list of changes]({status["compare_url"]}). # Copy files from upstream repo print(f"Copying files from {repo_dir} to {path}", file=sys.stderr) + if os.path.exists(path): + if os.path.islink(path) or os.path.isfile(path): + os.remove(path) + else: + shutil.rmtree(path) + + os.makedirs(os.path.dirname(path), exist_ok=True) shutil.copytree( repo_dir, path, - dirs_exist_ok=True, ignore=shutil.ignore_patterns(*GLOBAL_IGNORE), )