blob: 79a76fdc68f72c35bf8fc979d6766a4a56247d6e [file] [log] [blame] [view]
This plugin allows users to monitor git-repo manifests in manifest repositories
and generate rev-specific manifests (similar to "repo manifest -o") and store
them to a separate git repository (configurable.)
> **Warning: this plugin is currently under development and is targeting 2.12.3**
The rev-specific manifest of each source manifest is stored in its own branch
with the following naming convention:
m/\<source manifest branch\>/\<source manifest path\>
The name of the rev-specific manifest is default.xml
For example, if the source manifests are
branch: master
file: default.xml
file: dev.xml
file: upstream-mirror.xml
There will be three *branches* in the destination repository with these names:
m/master/default.xml
m/master/dev.xml
m/master/upstream-mirror.xml
If a tag is placed at the start of one of these branches, "git describe" can be
used to provide system-level version metadata. One can also use "git bisect" on
the branches to identify system-level regression.
The subject line of the change that triggered the snapshot manifest is included
in the commit message of the snapshot manifest. This way, you can get a summary
sequence of changes of all repository described by that manifest by running the
following git log command in the snapshot manifest branch:
```
git log --pretty=format:%b
```
* Enabled by project.config in the manifest project to be monitored
* Manifest class is generated from 'repo help manifest' DTD using JAXB
(part of the build step)
* \<include\>s are expanded similar to "repo manifest -o" (only works for
manifests in the same source manifest repository reference by relative path)
* Supports \<remove-project\>
* Circular update loop is prevented by not monitoring any of the snapshot
manifest repositories
* Projects in the manifests are assumed to be on the server. (There is no check
currently so it's a potential source of error.)
* Snapshot manifests are generated when the source manifests are updated
* Parsed manifests are kept in memory for quick lookup
```
xjc -dtd -d gen -p com.amd.gerrit.plugins.manifestsubscription.manifest manifest.dtd
```
Manifest represent raw XML
CanonicalManifest resolve \<include\> and \<remove-project\>
* TODO: possibly separate out manifest op into a separate plugin and make VesionedManifest as a libary (manifest-base or something)
* TODO: generate snapshot manifest for all commit (Currently only generated on a per push/ref-updated basis)
* Make it configurable, possibly per project, using plugin config or via special tag in manifest
* TODO: monitor all manifest branch if no branch is specified
* TODO: ssh command to check what is being monitored
* TODO: strict mode, only monitor projects using default (no remote)
* TODO: split mode (store all manifests in same branch structure as source instead of flattening the underlying file strcuture)
* TODO: not monitor non-local projects
* TODO: provide hook for non-local projects to trigger snapshot update
* TODO: add something to prevent loop even if store repo is the same as source
manifest repo
* TODO: check project.config on newly created project
* TODO: include an external manifest DTD or XML schema/XSD
* TODO add test verify manifest that can cause circular conditions
* TODO sub dir include manifest have same level include working