Revision b6865605
Von Sven Schöling vor fast 9 Jahren hinzugefügt
SL/Menu.pm | ||
---|---|---|
my $nodes_by_id = {};
|
||
for my $file (@files) {
|
||
my $data;
|
||
if ($yaml_xs) {
|
||
$data = YAML::XS::LoadFile(File::Spec->catfile($path, $file));
|
||
} else {
|
||
$data = YAML::LoadFile(File::Spec->catfile($path, $file));
|
||
}
|
||
eval {
|
||
if ($yaml_xs) {
|
||
$data = YAML::XS::LoadFile(File::Spec->catfile($path, $file));
|
||
} else {
|
||
$data = YAML::LoadFile(File::Spec->catfile($path, $file));
|
||
}
|
||
1;
|
||
} or do {
|
||
die "Error while parsing $file: $@";
|
||
};
|
||
|
||
# check if this file is internally consistent.
|
||
die 'not an array ref' unless $data && 'ARRAY' eq ref $data; # TODO get better diag to user
|
||
|
||
# in particular duplicate ids tend to come up as a user error when editing the menu files
|
||
my %uniq_ids;
|
||
$uniq_ids{$_->{id}}++ && die "Error in $file: duplicate id $_->{id}" for @$data;
|
||
|
||
_merge($nodes, $nodes_by_id, $data);
|
||
}
|
||
|
||
... | ... | |
sub _merge {
|
||
my ($nodes, $by_id, $data) = @_;
|
||
|
||
die 'not an array ref' unless $data && 'ARRAY' eq ref $data; # TODO check this sooner, to get better diag to user
|
||
|
||
for my $node (@$data) {
|
||
my $id = $node->{id};
|
||
|
Auch abrufbar als: Unified diff
Menu: Fehlerchecks beim yaml einlesen
2 häufige Fehler abfangen:
- wenn ids in einer datei doppelt vorkommen (passiert beim editieren)
- wenn YAML selber Fehler wirft gab es bisher ein HTTP 500