Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision b6865605

Von Sven Schöling vor fast 9 Jahren hinzugefügt

  • ID b686560537b3e522fdfd0f8a81fa1d9b7c7114d8
  • Vorgänger 53498e5b
  • Nachfolger d814a525

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

Unterschiede anzeigen:

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