From feb28914bd17aacc2d251516e504a33f991f86c4 Mon Sep 17 00:00:00 2001 From: Raman Tenneti Date: Sun, 2 May 2021 19:47:29 -0700 Subject: superproject: Don't update the commit ids of projects if remote is different. 1) Skip setting the revision id (commit id) for the projects whose remote doesn't match superproject's remote. 2) exp-superproject/superproject_override.xml includes local_manfiest's projects. When we load this XML, don't reload projects from local.xml (otherwise we will get duplicate projects errors). Tested the code with the following commands. $ ./run_tests -v + Test with local.xml $ repo_dev init -u sso://android.git.corp.google.com/platform/manifest -b master --use-superproject --partial-clone --clone-filter=blob:limit=10M && mkdir -p .repo/local_manifests && (gcertstatus -quiet=true || gcert) && ln -s /google/src/head/depot/google3/wireless/android/build_tools/aosp/manifests/mirror-aosp-master-with-vendor/local.xml .repo/local_manifests/local.xml $ repo_dev sync -c -j8 + Test without local.xml $ repo_dev init -u sso://android.git.corp.google.com/platform/manifest -b master --partial-clone --clone-filter=blob:limit=10M --repo-rev=main --use-superproject $ repo_dev sync -c -j8 Bug: [google internal] b/186395810 Change-Id: I4e9d4ac2d94a9fc0cef0ccd787b6310758009e86 Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/304882 Tested-by: Raman Tenneti Reviewed-by: Mike Frysinger --- subcmds/sync.py | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) (limited to 'subcmds/sync.py') diff --git a/subcmds/sync.py b/subcmds/sync.py index 0c386add..9f8de9e5 100644 --- a/subcmds/sync.py +++ b/subcmds/sync.py @@ -277,7 +277,7 @@ later is required to fix a server side protocol bug. """Returns True if current-branch or use-superproject options are enabled.""" return opt.current_branch_only or self._UseSuperproject(opt) - def _UpdateProjectsRevisionId(self, opt, args): + def _UpdateProjectsRevisionId(self, opt, args, load_local_manifests): """Update revisionId of every project with the SHA from superproject. This function updates each project's revisionId with SHA from superproject. @@ -287,6 +287,7 @@ later is required to fix a server side protocol bug. opt: Program options returned from optparse. See _Options(). args: Arguments to pass to GetProjects. See the GetProjects docstring for details. + load_local_manifests: Whether to load local manifests. Returns: Returns path to the overriding manifest file. @@ -302,7 +303,7 @@ later is required to fix a server side protocol bug. print('error: Update of revsionId from superproject has failed', file=sys.stderr) sys.exit(1) - self._ReloadManifest(manifest_path) + self._ReloadManifest(manifest_path, load_local_manifests) return manifest_path def _FetchProjectList(self, opt, projects): @@ -565,10 +566,18 @@ later is required to fix a server side protocol bug. t.join() pm.end() - def _ReloadManifest(self, manifest_name=None): + def _ReloadManifest(self, manifest_name=None, load_local_manifests=True): + """Reload the manfiest from the file specified by the |manifest_name|. + + It unloads the manifest if |manifest_name| is None. + + Args: + manifest_name: Manifest file to be reloaded. + load_local_manifests: Whether to load local manifests. + """ if manifest_name: # Override calls _Unload already - self.manifest.Override(manifest_name) + self.manifest.Override(manifest_name, load_local_manifests=load_local_manifests) else: self.manifest._Unload() @@ -857,8 +866,9 @@ later is required to fix a server side protocol bug. else: self._UpdateManifestProject(opt, mp, manifest_name) + load_local_manifests = not self.manifest.HasLocalManifests if self._UseSuperproject(opt): - manifest_name = self._UpdateProjectsRevisionId(opt, args) + manifest_name = self._UpdateProjectsRevisionId(opt, args, load_local_manifests) if self.gitc_manifest: gitc_manifest_projects = self.GetProjects(args, @@ -926,7 +936,7 @@ later is required to fix a server side protocol bug. # Iteratively fetch missing and/or nested unregistered submodules previously_missing_set = set() while True: - self._ReloadManifest(manifest_name) + self._ReloadManifest(manifest_name, load_local_manifests) all_projects = self.GetProjects(args, missing_ok=True, submodules_ok=opt.fetch_submodules) -- cgit v1.2.3-54-g00ecf