mirror of
https://gerrit.googlesource.com/git-repo
synced 2026-06-06 01:49:57 +00:00
manifest_xml: prevent extend-project from inheriting local groups
When extending a project in a local manifest, the project inherits the `local:` group. This causes the superproject override logic (which omits projects with `local:` groups) to incorrectly exclude the project from the override manifest. This leads to "extend-project element specifies non-existent project" errors during sync reload. Fix this by stripping `local:` groups from extended projects, ensuring they remain visible to superproject overrides while still allowing other inherited groups to persist. Bug: 470374343 Change-Id: I1a057ebffebc11a19dc14dde7cc13b9f18cdd0a3 Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/543222 Reviewed-by: Peter Kjellerstedt <peter.kjellerstedt@axis.com> Reviewed-by: Mike Frysinger <vapier@google.com> Tested-by: Gavin Mak <gavinmak@google.com> Commit-Queue: Gavin Mak <gavinmak@google.com>
This commit is contained in:
@@ -1487,6 +1487,14 @@ https://gerrit.googlesource.com/git-repo/+/HEAD/docs/manifest-format.md
|
||||
continue
|
||||
if groups:
|
||||
p.groups |= groups
|
||||
# Drop local groups so we don't mistakenly omit this
|
||||
# project from the superproject override manifest.
|
||||
p.groups = {
|
||||
g
|
||||
for g in p.groups
|
||||
if not g.startswith(LOCAL_MANIFEST_GROUP_PREFIX)
|
||||
}
|
||||
|
||||
if revision:
|
||||
if base_revision:
|
||||
if p.revisionExpr != base_revision:
|
||||
|
||||
@@ -549,6 +549,33 @@ class IncludeElementTests(ManifestParseTestCase):
|
||||
# Check project has set group via extend-project element.
|
||||
self.assertIn("eg1", proj.groups)
|
||||
|
||||
def test_extend_project_does_not_inherit_local_groups(self):
|
||||
"""Check that extend-project does not inherit local groups."""
|
||||
root_m = self.manifest_dir / "root.xml"
|
||||
root_m.write_text(
|
||||
"""
|
||||
<manifest>
|
||||
<remote name="test-remote" fetch="http://localhost" />
|
||||
<default remote="test-remote" revision="refs/heads/main" />
|
||||
<project name="project1" path="project1" />
|
||||
<include name="man1.xml" groups="g1,local:g2" />
|
||||
</manifest>
|
||||
"""
|
||||
)
|
||||
(self.manifest_dir / "man1.xml").write_text(
|
||||
"""
|
||||
<manifest>
|
||||
<extend-project name="project1" groups="g3" />
|
||||
</manifest>
|
||||
"""
|
||||
)
|
||||
include_m = manifest_xml.XmlManifest(str(self.repodir), str(root_m))
|
||||
proj = include_m.projects[0]
|
||||
|
||||
self.assertIn("g1", proj.groups)
|
||||
self.assertNotIn("local:g2", proj.groups)
|
||||
self.assertIn("g3", proj.groups)
|
||||
|
||||
def test_allow_bad_name_from_user(self):
|
||||
"""Check handling of bad name attribute from the user's input."""
|
||||
|
||||
|
||||
Reference in New Issue
Block a user