manifest_xml: Add Load and Unload methods

- do not call the internal method from subcmds/sync.py.
- use the correct default groups for submanifests.
- only sync the superproject when we are told to.

Change-Id: I81e4025058f1ee564732b9e17aecc522f6b5f626
Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/334639
Reviewed-by: Mike Frysinger <vapier@google.com>
Reviewed-by: Raman Tenneti <rtenneti@google.com>
Tested-by: LaMont Jones <lamontjones@google.com>
This commit is contained in:
LaMont Jones 2022-04-07 16:49:06 +00:00
parent 55ee304304
commit a2ff20dd20
3 changed files with 31 additions and 19 deletions

View File

@ -376,7 +376,7 @@ class XmlManifest(object):
if os.path.exists(mp.gitdir) and mp.use_worktree: if os.path.exists(mp.gitdir) and mp.use_worktree:
mp.use_git_worktrees = True mp.use_git_worktrees = True
self._Unload() self.Unload()
def Override(self, name, load_local_manifests=True): def Override(self, name, load_local_manifests=True):
"""Use a different manifest, just for the current instantiation. """Use a different manifest, just for the current instantiation.
@ -399,7 +399,7 @@ class XmlManifest(object):
try: try:
self._load_local_manifests = load_local_manifests self._load_local_manifests = load_local_manifests
self.manifestFile = path self.manifestFile = path
self._Unload() self.Unload()
self._Load() self._Load()
finally: finally:
self.manifestFile = old self.manifestFile = old
@ -970,7 +970,13 @@ https://gerrit.googlesource.com/git-repo/+/HEAD/docs/manifest-format.md
groups = self.GetDefaultGroupsStr() groups = self.GetDefaultGroupsStr()
return groups return groups
def _Unload(self): def Unload(self):
"""Unload the manifest.
If the manifest files have been changed since Load() was called, this will
cause the new/updated manifest to be used.
"""
self._loaded = False self._loaded = False
self._projects = {} self._projects = {}
self._paths = {} self._paths = {}
@ -984,6 +990,11 @@ https://gerrit.googlesource.com/git-repo/+/HEAD/docs/manifest-format.md
self.branch = None self.branch = None
self._manifest_server = None self._manifest_server = None
def Load(self):
"""Read the manifest into memory."""
# Do not expose internal arguments.
self._Load()
def _Load(self, initial_client=None, submanifest_depth=0): def _Load(self, initial_client=None, submanifest_depth=0):
if submanifest_depth > MAX_SUBMANIFEST_DEPTH: if submanifest_depth > MAX_SUBMANIFEST_DEPTH:
raise ManifestParseError('maximum submanifest depth %d exceeded.' % raise ManifestParseError('maximum submanifest depth %d exceeded.' %
@ -1030,7 +1041,7 @@ https://gerrit.googlesource.com/git-repo/+/HEAD/docs/manifest-format.md
except ManifestParseError as e: except ManifestParseError as e:
# There was a problem parsing, unload ourselves in case they catch # There was a problem parsing, unload ourselves in case they catch
# this error and try again later, we will show the correct error # this error and try again later, we will show the correct error
self._Unload() self.Unload()
raise e raise e
if self.IsMirror: if self.IsMirror:

View File

@ -3491,6 +3491,8 @@ class ManifestProject(MetaProject):
""" """
assert _kwargs_only == (), 'Sync only accepts keyword arguments.' assert _kwargs_only == (), 'Sync only accepts keyword arguments.'
groups = groups or 'default'
platform = platform or 'auto'
git_event_log = git_event_log or EventLog() git_event_log = git_event_log or EventLog()
if outer_manifest and self.manifest.is_submanifest: if outer_manifest and self.manifest.is_submanifest:
# In a multi-manifest checkout, use the outer manifest unless we are told # In a multi-manifest checkout, use the outer manifest unless we are told
@ -3783,17 +3785,16 @@ class ManifestProject(MetaProject):
) )
# Lastly, clone the superproject(s). # Lastly, clone the superproject(s).
if outer_manifest and not self.manifest.is_submanifest: if self.manifest.manifestProject.use_superproject:
for m in self.manifest.all_manifests:
sync_result = Superproject( sync_result = Superproject(
m, m.repodir, git_event_log, quiet=not verbose).Sync() self.manifest, self.manifest.repodir, git_event_log, quiet=not verbose).Sync()
if not sync_result.success: if not sync_result.success:
print(f'warning: git update of superproject for {m.path_prefix} failed, ' print('warning: git update of superproject for '
'repo sync will not ' f'{self.manifest.path_prefix} failed, repo sync will not use '
'use superproject to fetch source; while this error is not fatal, ' 'superproject to fetch source; while this error is not fatal, '
'and you can continue to run repo sync, please run repo init with ' 'and you can continue to run repo sync, please run repo init '
'the --no-use-superproject option to stop seeing this warning', 'with the --no-use-superproject option to stop seeing this '
file=sys.stderr) 'warning', file=sys.stderr)
if sync_result.fatal and use_superproject is not None: if sync_result.fatal and use_superproject is not None:
return False return False

View File

@ -694,10 +694,10 @@ later is required to fix a server side protocol bug.
load_local_manifests: Whether to load local manifests. load_local_manifests: Whether to load local manifests.
""" """
if manifest_name: if manifest_name:
# Override calls _Unload already # Override calls Unload already
self.manifest.Override(manifest_name, load_local_manifests=load_local_manifests) self.manifest.Override(manifest_name, load_local_manifests=load_local_manifests)
else: else:
self.manifest._Unload() self.manifest.Unload()
def UpdateProjectList(self, opt): def UpdateProjectList(self, opt):
new_project_paths = [] new_project_paths = []