From 9b72cf2ba5c00bee726aa4bddbb84be554294284 Mon Sep 17 00:00:00 2001 From: LaMont Jones Date: Tue, 29 Mar 2022 21:54:22 +0000 Subject: [PATCH] project: Isolate ManifestProject from RepoProject Create RepoProject and ManifestProject, inheriting from MetaProject, with methods separated for isolation and clarity. Change-Id: Ic1d6efc65c99470290fea612e2abaf8670d199f4 Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/334139 Tested-by: LaMont Jones Reviewed-by: Mike Frysinger --- manifest_xml.py | 11 ++++----- project.py | 59 ++++++++++++++++++++++++++----------------------- 2 files changed, 37 insertions(+), 33 deletions(-) diff --git a/manifest_xml.py b/manifest_xml.py index a14cc526..d3e952a5 100644 --- a/manifest_xml.py +++ b/manifest_xml.py @@ -25,7 +25,8 @@ import gitc_utils from git_config import GitConfig, IsId from git_refs import R_HEADS, HEAD import platform_utils -from project import Annotation, RemoteSpec, Project, MetaProject +from project import (Annotation, RemoteSpec, Project, RepoProject, + ManifestProject) from error import (ManifestParseError, ManifestInvalidPathError, ManifestInvalidRevisionError) from wrapper import Wrapper @@ -360,7 +361,7 @@ class XmlManifest(object): # multi-tree. self._outer_client = outer_client or self - self.repoProject = MetaProject(self, 'repo', + self.repoProject = RepoProject(self, 'repo', gitdir=os.path.join(repodir, 'repo/.git'), worktree=os.path.join(repodir, 'repo')) @@ -953,9 +954,9 @@ https://gerrit.googlesource.com/git-repo/+/HEAD/docs/manifest-format.md def SubmanifestProject(self, submanifest_path): """Return a manifestProject for a submanifest.""" subdir = self.SubmanifestInfoDir(submanifest_path) - mp = MetaProject(self, 'manifests', - gitdir=os.path.join(subdir, 'manifests.git'), - worktree=os.path.join(subdir, 'manifests')) + mp = ManifestProject(self, 'manifests', + gitdir=os.path.join(subdir, 'manifests.git'), + worktree=os.path.join(subdir, 'manifests')) return mp def GetDefaultGroupsStr(self): diff --git a/project.py b/project.py index 480dac63..ed58c956 100644 --- a/project.py +++ b/project.py @@ -3284,9 +3284,7 @@ class SyncBuffer(object): class MetaProject(Project): - - """A special project housed under .repo. - """ + """A special project housed under .repo.""" def __init__(self, manifest, name, gitdir, worktree): Project.__init__(self, @@ -3310,33 +3308,9 @@ class MetaProject(Project): self.revisionExpr = base self.revisionId = None - def MetaBranchSwitch(self, submodules=False): - """ Prepare MetaProject for manifest branch switch - """ - - # detach and delete manifest branch, allowing a new - # branch to take over - syncbuf = SyncBuffer(self.config, detach_head=True) - self.Sync_LocalHalf(syncbuf, submodules=submodules) - syncbuf.Finish() - - return GitCommand(self, - ['update-ref', '-d', 'refs/heads/default'], - capture_stdout=True, - capture_stderr=True).Wait() == 0 - - @property - def LastFetch(self): - try: - fh = os.path.join(self.gitdir, 'FETCH_HEAD') - return os.path.getmtime(fh) - except OSError: - return 0 - @property def HasChanges(self): - """Has the remote received new commits not yet checked out? - """ + """Has the remote received new commits not yet checked out?""" if not self.remote or not self.revisionExpr: return False @@ -3354,3 +3328,32 @@ class MetaProject(Project): elif self._revlist(not_rev(HEAD), revid): return True return False + + +class RepoProject(MetaProject): + """The MetaProject for repo itself.""" + + @property + def LastFetch(self): + try: + fh = os.path.join(self.gitdir, 'FETCH_HEAD') + return os.path.getmtime(fh) + except OSError: + return 0 + +class ManifestProject(MetaProject): + """The MetaProject for manifests.""" + + def MetaBranchSwitch(self, submodules=False): + """Prepare for manifest branch switch.""" + + # detach and delete manifest branch, allowing a new + # branch to take over + syncbuf = SyncBuffer(self.config, detach_head=True) + self.Sync_LocalHalf(syncbuf, submodules=submodules) + syncbuf.Finish() + + return GitCommand(self, + ['update-ref', '-d', 'refs/heads/default'], + capture_stdout=True, + capture_stderr=True).Wait() == 0