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 <brgan@google.com>
Commit-Queue: Mike Frysinger <vapier@google.com>
Tested-by: Mike Frysinger <vapier@google.com>
This commit is contained in:
Mike Frysinger authored and gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com committed 2026-11-12 09:17:27 -08:00
1 parent 13fe1b9d84
commit f9a1895400
4 files changed
+8 -6

No files matched your search

+2 -1
View File
@@ -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
+1 -1
View File
@@ -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)")
+1 -1
View File
@@ -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)
)
+4 -3
View File
@@ -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)