¿Cómo requerir correctamente una confirmación específica en Composer para que esté disponible para paquetes dependientes?

4 minutos de lectura

avatar de usuario
maciej sz

tengo una biblioteca foo/foo-lib cual requires una confirmación específica de GitHub:

{
    "name": "foo/foo-lib",
    "repositories": [
        {
            "type": "vcs",
            "url": "https://github.com/KnpLabs/Gaufrette.git"
        }
    ],
    "require": {
        "knplabs/gaufrette": "dev-master#2633721877cae79ad461f3ca06f3f77fb4fce02e"
    }
}

y funciona bien:

$ composer update
Loading composer repositories with package information
Updating dependencies (including require-dev)                                 
  - Updating knplabs/gaufrette dev-master (2633721 => 2633721)
    Checking out 2633721877cae79ad461f3ca06f3f77fb4fce02e

Generating autoload files

pero cuando necesito esa biblioteca en otro proyecto:

{
    "name": "bar/bar-app",
    "repositories": [
        {
            "type": "vcs",
            "url": "ssh://git.example.com/foo-lib"
        }
    ],
    "require-dev": {
        "foo/foo-lib": "dev-master"
    }
}

produce un error de dependencia:

Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - Installation request for foo/foo-lib dev-master -> satisfiable by foo/foo-lib[dev-master].
    - foo/foo-lib dev-master requires knplabs/gaufrette dev-master#2633721877cae79ad461f3ca06f3f77fb4fce02e -> no matching package found.

Así que mi pregunta es: cómo correctamente require la confirmación específica de GitHub en mi biblioteca, para que esté disponible en paquetes dependientes?

  • Tenga en cuenta que cuando se requiere una confirmación, el compositor no respetará los requisitos de confirmación (cmoposer.json). En su lugar, calcula el requisito de jefe de sucursal que cambiará con el tiempo. Entonces, esto podría funcionar por un tiempo, pero seguramente se romperá en el futuro.

    – estani

    8 de octubre de 2014 a las 9:04

avatar de usuario
cris

Deberá solicitar explícitamente la biblioteca Gaufrette en ese hash, con un dev flag, tanto en su biblioteca como en su aplicación. Algo como esto debería funcionar en la aplicación. composer.json:

{
    "name": "bar/bar-app",
    "repositories": [
        {
            "type": "vcs",
            "url": "ssh://git.example.com/foo-lib"
        }
    ],
    "require-dev": {
        "foo/foo-lib": "dev-master",
        "knplabs/gaufrette": "dev-master#2633721877cae79ad461f3ca06f3f77fb4fce02e"
    }
}

De la documentación:

Si una de sus dependencias tiene una dependencia en un paquete inestable, también debe solicitarlo explícitamente, junto con su indicador de estabilidad suficiente.

La documentación también sugiere que deberá incluir el repositorio para Gaufrette en su bar/bar-app Composer, aunque parece que no era necesario en este caso. No estoy seguro de por qué.

  • Ya probé esto, tampoco funciona. Creo que puede tener algo que ver con Composer prefiriendo Packagist sobre GitHub específicamente.

    – Maciej Sz

    23 de enero de 2014 a las 19:06


  • No, lo he comprobado con mis repositorios locales; no es un problema específico de GitHub.

    – Maciej Sz

    23 de enero de 2014 a las 19:18

  • Estoy bastante seguro de que conseguí que esto funcionara antes. ¿Qué pasa si agregas "minimum-stability": "dev" hacia bar/bar-app requisitos?

    – Chris

    23 de enero de 2014 a las 19:24

  • Eso parece que vas a tener que requiere explícitamente Gaufrette en ese hash tanto en su biblioteca como en su aplicación. “Si una de sus dependencias depende de un paquete inestable, también debe solicitarlo explícitamente, junto con su indicador de estabilidad suficiente”. Tenga en cuenta que puede tener algunos paquetes, por ejemplo, Gaufrette, en dev estabilidad, y por defecto a stable para todo lo demás

    – Chris

    23/01/2014 a las 19:35

  • Parece que GitHub es compatible con Composer desde el primer momento. Acabo de eliminar el "url": "https://github.com/KnpLabs/Gaufrette.git" desde el primer paquete y todavía funciona.

    – Maciej Sz

    23 de enero de 2014 a las 19:41

Así es como lo haces en la línea de comando:

composer update knplabs/gaufrette:dev-master#2633721 --with-dependencies

No tienes que usar todo el hash, un hash de siete caracteres parece ser suficiente. Como se mencionó anteriormente, su proyecto deberá ser compatible con el desarrollo, de lo cual se quejará si aún no está configurado. Además, usa --with-dependencies para obtener las dependencias del que está actualizando.

  • Acabo de probar esto, parece que no funciona con Composer 2.

    – mercado

    25 de marzo de 2021 a las 10:53

  • … Entonces, ¿cómo se correlaciona un número de hash específico con un parche determinado? En otras palabras, ¿cómo sabemos contra qué compromiso se implementó un parche?

    – mar26.2

    12 de julio de 2021 a las 1:14

  • Parece funcionar si uso composer require en vez de composer update.

    – Guy Paddock

    17 de diciembre de 2021 a las 2:20

  • trabajó para mí con update en Composer versión 2.1.6

    – Axi

    24 ene a las 14:00

Si está realizando cambios para un Repositorio Git mediante una bifurcación, asegúrese de usar el El nombre del paquete está realmente definido en el propio archivo composer.json del paquete, por lo que aunque había bifurcado el paquete en mi propia cuenta joshuapaling github, y el paquete ahora residía en la URL https://github.com/joshuapaling/Cake-Resque.gitque no había influido en absoluto en el nombre del paquete, desde la perspectiva de los compositores.

Un error estúpido, pero soy nuevo en Composer, ¡y no estaba claro al principio! Entonces, espero que esto ayude a alguien más con el mismo problema.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad