- Move the version api getter to the PluginManager And make it such that it can be mocked, but not pollute the public interface. That means "protected" visibility.
- The plugin api version constant should still be used throughout the code.
- Use different fixtures class names
- Use regex possessive quantifiers for performance
- Use full words for readability
Instead of developing plugins against a single, fixed Plugin API version - `"composer-plugin-api": "1.0.0"`, this change will allow plugin developers to use versions like `"composer-plugin-api": "~1.1"` or `"composer-plugin-api": ">=2.1 <3.0"`, aka actual Composer-compatible constraints.
Only the "1.0", "1.0.0" and "1.0.0" Plugin API versions will be regarded as BC versions, and internally converted to "^1.0"; every other declared version string will be kept as it is.
Because of this new constraint flexibility, plugin version mismatches will be skipped, which means those plugin will NOT be registered to the system. Previously, a mismatch triggered a warning, but plugins were still registered.
This happens on "new PlatformRepository(array($somePackage))".
The parent constructor calls "\Composer\Repository\ArrayRepository::addPackage()",
which, on a brand new repo object, further calls "\Composer\Repository\PlatformRepository::initialize()"
and finally this iterates over a NULLd "$this->overrides", triggering the error.
for some reason it does not work (in packagist) without the $output param. I don't get any error message here, maybe someone has an idea, why?
Anyway, need this ;)
I need to override the preProcess method from a child class.
The use case is related to package renaming in a private satis repository. I understand the implication for packagist (and other public repository) but keeping the root packageName cause problem when you need to rename a package.
I will override override the name assignation with this
```PHP
// use the main identifier if name is not present
$data['name'] = !isset($data['name']) ? $this->packageName : $data['name'];
```