Throw on non-unique exact plugin metadata.

Also fix some outdated information in the metadata syntax doc relating
to how metadata is merged.
This commit is contained in:
Oliver Hamlet
2015-07-16 12:37:11 +01:00
parent 4f72b58631
commit 474558d1f4
3 changed files with 41 additions and 9 deletions
+4 -4
View File
@@ -439,21 +439,21 @@ nav: 0
<tr><td><code>url</code><td>location list<td>&#x2717;<td>An unordered list of locations for this plugin. If the same version can be found at multiple locations, only one location should be recorded. This metadata is not currently used by LOOT.
<tr><td><code>dirty</code><td>dirty info list<td>&#x2717;<td>An unordered list of dirty info structures for this plugin. Plugin entries with regular expression filenames <strong>must not</strong> contain dirty info.
</table>
<p><strong>Each plugin must have only one matching non-regex entry.</strong> If multiple non-regex entries exist with the same <code>name</code> value, all but the first will be ignored. A plugin may match any number of regex entries though, and their metadata will be merged, with later entries being merged into earlier entries as detailed in the table below. Merging only takes place if both entries have their <code>enabled</code> value set to <code>true</code> (which is the default if unspecified).
<p><strong>Each plugin must have only one matching non-regex entry.</strong> A plugin may match any number of regex entries though, and their metadata will be merged, with later entries being merged into earlier entries as detailed in the table below.
<table>
<thead>
<tr><th>Key Name<th>Merge Behaviour (merging B into A)
<tbody>
<tr><td><code>name</code><td>Not merged.
<tr><td><code>enabled</code><td>Replaced but must be `true` anyway.
<tr><td><code>priority</code><td>Replaced by B's value.
<tr><td><code>enabled</code><td>Replaced by B's value.
<tr><td><code>priority</code><td>Replaced by B's value, unless that value is <code>0</code> and it was not explicitly set.
<tr><td><code>after</code><td>Merged. If A and B both contain an entry with the same <code>name</code> value, B's copy is skipped.
<tr><td><code>req</code><td>Merged. If A and B both contain an entry with the same <code>name</code> value, B's copy is skipped.
<tr><td><code>inc</code><td>Merged. If A and B both contain an entry with the same <code>name</code> value, B's copy is skipped.
<tr><td><code>msg</code><td>Merged. If A and B both contain an entry with the same content string, then B's copy is skipped. If there are multiple content strings, the English strings are compared.
<tr><td><code>tag</code><td>Merged. If A and B both contain an entry with the same <code>name</code> value, B's copy is skipped, unless one is suggesting the tag for addition and the other is suggesting it for removal, in which case both entries are kept.
<tr><td><code>url</code><td>Currently skipped by the parser, so neither A nor B will contain any entries anyway.
<tr><td><code>url</code><td>Merged. If A and B both contain an entry with the same <code>link</code> value, B's copy is skipped.
<tr><td><code>dirty</code><td>Merged. If A and B both contain an entry with the same <code>crc</code> value, B's copy is skipped.
</table>