Merge one or more additional composer.json files at Composer runtime

Overview

Latest Stable Version License Build Status Code Coverage

Composer Merge Plugin

Merge multiple composer.json files at Composer runtime.

Composer Merge Plugin is intended to allow easier dependency management for applications which ship a composer.json file and expect some deployments to install additional Composer managed libraries. It does this by allowing the application's top level composer.json file to provide a list of optional additional configuration files. When Composer is run it will parse these files and merge their configuration settings into the base configuration. This combined configuration will then be used when downloading additional libraries and generating the autoloader.

Composer Merge Plugin was created to help with installation of MediaWiki which has core library requirements as well as optional libraries and extensions which may be managed via Composer.

Installation

Composer Merge Plugin 1.4.x (and older) requires Composer 1.x.

Composer Merge Plugin 2.0.x (and newer) is compatible with both Composer 2.x and 1.x.

$ composer require wikimedia/composer-merge-plugin

Upgrading from Composer 1 to 2

If you are already using Composer Merge Plugin 1.4 (or older) and you are updating the plugin to 2.0 (or newer), it is recommended that you update the plugin first using Composer 1.

If you update the incompatible plugin using Composer 2, the plugin will be ignored:

The "wikimedia/composer-merge-plugin" plugin was skipped because it requires a Plugin API version ("^1.0") that does not match your Composer installation ("2.0.0"). You may need to run composer update with the "--no-plugins" option.

Consequently, Composer will be unaware of the merged dependencies and will remove them requiring you to run composer update again to reinstall merged dependencies.

Usage

{
    "require": {
        "wikimedia/composer-merge-plugin": "dev-master"
    },
    "extra": {
        "merge-plugin": {
            "include": [
                "composer.local.json",
                "extensions/*/composer.json"
            ],
            "require": [
                "submodule/composer.json"
            ],
            "recurse": true,
            "replace": false,
            "ignore-duplicates": false,
            "merge-dev": true,
            "merge-extra": false,
            "merge-extra-deep": false,
            "merge-scripts": false
        }
    }
}

Updating sub-levels composer.json files

In order for Composer Merge Plugin to install dependencies from updated or newly created sub-level composer.json files in your project you need to run the command:

$ composer update

This will instruct Composer to recalculate the file hash for the top-level composer.json thus triggering Composer Merge Plugin to look for the sub-level configuration files and update your dependencies.

Plugin configuration

The plugin reads its configuration from the merge-plugin section of your composer.json's extra section. An include setting is required to tell Composer Merge Plugin which file(s) to merge.

include

The include setting can specify either a single value or an array of values. Each value is treated as a PHP glob() pattern identifying additional composer.json style configuration files to merge into the root package configuration for the current Composer execution.

The following sections of the found configuration files will be merged into the Composer root package configuration as though they were directly included in the top-level composer.json file:

require

The require setting is identical to include except when a pattern fails to match at least one file then it will cause an error.

recurse

By default the merge plugin is recursive; if an included file has a merge-plugin section it will also be processed. This functionality can be disabled by adding a "recurse": false setting.

replace

By default, Composer's conflict resolution engine is used to determine which version of a package should be installed when multiple files specify the same package. A "replace": true setting can be provided to change to a "last version specified wins" conflict resolution strategy. In this mode, duplicate package declarations found in merged files will overwrite the declarations made by earlier files. Files are loaded in the order specified by the include setting with globbed files being processed in alphabetical order.

ignore-duplicates

By default, Composer's conflict resolution engine is used to determine which version of a package should be installed when multiple files specify the same package. An "ignore-duplicates": true setting can be provided to change to a "first version specified wins" conflict resolution strategy. In this mode, duplicate package declarations found in merged files will be ignored in favor of the declarations made by earlier files. Files are loaded in the order specified by the include setting with globbed files being processed in alphabetical order.

Note: "replace": true and "ignore-duplicates": true modes are mutually exclusive. If both are set, "ignore-duplicates": true will be used.

merge-dev

By default, autoload-dev and require-dev sections of included files are merged. A "merge-dev": false setting will disable this behavior.

merge-extra

A "merge-extra": true setting enables the merging the contents of the extra section of included files as well. The normal merge mode for the extra section is to accept the first version of any key found (e.g. a key in the master config wins over the version found in any imported config). If replace mode is active (see above) then this behavior changes and the last key found will win (e.g. the key in the master config is replaced by the key in the imported config). If "merge-extra-deep": true is specified then, the sections are merged similar to array_merge_recursive() - however duplicate string array keys are replaced instead of merged, while numeric array keys are merged as usual. The usefulness of merging the extra section will vary depending on the Composer plugins being used and the order in which they are processed by Composer.

Note that merge-plugin sections are excluded from the merge process, but are always processed by the plugin unless recursion is disabled.

merge-scripts

A "merge-scripts": true setting enables merging the contents of the scripts section of included files as well. The normal merge mode for the scripts section is to accept the first version of any key found (e.g. a key in the master config wins over the version found in any imported config). If replace mode is active (see above) then this behavior changes and the last key found will win (e.g. the key in the master config is replaced by the key in the imported config).

Note: custom commands added by merged configuration will work when invoked as composer run-script my-cool-command but will not be available using the normal composer my-cool-command shortcut.

Running tests

$ composer install
$ composer test

Contributing

Bug, feature requests and other issues should be reported to the GitHub project. We accept code and documentation contributions via Pull Requests on GitHub as well.

  • PSR-2 Coding Standard is used by the project. The included test configuration uses PHP Code Sniffer to validate the conventions.
  • Tests are encouraged. Our test coverage isn't perfect but we'd like it to get better rather than worse, so please try to include tests with your changes.
  • Keep the documentation up to date. Make sure README.md and other relevant documentation is kept up to date with your changes.
  • One pull request per feature. Try to keep your changes focused on solving a single problem. This will make it easier for us to review the change and easier for you to make sure you have updated the necessary tests and documentation.

License

Composer Merge plugin is licensed under the MIT license. See the LICENSE file for more details.


Comments
  • Add support for Composer v2

    Add support for Composer v2

    Latest Update 2021-01-25 14:25 EST

    Notes:

    1. Avoid unnecessary issue bumping. Please test this pull request and report issues or approve working state.
      See comment.
    2. Stability of this pull request's changeset needs additional testing from the community, such as unintentional updates upon requiring this plugin.
      See comment.
    3. Project is stuck in the process of transferring ownership to a new team within the Wikimedia Foundation.
      See comment.
    4. Since v1.4 of the plugin does not support Composer v2, the plugin is ignored when updating to v1.5. As a result, Composer is unaware of the merged dependencies and removes them. Either update the plugin with Composer v1 first or run composer update again.
      See comment.
    5. Unintentional lock file updates caused by isFirstInstall() on Composer v2. Listening only to post-update-cmd instead of post-install-cmd might be more sensible. See comment and followup.
    6. Please be patient, we don't want to push broken changes.

    How to test:

    {
        "repositories": [
            {
                "type":"vcs",
                "url":"https://github.com/mcaskill/composer-merge-plugin"
            }
        ],
        "require": {
            "wikimedia/composer-merge-plugin": "dev-feature/composer-v2 as 1.5.0"
        }
    }
    

    Tasks:

    • [x] Find alternative to install inherited dependencies without affecting locked dependencies.
      See comment #1, comment #2, comment #3.
    • [x] Rebase to include #197 and #199
    • [x] Update port of MultiConstraint to latest version of composer/semver.
      See comment.
    • [x] Method Factory::getLockFile() does not exist in Composer 1.
      See comment.

    Replaces #187, #185, as fix for #184 (as per composer/composer#8726)

    I've tested using the example and the unit tests and it works in Composer v1 and v2.

    This alternative proposal forgoes PRE_DEPENDENCIES_SOLVING entirely to avoid over-complicating the codebase and streamline the plugin's merge logic.

    The issue with the previous attempts (as well as attempts on other plugins) stems from a miscommunication from the Composer team of the major difference in how v1 and v2 resolve and install dependencies.

    […] Roughly speaking:

    • Composer v1: Composer resolves dependencies (dispatching *_DEPENDENCIES_SOLVING), iterates packages (while dispatching PRE_PACKAGE_* before PRE_FILE_DOWNLOAD), then finally writes the lock file.
    • Composer v2: Composer resolves dependencies (dispatching PRE_POOL_CREATE), writes the lock file, dispatches PRE_OPERATIONS_EXEC, downloads the packages (while dispatching PRE_FILE_DOWNLOAD), then iterates packages (while dispatching PRE_PACKAGE_*).

    In particular, people are assuming that PRE_OPERATIONS_EXEC is a replacement for PRE_DEPENDENCIES_SOLVING since they are dispatched in a similar-looking routine. The closest event to the latter would actually be PRE_POOL_CREATE. — composer/composer#8726

    Back to my proposal.

    Currently, the use of PRE_DEPENDENCIES_SOLVING in the plugin is used to inject duplicate requirements (usually with a different version constraints) into the solver (while distinguishing between require and require-dev).

    What I propose replaces the duplicate links tracking in ExtraPackage by back porting Composer 2's new static MultiConstraint::create() method which can be used to resolve complex-constraints early on. In turn, this makes the need for PRE_DEPENDENCIES_SOLVING obsolete.

    I hope this PR will, at the very least, help to figure out how to support Composer v2.

    opened by mcaskill 102
  • Compatibilty with Composer 2.0

    Compatibilty with Composer 2.0

    If you've landed here looking for a version of the wikimedia/composer-merge-plugin compatible with Composer 2.0, please see https://github.com/wikimedia/composer-merge-plugin/pull/189 and help test!


    It seems like composer 2.0 is right around the corner. Downloading https://getcomposer.org/composer.phar already gives you a 2.0 build.

    Are there any plans to make this plugin compatible? It currently explicitly requires a v1 composer api to be present.

    Your requirements could not be resolved to an installable set of packages.
    
      Problem 1
        - Root composer.json requires wikimedia/composer-merge-plugin 1.4.1 -> satisfiable by wikimedia/composer-merge-plugin[v1.4.1].
        - wikimedia/composer-merge-plugin v1.4.1 requires composer-plugin-api ^1.0 -> found composer-plugin-api[2.0.0] but it does not match your constraint.
    
    enhancement 
    opened by tobias-kuendig 83
  • [FR] Add merge `autoload` and resolve paths

    [FR] Add merge `autoload` and resolve paths

    It would be great if this addon also supported merging of PSR-4 autoload classes:

    "autoload": {
        "psr-4": {
            "Boardworld\\": "app/third_party/boardworld/src/"
        }
    }
    

    Additionally relative paths in included composer files should have their paths resolved correctly.

    enhancement 
    opened by leevigraham 16
  • Add ability to merge remote composer configurations via http

    Add ability to merge remote composer configurations via http

    I needed to pull a centralized list of required packages into multiple composer configs. Since composer has the ability to read JSON contents from a remote source via HTTP it was a straight forward change to composer-merge-plugin to correctly validate that the url exists (but still use glob for local files) and pass a RemoteFileSystem object to JsonFile constructor if we're dealing with a URL.

    enhancement submitter-change-requested 
    opened by codeandcountry 12
  • exists successfully after only half the work done

    exists successfully after only half the work done

    Running composer with the merge plugin just exits successfully (return 0) with only half the work done. I need to run it a second time to finish the work.

    Example: https://integration.wikimedia.org/ci/job/mwext-WikidataQuality-repo-tests-mysql-hhvm/164/consoleFull (search for composer update and see were on the second invocation it still has more work to do).

    question 
    opened by JanZerebecki 12
  • allow modern PHPUnit

    allow modern PHPUnit

     $ vendor/bin/phpunit --verbose
     PHPUnit 5.0.5 by Sebastian Bergmann and contributors.
    
     Runtime:       PHP 5.6.14 with Xdebug 2.3.3
     Configuration: /work/GIT/composer-merge-plugin/phpunit.xml.dist
    
     ......................                                            22 / 22 (100%)
    
     Time: 232 ms, Memory: 17.75Mb
    
     OK (22 tests, 223 assertions)
    
    duplicate 
    opened by remicollet 11
  • Allow merging of extra section in a deep way.

    Allow merging of extra section in a deep way.

    Motivation

    I am trying to use composer-merge-plugin with a composer-patches variation, which is late enough for composer-merge-plugin to have merged all sections.

    My root composer.json has something like:

    {
        "extra": {
            "merge-plugin": {
                "merge-extra": true,
                "merge-deep": true,
                "include": "composer.local.json"
            },
            "patches": {
                "wikimedia/composer-merge-plugin": {
                    "Add tests for merge-deep option": "patches/add-tests-for-merge-deep-option.diff"
                },
                "anothervendor/some-project": {
                    "some-patch": "patches/some-patch.diff"
                }
            }
        }
    }
    

    while my composer.local.json has:

    {
        "extra": {
            "patches": {
                "wikimedia/composer-merge-plugin": {
                    "Allow merging of sections in a deep way": "patches/add-merge-deep-option.diff"
                },
                "somevendor/some-project": {
                    "some-patch": "patches/some-patch.diff"
                }
            }
        }
    }
    

    Approach

    This adds a merge-deep option, which only really is meaningful for the extra sections using an utility function from Drupal.

    This makes the merge plugin much more useful for plugins that have deeper structures.

    This also allows both kinda workflows that the merge plugin is used with:

    • Defining some base skeleton files and including that, then overriding some keys (replace = TRUE)
    • Overriding the global composer.json with a local variant.

    Hopefully no-one will need this together, because that use case is not yet 'done', however I feel this is complex enough as is, to be a follow-up discussion.

    Notes

    Unfortunately Drupal 8 at the moment does not allow to reference the NestedArray component directly via a subtree split, so I had to copy the code for now.

    • Also see:
    • https://github.com/composer/composer/issues/5232 - where I am suggesting to give composer-merge-plugin a chance to always be run after init.
    • https://github.com/douggreen/drupal-composer-installer/pull/9 - where I am using this functionality.
    enhancement 
    opened by LionsAd 10
  • Merging VCS repository override of published package fails

    Merging VCS repository override of published package fails

    First reported by @ghprod in https://github.com/wikimedia/composer-merge-plugin/issues/71#issuecomment-154435583

    composer.json:

    {
        "require": {
            "wikimedia/composer-merge-plugin": "dev-master"
        },
        "config": {
            "preferred-install": "dist"
        },
        "extra": {
            "merge-plugin": {
                "include": "composer.local.json"
            }
        }
    }
    

    composer.local.json:

    {
        "repositories": [
            {
                "type": "vcs",
                "url": "https://github.com/ghprod/laravel-menu"
            }
        ],
        "require":{
            "lavary/laravel-menu": "dev-master#956e50f"
        }
    }
    

    Result:

    $ composer -vvv update
    [...snip...]
    Loading plugin Wikimedia\Composer\MergePlugin
      [merge-plugin] Loading composer.local.json...
      [merge-plugin] Adding vcs repository github.com/ghprod/laravel-menu
      [merge-plugin] Merging lavary/laravel-menu
    Loading composer repositories with package information
    [...snip...]
    Downloading https://api.github.com/repos/ghprod/laravel-menu
    Downloading https://api.github.com/repos/ghprod/laravel-menu/contents/composer.json?ref=master
    Downloading https://api.github.com/repos/ghprod/laravel-menu/commits/master
    Downloading https://api.github.com/repos/ghprod/laravel-menu/tags?per_page=100
    Downloading https://api.github.com/repos/ghprod/laravel-menu/git/refs/heads?per_page=100
    [...snip...]
    Reading composer.json of lavary/laravel-menu (master)
    Downloading https://api.github.com/repos/ghprod/laravel-menu/contents/composer.json?ref=956e50fbf0d99b2804539069b012ad52b4851dd2
    Downloading https://api.github.com/repos/ghprod/laravel-menu/commits/956e50fbf0d99b2804539069b012ad52b4851dd2
    [...snip...]
    Downloading http://packagist.org/p/lavary/laravel-menu%24cb8432bd74b707af0300352a1d49742389810f45e5646550e5dca3a823fe4c55.json
    [...snip...]
    Analyzed 1426 packages to resolve dependencies
    Analyzed 1200 rules to resolve dependencies
    [...snip...]
      - Installing lavary/laravel-menu (dev-master bebce99)
    Downloading https://api.github.com/repos/lavary/laravel-menu/zipball/bebce996ef08cf911da0139c30a2da03a2768326
    

    The installed revision (bebce99) is the head of the dev branch of the project as listed on Packagist. The alternate VCS repository was not used.

    If the require for "lavary/laravel-menu" is moved to composer.json, results are slightly different but still not correct. In that case the logs report:

      - Installing lavary/laravel-menu (dev-master 956e50f)
    Downloading https://api.github.com/repos/lavary/laravel-menu/zipball/956e50f
    

    This download is still from the wrong repository in this case and the files fetched from GitHub are not not actually for the desired hash.

    If the "repositories" are moved to composer.json instead, the new output is:

      - Installing lavary/laravel-menu (dev-master 956e50f)
    Downloading https://api.github.com/repos/ghprod/laravel-menu/zipball/956e50fbf0d99b2804539069b012ad52b4851dd2
    

    This is the desired result for all three tests.

    I think the issue here is the order that the repositories are added to Composer\Repository\RepositoryManager. It may take an upstream patch to fix this properly.

    bug upstream 
    opened by bd808 10
  • Merged VCS repositories aren't installed

    Merged VCS repositories aren't installed

    I've got a project with a main composer.json and a merged composer.json which I'm trying to use to install a private git project.

    With the repository and require config in the merged JSON file the project isn't installed with composer giving a 'package ... could not be found in any version' error.

    Moving the repository and require to the main composer.json files results in the package being installed.

    A package which is listed on packagist (doesn't require a repository entry in the composer config) installs ok from the merged file.

    The installed composer-merge-plugin is at 361e098955069062c2d688a2c116d7dd837acb38

    bug 
    opened by robbytaylor 9
  • Drupal 8.2.7 to 8.3.0 update vender conflicts

    Drupal 8.2.7 to 8.3.0 update vender conflicts

    I am using composer-merge-plugin and trying to update from 8.2.7 to 8.3.0 using the following process

    • Update composer.json with the new version of drupal
    • Run the following command composer update drupal/core --with-dependencies

    I am receiving the following error.

    Your requirements could not be resolved to an installable set of packages. Problem 1 - Can only install one of: symfony/psr-http-message-bridge[1.0.x-dev, v0.2]. - Can only install one of: symfony/psr-http-message-bridge[v0.2, 1.0.x-dev]. - Can only install one of: symfony/psr-http-message-bridge[1.0.x-dev, v0.2]. - drupal/core 8.3.0 requires symfony/psr-http-message-bridge ^1.0 -> satisfiable by symfony/psr-http-message-bridge[1.0.x-dev]. - Installation request for drupal/core 8.3.0 -> satisfiable by drupal/core[8.3.0]. - Installation request for symfony/psr-http-message-bridge v0.2 -> satisfiable by symfony/psr-http-message-bridge[v0.2].

    It seems like composer is looking at my current lock file (with version 0.2 for psr-http-message-bridge) instead of the merged version from the core/composer.json in drupal core.

    I am not sure how this plugin works with lock files after looking through it a bit and was wondering if anyone could provide some insight if this is a higher composer issue or a merge-plugin issue

    opened by Aeotrin 8
  • Add ability to execute post-install/post-update command event handlers from included files

    Add ability to execute post-install/post-update command event handlers from included files

    Is there any way to execute scripts from composer.local.json? I trying to allow custom sites to add additional themes and ensure that theme is activated after install or update. Perhaps with an option to append or override scripts from the parent composer.json file?

    enhancement 
    opened by jjtroberts 8
  • Expose dev dependencies to

    Expose dev dependencies to "composer depends" command

    Currently, composer depends does not know about dev dependencies coming from a merge, which can be confusing. This PR exposes these dependencies to the depends command.

    opened by prudloff-insite 0
  • Ignore platform reqs if env var or input option present

    Ignore platform reqs if env var or input option present

    Refs #159

    Little bit ugly with that qualifier \Composer\Filter\PlatformRequirementFilter\PlatformRequirementFilterFactory::fromBoolOrList() instead of an import but \Composer\Filter\PlatformRequirementFilter\PlatformRequirementFilterFactory does not exist in Composer 1.

    opened by leymannx 0
  • Option to avoid composer update being executed after composer install

    Option to avoid composer update being executed after composer install

    Is it possible to add option to avoid composer update is executed after composer install is executed? Although I expected to deploy packages with exact version combinations recorded in composer.lock which was tested, it was unexpectedly overwritten by composer update executed by composer-merge-plugin, resulting deploying something not tested. My deployment places my source code to the server without any composer dependency, then runs composer install to install packages recorded in composer.lock including those merged by composer-merge-pluign. However, after this, composer-merge-plugin runs composer update because it is the first time composer-merge-plugin is installed on the sever. For my system, this behavior is unnecessary since the dependency is already merged in composer.lock, and even problematic since it make installation with composer.lock meaningless.

    This is similar issue to #235 , yet I'm hoping to have an option to suppress this behavior of force executing composer update after composer install.

    Like this: https://github.com/wikimedia/composer-merge-plugin/compare/master...pikanji:composer-merge-plugin:option-to-prevent-automatic-update?expand=1

    Thanks.

    enhancement 
    opened by pikanji 2
  • Don't include composer files already required by root package

    Don't include composer files already required by root package

    This solves several issues, including but not limited to the following: Make a composer.json similar to this:

    {
        "require": {
            "wikimedia/composer-merge-plugin": "dev-master"
        },
        "extra": {
            "merge-plugin": {
                "include": [
                    "composer.local.json",
                    "extensions/*/composer.json"
                ],
                "recurse": true
            }
        }
    }
    

    With this set up, the following composer.local.jsons give problems:

    {
      "require": {
        "mediawiki/user-functions": "dev-REL1_35"
      },
      "extra": {
        "merge-plugin": {
          "include": [
            "extensions/*/composer.json"
          ]
        }
      }
    }
    

    Gives the error Fatal error: Cannot redeclare <some function/class> (previously declared in <directory>/extensions/<name>/<file>:<line>) in <directory>/extensions/<name>/<file> on line <line>, as described in this issue on this repo and this issue in the composer repo

    {
        "require": {
            "mediawiki/semantic-media-wiki": "3.2.3"
        },
        "extra": {
            "merge-plugin": {
                "include": [
                    "extensions/*/composer.json"
                ]
            }
        }
    }
    

    Gives the error

    Your requirements could not be resolved to an installable set of packages.
    
      Problem 1
        - my/root-package is present at version 1.0.0 and cannot be modified by Composer
        - mediawiki/semantic-media-wiki[3.2.3] cannot be installed as that would require removing my/root-package[1.0.0]. They both replace mediawiki/semantic-mediawiki and thus cannot coexist.
        - Root composer.json requires mediawiki/semantic-media-wiki 3.2.3 -> satisfiable by mediawiki/semantic-media-wiki[3.2.3].
    

    which is also discussed in this issue on this repo (Which also says "[..] it would be good if there was some way to indicate not to merge the configs of any packages that are already included by the main composer.json file since their configs will already be evaluated by Composer when they're required in the main composer.json file.", which is what this pull request does). Solving the issue by using the merge-replace: false option gives the same Fatal error: Cannot redeclare problem described above.

    This pull request solves all these issues.

    opened by wgevaert 0
  • Fix #218: Respect composer lock

    Fix #218: Respect composer lock

    Recreated an up-to-date PR. Credit goes to the authors of the initial pull request: https://github.com/wikimedia/composer-merge-plugin/pull/219

    I have created this new pull request because the original one was not being updated to fix the indentation.

    opened by raileanunalexandru 0
  • Remove deprecation warnings for tests

    Remove deprecation warnings for tests

    Solves the warning PHPUnit\Framework\TestCase::prophesize() is deprecated and will be removed in PHPUnit 10. Please use the trait provided by phpspec/prophecy-phpunit that appears when running tests.

    Also let provideFireInit actually provide distinct data.

    opened by wgevaert 0
Releases(v2.0.1)
  • v2.0.1(Feb 24, 2021)

    • Composer 2.0 support! (#184, #189)
    • Minimum Composer version supported is now 1.1.
    • Minimum PHP version is now 7.2.0, up from 5.3.2.
    • HHVM support (and testing) was dropped.
    Source code(tar.gz)
    Source code(zip)
  • v1.4.1(Jul 12, 2017)

  • v1.4.0(Mar 13, 2017)

    • Add source reference information for merged packages (#101)
    • Hook PluginEvents::INIT if Composer version supports it (PR #117)
    • Fix improper handling of dev mode dependencies (#113)
    • Always prepend added repositories (#95)
    • Register callbacks with high priority (#131)
    • Add new merge-scrips configuration flag (#135, #126, #68)
    Source code(tar.gz)
    Source code(zip)
  • v1.3.1(Mar 10, 2016)

  • v1.3.0(Nov 6, 2015)

    Bugs fixed:

    • Issue #50: Honor composer.lock on initial plugin install
    • Issue #62: Require section not merged when using branch alias
    • Issue #64: Compute proper autoload paths for included files in the root project directory
    • Issue #71: Fix stability flag extraction
    • Issue #88: self.version constraints expand to the root package version

    New features:

    • Issue #37: Add support for required files
    • Issue #45: support for 'last defined package wins' conflict resolution (@far-blue)
    • PR #47: autoload-dev support (@thewilkybarkid)
    • Issue #49: Optional support for merging extras (@far-blue)
    • Issue #35, #51: Merge contents from the conflict, replace, and provides sections of included packages.
    • Issue #66: Only log duplicate files in VeryVerbose mode (-vv)
    • Issue #83: Update to take advantage of RootAliasPackage changes
    • Issue #85: Option to not merge require-dev sections
    Source code(tar.gz)
    Source code(zip)
  • v1.2.1(Jul 6, 2015)

  • v1.2.0(Jun 26, 2015)

    • Mark as compatible with composer-plugin-api >=1.0, <2.0
    • Hook post-install/post-update so the plugin can take effect on initial install (#34)
    • Fix crash when root package includes a branch-alias (#26)
    Source code(tar.gz)
    Source code(zip)
  • v1.1.0(May 28, 2015)

    • Merge in the autoload sections of merged packages
    • Send debug message to STDERR
    • Change from using Composer\Script\CommandEvent to Composer\Script\Event
    • Various code style and cleanliness fixes
    Source code(tar.gz)
    Source code(zip)
  • v1.0.0(Feb 21, 2015)

  • v0.5.0(Dec 30, 2014)

Owner
Wikimedia
Wikimedia is a global movement whose mission is to bring free educational content to the world.
Wikimedia
Check your Composer dependencies at runtime.

Composition Composition provides a lightweight and generic API, that you can use to check your environment at runtime, instead of manually go checking

Bilal Amarni 108 May 4, 2021
Easily parse your project's Composer configuration, and those of its dependencies, at runtime

Composed This library provides a set of utility functions designed to help you parse your project's Composer configuration, and those of its dependenc

Josh Di Fabio 50 Nov 27, 2022
:musical_note: Provides a composer plugin for normalizing composer.json.

composer-normalize Provides a composer plugin for normalizing composer.json. Why When it comes to formatting composer.json, you have the following opt

null 861 Jan 4, 2023
Simple static Composer repository generator - For a full private Composer repo use Private Packagist

Satis Simple static Composer repository generator. Run from source Satis requires a recent PHP version, it does not run with unsupported PHP versions.

Composer 2.9k Jan 3, 2023
composer parallel install plugin

prestissimo (composer plugin) This is a composer 1.x plugin that downloads packages in parallel to speed up the installation process. Announcement: Co

Hiraku NAKANO 6.3k Dec 25, 2022
Patch other composer packages on install or update

patch-installer Patch other composer packages on install or update. experimental feature Usage For a patch type change the install path to vendor dire

Maik Penz 49 Apr 11, 2021
A no-frills PsySH-Composer plugin

uma/composer-psysh A no-frills PsySH-Composer plugin. In a nutshell, it provides a composer psy subcommand that spawns a Psy Shell with autoload integ

Marcel Hernandez 18 May 23, 2022
Satis-go is a web server for hosting and managing your Satis Repository for Composer Packages

Satis-go download latest Satis-go is a web server for hosting and managing your Satis Repository for Composer Packages Some Highlights: Satis-go provi

Ben Schwartz 99 Aug 1, 2022
Provide CSV, JSON, XML and YAML files as an Import Source for the Icinga Director and optionally ship hand-crafted additional Icinga2 config files

Icinga Web 2 Fileshipper module The main purpose of this module is to extend Icinga Director using some of it's exported hooks. Based on them it offer

Icinga 25 Sep 18, 2022
Opinionated version of Wikimedia composer-merge-plugin to work in pair with Bamarni composer-bin-plugin.

Composer Inheritance Plugin Opinionated version of Wikimedia composer-merge-plugin to work in pair with bamarni/composer-bin-plugin. Usage If you are

Théo FIDRY 25 Dec 2, 2022
JSONFinder - a library that can find json values in a mixed text or html documents, can filter and search the json tree, and converts php objects to json without 'ext-json' extension.

JSONFinder - a library that can find json values in a mixed text or html documents, can filter and search the json tree, and converts php objects to json without 'ext-json' extension.

Eboubaker Eboubaker 2 Jul 31, 2022
PHP library to easily edit image with GD extension. Resize, crop, merge, draw, and many more options !

PHP Image Editor PHP library to easily edit image with GD extension. Resize, crop, merge, draw, and many more options ! ✨ Supporting ⭐ Star this repos

Franck Alary 17 Nov 13, 2022
Merge Excel Files to single excel file per columns

Merge Excel Files to single excel file per columns

Max Base 3 Apr 26, 2021
m4b-tool is a command line utility to merge, split and chapterize audiobook files such as mp3, ogg, flac, m4a or m4b

m4b-tool m4b-tool is a is a wrapper for ffmpeg and mp4v2 to merge, split or and manipulate audiobook files with chapters. Although m4b-tool is designe

Andreas 798 Jan 8, 2023
This Plugin is used to install and activate multiple plugins in one go. I was facing problem uploading plugins one by one so I developed this to solve my problem. Hope you will enjoy using this plugin.

=== Bulk Plugin Installer === Contributors: jawadarshad Donate link: https://jawadarshad.io/ Tags: bulk plugin installer, import multiple plugins, up

Muhammad Jawad Arshad 2 Sep 20, 2022
OctoberCMS BlogHub Plugin - Extends RainLab's Blog extension with custom meta details, additional archives and more.

BlogHub extends the RainLab.Blog OctoberCMS plugin with many necessary and helpful features such as Moderatable Comments, Promotable Tags, Custom Meta Fields, additional Archives, basic Statistics, Views counter and more.

rat.md 5 Dec 15, 2022
Simple composer script to manage phar files using project composer.json.

tooly-composer-script With tooly composer-script you can version needed PHAR files in your project's composer.json without adding them directly to a V

Tommy Mühle 100 Sep 27, 2022
PHP runtime & extensions header files for PhpStorm

phpstorm-stubs STUBS are normal, syntactically correct PHP files that contain function & class signatures, constant definitions, etc. for all built-in

JetBrains 1.2k Dec 25, 2022
Check your Composer dependencies at runtime.

Composition Composition provides a lightweight and generic API, that you can use to check your environment at runtime, instead of manually go checking

Bilal Amarni 108 May 4, 2021
Easily parse your project's Composer configuration, and those of its dependencies, at runtime

Composed This library provides a set of utility functions designed to help you parse your project's Composer configuration, and those of its dependenc

Josh Di Fabio 50 Nov 27, 2022