From 303bd963d57936873f62c7b61a885911afc46788 Mon Sep 17 00:00:00 2001 From: Fredrik de Groot Date: Mon, 9 Sep 2024 15:54:57 +0200 Subject: manifest: add optional base check on remove and extend This adds an optional, built-in checker for guarding against patches hanging on wrong base revisions, which is useful if a lower layer of the manifest changes after a patch was done. When adding a patch with a new revision using extend-project or remove-project/project: C---D---E patches in project bla / A---B project bla in manifest state 1 If project bla gets updated, in a new snap ID or by a supplier or similar, to a new state: C---D---E patches in project bla / A---B---F---G project bla in manifest state 2 Parsing will fail because revision of bla is now G, giving the choice to create a new patch branch from G and updating base-rev, or keeping previous branch for some reason and only updating base-rev. Intended for use in a layered manifest with hashed revisions. Named refs like branches and tags also work fine when comparing, but will be misleading if a branch is used as base-rev. Change-Id: Ic6211550a7d3cc9656057f6a2087c505b40cad2b Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/436777 Reviewed-by: Josip Sokcevic Tested-by: Fredrik de Groot Commit-Queue: Josip Sokcevic --- docs/manifest-format.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'docs/manifest-format.md') diff --git a/docs/manifest-format.md b/docs/manifest-format.md index 36dae6de..cfb80164 100644 --- a/docs/manifest-format.md +++ b/docs/manifest-format.md @@ -107,11 +107,13 @@ following DTD: + + @@ -433,6 +435,14 @@ project. Same syntax as the corresponding element of `project`. Attribute `upstream`: If specified, overrides the upstream of the original project. Same syntax as the corresponding element of `project`. +Attribute `base-rev`: If specified, adds a check against the revision +to be extended. Manifest parse will fail and give a list of mismatch extends +if the revisions being extended have changed since base-rev was set. +Intended for use with layered manifests using hash revisions to prevent +patch branches hiding newer upstream revisions. Also compares named refs +like branches or tags but is misleading if branches are used as base-rev. +Same syntax as the corresponding element of `project`. + ### Element annotation Zero or more annotation elements may be specified as children of a @@ -496,6 +506,14 @@ name. Logic otherwise behaves like both are specified. Attribute `optional`: Set to true to ignore remove-project elements with no matching `project` element. +Attribute `base-rev`: If specified, adds a check against the revision +to be removed. Manifest parse will fail and give a list of mismatch removes +if the revisions being removed have changed since base-rev was set. +Intended for use with layered manifests using hash revisions to prevent +patch branches hiding newer upstream revisions. Also compares named refs +like branches or tags but is misleading if branches are used as base-rev. +Same syntax as the corresponding element of `project`. + ### Element repo-hooks NB: See the [practical documentation](./repo-hooks.md) for using repo hooks. -- cgit v1.2.3-54-g00ecf