superproject: add projects from local manifest to local::<filename> group.
With repo sync --use-superproject, don't update the commit ids of every project
that comes from local manifest.
Tested the code with the following commands.
$ ./run_tests -v
+ Test with local.xml
1. repo init --use-superproject -u persistent-https://googleplex-android.git.corp.google.com/a/platform/manifest
2. cd .repo
cp -r /google/src/head/depot/google3/wireless/android/build_tools/translations/pipeline/local_manifests local_manifests
cd ..
local$ time repo_dev sync --use-superproject
NOTICE: --use-superproject is in beta; report any issues to the address described in `repo version`
.../local/.repo/exp-superproject/feb2c2847da5e274f3d530d5ab438af8-superproject.git: Initial setup for superproject completed.
...
Bug: [google internal] b/189360443
Bug: [google internal] b/189139268
Bug: https://crbug.com/gerrit/14499
Change-Id: Ideaf268c294e9b500b2b9726ffbd733dd8d63004
Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/308822
Tested-by: Raman Tenneti <rtenneti@google.com>
Reviewed-by: Mike Frysinger <vapier@google.com>
Reviewed-by: Jonathan Nieder <jrn@google.com>
diff --git a/tests/test_git_superproject.py b/tests/test_git_superproject.py
index 707f7da..ba61a3d 100644
--- a/tests/test_git_superproject.py
+++ b/tests/test_git_superproject.py
@@ -139,9 +139,9 @@
manifest_path = self._superproject._WriteManfiestFile()
self.assertIsNotNone(manifest_path)
with open(manifest_path, 'r') as fp:
- manifest_xml = fp.read()
+ manifest_xml_data = fp.read()
self.assertEqual(
- sort_attributes(manifest_xml),
+ sort_attributes(manifest_xml_data),
'<?xml version="1.0" ?><manifest>'
'<remote fetch="http://localhost" name="default-remote"/>'
'<default remote="default-remote" revision="refs/heads/main"/>'
@@ -166,9 +166,9 @@
manifest_path = self._superproject.UpdateProjectsRevisionId(projects)
self.assertIsNotNone(manifest_path)
with open(manifest_path, 'r') as fp:
- manifest_xml = fp.read()
+ manifest_xml_data = fp.read()
self.assertEqual(
- sort_attributes(manifest_xml),
+ sort_attributes(manifest_xml_data),
'<?xml version="1.0" ?><manifest>'
'<remote fetch="http://localhost" name="default-remote"/>'
'<default remote="default-remote" revision="refs/heads/main"/>'
@@ -178,6 +178,54 @@
'<superproject name="superproject"/>'
'</manifest>')
+ def test_superproject_update_project_revision_id_from_local_manifest_group(self):
+ """Test update of commit ids of a manifest that have local manifest no superproject group."""
+ local_group = manifest_xml.LOCAL_MANIFEST_GROUP_PREFIX + ':local'
+ manifest = self.getXmlManifest("""
+<manifest>
+ <remote name="default-remote" fetch="http://localhost" />
+ <remote name="goog" fetch="http://localhost2" />
+ <default remote="default-remote" revision="refs/heads/main" />
+ <superproject name="superproject"/>
+ <project path="vendor/x" name="platform/vendor/x" remote="goog"
+ groups=\"""" + local_group + """
+ " revision="master-with-vendor" clone-depth="1" />
+ <project path="art" name="platform/art" groups="notdefault,platform-""" + self.platform + """
+ " /></manifest>
+""")
+ self.maxDiff = None
+ self._superproject = git_superproject.Superproject(manifest, self.repodir)
+ self.assertEqual(len(self._superproject._manifest.projects), 2)
+ projects = self._superproject._manifest.projects
+ data = ('160000 commit 2c2724cb36cd5a9cec6c852c681efc3b7c6b86ea\tart\x00'
+ '160000 commit e9d25da64d8d365dbba7c8ee00fe8c4473fe9a06\tbootable/recovery\x00')
+ with mock.patch.object(self._superproject, '_Init', return_value=True):
+ with mock.patch.object(self._superproject, '_Fetch', return_value=True):
+ with mock.patch.object(self._superproject,
+ '_LsTree',
+ return_value=data):
+ # Create temporary directory so that it can write the file.
+ os.mkdir(self._superproject._superproject_path)
+ manifest_path = self._superproject.UpdateProjectsRevisionId(projects)
+ self.assertIsNotNone(manifest_path)
+ with open(manifest_path, 'r') as fp:
+ manifest_xml_data = fp.read()
+ # Verify platform/vendor/x's project revision hasn't changed.
+ self.assertEqual(
+ sort_attributes(manifest_xml_data),
+ '<?xml version="1.0" ?><manifest>'
+ '<remote fetch="http://localhost" name="default-remote"/>'
+ '<remote fetch="http://localhost2" name="goog"/>'
+ '<default remote="default-remote" revision="refs/heads/main"/>'
+ '<project groups="notdefault,platform-' + self.platform + '" '
+ 'name="platform/art" path="art" '
+ 'revision="2c2724cb36cd5a9cec6c852c681efc3b7c6b86ea"/>'
+ '<project clone-depth="1" groups="' + local_group + '" '
+ 'name="platform/vendor/x" path="vendor/x" remote="goog" '
+ 'revision="master-with-vendor"/>'
+ '<superproject name="superproject"/>'
+ '</manifest>')
+
if __name__ == '__main__':
unittest.main()