Come richiedere correttamente un commit specifico in Composer in modo che sia disponibile per i pacchetti dipendenti?


108

Ho una libreria foo/foo-libche ha requiresun commit specifico da GitHub:

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

e funziona bene:

$ 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

ma quando richiedo quella libreria in un altro progetto:

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

restituisce un errore di dipendenza:

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.

Quindi la mia domanda è: come eseguire correttamente requireil commit specifico da GitHub nella mia libreria, in modo che sia disponibile nei pacchetti dipendenti?


3
Tieni presente che quando si richiede un commit, il compositore non rispetterà i requisiti di commit (cmoposer.json). Invece calcola il requisito della testa del ramo che cambierà nel tempo. Quindi questo potrebbe funzionare per un po ', ma si interromperà di sicuro in futuro.
estani

Risposte:


157

Dovrai richiedere esplicitamente la libreria Gaufrette a quell'hash, con un devflag, sia nella tua libreria che nella tua applicazione. Qualcosa di simile dovrebbe funzionare nell'applicazione 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"
    }
}

Dalla documentazione :

Se una delle tue dipendenze ha una dipendenza da un pacchetto instabile, devi anche richiederla esplicitamente, insieme al suo flag di stabilità sufficiente.

La documentazione suggerisce anche che dovrai includere il repository per Gaufrette nel tuo bar/bar-appfile Composer, anche se in questo caso sembra che non fosse necessario. Non sono sicuro del perché.


Ho già provato questo, non funziona neanche. Penso che possa avere qualcosa a che fare con Composer che preferisce Packagist su GitHub in particolare?
Maciej Sz

No, ho controllato con i miei repository locali: non è un problema specifico di GitHub.
Maciej Sz

Sono abbastanza certo di averlo fatto funzionare prima. E se aggiungi "minimum-stability": "dev"i bar/bar-apprequisiti?
Chris

3
E sembra che si sta andando ad avere per richiedere esplicitamente Gaufrette in quel hash sia nella vostra libreria, e la vostra applicazione. "Se una delle tue dipendenze ha una dipendenza da un pacchetto instabile, devi richiederlo esplicitamente anche tu, insieme al suo flag di stabilità sufficiente." Nota che puoi avere alcuni pacchetti, ad esempio Gaufrette, a devstabilità e l'impostazione predefinita stableper tutto il resto.
Chris

2
Sembra che GitHub sia supportato da Composer out of the box: ho appena rimosso "url": "https://github.com/KnpLabs/Gaufrette.git"dal primo pacchetto e funziona ancora.
Maciej Sz

15

Ecco come lo fai dalla riga di comando:

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

Non è necessario utilizzare l'intero hash, un hash lungo sette caratteri sembra fare il trucco. Come accennato in precedenza, il tuo progetto dovrà supportare dev, di cui si lamenterà se non è già impostato. Inoltre, utilizzare --with-dependenciesper ottenere eventuali dipendenze di quello che si sta aggiornando.


0

Se stai apportando modifiche per un repository Git mediante fork, assicurati di utilizzare il nome del pacchetto è effettivamente definito nel file composer.json del pacchetto, quindi anche se ho biforcato il pacchetto sul mio account github joshuapaling, e il pacchetto ora risiedeva all'URL https://github.com/joshuapaling/Cake-Resque.git , che non aveva affatto influenzato il nome del pacchetto, dal punto di vista dei compositori.

Uno stupido errore, ma sono nuovo al compositore e all'inizio non era chiaro! Quindi, spero che questo aiuti qualcun altro con lo stesso problema.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.