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>
diff --git a/manifest_xml.py b/manifest_xml.py
index 02f09db..8718dc5 100644
--- a/manifest_xml.py
+++ b/manifest_xml.py
@@ -376,7 +376,7 @@
if os.path.exists(mp.gitdir) and mp.use_worktree:
mp.use_git_worktrees = True
- self._Unload()
+ self.Unload()
def Override(self, name, load_local_manifests=True):
"""Use a different manifest, just for the current instantiation.
@@ -399,7 +399,7 @@
try:
self._load_local_manifests = load_local_manifests
self.manifestFile = path
- self._Unload()
+ self.Unload()
self._Load()
finally:
self.manifestFile = old
@@ -970,7 +970,13 @@
groups = self.GetDefaultGroupsStr()
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._projects = {}
self._paths = {}
@@ -984,6 +990,11 @@
self.branch = 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):
if submanifest_depth > MAX_SUBMANIFEST_DEPTH:
raise ManifestParseError('maximum submanifest depth %d exceeded.' %
@@ -1030,7 +1041,7 @@
except ManifestParseError as e:
# There was a problem parsing, unload ourselves in case they catch
# this error and try again later, we will show the correct error
- self._Unload()
+ self.Unload()
raise e
if self.IsMirror:
diff --git a/project.py b/project.py
index a60a858..b8d834a 100644
--- a/project.py
+++ b/project.py
@@ -3491,6 +3491,8 @@
"""
assert _kwargs_only == (), 'Sync only accepts keyword arguments.'
+ groups = groups or 'default'
+ platform = platform or 'auto'
git_event_log = git_event_log or EventLog()
if outer_manifest and self.manifest.is_submanifest:
# In a multi-manifest checkout, use the outer manifest unless we are told
@@ -3783,19 +3785,18 @@
)
# Lastly, clone the superproject(s).
- if outer_manifest and not self.manifest.is_submanifest:
- for m in self.manifest.all_manifests:
- sync_result = Superproject(
- m, m.repodir, git_event_log, quiet=not verbose).Sync()
- if not sync_result.success:
- print(f'warning: git update of superproject for {m.path_prefix} failed, '
- 'repo sync will not '
- 'use superproject to fetch source; while this error is not fatal, '
- 'and you can continue to run repo sync, please run repo init with '
- 'the --no-use-superproject option to stop seeing this warning',
- file=sys.stderr)
- if sync_result.fatal and use_superproject is not None:
- return False
+ if self.manifest.manifestProject.use_superproject:
+ sync_result = Superproject(
+ self.manifest, self.manifest.repodir, git_event_log, quiet=not verbose).Sync()
+ if not sync_result.success:
+ print('warning: git update of superproject for '
+ f'{self.manifest.path_prefix} failed, repo sync will not use '
+ 'superproject to fetch source; while this error is not fatal, '
+ 'and you can continue to run repo sync, please run repo init '
+ 'with the --no-use-superproject option to stop seeing this '
+ 'warning', file=sys.stderr)
+ if sync_result.fatal and use_superproject is not None:
+ return False
return True
diff --git a/subcmds/sync.py b/subcmds/sync.py
index c165515..baee6b2 100644
--- a/subcmds/sync.py
+++ b/subcmds/sync.py
@@ -694,10 +694,10 @@
load_local_manifests: Whether to load local manifests.
"""
if manifest_name:
- # Override calls _Unload already
+ # Override calls Unload already
self.manifest.Override(manifest_name, load_local_manifests=load_local_manifests)
else:
- self.manifest._Unload()
+ self.manifest.Unload()
def UpdateProjectList(self, opt):
new_project_paths = []