summaryrefslogtreecommitdiffstats
path: root/manifest_xml.py
diff options
context:
space:
mode:
Diffstat (limited to 'manifest_xml.py')
-rw-r--r--manifest_xml.py35
1 files changed, 35 insertions, 0 deletions
diff --git a/manifest_xml.py b/manifest_xml.py
index b26b0cac..cdab31e6 100644
--- a/manifest_xml.py
+++ b/manifest_xml.py
@@ -1445,6 +1445,7 @@ https://gerrit.googlesource.com/git-repo/+/HEAD/docs/manifest-format.md
1445 1445
1446 repo_hooks_project = None 1446 repo_hooks_project = None
1447 enabled_repo_hooks = None 1447 enabled_repo_hooks = None
1448 failed_revision_changes = []
1448 for node in itertools.chain(*node_list): 1449 for node in itertools.chain(*node_list):
1449 if node.nodeName == "project": 1450 if node.nodeName == "project":
1450 project = self._ParseProject(node) 1451 project = self._ParseProject(node)
@@ -1471,6 +1472,7 @@ https://gerrit.googlesource.com/git-repo/+/HEAD/docs/manifest-format.md
1471 remote = self._get_remote(node) 1472 remote = self._get_remote(node)
1472 dest_branch = node.getAttribute("dest-branch") 1473 dest_branch = node.getAttribute("dest-branch")
1473 upstream = node.getAttribute("upstream") 1474 upstream = node.getAttribute("upstream")
1475 base_revision = node.getAttribute("base-rev")
1474 1476
1475 named_projects = self._projects[name] 1477 named_projects = self._projects[name]
1476 if dest_path and not path and len(named_projects) > 1: 1478 if dest_path and not path and len(named_projects) > 1:
@@ -1484,6 +1486,13 @@ https://gerrit.googlesource.com/git-repo/+/HEAD/docs/manifest-format.md
1484 if groups: 1486 if groups:
1485 p.groups.extend(groups) 1487 p.groups.extend(groups)
1486 if revision: 1488 if revision:
1489 if base_revision:
1490 if p.revisionExpr != base_revision:
1491 failed_revision_changes.append(
1492 "extend-project name %s mismatch base "
1493 "%s vs revision %s"
1494 % (name, base_revision, p.revisionExpr)
1495 )
1487 p.SetRevision(revision) 1496 p.SetRevision(revision)
1488 1497
1489 if remote_name: 1498 if remote_name:
@@ -1558,6 +1567,7 @@ https://gerrit.googlesource.com/git-repo/+/HEAD/docs/manifest-format.md
1558 if node.nodeName == "remove-project": 1567 if node.nodeName == "remove-project":
1559 name = node.getAttribute("name") 1568 name = node.getAttribute("name")
1560 path = node.getAttribute("path") 1569 path = node.getAttribute("path")
1570 base_revision = node.getAttribute("base-rev")
1561 1571
1562 # Name or path needed. 1572 # Name or path needed.
1563 if not name and not path: 1573 if not name and not path:
@@ -1571,6 +1581,13 @@ https://gerrit.googlesource.com/git-repo/+/HEAD/docs/manifest-format.md
1571 for projname, projects in list(self._projects.items()): 1581 for projname, projects in list(self._projects.items()):
1572 for p in projects: 1582 for p in projects:
1573 if name == projname and not path: 1583 if name == projname and not path:
1584 if base_revision:
1585 if p.revisionExpr != base_revision:
1586 failed_revision_changes.append(
1587 "remove-project name %s mismatch base "
1588 "%s vs revision %s"
1589 % (name, base_revision, p.revisionExpr)
1590 )
1574 del self._paths[p.relpath] 1591 del self._paths[p.relpath]
1575 if not removed_project: 1592 if not removed_project:
1576 del self._projects[name] 1593 del self._projects[name]
@@ -1578,6 +1595,17 @@ https://gerrit.googlesource.com/git-repo/+/HEAD/docs/manifest-format.md
1578 elif path == p.relpath and ( 1595 elif path == p.relpath and (
1579 name == projname or not name 1596 name == projname or not name
1580 ): 1597 ):
1598 if base_revision:
1599 if p.revisionExpr != base_revision:
1600 failed_revision_changes.append(
1601 "remove-project path %s mismatch base "
1602 "%s vs revision %s"
1603 % (
1604 p.relpath,
1605 base_revision,
1606 p.revisionExpr,
1607 )
1608 )
1581 self._projects[projname].remove(p) 1609 self._projects[projname].remove(p)
1582 del self._paths[p.relpath] 1610 del self._paths[p.relpath]
1583 removed_project = p.name 1611 removed_project = p.name
@@ -1597,6 +1625,13 @@ https://gerrit.googlesource.com/git-repo/+/HEAD/docs/manifest-format.md
1597 "project: %s" % node.toxml() 1625 "project: %s" % node.toxml()
1598 ) 1626 )
1599 1627
1628 if failed_revision_changes:
1629 raise ManifestParseError(
1630 "revision base check failed, rebase patches and update "
1631 "base revs for: ",
1632 failed_revision_changes,
1633 )
1634
1600 # Store repo hooks project information. 1635 # Store repo hooks project information.
1601 if repo_hooks_project: 1636 if repo_hooks_project:
1602 # Store a reference to the Project. 1637 # Store a reference to the Project.