Bagikan melalui


Referensi registri

Ikhtisar

Artikel ini menjelaskan detail implementasi untuk setiap jenis registri. Secara khusus, file ini berkaitan dengan tata letak yang direkomendasikan untuk setiap jenis registri dan konten yang diharapkan dari database versi masing-masing.

Nota

Artikel ini berisi informasi tentang cara menerapkan registri kustom. Untuk informasi tentang menggunakan registri kustom di proyek Anda, lihat artikel Menggunakan registri.

Registri Git

Tata letak file garis besar di registri Git

Bidang tingkat atas

Objek tingkat atas dalam file baseine.json adalah kamus, setiap kunci dalam kamus ini adalah bernama garis besar. Karena detail implementasi registri Git, diperlukan bernama garis besar dengan nama "default" ada dan berisi pemetaan semua port dalam registri ke versi dasarnya.

Nama Jenis Deskripsi
default BaselineObject Garis besar default, diperlukan untuk registri Git.
Garis besar bernama BaselineObject Garis besar tambahan. Nama bidang sesuai dengan nama garis besar.

BaselineObject

Objek garis besar adalah kamus, dengan setiap kunci yang sesuai dengan nama port di registri dan nilainya menjadi versi terbaru port.

Nama Jenis Deskripsi
Nama port BaselineVersionObject Pemetaan nama port ke versi terbarunya

BaselineVersionObject

Nama Jenis Deskripsi
baseline tali String yang sesuai dengan versi port terbaru yang tersedia di registri.
port-version Integer Bilangan bulat yang sesuai dengan versi port terbaru port di registri

Contoh file baseline.json di registri Git

Dalam registri yang berisi satu port bernama foo pada versi 1.0.0#1, konten file baseline.json harus:

{
  "default": {
    "foo": { 
      "baseline": "1.0.0", 
      "port-version": 1
    }
  }
}

Tata letak file versi di registri Git

Direktori versions berisi semua informasi tentang versi paket mana yang terkandung dalam registri, bersama dengan metode untuk mengambil versi tersebut dari riwayat repositori.

Bidang tingkat atas

Nama Jenis Deskripsi
versions VersionObject[] Array objek versi. Berisi entri untuk setiap versi port dalam riwayat registri.

VersionObject

Nama Jenis Deskripsi
git-tree tali SHA pohon git yang digunakan untuk mengambil konten port
version
version-semver
version-date
version-string
tali Informasi versi upstram
versi port Integer Revisi file port

Contoh file versi registri Git

{
  "versions": [
    {
      "git-tree": "963060040c3ca463d17136e39c7317efb15eb6a5",
      "version": "1.2.0",
      "port-version": 0
    },
    {
      "git-tree": "548c90710d59c174aa9ab10a24deb69f1d75ff8f",
      "version": "1.1.0",
      "port-version": 0
    },
    {
      "git-tree": "67d60699c271b7716279fdea5a5c6543929eb90e",
      "version": "1.0.0",
      "port-version": 0
    }
  ]
}

Mendapatkan SHA git-tree

vcpkg menggunakan kemampuan Git untuk mengambil versi port tertentu yang terkandung dalam riwayat penerapannya. Metode yang digunakan adalah mengambil objek git-tree dari repositori seperti yang ditentukan dalam file versi port.

Setiap direktori port dalam registri Git memiliki SHA unik yang terkait dengannya (disebut sebagai git-tree dalam file versi). SHA dihitung menggunakan konten direktori; setiap kali perubahan diterapkan ke repositori yang memodifikasi direktori, SHA-nya dihitung ulang.

Git memungkinkan Anda untuk mengambil konten direktori tertentu kapan saja dalam riwayatnya, asalkan Anda mengetahui SHA spesifik mereka. Dengan memanfaatkan fitur ini, vcpkg dapat mengindeks versi port tertentu dengan SHA (git-tree) masing-masing.

Untuk mendapatkan SHA direktori port pada revisi tertentu, perintah Git berikut dapat digunakan:

git -C <path/to/ports> ls-tree --format='%(objectname)' <commit sha> -- <portname>

Contoh:

git -C %VCPKG_ROOT%/ports ls-tree --format='%(objectname)' HEAD -- curl
6ef1763f3cbe570d6378632c9b5793479c37fb07

Perintah mengembalikan SHA direktori yang berisi port curl pada revisi saat ini (HEAD).

Dimungkinkan untuk menampilkan konten git-tree menggunakan perintah git show <git-tree>:

git show 6ef1763f3cbe570d6378632c9b5793479c37fb07
tree 6ef1763f3cbe570d6378632c9b5793479c37fb07

0005_remove_imp_suffix.patch
0020-fix-pc-file.patch
0022-deduplicate-libs.patch
cmake-config.patch
cmake-project-include.cmake
dependencies.patch
export-components.patch
portfile.cmake
redact-input-vars.diff
usage
vcpkg-cmake-wrapper.cmake
vcpkg.json

Atau konten file tertentu dengan git show <git-tree>:<file>:

git show 6ef1763f3cbe570d6378632c9b5793479c37fb07:usage
curl is compatible with built-in CMake targets:

    find_package(CURL REQUIRED)
    target_link_libraries(main PRIVATE CURL::libcurl)

Mengelola file database terbaru menggunakan perintah Git ini dalam proses manual bisa menjadi tugas yang sulit. Untuk alasan itu, sebaiknya gunakan perintah x-add-version, yang mengotomatiskan proses selama repositori mengikuti struktur registri yang direkomendasikan. Lihat artikel Tutorial: Menerbitkan paket ke registri vcpkg privat menggunakan Git untuk contoh cara menerbitkan port di registri Git.

Registri sistem file

Tata letak file garis besar dalam registri sistem file

Bidang tingkat atas

Objek tingkat atas dalam file baseine.json adalah kamus, setiap kunci dalam kamus ini adalah bernama garis besar. Garis besar harus berisi pemetaan semua port dalam registri ke versi dasarnya.

Nama Jenis Deskripsi
Garis besar bernama BaselineObject Garis besar tambahan. Nama bidang sesuai dengan nama garis besar.

BaselineObject

Objek garis besar adalah kamus, dengan setiap kunci yang sesuai dengan nama port di registri dan nilainya menjadi versi terbaru port.

Nama Jenis Deskripsi
Nama port BaselineVersionObject Pemetaan nama port ke versi terbarunya

BaselineVersionObject

Nama Jenis Deskripsi
baseline tali String yang sesuai dengan versi port terbaru yang tersedia di registri.
port-version Integer Bilangan bulat yang sesuai dengan versi port terbaru port di registri

Tata letak file garis besar dalam registri sistem file sama dengan untuk registri Git . Satu-satunya perbedaan adalah bahwa sistem file tidak memerlukan garis besar default.

Contoh file baseline.json di registri Git

{
  "2024-12-01": {
    "foo": {
      "baseline": "1.0.0",
      "port-version": 1
    }
  }
}

Tata letak file versi di registri Git

Direktori versions berisi semua informasi tentang versi paket mana yang terkandung dalam registri, bersama dengan metode untuk mengambil versi tersebut dari lokasi sistem file.

bidang tingkat atas

Nama Jenis Deskripsi
versions VersionObject[] Array objek versi. Berisi entri untuk setiap versi port dalam registri.

versionObject

Nama Jenis Deskripsi
path tali Lokasi sistem file tempat file port untuk versi yang sesuai berada
version
version-semver
version-date
version-string
tali Informasi versi upstram
versi port Integer Revisi file port

Saat menentukan path registri, karakter $ dapat digunakan untuk mereferensikan akar registri. Jika tidak, jalur absolut dapat digunakan sebagai gantinya.

Contoh file versi registri sistem file

{
  "versions": [
    {
      "path": "$/ports/foo/1.2.0",
      "version": "1.2.0",
      "port-version": 0
    },
    {
      "path": "$/ports/foo/1.1.0",
      "version": "1.1.0",
      "port-version": 0
    },
    {
      "path": "$/ports/foo/1.0.0",
      "version": "1.0.0",
      "port-version": 0
    }
  ]
}

Langkah berikutnya

Berikut adalah beberapa tugas untuk dicoba berikutnya: