diff --git a/docs/manifest-format.md b/docs/manifest-format.md index da83d0d..0752a8c 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 73556a5..e1d630b 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 e78d85c..bfdf366 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"""""")