Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision a74f9d57

Von Moritz Bunkus vor mehr als 4 Jahren hinzugefügt

  • ID a74f9d57d972444f66f96497fbf9ce9ed91a86a2
  • Vorgänger 50944367
  • Nachfolger 5b6abfd0

DBUpgrade-Mechanismus: umgekehrte Abhängigkeiten mit »required_by« angeben können

Existierender Mechanismus mit »depends« sagt: die Scripte in »depends«
müssen ausgeführt werden, bevor ich selber ausgeführt werde.

Mit »required_by« kann man das Umgekehrte angeben: ich selber muss
ausgeführt werden, bevor die Scripte in »required_by« ausgeführt
werden können.

Damit kann man z.B. kundenspezifische SQL-Upgrades schreiben, die
erzwungen vor offiziellen SQL-Upgrades ausgeführt werden, ohne die
offiziellen Upgrade-Dateien dafür verändern zu müssen.

Unterschiede anzeigen:

SL/DBUpgrade2.pm
56 56
    $file =~ s|.*/||;
57 57

  
58 58
    my $control = {
59
      "priority" => 1000,
60
      "depends"  => [],
61
      "locales"  => [],
59
      priority    => 1000,
60
      depends     => [],
61
      required_by => [],
62
      locales     => [],
62 63
    };
63 64

  
64 65
    while (<IN>) {
......
71 72
      my @fields = split(/\s*:\s*/, $_, 2);
72 73
      next unless (scalar(@fields) == 2);
73 74

  
74
      if ($fields[0] eq "depends") {
75
        push(@{$control->{"depends"}}, split(/\s+/, $fields[1]));
75
      if ($fields[0] =~ m{^(?:depends|required_by)$}) {
76
        push(@{$control->{$fields[0]}}, split(/\s+/, $fields[1]));
76 77
      } elsif ($fields[0] eq "locales") {
77 78
        push @{$control->{locales}}, $fields[1];
78 79
      } else {
......
100 101

  
101 102
    delete @{$control}{qw(depth applied)};
102 103

  
103
    my @unknown_keys = grep { !m{^ (?: depends | description | file | ignore | locales | may_fail | priority | superuser_privileges | tag ) $}x } keys %{ $control };
104
    my @unknown_keys = grep { !m{^ (?: depends | required_by | description | file | ignore | locales | may_fail | priority | superuser_privileges | tag ) $}x } keys %{ $control };
104 105
    if (@unknown_keys) {
105 106
      _control_error($form, $file_name, sprintf($locale->text("Unknown control fields: #1", join(' ', sort({ lc $a cmp lc $b } @unknown_keys)))));
106 107
    }
......
114 115
    close(IN);
115 116
  }
116 117

  
118
  foreach my $name (keys %all_controls) {
119
    my $control = $all_controls{$name};
120

  
121
    foreach my $dependency (@{ delete $control->{required_by} }) {
122
      _control_error($form, $control->{"file"}, sprintf($locale->text("Unknown dependency '%s'."), $dependency)) if (!defined($all_controls{$dependency}));
123
      push @{ $all_controls{$dependency}->{depends} }, $name;
124
    }
125
  }
126

  
117 127
  foreach my $control (values(%all_controls)) {
118 128
    foreach my $dependency (@{$control->{"depends"}}) {
119 129
      _control_error($form, $control->{"file"}, sprintf($locale->text("Unknown dependency '%s'."), $dependency)) if (!defined($all_controls{$dependency}));

Auch abrufbar als: Unified diff