Chris Tickner
Chris Tickner

Reputation: 2017

Contributing to open source bundles from vendor directory?

Ideal Situation

Often while working on a Symfony2 project I will spot something I want to change in one of my dependencies. If I could find a way to simply change it in vendor and then easily push the changes as a pull request then I would probably contribute more often (rather than overriding the part with a local child bundle).

The Problem

I can't change a vendor directory without composer freaking out on the next update. If I submit a pull request then it may take quite some time before I can actually use the code in vendors, which is actually a deterrent from contributing my new functionality.

How I do it now

The way I typically contribute to a bundle is to make a fork, put the fork in a barebones symfony standard-edition app, make the change and then submit a pull request.

Put fork in composer.json?

The only solution I can think of, is removing the packagist dependency of the bundle I am editing, and then including my fork with composer (as a package) from github. That way I get my code immediately and can still contribute.

Is this the only solution? How do you do it?

Any tips/advice for contributing to a bundle while working on a different project at the same time would be appreciated!

Upvotes: 26

Views: 7503

Answers (4)

Mederic
Mederic

Reputation: 2019

As of 2017 the proper way to do it is:

  1. Add your GitHub branch link to the repositories

    "repositories": [
        {
            "type": "vcs",
            "url": "https://github.com/crimson-med/yii2-link-preview"
        }
    ],
    
  2. Add the source to the require of your composer.json

    "require": {
        "yii2mod/yii2-link-preview": "dev-master"
    },
    

Upvotes: 9

Khepin
Khepin

Reputation: 949

[UPDATE: Answer Not Valid Anymore]

As pointed out in one of the comments, this answer is a couple years old and not correct anymore. See answers below for the correct way to proceed.

[Original answer below]

This is the approach recommended by Jordi Boggiano (@Seldaek), creator of composer. See from his talk at Symfony Live San Francisco earlier this year (at the 2 minutes mark): http://www.youtube.com/watch?list=PLo7mBDsRHu11ChvScWUE7MN1Qo5QVHQEz&feature=player_detailpage&v=P3NwF8RV1lY#t=120s

Upvotes: 7

Eduardo Chongkan
Eduardo Chongkan

Reputation: 790

FYI, I just tried the very first option:

    "repositories": [{
    "type": "vcs",
    "url": "https://github.com/thujohn/twitter"
}],
"require": {
    "laravel/framework": "4.2.*",
    "thujohn/twitter": "dev-master",
    "anahkiasen/flickering": "^0.1.2",
    "fairholm/elasticquent": "dev-master",
    "facebook/php-sdk-v4" : "~5.0"
},

An it worked fine.

vagrant@dev:/var/www$ sudo php composer.phar update
Loading composer repositories with package information                                                                                                                                                         Updating dependencies (including require-dev)         
  - Removing thujohn/twitter (2.0.4)
  - Installing thujohn/twitter (dev-master 7a92118)
    Downloading: 100%         

Writing lock file
Generating autoload files
> php artisan clear-compiled
> php artisan optimize
Generating optimized class loader

I just needed to specify the "master" branch name as "dev-master".

Upvotes: 2

Julien
Julien

Reputation: 9432

Nah... this is broken.

I've tried the official way to include a fork, here's an example (original:kitano, fork: jstoeffler) of the composer.json :

(For those who are in a hurry: THIS DOESNT WORK)

"repositories": [
//...
    {
        "type": "vcs",
        "url": "https://github.com/jstoeffler/KitanoConnectionBundle",

    },
//...
],

It keeps using the original bundle. Don't know what the problem is, and I don't get how everything works, but here's how I successfully add a fork to a project.

"repositories": [
//...
    {
        "type": "package",
        "package": {
            "name": "kitano/connection-bundle",
            "version": "dev-master",
            "source": {
                "url": "https://github.com/jstoeffler/KitanoConnectionBundle.git",
                "type": "git",
                "reference": "master"
            },
            "autoload": {
                "classmap": [""]
            }
        }
    },
//...
],

Upvotes: 56

Related Questions