Add 'dest-path' to extend-project to support changing path
This allows us to move the repository to a new location in the source
tree without having to remove-project + add a new project tag.
Change-Id: I4dba6151842e57f6f2b8fe60cda260ecea68b7b4
Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/310962
Reviewed-by: Mike Frysinger <vapier@google.com>
Tested-by: Michael Kelly <mkelly@arista.com>
diff --git a/tests/test_manifest_xml.py b/tests/test_manifest_xml.py
index ce42253..cb3eb85 100644
--- a/tests/test_manifest_xml.py
+++ b/tests/test_manifest_xml.py
@@ -797,3 +797,49 @@
</manifest>
""")
self.assertEqual(manifest.projects, [])
+
+
+class ExtendProjectElementTests(ManifestParseTestCase):
+ """Tests for <extend-project>."""
+
+ def test_extend_project_dest_path_single_match(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" dest-path="bar" />
+</manifest>
+""")
+ self.assertEqual(len(manifest.projects), 1)
+ self.assertEqual(manifest.projects[0].relpath, 'bar')
+
+ def test_extend_project_dest_path_multi_match(self):
+ with self.assertRaises(manifest_xml.ManifestParseError):
+ manifest = self.getXmlManifest("""
+<manifest>
+ <remote name="default-remote" fetch="http://localhost" />
+ <default remote="default-remote" revision="refs/heads/main" />
+ <project name="myproject" path="x" />
+ <project name="myproject" path="y" />
+ <extend-project name="myproject" dest-path="bar" />
+</manifest>
+""")
+ manifest.projects
+
+ def test_extend_project_dest_path_multi_match_path_specified(self):
+ manifest = self.getXmlManifest("""
+<manifest>
+ <remote name="default-remote" fetch="http://localhost" />
+ <default remote="default-remote" revision="refs/heads/main" />
+ <project name="myproject" path="x" />
+ <project name="myproject" path="y" />
+ <extend-project name="myproject" path="x" dest-path="bar" />
+</manifest>
+""")
+ self.assertEqual(len(manifest.projects), 2)
+ if manifest.projects[0].relpath == 'y':
+ self.assertEqual(manifest.projects[1].relpath, 'bar')
+ else:
+ self.assertEqual(manifest.projects[0].relpath, 'bar')
+ self.assertEqual(manifest.projects[1].relpath, 'y')