1
0
Fork 0

Merge pull request #6034 from stof/change_inline_packages

Refactor the validation of inline package definitions
pull/5797/merge
Jordi Boggiano 2017-01-03 13:14:04 +01:00 committed by GitHub
commit 65aa8451fc
2 changed files with 217 additions and 67 deletions

View File

@ -46,33 +46,7 @@
"description": "License name. Or an array of license names." "description": "License name. Or an array of license names."
}, },
"authors": { "authors": {
"type": "array", "$ref": "#/definitions/authors"
"description": "List of authors that contributed to the package. This is typically the main maintainers, not the full list.",
"items": {
"type": "object",
"additionalProperties": false,
"required": [ "name"],
"properties": {
"name": {
"type": "string",
"description": "Full name of the author."
},
"email": {
"type": "string",
"description": "Email address of the author.",
"format": "email"
},
"homepage": {
"type": "string",
"description": "Homepage URL for the author.",
"format": "uri"
},
"role": {
"type": "string",
"description": "Author's role in the project."
}
}
}
}, },
"require": { "require": {
"type": "object", "type": "object",
@ -309,42 +283,7 @@
"additionalProperties": true "additionalProperties": true
}, },
"autoload": { "autoload": {
"type": "object", "$ref": "#/definitions/autoload"
"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 in (values, can be arrays of paths) by the autoloader.",
"additionalProperties": {
"type": ["string", "array"],
"items": {
"type": "string"
}
}
},
"psr-4": {
"type": "object",
"description": "This is a hash of namespaces (keys) and the PSR-4 directories they can map to (values, can be arrays of paths) by the autoloader.",
"additionalProperties": {
"type": ["string", "array"],
"items": {
"type": "string"
}
}
},
"classmap": {
"type": "array",
"description": "This is an array of directories that contain classes to be included in the class-map generation process."
},
"files": {
"type": "array",
"description": "This is an array of files that are always required on every request."
},
"exclude-from-classmap": {
"type": "array",
"description": "This is an array of patterns to exclude from autoload classmap generation. (e.g. \"exclude-from-classmap\": [\"/test/\", \"/tests/\", \"/Tests/\"]"
}
}
}, },
"autoload-dev": { "autoload-dev": {
"type": "object", "type": "object",
@ -566,6 +505,73 @@
} }
}, },
"definitions": { "definitions": {
"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,
"required": [ "name"],
"properties": {
"name": {
"type": "string",
"description": "Full name of the author."
},
"email": {
"type": "string",
"description": "Email address of the author.",
"format": "email"
},
"homepage": {
"type": "string",
"description": "Homepage URL for the author.",
"format": "uri"
},
"role": {
"type": "string",
"description": "Author's role in the project."
}
}
}
},
"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 in (values, can be arrays of paths) by the autoloader.",
"additionalProperties": {
"type": ["string", "array"],
"items": {
"type": "string"
}
}
},
"psr-4": {
"type": "object",
"description": "This is a hash of namespaces (keys) and the PSR-4 directories they can map to (values, can be arrays of paths) by the autoloader.",
"additionalProperties": {
"type": ["string", "array"],
"items": {
"type": "string"
}
}
},
"classmap": {
"type": "array",
"description": "This is an array of directories that contain classes to be included in the class-map generation process."
},
"files": {
"type": "array",
"description": "This is an array of files that are always required on every request."
},
"exclude-from-classmap": {
"type": "array",
"description": "This is an array of patterns to exclude from autoload classmap generation. (e.g. \"exclude-from-classmap\": [\"/test/\", \"/tests/\", \"/Tests/\"]"
}
}
},
"repository": { "repository": {
"type": "object", "type": "object",
"oneOf": [ "oneOf": [
@ -662,8 +668,153 @@
} }
}, },
"inline-package": { "inline-package": {
"$ref": "#", "required": ["name", "version"],
"required": ["name", "version"] "properties": {
"name": {
"type": "string",
"description": "Package name, including 'vendor-name/' prefix."
},
"type": {
"type": "string"
},
"target-dir": {
"description": "DEPRECATED: 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"
},
"keywords": {
"type": "array",
"items": {
"type": "string"
}
},
"homepage": {
"type": "string",
"format": "uri"
},
"version": {
"type": "string"
},
"time": {
"type": "string"
},
"license": {
"type": [
"string",
"array"
]
},
"authors": {
"$ref": "#/definitions/authors"
},
"require": {
"type": "object",
"additionalProperties": {
"type": "string"
}
},
"replace": {
"type": "object",
"additionalProperties": {
"type": "string"
}
},
"conflict": {
"type": "object",
"additionalProperties": {
"type": "string"
}
},
"provide": {
"type": "object",
"additionalProperties": {
"type": "string"
}
},
"require-dev": {
"type": "object",
"additionalProperties": {
"type": "string"
}
},
"suggest": {
"type": "object",
"additionalProperties": {
"type": "string"
}
},
"extra": {
"type": ["object", "array"],
"additionalProperties": true
},
"autoload": {
"$ref": "#/definitions/autoload"
},
"archive": {
"type": ["object"],
"properties": {
"exclude": {
"type": "array"
}
}
},
"bin": {
"type": ["array"],
"description": "A set of files that should be treated as binaries and symlinked into bin-dir (from config).",
"items": {
"type": "string"
}
},
"include-path": {
"type": ["array"],
"description": "DEPRECATED: A list of directories which should get added to PHP's include path. This is only present to support legacy projects, and all new code should preferably use autoloading.",
"items": {
"type": "string"
}
},
"source": {
"type": "object",
"required": ["type", "url", "reference"],
"properties": {
"type": {
"type": "string"
},
"url": {
"type": "string"
},
"reference": {
"type": "string"
},
"mirrors": {
"type": "array"
}
}
},
"dist": {
"type": "object",
"required": ["type", "url"],
"properties": {
"type": {
"type": "string"
},
"url": {
"type": "string"
},
"reference": {
"type": "string"
},
"shasum": {
"type": "string"
},
"mirrors": {
"type": "array"
}
}
}
},
"additionalProperties": true
} }
} }
} }

View File

@ -95,9 +95,8 @@ class ComposerSchemaTest extends \PHPUnit_Framework_TestCase
private function check($json) private function check($json)
{ {
$schema = json_decode(file_get_contents(__DIR__ . '/../../../../res/composer-schema.json'));
$validator = new Validator(); $validator = new Validator();
$validator->check(json_decode($json), $schema); $validator->check(json_decode($json), (object) array('$ref' => 'file://' . __DIR__ . '/../../../../res/composer-schema.json'));
if (!$validator->isValid()) { if (!$validator->isValid()) {
$errors = $validator->getErrors(); $errors = $validator->getErrors();