Skip to content

Commit f97f77a

Browse files
committed
Alert on duplicate reference values
1 parent ba528a0 commit f97f77a

1 file changed

Lines changed: 46 additions & 11 deletions

File tree

yaml-generation/generateDimensions.php

Lines changed: 46 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@
22

33
require_once "functions.php";
44

5+
$errorMsg = array();
6+
$implementationReferenceFile = "src/assets/YAML/default/implementations.yaml";
57
$metadata = readYaml("src/assets/YAML/meta.yaml");
8+
69
$teams = $metadata["teams"];
710
if (sizeof($teams) == 0) {
811
echo "Warning: No teams defined";
@@ -12,11 +15,10 @@
1215
$teamsImplemented[$team] = false;
1316
}
1417

15-
1618
$files = glob("src/assets/YAML/default/*/*.yaml");
1719
$dimensions = array();
1820
foreach ($files as $filename) {
19-
//echo "Found $filename\n";
21+
echo "Reading $filename\n";
2022
if (preg_match("/_meta.yaml/", $filename)) continue;
2123
$dimension = getDimensions($filename);
2224
if (array_key_exists("_yaml_references", $dimension)) {
@@ -29,7 +31,7 @@
2931
$dimensionsCustom = array();
3032
$dimensionsAggregated = array();
3133
foreach ($files as $filename) {
32-
//echo "Found $filename";
34+
echo "Reading custom $filename\n";
3335
$dimensionCustom = getDimensions($filename);
3436
$dimensionsCustom = array_merge_recursive_ex($dimensionsCustom, $dimensionCustom);
3537
}
@@ -48,7 +50,7 @@
4850
} else {
4951
$dimensionsAggregated = $dimensions;
5052
}
51-
$errorMsg = array();
53+
5254
foreach ($dimensionsAggregated as $dimension => $subdimensions) {
5355
ksort($subdimensions);
5456
foreach ($subdimensions as $subdimension => $elements) {
@@ -150,13 +152,6 @@
150152
}
151153
}
152154
}
153-
if (count($errorMsg) > 0) {
154-
echo "\n\nFound " . count($errorMsg) . " errors:\n";
155-
foreach ($errorMsg as $e) {
156-
echo "ERROR: $e\n";
157-
}
158-
exit("Please fix the errors");
159-
}
160155

161156

162157
foreach ($dimensionsAggregated as $dimension => $subdimensions) {
@@ -166,14 +161,54 @@
166161
}
167162
}
168163

164+
165+
$implementationReferences = readYaml($implementationReferenceFile)['implementations'];
166+
assert_unique_refs($implementationReferences, $errorMsg);
167+
169168
resolve_json_ref($dimensionsAggregated);
170169

170+
171+
if (count($errorMsg) > 0) {
172+
echo "\n\nFound " . count($errorMsg) . " errors:\n";
173+
foreach ($errorMsg as $e) {
174+
echo "ERROR: $e\n";
175+
}
176+
exit("Please fix the errors");
177+
}
178+
179+
180+
181+
171182
$dimensionsString = yaml_emit($dimensionsAggregated);
172183
$targetGeneratedFile = getcwd() . "/src/assets/YAML/generated/generated.yaml";
173184
echo "\nStoring to $targetGeneratedFile\n";
174185
file_put_contents($targetGeneratedFile, $dimensionsString);
175186

176187

188+
189+
function assert_unique_refs($implementationReferences, &$errorMsg) {
190+
assert_unique_ref_by_key($implementationReferences, 'uuid', $errorMsg);
191+
assert_unique_ref_by_key($implementationReferences, 'name', $errorMsg);
192+
assert_unique_ref_by_key($implementationReferences, 'url', $errorMsg);
193+
}
194+
195+
function assert_unique_ref_by_key($implementationReferences, $keyToAssert, &$errorMsg) {
196+
$all_values = array();
197+
198+
foreach ($implementationReferences as $key => $reference) {
199+
if (array_key_exists($keyToAssert, $reference)) {
200+
$value = $reference[$keyToAssert];
201+
// echo "$key: $value\n";
202+
if (array_key_exists($value, $all_values)) {
203+
array_push($errorMsg, "Duplicate '$keyToAssert' in reference: " . $all_values[$value] . " and $key: '$value'");
204+
} else {
205+
$all_values[$value] = $key;
206+
}
207+
}
208+
}
209+
}
210+
211+
177212
/**
178213
*
179214
* @param unknown $dimensions

0 commit comments

Comments
 (0)