[commits] [Wiki] changed: Project/NoMorePear
Ralf Lang (B1 Systems GmbH)
lang at b1-systems.de
Thu Feb 14 09:23:27 UTC 2019
rlang Thu, 14 Feb 2019 09:23:27 +0000
Modified page: https://wiki.horde.org/Project/NoMorePear
New Revision: 5
Change log: format and suggestions for .horde.yml
@@ -1,9 +1,9 @@
[[toc]]
+ No More Pear: Move to composer
-Remove any hard runtime or installation dependency on pear
+Remove any hard runtime or installation dependency on pear and pearisms
++ Bugs
List any tickets on http://bugs.horde.org/ that cover this issue or
are relevant to it.
@@ -24,13 +24,46 @@
https://github.com/horde/Core/pull/2
++++ l10n/translation tools?
-+++ Installation
-
-++++ Document .horde.yml format and how it relates to composer json
and pear xml
+
++++ Document .horde.yml format and how it relates to composer json
and pear xml
+TODO: beautify, break out to separate page
+
+id: string, mandatory, uppercase and minus Horde_ for libs, lowercase
for apps (horde, turba, Autoloader, Exception)
+name: string, mandatory, Uppercase (Horde, Turba, Autoloader, Exception)
+full: string, mandatory, a one-line description
+description: string, mandatory, a multi-line description
+list: string, mandatory, may be empty: a hint on the mailing list
appropriate for the component
+type: string, mandatory, either "application" or "library"
+homepage: string, mandatory, a related informational url
+authors: list, each element has string attributes name, user, email,
active (true/false), role (lead, developer)
+version: has sub keys api and release each with a version string
(1.0.0 format)
+state: has sub keys api and release, each with a stabilitiy string
(stable, beta, alpha)
+license: has subkeys identifier and uri
+license: identifier: An SPDX license identifier string
+license: uri: a link to a fulltext license
+dependencies: top level structure for several optional keys
+dependencies: required: multilevel list of mandatory dependencies
(php, pear, ext) - The key and all sub keys are optional
+dependencies: required: php: optional key. The value should be a
version constraint string
+dependencies: required: pear: optional key. This is a list of
channel/package keys and version constraint values. For pecl
extensions, there may be additional sub keys instead of a version string
+dependencies: required: ext: optional key. This is a list of php
binary extensions (hash, pdo, ...) as keys and version constraint
strings as values.
+dependencies: optional: multilevel list of optional, suggested
collaborators (pear, ext) - The key and all sub keys are optional
+dependencies: required: pear: optional key. This is a list of
channel/package keys and version constraint values. For pecl
extensions, there may be
+
+++++ Suggested additions to the format
+
+I suggest to add an optional top level key "autoload", inspired by
corresponding composer.yml strucute
+It hints how autoloaders should expect to find php classes from the package.
+Structure would be
+autoload: psr-0: list of "Class_Prefix" : "dir"
+autoload: psr-4: list of "\\Prefix" : "dir"
+autoload: map: list of directories to recursively scan for php files
containing classes
+
+The default if absent would be equivalent to psr-0: "Horde_Foo": /Lib
++++ Installation
++++ Generate composer json file from .horde.yml
@@ -42,18 +75,18 @@
https://github.com/horde/components/pull/3
Other resources
Do we want to keep a whitelist of other channels/packages which
should be pulled from packagist or github rather than pear?
-
+
++++ Composer plugin: install apps below base rather than vendor/
(we don't want /vendor/ web-readable)
horde apps are type "horde-application" and get installed to
/$appname or base/appname
Installing/updating an app should clear cache and autoloader cache
Check if the app provides a registry snippet in /doc/
write horde.local.php if necessary
installing base should provide some initialization
-
+
++++ Composer plugin: copy, move or link js content from libraries
to horde/js
horde libs are type "horde-library" and get installed to /vendor/Horde/Foo
Maybe we find some trick
@@ -86,22 +119,27 @@
++++ Examining git-tools as a composer-native app:
git-tools binary detects the composer autoloader entrypoint
vendor/autoload.php and require_once it.
the composer autoloader is configured to provide a psr-4 autoloader
for the \\Horde\\GitTools namespace to ./lib
-
-++++ PSR-0 and packages
-
+
+++++ PSR-0, db migrations, classmaps and packages
+
Most horde library packages are simple to map to the psr-0 autoloader.
Package Horde_Foo would have all its classes in lib/Horde/Foo.
-
+
Some packages though have class names you would not expect from the
package name
Horde_Core has Horde_ErrorHandler & friends
Horde_Form has multiple classes in one file
Horde_Util has Horde_String
-
+
These either need to be scanned for additional mappings or need
"classmap" style autoload hints.
+Unit tests should be marked as autoload-dev (root package only autoloads)
+migrations should be autodetected by the composer writer. (TODO:
simply auto-add a classmap?)
+
+special case classmaps should be hinted by .horde.yml
+
-We also need to think about db migrations and unit tests.
+I am adding a new
++ Resources
https://getcomposer.org/doc/articles/custom-installers.md composer
notes on custom installers and plugins
More information about the commits
mailing list