def test_superproject_update_project_revision_id_no_superproject_tag(self): """Test update of commit ids of a manifest without superproject tag.""" manifest = self.getXmlManifest(""" <manifest> <remote name="default-remote" fetch="http://localhost" /> <default remote="default-remote" revision="refs/heads/main" /> <project name="test-name"/> </manifest> """) self.maxDiff = None self._superproject = git_superproject.Superproject( manifest, self.repodir, self.git_event_log) self.assertEqual(len(self._superproject._manifest.projects), 1) projects = self._superproject._manifest.projects project = projects[0] project.SetRevisionId('ABCDEF') update_result = self._superproject.UpdateProjectsRevisionId(projects) self.assertIsNone(update_result.manifest_path) self.assertFalse(update_result.fatal) self.verifyErrorEvent() self.assertEqual( sort_attributes(manifest.ToXml().toxml()), '<?xml version="1.0" ?><manifest>' '<remote fetch="http://localhost" name="default-remote"/>' '<default remote="default-remote" revision="refs/heads/main"/>' '<project name="test-name" revision="ABCDEF" upstream="refs/heads/main"/>' '</manifest>')
def test_superproject_update_project_revision_id(self): """Test with LsTree being a mock.""" self.assertEqual(len(self._superproject._manifest.projects), 1) 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) update_result = self._superproject.UpdateProjectsRevisionId( projects) self.assertIsNotNone(update_result.manifest_path) self.assertFalse(update_result.fatal) with open(update_result.manifest_path, 'r') as fp: manifest_xml_data = fp.read() self.assertEqual( 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"/>' '<project groups="notdefault,platform-' + self.platform + '" ' 'name="platform/art" path="art" ' 'revision="2c2724cb36cd5a9cec6c852c681efc3b7c6b86ea" upstream="refs/heads/main"/>' '<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.git_event_log) self.assertEqual(len(self._superproject._manifest.projects), 2) projects = self._superproject._manifest.projects data = ( '160000 commit 2c2724cb36cd5a9cec6c852c681efc3b7c6b86ea\tart\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) update_result = self._superproject.UpdateProjectsRevisionId( projects) self.assertIsNotNone(update_result.manifest_path) self.assertFalse(update_result.fatal) with open(update_result.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" upstream="refs/heads/main"/>' '<project clone-depth="1" groups="' + local_group + '" ' 'name="platform/vendor/x" path="vendor/x" remote="goog" ' 'revision="master-with-vendor"/>' '<superproject name="superproject"/>' '</manifest>')
def test_superproject_update_project_revision_id_with_pinned_manifest( self): """Test update of commit ids of a pinned manifest.""" manifest = self.getXmlManifest(""" <manifest> <remote name="default-remote" fetch="http://localhost" /> <default remote="default-remote" revision="refs/heads/main" /> <superproject name="superproject"/> <project path="vendor/x" name="platform/vendor/x" revision="" /> <project path="vendor/y" name="platform/vendor/y" revision="52d3c9f7c107839ece2319d077de0cd922aa9d8f" /> <project path="art" name="platform/art" groups="notdefault,platform-""" + self.platform + """ " /></manifest> """) self.maxDiff = None self._superproject = git_superproject.Superproject( manifest, self.repodir, self.git_event_log) self.assertEqual(len(self._superproject._manifest.projects), 3) projects = self._superproject._manifest.projects data = ( '160000 commit 2c2724cb36cd5a9cec6c852c681efc3b7c6b86ea\tart\x00' '160000 commit e9d25da64d8d365dbba7c8ee00fe8c4473fe9a06\tvendor/x\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) update_result = self._superproject.UpdateProjectsRevisionId( projects) self.assertIsNotNone(update_result.manifest_path) self.assertFalse(update_result.fatal) with open(update_result.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"/>' '<default remote="default-remote" revision="refs/heads/main"/>' '<project groups="notdefault,platform-' + self.platform + '" ' 'name="platform/art" path="art" ' 'revision="2c2724cb36cd5a9cec6c852c681efc3b7c6b86ea" upstream="refs/heads/main"/>' '<project name="platform/vendor/x" path="vendor/x" ' 'revision="e9d25da64d8d365dbba7c8ee00fe8c4473fe9a06" upstream="refs/heads/main"/>' '<project name="platform/vendor/y" path="vendor/y" ' 'revision="52d3c9f7c107839ece2319d077de0cd922aa9d8f"/>' '<superproject name="superproject"/>' '</manifest>')
def test_superproject_update_project_revision_id_with_different_remotes(self): """Test update of commit ids of a manifest with mutiple remotes.""" 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="vendor" 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 = fp.read() self.assertEqual( sort_attributes(manifest_xml), '<?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="vendor" ' 'name="platform/vendor/x" path="vendor/x" remote="goog" ' 'revision="master-with-vendor"/>' '<superproject name="superproject"/>' '</manifest>')
def test_superproject_write_manifest_file(self): """Test with writing manifest to a file after setting revisionId.""" self.assertEqual(len(self._superproject._manifest.projects), 1) project = self._superproject._manifest.projects[0] project.SetRevisionId('ABCDEF') # Create temporary directory so that it can write the file. os.mkdir(self._superproject._superproject_path) manifest_path = self._superproject._WriteManifestFile() self.assertIsNotNone(manifest_path) with open(manifest_path, 'r') as fp: manifest_xml_data = fp.read() self.assertEqual( 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"/>' '<project groups="notdefault,platform-' + self.platform + '" ' 'name="platform/art" path="art" revision="ABCDEF" upstream="refs/heads/main"/>' '<superproject name="superproject"/>' '</manifest>')