From 1c3f57e8f13d4f6dc818bdf06c3a40f768ef1ce5 Mon Sep 17 00:00:00 2001 From: Raman Tenneti Date: Tue, 4 May 2021 12:32:13 -0700 Subject: [PATCH] manifest_xml: initial support for It will be used to let manifest authors self-register contact info. This element can be repeated, and any later entries will clobber earlier ones. This would allow manifest authors who extend manifests to specify their own contact info. It would have 1 required attribute: bugurl. "bugurl" specifies the URL to file a bug against the manifest owner. TODO: This CL only implements the parsing logic and further work will be in followup CLs. Tested the code with the following commands. $ ./run_tests tests/test_manifest_xml.py $ ./run_tests -v Bug: [google internal] b/186220520. Change-Id: I47e765ba2dab5cdf850191129f4d4cd6b803f451 Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/305203 Tested-by: Raman Tenneti Reviewed-by: Mike Frysinger --- docs/manifest-format.md | 21 ++++++++++++-- manifest_xml.py | 17 +++++++++++ tests/test_manifest_xml.py | 59 ++++++++++++++++++++++++-------------- 3 files changed, 74 insertions(+), 23 deletions(-) diff --git a/docs/manifest-format.md b/docs/manifest-format.md index da83d0dd..0752a8cd 100644 --- a/docs/manifest-format.md +++ b/docs/manifest-format.md @@ -31,6 +31,7 @@ following DTD: extend-project*, repo-hooks?, superproject?, + contactinfo?, include*)> @@ -100,10 +101,13 @@ following DTD: - + + + + @@ -405,7 +409,7 @@ Attribute `enabled-list`: List of hooks to use, whitespace or comma separated. ### Element superproject *** - *Note*: This is currently a WIP. +*Note*: This is currently a WIP. *** NB: See the [git superprojects documentation]( @@ -424,6 +428,19 @@ same meaning as project's name attribute. See the Attribute `remote`: Name of a previously defined remote element. If not supplied the remote given by the default element is used. +### Element contactinfo + +*** +*Note*: This is currently a WIP. +*** + +This element is used to let manifest authors self-register contact info. +It has "bugurl" as a required atrribute. This element can be repeated, +and any later entries will clobber earlier ones. This would allow manifest +authors who extend manifests to specify their own contact info. + +Attribute `bugurl`: The URL to file a bug against the manifest owner. + ### Element include This element provides the capability of including another manifest diff --git a/manifest_xml.py b/manifest_xml.py index 73556a5e..e1d630b3 100644 --- a/manifest_xml.py +++ b/manifest_xml.py @@ -479,6 +479,12 @@ https://gerrit.googlesource.com/git-repo/+/HEAD/docs/manifest-format.md e.setAttribute('remote', remoteName) root.appendChild(e) + if self._contactinfo: + root.appendChild(doc.createTextNode('')) + e = doc.createElement('contactinfo') + e.setAttribute('bugurl', self._contactinfo['bugurl']) + root.appendChild(e) + return doc def ToDict(self, **kwargs): @@ -490,6 +496,7 @@ https://gerrit.googlesource.com/git-repo/+/HEAD/docs/manifest-format.md 'manifest-server', 'repo-hooks', 'superproject', + 'contactinfo', } # Elements that may be repeated. MULTI_ELEMENTS = { @@ -565,6 +572,11 @@ https://gerrit.googlesource.com/git-repo/+/HEAD/docs/manifest-format.md self._Load() return self._superproject + @property + def contactinfo(self): + self._Load() + return self._contactinfo + @property def notice(self): self._Load() @@ -634,6 +646,7 @@ https://gerrit.googlesource.com/git-repo/+/HEAD/docs/manifest-format.md self._default = None self._repo_hooks_project = None self._superproject = {} + self._contactinfo = {} self._notice = None self.branch = None self._manifest_server = None @@ -876,6 +889,10 @@ https://gerrit.googlesource.com/git-repo/+/HEAD/docs/manifest-format.md raise ManifestParseError("no remote for superproject %s within %s" % (name, self.manifestFile)) self._superproject['remote'] = remote.ToRemoteSpec(name) + if node.nodeName == 'contactinfo': + bugurl = self._reqatt(node, 'bugurl') + # This element can be repeated, later entries will clobber earlier ones. + self._contactinfo['bugurl'] = bugurl if node.nodeName == 'remove-project': name = self._reqatt(node, 'name') diff --git a/tests/test_manifest_xml.py b/tests/test_manifest_xml.py index e78d85c3..bfdf366e 100644 --- a/tests/test_manifest_xml.py +++ b/tests/test_manifest_xml.py @@ -255,10 +255,10 @@ class XmlManifestTests(ManifestParseTestCase): self.assertEqual(manifest.superproject['remote'].name, 'test-remote') self.assertEqual( manifest.ToXml().toxml(), - '' + - '' + - '' + - '' + + '' + '' + '' + '' '') @@ -409,10 +409,10 @@ class ProjectElementTests(ManifestParseTestCase): project.SetRevisionId('ABCDEF') self.assertEqual( manifest.ToXml().toxml(), - '' + - '' + - '' + - '' + + '' + '' + '' + '' '') def test_trailing_slash(self): @@ -517,10 +517,10 @@ class SuperProjectElementTests(ManifestParseTestCase): self.assertEqual(manifest.superproject['remote'].url, 'http://localhost/superproject') self.assertEqual( manifest.ToXml().toxml(), - '' + - '' + - '' + - '' + + '' + '' + '' + '' '') def test_remote(self): @@ -538,11 +538,11 @@ class SuperProjectElementTests(ManifestParseTestCase): self.assertEqual(manifest.superproject['remote'].url, 'http://localhost/platform/superproject') self.assertEqual( manifest.ToXml().toxml(), - '' + - '' + - '' + - '' + - '' + + '' + '' + '' + '' + '' '') def test_defalut_remote(self): @@ -558,8 +558,25 @@ class SuperProjectElementTests(ManifestParseTestCase): self.assertEqual(manifest.superproject['remote'].name, 'default-remote') self.assertEqual( manifest.ToXml().toxml(), - '' + - '' + - '' + - '' + + '' + '' + '' + '' '') + + +class ContactinfoElementTests(ManifestParseTestCase): + """Tests for .""" + + def test_contactinfo(self): + """Check contactinfo settings.""" + bugurl = 'http://localhost/contactinfo' + manifest = self.getXmlManifest(f""" + + + +""") + self.assertEqual(manifest.contactinfo['bugurl'], bugurl) + self.assertEqual( + manifest.ToXml().toxml(), + f"""""")