-
Notifications
You must be signed in to change notification settings - Fork 846
Add Custom Autoloader #12447
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add Custom Autoloader #12447
Conversation
This is an automated check which relies on |
|
I like where this is going |
tyxla
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nice work here, Enej!
I wonder if we can get rid of a bunch of code, considering we no longer care about PHP 5.2.
packages/autoloader/composer.json
Outdated
| "description": "An autoloader for Jetpack packages", | ||
| "type": "library", | ||
| "license": "GPL-2.0-or-later", | ||
| "version": "1.0.0", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do we need a specific version here, or can we rely on the tags instead (like we're planning to do for the other packages)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I am not sure how to make it work without a version here.
I run into error when I start with an empty vendor directory.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
That makes sense, but it's a bug indeed. #12480 resolves that - it should unblock this once it lands.
The problem is that Composer needs a version when with the stable minimum stability constraint. But in #12480 we suggest to lower the minimum stability constraint to @dev, as it'll unblock us in our goal to always use the local package in Jetpack (be it for development or for production).
|
This is a really interesting approach. Definitely keep pushing in this direction. |
jeherve
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This does not seem to work for me.
When I try to activate the test plugin, I get the following:
PHP Warning: require(/var/www/html/wp-content/plugins/a/vendor/autoload.php): failed to open stream: No such file or directory in /var/www/html/wp-content/plugins/a/a.php on line 8
I tried to do the following:
yarn docker:sh
cd /var/www/html/wp-content/plugins/a
composer install
And got the following error:
/var/www/html/wp-content/plugins/a# composer install
You are running composer with xdebug enabled. This has a major impact on runtime performance. See https://getcomposer.org/xdebug
Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
[ErrorException]
"continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"?
install [--prefer-source] [--prefer-dist] [--dry-run] [--dev] [--no-dev] [--no-plugins] [--no-custom-installers] [--no-autoloader] [--no-scripts] [--no-progress] [-v|vv|vvv|--verbose] [-o|--optimize-autoloader] [-a|--classmap-authoritative] [--ignore-platform-reqs] [--] [<packages>]...
I tried to rm composer.lock and then run composer install again, but that did not help.
|
NOTE: found that we can run |
ffbacef to
5ab5eae
Compare
| * | ||
| * @param bool $classMapAuthoritative | ||
| */ | ||
| public function setClassMapAuthoritative( $classMapAuthoritative ) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
could we remove this method? I think it doesn't differ from the parent
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
removed
|
Will this do anything as it stands right now, since it's not called from |
gravityrail
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I am ok with merging this so we have time to refine it before the next Jetpack release. Thank you @enejb for the amazing work on this!
|
Some of the changes that @lezama and I worked on. At the end were
|
7a4d3f3 to
7df90c1
Compare
Removed the un necessery gitignore lines.
* Add Custom Autoloader (#12447) * Try Custom Autoloader * spelling fix Co-Authored-By: Marin Atanasov <[email protected]> * minor space fix Co-Authored-By: Marin Atanasov <[email protected]> * minor space fix. Co-Authored-By: Marin Atanasov <[email protected]> * Updated to make it even simpler * test plugin * a Toy plugin :) 🚂 * Minor update * Minor update * Fixes typo * delete file * Minor updates * Added limitaionts section to readme * ooops * Fix readme * Turn the jetpack-autoloader into a package. * fixes to the jetpack a custom plugin * typo Co-Authored-By: Marin Atanasov <[email protected]> * remove scripts to "a" no longer needed thanks to @enejb magic * Update packages/autoloader/README.md fixes more wording in the readme Co-Authored-By: Miguel Lezama <[email protected]> * Update the version numbers of packages insead of branches * forgot about the plugin * update "a" composer * Update the a composer lock file. * Revert "Update the a composer lock file." This reverts commit 90f2cb8dbc50e15caf19fa0b88e1ee201f8f21c5. * typo fix Co-Authored-By: Miguel Lezama <[email protected]> * Rebased against master, testes that a plugin works as expected * Remove not needed code * Minor readme fix * Remoce Space * Add filter to prevent the autoloader from loading a particular version * add b toy plugin depending on Jetpack Logo 1.0.1 Co-Authored-By: Marin Atanasov <[email protected]> * minor space fix Co-Authored-By: Miguel Lezama <[email protected]> * Update a comment * Fix phpcs fixes * Make the remove class_map from the global name space, fix phpcs issues * Add the autoload_packages to be ignored. * Add debug info * Remove versions from composer.json of packages * Add missing vendor to namespace * Fix typo * Fix typo and add punctuation * Fix a typo * Update .gitignore Co-Authored-By: Jeremy Herve <[email protected]> * Update all the composer files * Take into account the @dev and always use the dev-* version * Bug Fix load the latest version! * Update the logic when enqueing the classes * Update to use Namespaces * Add tests to make sure that the enqueing works as expected * Fix suggestions from Marin * Remove generateClassMap method * Fix the tests, rename the fucntion name to be more accurate * More fixes to the tests. * FuN * Making it all work again * Update the lock file * Minor * Remove unused plugins (#12529) * Removed unnecessary gitignore lines. * Separate the connection library into its own package. (#12399) * Added an interface as a guide for the new package methods. * Add package structure * Initialized the composer library, added gitignore. * Removed phpunit from connection dependencies. * Added first real code to the connection manager class, as well as tests for it. * Renamed the test folder to tests. * Made the option name be a class constant. * Added 10up's WP_Mock as a dependency, refactored the injection to use filters instead of setters. * Changed the internal method accessibility to protected. * Initialized an empty package repo for the options manager. * Added the options package as a dependency to the master repo. * Added a package structure placeholder for the options manager. * Added the first test for the delete option method. * Added the update method and a test for it. * Added a test for the grouped option deletion. * Added the group updater method and a test for it. * Added the grouped option getter and a test for it. * Added a test for the noncompact option getter. * Added tests for network option manipulation. * Removed autoloader requirement in favour of the existing one. * Added the connection manager secret generator to actual Jetpack class. * Removed individual gitignore files in favor of a parent-level file, props @tyxla! * Moved packages source code into src folders. * Removed the V7 part of the namespace. * Remove v7 from namespace in the Manager Interface * Remove V7 from namespaces * Add Automattic to the namespace * Rename jetpack-[name] packages to [name] * Update composer lock * Adding a package for Jetpack Constants * Attempting to fix WPCOM tests. * Excluding packages folder from linting for PHP 5.6 and earlier. * adjust syntax in connection tests * removing new unit tests. i'm not sure why they are failing. we can re-add them later. * reverting last commit, and fixing tests in `packages/options` * ah, one more * remove an un-needed linting hack (#12543) * Composer: avoid duplicate repositories key (#12546) * Composer: avoid duplicate repositories key Rely on wildcard instead. See #12483 * Revert changes in composer.lock * Revert changes in composer.lock * Revert changes in composer.lock * Packages: Make logo package tests independent (#12514) * Move package tests to package directory * Add some dev deps to logo package * Ignore vendor of all packages * Add a logo package simple bootstrap * Add a logo package phpunit config * Cleanup package tests from Jetpack phpunit config * Remove WP prefix from class name * Make sure composer is installed * Try: add SCOPE to travis matrix * Try: Disable older PHP versions * Replace WP_Mock with PHPMock * Enable php 7.0 in Travis again * Make phpunit version more permissive * Fix setUp signature * Play with phpunit versions * Try enabling CI for feature branch * Try enabling CI for feature branch * Try enabling CI for feature branch * Revert latest changes * Try adding the branch to the whitelist * Enable PHP 5.6 again * Use php-mock instead of php-mock-phpunit * Run composer phpunit for all packages * Make mocking method protected * Add parent teardown * Remove whitelisted branch * Run only for packages with tests * remove trailing slash 🤔 * nope * not sure what I am doing * add debug statements * run only if we have `php` tests @zinigor @tyxla we need to normalise de connection one * Jetpack Options Package: just class map existing options class (#12562) * instead of a new implementation of jetpack options, let's class map it * Packages: Fix connection tests and allow them to run in CI (#12560) * Use php-mock instead of wp_mock * Add phpunit script * Migrate tests from wp_mock to phpmock * Make tests run in CI * Run travis only for packages that have the php test dir * Revert "Jetpack Options Package: just class map existing options class (#12562)" (#12571) This reverts commit 0e3ac7a. * Packages: Finish the constants package (#12558) * PSR-4 constants * Actually add namespacing to the constants class * Update composer.lock * Fix phpcs errors and add some docs * Add a package README * Move constant tests to the package * Update Jetpack to use the constants package * Fix constants usage in options package * Rename README variable Co-Authored-By: Miguel Lezama <[email protected]> * Fix typo Co-Authored-By: Miguel Lezama <[email protected]> * Use plural Co-Authored-By: Miguel Lezama <[email protected]> * Making Jetpack_Options a classmapped package. (#12577) * Making Jetpack_Options a classmapped package. * Update Jetpack to use new JITM package (#12516) * Update Jetpack to use new JITM package * Add instructions on package installation and usage (#12576) * Add instructions on package installation and usage * Move content about installing Composer to the doc regarding development environment. Add a pointer to that section in the packages' readme * Explain how to install Composer on systems other than macOS. Props @aldavigdis * Update docs/development-environment.md Co-Authored-By: Jeremy Herve <[email protected]> * Apply suggestions from code review Co-Authored-By: Jeremy Herve <[email protected]> * Add reference to Composer installation in the section that explains how to start developing for Jetpack * Packages: Fix alias example in README (#12582) * Packages: Move sync to a classmapped package (#12572) * Move all sync files to the package * Add sync package composer.json * Composer require the new sync package * Update composer.lock after adding sync package dependency * Remove some sync file requiring in sync package * Remove some sync file requiring in the rest of Jetpack * Hook Jetpack actions properly * Fix a rebase conflict * Fix update post terms test to not compare against the DB * Packages: Move JITM tests to package and fix deps (#12583) * Add phpunit devdep and composer phpunit script * Add JITM tests config * Move tests and add bootstrap * Remove legacy jitm suite * Rely on @dev connection package * Remove version * Update minimum stability and prefer stable * Fix tests * Update composer.lock * Fix whitespace Co-Authored-By: Miguel Lezama <[email protected]> * Prepend an empty line Co-Authored-By: Miguel Lezama <[email protected]> * Connection Package: add Jetpack_Data methods (#12580) Jetpack_Data -> Connection package * removes php_bug_66229_check method - it's no longer used in the code base. * Moving is_usable_domain to Connection package. * Moves `get_access_token` to Connection package. * Create package for Jetpack Tracking (#12596) Created package for Jetpack Tracking * Update/package logo add gray (#12610) * Update the logo package to include a gray version. Add parameter to render method to specify the type * Remove svg files. Update method to return an SVG string that can be stylized with CSS. Update tests. * Fixed issue with logo in Jetpack connection banner in WP Admin * Update test so it strictly tests two instances of the CSS class * Optimize performance. Use const since the string is immutable. Use nowdoc to compose the string. * Update logo tests in new file * Constants_Manager -> Constants * inc/lib/admin-pages/class.jetpack-react-page.php (#12627) * Add jetpack signature class to connection package (#12620) * Connection package: Add class.jetpack-signature and class.jetpack-error to connection package * DNA: Don't require composer autoloader (#12624) * Jitm package, don't use global Jetpack class (#12629)
* Try Custom Autoloader * spelling fix Co-Authored-By: Marin Atanasov <[email protected]> * minor space fix Co-Authored-By: Marin Atanasov <[email protected]> * minor space fix. Co-Authored-By: Marin Atanasov <[email protected]> * Updated to make it even simpler * test plugin * a Toy plugin :) 🚂 * Minor update * Minor update * Fixes typo * delete file * Minor updates * Added limitaionts section to readme * ooops * Fix readme * Turn the jetpack-autoloader into a package. * fixes to the jetpack a custom plugin * typo Co-Authored-By: Marin Atanasov <[email protected]> * remove scripts to "a" no longer needed thanks to @enejb magic * Update packages/autoloader/README.md fixes more wording in the readme Co-Authored-By: Miguel Lezama <[email protected]> * Update the version numbers of packages insead of branches * forgot about the plugin * update "a" composer * Update the a composer lock file. * Revert "Update the a composer lock file." This reverts commit 90f2cb8dbc50e15caf19fa0b88e1ee201f8f21c5. * typo fix Co-Authored-By: Miguel Lezama <[email protected]> * Rebased against master, testes that a plugin works as expected * Remove not needed code * Minor readme fix * Remoce Space * Add filter to prevent the autoloader from loading a particular version * add b toy plugin depending on Jetpack Logo 1.0.1 Co-Authored-By: Marin Atanasov <[email protected]> * minor space fix Co-Authored-By: Miguel Lezama <[email protected]> * Update a comment * Fix phpcs fixes * Make the remove class_map from the global name space, fix phpcs issues * Add the autoload_packages to be ignored. * Add debug info * Remove versions from composer.json of packages * Add missing vendor to namespace * Fix typo * Fix typo and add punctuation * Fix a typo * Update .gitignore Co-Authored-By: Jeremy Herve <[email protected]> * Update all the composer files * Take into account the @dev and always use the dev-* version * Bug Fix load the latest version! * Update the logic when enqueing the classes * Update to use Namespaces * Add tests to make sure that the enqueing works as expected * Fix suggestions from Marin * Remove generateClassMap method * Fix the tests, rename the fucntion name to be more accurate * More fixes to the tests. * FuN * Making it all work again * Update the lock file * Minor
* Add Custom Autoloader (#12447) * Try Custom Autoloader * spelling fix Co-Authored-By: Marin Atanasov <[email protected]> * minor space fix Co-Authored-By: Marin Atanasov <[email protected]> * minor space fix. Co-Authored-By: Marin Atanasov <[email protected]> * Updated to make it even simpler * test plugin * a Toy plugin :) 🚂 * Minor update * Minor update * Fixes typo * delete file * Minor updates * Added limitaionts section to readme * ooops * Fix readme * Turn the jetpack-autoloader into a package. * fixes to the jetpack a custom plugin * typo Co-Authored-By: Marin Atanasov <[email protected]> * remove scripts to "a" no longer needed thanks to @enejb magic * Update packages/autoloader/README.md fixes more wording in the readme Co-Authored-By: Miguel Lezama <[email protected]> * Update the version numbers of packages insead of branches * forgot about the plugin * update "a" composer * Update the a composer lock file. * Revert "Update the a composer lock file." This reverts commit 90f2cb8dbc50e15caf19fa0b88e1ee201f8f21c5. * typo fix Co-Authored-By: Miguel Lezama <[email protected]> * Rebased against master, testes that a plugin works as expected * Remove not needed code * Minor readme fix * Remoce Space * Add filter to prevent the autoloader from loading a particular version * add b toy plugin depending on Jetpack Logo 1.0.1 Co-Authored-By: Marin Atanasov <[email protected]> * minor space fix Co-Authored-By: Miguel Lezama <[email protected]> * Update a comment * Fix phpcs fixes * Make the remove class_map from the global name space, fix phpcs issues * Add the autoload_packages to be ignored. * Add debug info * Remove versions from composer.json of packages * Add missing vendor to namespace * Fix typo * Fix typo and add punctuation * Fix a typo * Update .gitignore Co-Authored-By: Jeremy Herve <[email protected]> * Update all the composer files * Take into account the @dev and always use the dev-* version * Bug Fix load the latest version! * Update the logic when enqueing the classes * Update to use Namespaces * Add tests to make sure that the enqueing works as expected * Fix suggestions from Marin * Remove generateClassMap method * Fix the tests, rename the fucntion name to be more accurate * More fixes to the tests. * FuN * Making it all work again * Update the lock file * Minor * Remove unused plugins (#12529) * Removed unnecessary gitignore lines. * Separate the connection library into its own package. (#12399) * Added an interface as a guide for the new package methods. * Add package structure * Initialized the composer library, added gitignore. * Removed phpunit from connection dependencies. * Added first real code to the connection manager class, as well as tests for it. * Renamed the test folder to tests. * Made the option name be a class constant. * Added 10up's WP_Mock as a dependency, refactored the injection to use filters instead of setters. * Changed the internal method accessibility to protected. * Initialized an empty package repo for the options manager. * Added the options package as a dependency to the master repo. * Added a package structure placeholder for the options manager. * Added the first test for the delete option method. * Added the update method and a test for it. * Added a test for the grouped option deletion. * Added the group updater method and a test for it. * Added the grouped option getter and a test for it. * Added a test for the noncompact option getter. * Added tests for network option manipulation. * Removed autoloader requirement in favour of the existing one. * Added the connection manager secret generator to actual Jetpack class. * Removed individual gitignore files in favor of a parent-level file, props @tyxla! * Moved packages source code into src folders. * Removed the V7 part of the namespace. * Remove v7 from namespace in the Manager Interface * Remove V7 from namespaces * Add Automattic to the namespace * Rename jetpack-[name] packages to [name] * Update composer lock * Adding a package for Jetpack Constants * Attempting to fix WPCOM tests. * Excluding packages folder from linting for PHP 5.6 and earlier. * adjust syntax in connection tests * removing new unit tests. i'm not sure why they are failing. we can re-add them later. * reverting last commit, and fixing tests in `packages/options` * ah, one more * remove an un-needed linting hack (#12543) * Composer: avoid duplicate repositories key (#12546) * Composer: avoid duplicate repositories key Rely on wildcard instead. See #12483 * Revert changes in composer.lock * Revert changes in composer.lock * Revert changes in composer.lock * Packages: Make logo package tests independent (#12514) * Move package tests to package directory * Add some dev deps to logo package * Ignore vendor of all packages * Add a logo package simple bootstrap * Add a logo package phpunit config * Cleanup package tests from Jetpack phpunit config * Remove WP prefix from class name * Make sure composer is installed * Try: add SCOPE to travis matrix * Try: Disable older PHP versions * Replace WP_Mock with PHPMock * Enable php 7.0 in Travis again * Make phpunit version more permissive * Fix setUp signature * Play with phpunit versions * Try enabling CI for feature branch * Try enabling CI for feature branch * Try enabling CI for feature branch * Revert latest changes * Try adding the branch to the whitelist * Enable PHP 5.6 again * Use php-mock instead of php-mock-phpunit * Run composer phpunit for all packages * Make mocking method protected * Add parent teardown * Remove whitelisted branch * Run only for packages with tests * remove trailing slash 🤔 * nope * not sure what I am doing * add debug statements * run only if we have `php` tests @zinigor @tyxla we need to normalise de connection one * Jetpack Options Package: just class map existing options class (#12562) * instead of a new implementation of jetpack options, let's class map it * Packages: Fix connection tests and allow them to run in CI (#12560) * Use php-mock instead of wp_mock * Add phpunit script * Migrate tests from wp_mock to phpmock * Make tests run in CI * Run travis only for packages that have the php test dir * Revert "Jetpack Options Package: just class map existing options class (#12562)" (#12571) This reverts commit 0e3ac7a. * Packages: Finish the constants package (#12558) * PSR-4 constants * Actually add namespacing to the constants class * Update composer.lock * Fix phpcs errors and add some docs * Add a package README * Move constant tests to the package * Update Jetpack to use the constants package * Fix constants usage in options package * Rename README variable Co-Authored-By: Miguel Lezama <[email protected]> * Fix typo Co-Authored-By: Miguel Lezama <[email protected]> * Use plural Co-Authored-By: Miguel Lezama <[email protected]> * Making Jetpack_Options a classmapped package. (#12577) * Making Jetpack_Options a classmapped package. * Update Jetpack to use new JITM package (#12516) * Update Jetpack to use new JITM package * Add instructions on package installation and usage (#12576) * Add instructions on package installation and usage * Move content about installing Composer to the doc regarding development environment. Add a pointer to that section in the packages' readme * Explain how to install Composer on systems other than macOS. Props @aldavigdis * Update docs/development-environment.md Co-Authored-By: Jeremy Herve <[email protected]> * Apply suggestions from code review Co-Authored-By: Jeremy Herve <[email protected]> * Add reference to Composer installation in the section that explains how to start developing for Jetpack * Packages: Fix alias example in README (#12582) * Packages: Move sync to a classmapped package (#12572) * Move all sync files to the package * Add sync package composer.json * Composer require the new sync package * Update composer.lock after adding sync package dependency * Remove some sync file requiring in sync package * Remove some sync file requiring in the rest of Jetpack * Hook Jetpack actions properly * Fix a rebase conflict * Fix update post terms test to not compare against the DB * Packages: Move JITM tests to package and fix deps (#12583) * Add phpunit devdep and composer phpunit script * Add JITM tests config * Move tests and add bootstrap * Remove legacy jitm suite * Rely on @dev connection package * Remove version * Update minimum stability and prefer stable * Fix tests * Update composer.lock * Fix whitespace Co-Authored-By: Miguel Lezama <[email protected]> * Prepend an empty line Co-Authored-By: Miguel Lezama <[email protected]> * Connection Package: add Jetpack_Data methods (#12580) Jetpack_Data -> Connection package * removes php_bug_66229_check method - it's no longer used in the code base. * Moving is_usable_domain to Connection package. * Moves `get_access_token` to Connection package. * Create package for Jetpack Tracking (#12596) Created package for Jetpack Tracking * Update/package logo add gray (#12610) * Update the logo package to include a gray version. Add parameter to render method to specify the type * Remove svg files. Update method to return an SVG string that can be stylized with CSS. Update tests. * Fixed issue with logo in Jetpack connection banner in WP Admin * Update test so it strictly tests two instances of the CSS class * Optimize performance. Use const since the string is immutable. Use nowdoc to compose the string. * Update logo tests in new file * Constants_Manager -> Constants * inc/lib/admin-pages/class.jetpack-react-page.php (#12627) * Add jetpack signature class to connection package (#12620) * Connection package: Add class.jetpack-signature and class.jetpack-error to connection package * DNA: Don't require composer autoloader (#12624) * Jitm package, don't use global Jetpack class (#12629)
This PR creates a custom autoloader package that could be used by a number of different plugins
to always load the latest version of the package libraries.
The Readme has more info.
This PR is a mash up of #12295 and https://github.com/schlessera/composer-wp-autoload/
Changes proposed in this Pull Request:
In this PR we create a new composer plugin that helps generate a few new files in the vender directory.
Is this a new feature or does it add/remove features to an existing part of Jetpack?
Testing instructions:
$ yarn docker:sh$ cd /var/www/html/wp-content/plugins/jetpack/$ composer installDoes the site still load as expected.
Test it actually loads the more up to date version of the package
$ yarn docker:sh"version": "1.0.0"topackages/logo/composer.jsoninside the Jetpack plugin folderpackages/logo/src/Logo.phpcomposer installforwp-content/plugins/a/"version": "1.0.1"topackages/logo/composer.jsoninside the Jetpack plugin folderpackages/logo/src/Logo.phpcomposer installforwp-content/plugins/b/aandbProposed changelog entry for your changes: