Añadir a Composer un fork de un bundle de terceros de Symfony

Buenos días amigos,

Tengo una duda sobre los fork de un bundle y es que quiero que solo se actualice la parte que yo quiero de ese bundle en concreto. Aunque perfectamente ese bundle en la carpeta vendor/ lo podría tocar yo directamente y solucionaría el problema rápidamente, pero quiero arreglarlo bien. Explico la situación:

Tengo en Symfony instalado el bundle TrsteelCkeditorBundle y hay problema que el autor no ha querido actualizar en su bundle y es solamente una línea, hay un usuario que ha hecho un fork con ese problema github.com/trsteel88/TrsteelCkeditorBundle/issues/15. El problema es que al añadir un campo de formulario con su bundle de Ckeditor no puedes añadir required=>true, solamente tiene la opción de false.

Ahora mi pregunta es como puedo añadir en mi archivo composer.json que actualice esa línea del otro fork sin interferir en el bundle original.

Yo lo he estado intentando de la siguiente manera, pero no me hace ni caso; es más he tenido que eliminar ese bundle en varias ocasiones porque se corrompió en algunas de mis pruebas.

Composer:

"repositories": [{
    "type": "vcs",
    "url":  "https://github.com/egzakt/TrsteelCkeditorBundle"
}],
    "require": {
        "php": ">=5.3.3",
        "symfony/symfony": "2.5.*",
        "doctrine/orm": ">=2.2.3,<2.4-dev",
        "doctrine/doctrine-bundle": "1.2.*",
        "twig/extensions": "1.0.*",
        "symfony/assetic-bundle": "2.3.*",
        "symfony/icu": "1.2.*",
        "symfony/swiftmailer-bundle": "2.3.*",
        "symfony/monolog-bundle": "2.3.*",
        "sensio/distribution-bundle": "2.3.*",
        "sensio/framework-extra-bundle": "2.3.*",
        "sensio/generator-bundle": "2.3.*",
        "incenteev/composer-parameter-handler": "~2.0",
 
        "Trsteel/ckeditor-bundle": "~1.4"
}

Espero puedan ayudarme en esta gran duda, que seguro que a máas de uno le va hacer muy útil.

Un abrazo.

Respuestas

#1

Lo primero, decirte que tienes toda la razón en que estas cosas hay que solucionarlas bien. Tocar el código directamente en el vendor/ es solamente una solución temporal, nada profesional, y que a la larga te crearía un montón de problemas.

Con respecto a lo que quieres hacer, si te he entendido bien, en tu proyecto quieres utilizar el bundle original pero, al mismo tiempo, decirle a Composer que haga el cambio que has indicado. Me temo que esto no es posible hacerlo con Composer de manera nativa. En otras palabras, o utilizas el bundle original o utilizas el fork, pero no puedes hacer algo intermedio.

Si decides usar el fork, lo que debes hacer es indicar en la dependencia Trsteel/ckeditor-bundle una versión que exista en el fork. Ahora mismo has puesto ~1.4, que sí que existe en el bundle original, pero no en el fork. Lo que yo haría es usar la versión 1.2.* con el fork, que parece que es la etiqueta más reciente disponible.

Por último, si realmente necesitas hacer lo que comentabas originalmente (utilizar el bundle original, pero cambiar una línea de código) puedes hacer uso de los scripts de Composer que te permiten ejecutar cualquier código PHP arbitrario después de instalar o actualizar las dependencias. No es una solución perfecta y te aconsejo que no la uses, pero es mucho más portable y profesional que cambiar a mano el código de la carpeta vendor/.

#2

Hola Javier,

Gracias por tu repuesta, son de lo mejor ya que me aclaran mucho y me ayudan a orientarme y encima me das varias opciones que no conocía.

La verdad que me has entendido perfectamente, aunque a veces me cueste un poco explicarme.

Intentare que autor del Bundle lo reconsidere, si no es así probare con la version 1.2 si no me da ningún problema con la configuración actual.

Otra pregunta, ¿Para saber la versión actual que esta utilizando el repositorio hay que fijarse siempre en el composer.json?, como en este mismo caso he visto e investigado al nombrarme que el autor del Fork usuaba la versión del Fork 1.2.*.

Gracias por todo.

#3

A ver si tienes suerte y el autor del bundle lo reconsidera. Puedes tratar de convencerle diciendo que es algo que muchos necesitáis, que ayudaría a mejorar la DX (developer experience) del bundle, que es algo que se cuida mucho en el ámbito Symfony. También le puedes decir que la única solución que os deja, crear un fork, perjudica tanto a la comunidad como a el, etc.

Con respecto a las versiones, la mejor fuente para consultar qué versiones tiene disponible un paquete es el sitio Packagist.org (ver ejemplo de versiones de trsteel/ckeditor-bundle). En el caso del fork no aparece en Packagist, así que lo que he hecho es ver las etiquetas y ramas que tenía creadas en el repositorio de GitHub. Ahí he visto que la última etiqueta que ha creado es la 1.2.