From f9a1895400dd1973f2748ed4d84109ccbd75abb5 Mon Sep 17 00:00:00 2001 From: Mike Frysinger Date: Thu, 12 Nov 2026 00:27:10 -0500 Subject: [PATCH] project: fix Project.HasChanges API mismatches The base Project class defined HasChanges as a function, but the MetaProject & RepoProject subclasses defined it as a property. Obviously this is bad & confusing, so standardize it. Change-Id: Ia3ac9d0592307366296b8ef991dc5d7bb2204490 Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/656723 Reviewed-by: Brian Gan Commit-Queue: Mike Frysinger Tested-by: Mike Frysinger --- project.py | 3 ++- subcmds/wipe.py | 2 +- tests/test_project.py | 2 +- tests/test_subcmds_wipe.py | 7 ++++--- 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/project.py b/project.py index 53aa5c39d..266ae566d 100644 --- a/project.py +++ b/project.py @@ -1211,6 +1211,7 @@ class Project: """Returns a list of strings, untracked files in the git tree.""" return self.work_git.LsOthers() + @property def HasChanges(self) -> bool: """Returns true if there are uncommitted changes.""" return bool(self.UncommittedFiles(get_all=False)) @@ -5826,7 +5827,7 @@ class MetaProject(Project): return False @property - def HasChanges(self): + def HasChanges(self) -> bool: """Has the remote received new commits not yet checked out?""" if not self.remote or not self.revisionExpr: return False diff --git a/subcmds/wipe.py b/subcmds/wipe.py index b55705d3a..978b4e38c 100644 --- a/subcmds/wipe.py +++ b/subcmds/wipe.py @@ -98,7 +98,7 @@ Examples: ) try: - if project.HasChanges(): + if project.HasChanges: uncommitted_projects.append(project.name) except error.GitError: uncommitted_projects.append(f"{project.name} (corrupted)") diff --git a/tests/test_project.py b/tests/test_project.py index 89fa1a5de..53442d0d9 100644 --- a/tests/test_project.py +++ b/tests/test_project.py @@ -838,7 +838,7 @@ class ProjectTests(unittest.TestCase): proj._GetStatusSnapshot = mock.MagicMock(return_value=status) proj.IsRebaseInProgress = mock.MagicMock(return_value=True) - self.assertTrue(proj.HasChanges()) + self.assertTrue(proj.HasChanges) self.assertEqual( ["rebase in progress"], proj.UncommittedFiles(get_all=False) ) diff --git a/tests/test_subcmds_wipe.py b/tests/test_subcmds_wipe.py index ae515e3d2..49f95416a 100644 --- a/tests/test_subcmds_wipe.py +++ b/tests/test_subcmds_wipe.py @@ -35,7 +35,10 @@ def _create_mock_project(tempdir, name, objdir_path=None, has_changes=False): os.makedirs(gitdir, exist_ok=True) os.makedirs(objdir, exist_ok=True) - proj = project.Project( + class MockProject(project.Project): + HasChanges = mock.PropertyMock(return_value=has_changes) + + proj = MockProject( manifest=mock.MagicMock(), name=name, remote=mock.MagicMock(), @@ -47,8 +50,6 @@ def _create_mock_project(tempdir, name, objdir_path=None, has_changes=False): revisionId="abcd", ) - proj.HasChanges = mock.MagicMock(return_value=has_changes) - def side_effect_delete_worktree(force=False, verbose=False): if os.path.exists(proj.worktree): shutil.rmtree(proj.worktree)