Bagaimana cara benar memerlukan komit khusus di Komposer sehingga akan tersedia untuk paket yang bergantung?

108

Saya memiliki perpustakaan foo/foo-libyang requireskomit khusus dari GitHub:

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

dan berfungsi dengan baik:

$ 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

tetapi ketika saya membutuhkan perpustakaan itu di proyek lain:

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

itu menghasilkan kesalahan ketergantungan:

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.

Jadi pertanyaan saya adalah: bagaimana cara requiremengkomit spesifik dari GitHub dengan benar di perpustakaan saya, sehingga akan tersedia dalam paket dependen?

Maciej Sz
sumber
3
Ketahuilah bahwa ketika membutuhkan komit, komposer tidak akan menghormati persyaratan komit itu (cmoposer.json). Sebagai gantinya, ia menghitung persyaratan kepala cabang yang akan berubah seiring waktu. Jadi ini mungkin berhasil untuk sementara waktu, tetapi pasti akan rusak di masa depan.
estani

Jawaban:

157

Anda harus secara eksplisit membutuhkan pustaka Gaufrette pada hash itu, dengan sebuah devbendera, di pustaka dan aplikasi Anda. Sesuatu seperti ini seharusnya berfungsi dalam aplikasi 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"
    }
}

Dari dokumentasi :

Jika salah satu dependensi Anda memiliki dependensi pada paket yang tidak stabil, Anda juga perlu secara eksplisit membutuhkannya, bersama dengan flag stabilitasnya yang memadai.

Dokumentasi juga menyarankan bahwa Anda perlu menyertakan repositori untuk Gaufrette dalam bar/bar-appfile Komposer Anda , meskipun sepertinya ini tidak diperlukan dalam kasus ini. Saya tidak yakin kenapa.

Chris
sumber
Saya sudah mencoba ini, tidak berhasil. Saya pikir ini mungkin ada hubungannya dengan Komposer yang lebih memilih Packagist daripada GitHub secara khusus?
Maciej Sz
Tidak, saya telah memeriksa dengan repositori lokal saya - ini bukan masalah khusus GitHub.
Maciej Sz
Saya cukup yakin bahwa saya membuat ini berfungsi sebelumnya. Bagaimana jika Anda menambahkan "minimum-stability": "dev"ke bar/bar-apppersyaratan?
Chris
3
Ini terlihat seperti Anda akan harus secara eksplisit mengharuskan Gaufrette pada saat itu hash di kedua perpustakaan Anda, dan aplikasi Anda. "Jika salah satu dependensi Anda memiliki dependensi pada paket yang tidak stabil, Anda juga perlu secara eksplisit membutuhkannya, bersama dengan flag stabilitasnya yang memadai." Perhatikan bahwa Anda dapat memiliki beberapa paket, misalnya Gaufrette, dengan devstabilitas, dan default stableuntuk yang lainnya.
Chris
2
Sepertinya GitHub didukung oleh Komposer di luar kotak - Saya baru saja menghapus "url": "https://github.com/KnpLabs/Gaufrette.git"dari paket pertama dan masih berfungsi.
Maciej Sz
15

Inilah cara Anda melakukannya di baris perintah:

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

Anda tidak harus menggunakan keseluruhan hash, hash sepanjang tujuh karakter sepertinya bisa melakukan trik. Seperti disebutkan di atas, proyek Anda perlu mendukung dev - yang akan dikeluhkan jika belum ditetapkan. Selain itu, gunakan --with-dependenciesuntuk mendapatkan dependensi apa pun dari yang Anda perbarui.

powpow12
sumber
0

Jika Anda membuat perubahan untuk Git Repository dengan forking, pastikan Anda menggunakan nama paket yang sebenarnya ditentukan dalam file composer.json dari paket - jadi meskipun saya mem-fork paket ke akun joshuapaling github saya sendiri, dan paket itu sekarang berada di URL https://github.com/joshuapaling/Cake-Resque.git , yang sama sekali tidak mempengaruhi nama paket, dari sudut pandang komposer.

Kesalahan bodoh - tapi saya baru mengenal komposer, dan awalnya tidak jelas! Jadi, saya harap ini membantu orang lain dengan masalah yang sama.

Gayan Kalhara
sumber