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


