web-dev-qa-db-fra.com

Comment exiger correctement un commit spécifique dans Composer) afin qu’il soit disponible pour les paquets dépendants?

J'ai une bibliothèque foo/foo-lib qui requires un commit spécifique de GitHub:

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

et ça marche 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

mais quand j'ai besoin de cette bibliothèque dans un autre projet:

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

cela donne une erreur de dépendance:

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.

Ma question est donc la suivante: comment correctement require le commit spécifique de GitHub dans ma bibliothèque, afin qu’il soit disponible dans les paquets dépendants?

89
Maciej Sz

Vous devrez explicitement exiger la bibliothèque Gaufrette avec ce hachage, avec un drapeau dev, à la fois dans votre bibliothèque et dans votre application. Quelque chose comme ça devrait fonctionner dans l'application 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 documentation :

Si l'une de vos dépendances dépend d'un package instable, vous devez également le demander explicitement, ainsi que son indicateur de stabilité suffisant.

La documentation suggère également que vous deviez inclure le référentiel de Gaufrette dans votre bar/bar-app _ Composer du compositeur, bien que cela puisse sembler inutile dans ce cas. Je ne sais pas pourquoi.

136
Chris

Voici comment vous le faites sur la ligne de commande:

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

Vous n'êtes pas obligé d'utiliser tout le hachage, un hachage de sept caractères semble faire l'affaire. Comme mentionné ci-dessus, votre projet devra prendre en charge dev - ce dont il se plaindra s'il n'est pas déjà défini. Utiliser aussi --with-dependencies pour obtenir toutes les dépendances de celle que vous mettez à jour.

6
powpow12

Si vous apportez des modifications à un référentiel Git en vérifiant que vous utilisez bien le nom du package, celui-ci est défini dans le fichier composer.json de celui-ci. le paquet résidait maintenant à l'URL https://github.com/joshuapaling/Cake-Resque.git , qui n'avait pas du tout influencé le nom du paquet, du point de vue des compositeurs.

Une erreur stupide - mais je suis nouveau au compositeur, et ce n'était pas clair au début! J'espère donc que cela aidera quelqu'un d'autre avec le même problème.

0
Gayan Kalhara