manifest: Make extend-project support copyfile, linkfile and annotation

This allows an existing project to be extended by these elements.

Change-Id: I6826e518f39ca86485301491639101943b7e2ae0
Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/519781
Reviewed-by: Mike Frysinger <vapier@google.com>
Tested-by: Peter Kjellerstedt <peter.kjellerstedt@axis.com>
Reviewed-by: Gavin Mak <gavinmak@google.com>
This commit is contained in:
Peter Kjellerstedt
2025-10-16 20:29:28 +02:00
committed by Gavin Mak
parent 1afe96a7e9
commit 4ab2284a94
3 changed files with 101 additions and 12 deletions
+78
View File
@@ -1214,6 +1214,84 @@ class ExtendProjectElementTests(ManifestParseTestCase):
self.assertEqual(len(manifest.projects), 1)
self.assertEqual(manifest.projects[0].upstream, "bar")
def test_extend_project_copyfiles(self):
manifest = self.getXmlManifest(
"""
<manifest>
<remote name="default-remote" fetch="http://localhost" />
<default remote="default-remote" revision="refs/heads/main" />
<project name="myproject" />
<extend-project name="myproject">
<copyfile src="foo" dest="bar" />
</extend-project>
</manifest>
"""
)
self.assertEqual(manifest.projects[0].copyfiles[0].src, "foo")
self.assertEqual(manifest.projects[0].copyfiles[0].dest, "bar")
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="myproject">'
'<copyfile dest="bar" src="foo"/>'
"</project>"
"</manifest>",
)
def test_extend_project_linkfiles(self):
manifest = self.getXmlManifest(
"""
<manifest>
<remote name="default-remote" fetch="http://localhost" />
<default remote="default-remote" revision="refs/heads/main" />
<project name="myproject" />
<extend-project name="myproject">
<linkfile src="foo" dest="bar" />
</extend-project>
</manifest>
"""
)
self.assertEqual(manifest.projects[0].linkfiles[0].src, "foo")
self.assertEqual(manifest.projects[0].linkfiles[0].dest, "bar")
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="myproject">'
'<linkfile dest="bar" src="foo"/>'
"</project>"
"</manifest>",
)
def test_extend_project_annotations(self):
manifest = self.getXmlManifest(
"""
<manifest>
<remote name="default-remote" fetch="http://localhost" />
<default remote="default-remote" revision="refs/heads/main" />
<project name="myproject" />
<extend-project name="myproject">
<annotation name="foo" value="bar" />
</extend-project>
</manifest>
"""
)
self.assertEqual(manifest.projects[0].annotations[0].name, "foo")
self.assertEqual(manifest.projects[0].annotations[0].value, "bar")
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="myproject">'
'<annotation name="foo" value="bar"/>'
"</project>"
"</manifest>",
)
class NormalizeUrlTests(ManifestParseTestCase):
"""Tests for normalize_url() in manifest_xml.py"""