200 if (($this->_packagexml->getPackagexmlVersion() ==
'2.0' ||
201 $this->_packagexml->getPackagexmlVersion() ==
'2.1') &&
202 $this->_packagexml->getExtends()) {
203 $version = $this->_packagexml->getVersion() .
'';
204 $name = $this->_packagexml->getPackage();
205 $a = explode(
'.', $version);
206 $test = array_shift($a);
210 $vlen = strlen($test);
211 $majver = substr($name, strlen($name) - $vlen);
212 while ($majver && !is_numeric($majver[0])) {
213 $majver = substr($majver, 1);
215 if ($majver != $test) {
216 $this->
_addWarning(
'package',
"package $name extends package " .
217 $this->_packagexml->getExtends() .
' and so the name should ' .
218 'have a postfix equal to the major version like "' .
219 $this->_packagexml->getExtends() . $test .
'"');
221 } elseif (substr($name, 0, strlen($name) - $vlen) !=
222 $this->_packagexml->getExtends()) {
223 $this->
_addWarning(
'package',
"package $name extends package " .
224 $this->_packagexml->getExtends() .
' and so the name must ' .
225 'be an extension like "' . $this->_packagexml->getExtends() .
233 $this->_packagexml->getPackage() .
'" is invalid');
244 if (!$this->
validVersion($this->_packagexml->getVersion())) {
246 'Invalid version number "' . $this->_packagexml->getVersion() .
'"');
250 $version = $this->_packagexml->getVersion();
251 $versioncomponents = explode(
'.', $version);
252 if (count($versioncomponents) != 3) {
254 'A version number should have 3 decimals (x.y.z)');
257 $name = $this->_packagexml->getPackage();
259 switch ($this->_packagexml->getState()) {
263 if ($versioncomponents[0] .
'a' ==
'0a') {
266 if ($versioncomponents[0] == 0) {
267 $versioncomponents[0] =
'0';
269 'version "' . $version .
'" should be "' .
270 implode(
'.' ,$versioncomponents) .
'"');
273 'packages with devel stability must be < version 1.0.0');
282 if (substr($versioncomponents[2], 1, 2) ==
'rc') {
283 $this->
_addFailure(
'version',
'Release Candidate versions ' .
284 'must have capital RC, not lower-case rc');
288 if (!$this->_packagexml->getExtends()) {
289 if ($versioncomponents[0] ==
'1') {
290 if ($versioncomponents[2][0] ==
'0') {
291 if ($versioncomponents[2] ==
'0') {
294 'version 1.' . $versioncomponents[1] .
295 '.0 probably should not be alpha or beta');
297 } elseif (strlen($versioncomponents[2]) > 1) {
303 'version 1.' . $versioncomponents[1] .
304 '.0 probably should not be alpha or beta');
309 'bugfix versions (1.3.x where x > 0) probably should ' .
310 'not be alpha or beta');
313 } elseif ($versioncomponents[0] !=
'0') {
315 'major versions greater than 1 are not allowed for packages ' .
316 'without an <extends> tag or an identical postfix (foo2 v2.0.0)');
319 if ($versioncomponents[0] .
'a' ==
'0a') {
322 if ($versioncomponents[0] == 0) {
323 $versioncomponents[0] =
'0';
325 'version "' . $version .
'" should be "' .
326 implode(
'.' ,$versioncomponents) .
'"');
329 $vlen = strlen($versioncomponents[0] .
'');
330 $majver = substr($name, strlen($name) - $vlen);
331 while ($majver && !is_numeric($majver[0])) {
332 $majver = substr($majver, 1);
334 if (($versioncomponents[0] != 0) && $majver != $versioncomponents[0]) {
335 $this->
_addWarning(
'version',
'first version number "' .
336 $versioncomponents[0] .
'" must match the postfix of ' .
337 'package name "' . $name .
'" (' .
341 if ($versioncomponents[0] == $majver) {
342 if ($versioncomponents[2][0] ==
'0') {
343 if ($versioncomponents[2] ==
'0') {
346 "version $majver." . $versioncomponents[1] .
347 '.0 probably should not be alpha or beta');
349 } elseif (strlen($versioncomponents[2]) > 1) {
355 "version $majver." . $versioncomponents[1] .
356 '.0 cannot be alpha or beta');
361 "bugfix versions ($majver.x.y where y > 0) should " .
362 'not be alpha or beta');
365 } elseif ($versioncomponents[0] !=
'0') {
367 "only versions 0.x.y and $majver.x.y are allowed for alpha/beta releases");
370 if ($versioncomponents[0] .
'a' ==
'0a') {
373 if ($versioncomponents[0] == 0) {
374 $versioncomponents[0] =
'0';
376 'version "' . $version .
'" should be "' .
377 implode(
'.' ,$versioncomponents) .
'"');
383 if ($versioncomponents[0] ==
'0') {
384 $this->
_addWarning(
'version',
'versions less than 1.0.0 cannot ' .
388 if (!is_numeric($versioncomponents[2])) {
389 if (preg_match(
'/\d+(rc|a|alpha|b|beta)\d*/i',
390 $versioncomponents[2])) {
391 $this->
_addWarning(
'version',
'version "' . $version .
'" or any ' .
392 'RC/beta/alpha version cannot be stable');
398 if ($this->_packagexml->getExtends()) {
399 $vlen = strlen($versioncomponents[0] .
'');
400 $majver = substr($name, strlen($name) - $vlen);
401 while ($majver && !is_numeric($majver[0])) {
402 $majver = substr($majver, 1);
404 if (($versioncomponents[0] != 0) && $majver != $versioncomponents[0]) {
405 $this->
_addWarning(
'version',
'first version number "' .
406 $versioncomponents[0] .
'" must match the postfix of ' .
407 'package name "' . $name .
'" (' .
411 } elseif ($versioncomponents[0] > 1) {
412 $this->
_addWarning(
'version',
'major version x in x.y.z may not be greater than ' .
413 '1 for any package that does not have an <extends> tag');