Skip to content

Commit 096dc3f

Browse files
committed
Do not disable plugins during bugfixes updates
1 parent a71aa6f commit 096dc3f

File tree

3 files changed

+75
-7
lines changed

3 files changed

+75
-7
lines changed

phpunit/functional/Glpi/Toolbox/VersionParserTest.php

+48-3
Original file line numberDiff line numberDiff line change
@@ -49,126 +49,171 @@ public static function versionsProvider()
4949
'version' => '',
5050
'keep_stability_flag' => false,
5151
'normalized' => '',
52+
'major' => '',
53+
'intermediate' => '',
5254
'stable' => true,
5355
'dev' => false,
5456
],
5557
[
5658
'version' => '9.5+2.0',
5759
'keep_stability_flag' => false,
5860
'normalized' => '9.5+2.0', // not semver compatible, cannot be normalized
61+
'major' => '9',
62+
'intermediate' => '9.5',
5963
'stable' => true,
6064
'dev' => false,
6165
],
6266
[
6367
'version' => '0.89',
6468
'keep_stability_flag' => false,
6569
'normalized' => '0.89.0',
70+
'major' => '0',
71+
'intermediate' => '0.89',
6672
'stable' => true,
6773
'dev' => false,
6874
],
6975
[
7076
'version' => '9.2',
7177
'keep_stability_flag' => false,
7278
'normalized' => '9.2.0',
79+
'major' => '9',
80+
'intermediate' => '9.2',
7381
'stable' => true,
7482
'dev' => false,
7583
],
7684
[
7785
'version' => '9.2',
7886
'keep_stability_flag' => true, // should have no effect
7987
'normalized' => '9.2.0',
88+
'major' => '9',
89+
'intermediate' => '9.2',
8090
'stable' => true,
8191
'dev' => false,
8292
],
8393
[
8494
'version' => '9.4.1.1',
8595
'keep_stability_flag' => false,
8696
'normalized' => '9.4.1',
97+
'major' => '9',
98+
'intermediate' => '9.4',
8799
'stable' => true,
88100
'dev' => false,
89101
],
90102
[
91103
'version' => '10.0.0-dev',
92104
'keep_stability_flag' => false,
93105
'normalized' => '10.0.0',
106+
'major' => '10',
107+
'intermediate' => '10.0',
94108
'stable' => false,
95109
'dev' => true,
96110
],
97111
[
98112
'version' => '10.0.0-dev',
99113
'keep_stability_flag' => true,
100114
'normalized' => '10.0.0-dev',
115+
'major' => '10',
116+
'intermediate' => '10.0',
101117
'stable' => false,
102118
'dev' => true,
103119
],
104120
[
105121
'version' => '10.0.0-alpha',
106122
'keep_stability_flag' => false,
107123
'normalized' => '10.0.0',
124+
'major' => '10',
125+
'intermediate' => '10.0',
108126
'stable' => false,
109127
'dev' => false,
110128
],
111129
[
112130
'version' => '10.0.0-alpha2',
113131
'keep_stability_flag' => true,
114132
'normalized' => '10.0.0-alpha2',
133+
'major' => '10',
134+
'intermediate' => '10.0',
115135
'stable' => false,
116136
'dev' => false,
117137
],
118138
[
119139
'version' => '10.0.0-beta1',
120140
'keep_stability_flag' => false,
121141
'normalized' => '10.0.0',
142+
'major' => '10',
143+
'intermediate' => '10.0',
122144
'stable' => false,
123145
'dev' => false,
124146
],
125147
[
126148
'version' => '10.0.0-beta1',
127149
'keep_stability_flag' => true,
128150
'normalized' => '10.0.0-beta1',
151+
'major' => '10',
152+
'intermediate' => '10.0',
129153
'stable' => false,
130154
'dev' => false,
131155
],
132156
[
133157
'version' => '10.0.0-rc3',
134158
'keep_stability_flag' => false,
135159
'normalized' => '10.0.0',
160+
'major' => '10',
161+
'intermediate' => '10.0',
136162
'stable' => false,
137163
'dev' => false,
138164
],
139165
[
140166
'version' => '10.0.0-rc',
141167
'keep_stability_flag' => true,
142168
'normalized' => '10.0.0-rc',
169+
'major' => '10',
170+
'intermediate' => '10.0',
143171
'stable' => false,
144172
'dev' => false,
145173
],
146174
[
147175
'version' => '10.0.3',
148176
'keep_stability_flag' => true,
149177
'normalized' => '10.0.3',
178+
'major' => '10',
179+
'intermediate' => '10.0',
150180
'stable' => true,
151181
'dev' => false,
152182
],
153183
];
154184
}
155185

156186
#[DataProvider('versionsProvider')]
157-
public function testGetNormalizeVersion(string $version, bool $keep_stability_flag, string $normalized, bool $stable, bool $dev): void
187+
public function testGetNormalizeVersion(string $version, bool $keep_stability_flag, string $normalized, string $major, string $intermediate, bool $stable, bool $dev): void
158188
{
159189
$version_parser = new \Glpi\Toolbox\VersionParser();
160190
$this->assertEquals($normalized, $version_parser->getNormalizedVersion($version, $keep_stability_flag));
161191
}
162192

163193
#[DataProvider('versionsProvider')]
164-
public function testIsStableRelease(string $version, bool $keep_stability_flag, string $normalized, bool $stable, bool $dev): void
194+
public function testGetMajorVersion(string $version, bool $keep_stability_flag, string $normalized, string $major, string $intermediate, bool $stable, bool $dev): void
195+
{
196+
$version_parser = new \Glpi\Toolbox\VersionParser();
197+
$this->assertEquals($major, $version_parser->getMajorVersion($version));
198+
}
199+
200+
#[DataProvider('versionsProvider')]
201+
public function testGetIntermediateVersion(string $version, bool $keep_stability_flag, string $normalized, string $major, string $intermediate, bool $stable, bool $dev): void
202+
{
203+
$version_parser = new \Glpi\Toolbox\VersionParser();
204+
$this->assertEquals($intermediate, $version_parser->getIntermediateVersion($version));
205+
}
206+
207+
208+
#[DataProvider('versionsProvider')]
209+
public function testIsStableRelease(string $version, bool $keep_stability_flag, string $normalized, string $major, string $intermediate, bool $stable, bool $dev): void
165210
{
166211
$version_parser = new \Glpi\Toolbox\VersionParser();
167212
$this->assertSame($stable, $version_parser->isStableRelease($version));
168213
}
169214

170215
#[DataProvider('versionsProvider')]
171-
public function testIsDevVersion(string $version, bool $keep_stability_flag, string $normalized, bool $stable, bool $dev): void
216+
public function testIsDevVersion(string $version, bool $keep_stability_flag, string $normalized, string $major, string $intermediate, bool $stable, bool $dev): void
172217
{
173218
$version_parser = new \Glpi\Toolbox\VersionParser();
174219
$this->assertSame($dev, $version_parser->isDevVersion($version));

src/Glpi/Toolbox/VersionParser.php

+20
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,26 @@ public static function getNormalizedVersion(string $version, bool $keep_stabilit
7676
return $version;
7777
}
7878

79+
/**
80+
* Get major version number (e.g. '9').
81+
*/
82+
public static function getMajorVersion(string $version): string
83+
{
84+
$normalized = self::getNormalizedVersion($version, false);
85+
86+
return \preg_replace('/^(\d+)[^d].+$/', '$1', $normalized);
87+
}
88+
89+
/**
90+
* Get intermediate version number (e.g. '9.5').
91+
*/
92+
public static function getIntermediateVersion(string $version): string
93+
{
94+
$normalized = self::getNormalizedVersion($version, false);
95+
96+
return \preg_replace('/^(\d+\.\d+)[^d].+$/', '$1', $normalized);
97+
}
98+
7999
/**
80100
* Check if given version is a stable release (i.e. does not contain a stability flag referring to unstable state).
81101
*

src/Update.php

+7-4
Original file line numberDiff line numberDiff line change
@@ -212,10 +212,6 @@ function (string $flag) {
212212
// To prevent problem of execution time
213213
ini_set("max_execution_time", "0");
214214

215-
// Update process desactivate all plugins
216-
$plugin = new Plugin();
217-
$plugin->unactivateAll();
218-
219215
if (version_compare($current_version, GLPI_VERSION, '>')) {
220216
$message = sprintf(
221217
__('Unsupported version (%1$s)'),
@@ -230,6 +226,13 @@ function (string $flag) {
230226
}
231227
}
232228

229+
// Update process deactivate all plugins when GLPI is upgraded to a new intermediate/major version,
230+
// to prevent blocking the GLPI execution if a plugin is incompatible with this new version.
231+
if (VersionParser::getIntermediateVersion($current_version) !== VersionParser::getIntermediateVersion(GLPI_VERSION)) {
232+
$plugin = new Plugin();
233+
$plugin->unactivateAll();
234+
}
235+
233236
$migrations = $this->getMigrationsToDo($current_version, $force_latest);
234237
foreach ($migrations as $key => $migration_specs) {
235238
include_once($migration_specs['file']);

0 commit comments

Comments
 (0)