From 7ceca9b7893c6b1605fcd18518cd15334f421bbd Mon Sep 17 00:00:00 2001 From: Jordi Boggiano Date: Thu, 8 Mar 2012 00:44:09 +0100 Subject: [PATCH] Suppress relaxed schema and build it on the fly in php, refs #151 --- res/composer-schema-lax.json | 190 --------------------------------- src/Composer/Compiler.php | 1 - src/Composer/Json/JsonFile.php | 14 ++- 3 files changed, 10 insertions(+), 195 deletions(-) delete mode 100644 res/composer-schema-lax.json diff --git a/res/composer-schema-lax.json b/res/composer-schema-lax.json deleted file mode 100644 index 097434381..000000000 --- a/res/composer-schema-lax.json +++ /dev/null @@ -1,190 +0,0 @@ -{ - "name": "Package", - "type": "object", - "additionalProperties": true, - "properties": { - "name": { - "type": "string", - "description": "Package name, including 'vendor-name/' prefix." - }, - "type": { - "description": "Package type, either 'library' for common packages, 'composer-installer' for custom installers, or a custom type defined by whatever project this package applies to.", - "type": "string" - }, - "target-dir": { - "description": "Forces the package to be installed into the given subdirectory path. This is used for autoloading PSR-0 packages that do not contain their full path. Use forward slashes for cross-platform compatibility.", - "type": "string" - }, - "description": { - "type": "string", - "description": "Short package description." - }, - "keywords": { - "type": "array", - "items": { - "type": "string", - "description": "A tag/keyword that this package relates to." - } - }, - "homepage": { - "type": "string", - "description": "Homepage URL for the project.", - "format": "uri" - }, - "version": { - "type": "string", - "description": "Package version, see http://packagist.org/about for more info on valid schemes." - }, - "time": { - "type": "string", - "description": "Package release date, in 'YYYY-MM-DD' or 'YYYY-MM-DD HH:MM:SS' format." - }, - "license": { - "type": ["string", "array"], - "description": "License name. Or an array of license names." - }, - "authors": { - "type": "array", - "description": "List of authors that contributed to the package. This is typically the main maintainers, not the full list.", - "items": { - "type": "object", - "additionalProperties": false, - "properties": { - "name": { - "type": "string", - "description": "Full name of the author.", - "required": true - }, - "email": { - "type": "string", - "description": "Email address of the author.", - "format": "email" - }, - "homepage": { - "type": "string", - "description": "Homepage URL for the author.", - "format": "uri" - } - } - } - }, - "require": { - "type": "object", - "description": "This is a hash of package name (keys) and version constraints (values) that are required to run this package.", - "additionalProperties": true - }, - "replace": { - "type": "object", - "description": "This is a hash of package name (keys) and version constraints (values) that can be replaced by this package.", - "additionalProperties": true - }, - "conflict": { - "type": "object", - "description": "This is a hash of package name (keys) and version constraints (values) that conflict with this package.", - "additionalProperties": true - }, - "provide": { - "type": "object", - "description": "This is a hash of package name (keys) and version constraints (values) that this package provides in addition to this package's name.", - "additionalProperties": true - }, - "recommend": { - "type": "object", - "description": "This is a hash of package name (keys) and version constraints (values) that this package recommends to be installed (typically this will be installed as well).", - "additionalProperties": true - }, - "suggest": { - "type": "object", - "description": "This is a hash of package name (keys) and version constraints (values) that this package suggests work well with it (typically this will only be suggested to the user).", - "additionalProperties": true - }, - "config": { - "type": ["object"], - "description": "Composer options.", - "properties": { - "vendor-dir": { - "type": "string", - "description": "The location where all packages are installed, defaults to \"vendor\"." - }, - "bin-dir": { - "type": "string", - "description": "The location where all binaries are linked, defaults to \"vendor/bin\"." - } - } - }, - "extra": { - "type": ["object", "array"], - "description": "Arbitrary extra data that can be used by custom installers, for example, package of type composer-installer must have a 'class' key defining the installer class name.", - "additionalProperties": true - }, - "autoload": { - "type": "object", - "description": "Description of how the package can be autoloaded.", - "properties": { - "psr-0": { - "type": "object", - "description": "This is a hash of namespaces (keys) and the directories they can be found into (values) by the autoloader.", - "additionalProperties": true - } - } - }, - "repositories": { - "type": ["object", "array"], - "description": "A set of additional repositories where packages can be found.", - "additionalProperties": true - }, - "bin": { - "type": ["array"], - "description": "A set of files that should be treated as binaries and symlinked into bin-dir (from config).", - "items": { - "type": "string" - } - }, - "scripts": { - "type": ["object"], - "description": "Scripts listeners that will be executed before/after some events.", - "properties": { - "pre-install-cmd": { - "type": ["array", "string"], - "description": "Occurs before the install command is executed, contains one or more Class::method callables." - }, - "post-install-cmd": { - "type": ["array", "string"], - "description": "Occurs after the install command is executed, contains one or more Class::method callables." - }, - "pre-update-cmd": { - "type": ["array", "string"], - "description": "Occurs before the update command is executed, contains one or more Class::method callables." - }, - "post-update-cmd": { - "type": ["array", "string"], - "description": "Occurs after the update command is executed, contains one or more Class::method callables." - }, - "pre-package-install": { - "type": ["array", "string"], - "description": "Occurs before a package is installed, contains one or more Class::method callables." - }, - "post-package-install": { - "type": ["array", "string"], - "description": "Occurs after a package is installed, contains one or more Class::method callables." - }, - "pre-package-update": { - "type": ["array", "string"], - "description": "Occurs before a package is updated, contains one or more Class::method callables." - }, - "post-package-update": { - "type": ["array", "string"], - "description": "Occurs after a package is updated, contains one or more Class::method callables." - }, - "pre-package-uninstall": { - "type": ["array", "string"], - "description": "Occurs before a package has been uninstalled, contains one or more Class::method callables." - }, - "post-package-uninstall": { - "type": ["array", "string"], - "description": "Occurs after a package has been uninstalled, contains one or more Class::method callables." - } - } - } - } -} diff --git a/src/Composer/Compiler.php b/src/Composer/Compiler.php index 86c6ffb44..563df4018 100644 --- a/src/Composer/Compiler.php +++ b/src/Composer/Compiler.php @@ -65,7 +65,6 @@ class Compiler } $this->addFile($phar, new \SplFileInfo(__DIR__.'/Autoload/ClassLoader.php'), false); $this->addFile($phar, new \SplFileInfo(__DIR__.'/../../res/composer-schema.json'), false); - $this->addFile($phar, new \SplFileInfo(__DIR__.'/../../res/composer-schema-lax.json'), false); $finder = new Finder(); $finder->files() diff --git a/src/Composer/Json/JsonFile.php b/src/Composer/Json/JsonFile.php index aca967a97..1b20af274 100644 --- a/src/Composer/Json/JsonFile.php +++ b/src/Composer/Json/JsonFile.php @@ -127,13 +127,19 @@ class JsonFile self::validateSyntax($content); } - $schemaFile = __DIR__ . '/../../../res/composer-schema'.($schema === self::LAX_SCHEMA ? '-lax' : '').'.json'; - $schema = json_decode(file_get_contents($schemaFile)); + $schemaFile = __DIR__ . '/../../../res/composer-schema.json'; + $schemaData = json_decode(file_get_contents($schemaFile)); + + if ($schema === self::LAX_SCHEMA) { + $schemaData->additionalProperties = true; + $schemaData->properties->name->required = false; + $schemaData->properties->description->required = false; + } $validator = new Validator(); - $validator->check($data, $schema); + $validator->check($data, $schemaData); - // TODO add more specific checks for common errors if needed + // TODO add more validation like check version constraints and such, perhaps build that into the arrayloader? if (!$validator->isValid()) { $errors = array();