Dokumentacja dotycząca przechowywania wersji
Przechowywanie wersji umożliwia deterministyczne kontrolowanie dokładnych poprawek zależności używanych przez projekt z poziomu pliku manifestu. Przechowywanie wersji jest dostępne tylko dla użytkowników trybu manifestu.
Aby uzyskać więcej informacji na temat algorytmu przechowywania wersji vcpkg i pojęć wysokiego poziomu, zobacz Pojęcia dotyczące przechowywania wersji.
Aby zapoznać się z przykładem z kontekstem, zapoznaj się z naszym przewodnikiem dotyczącym rozpoczynania pracy z przechowywaniem wersji.
Porty w programie vcpkg powinny próbować przestrzegać konwencji przechowywania wersji używanych przez autorów pakietu. Z tego powodu podczas deklarowania wersji pakietu należy użyć odpowiedniego schematu.
Każdy schemat przechowywania wersji definiuje własne reguły dotyczące prawidłowego ciągu wersji i co ważniejsze reguły sortowania wersji przy użyciu tego samego schematu.
Schematy przechowywania wersji zrozumiałe przez program vcpkg to:
Właściwość manifestu | Schemat przechowywania wersji |
---|---|
version |
W przypadku wersji liczbowych rozdzielonych kropkami |
version-semver |
W przypadku wersji zgodnych ze standardem SemVer |
version-date |
W przypadku dat w formacie YYYY-MM-DD |
version-string |
W przypadku dowolnych ciągów |
Manifest musi zawierać tylko jedną deklarację wersji.
Uwaga
Zgodnie z projektem program vcpkg nie porównuje wersji korzystających z różnych schematów. Na przykład pakiet, którego version-string: 7.1.3
nie można porównać z tym samym pakietem przy użyciu polecenia version: 7.1.4
, nawet jeśli konwersja wydaje się oczywista.
Akceptuje ciągi wersji, które są zgodne ze schematem zrelaksowanym, rozdzielonym kropką, semver-like.
Wersja składa się logicznie z rozdzielanych kropkami (.
) sekcji liczbowych. Każda sekcja musi zawierać liczbę całkowitą dodatnią bez zer wiodących.
Wzorzec wyrażeń regularnych dla tego schematu przechowywania wersji to: (0|[1-9]\d*)(\.(0|[1-9]\d*))*
Zachowanie sortowania: podczas porównywania dwóch wersji każda sekcja jest porównywana od lewej do prawej według ich wartości liczbowej do momentu znalezienia pierwszej różnicy. Wersja z najmniejszym zestawem sekcji ma pierwszeństwo przed innym z większym zestawem sekcji, biorąc pod uwagę, że wszystkie poprzednie sekcje są porównywane w równym stopniu.
Przykład:
0
< 0.1
< 0.1.0
< 1
< 1.0.0
< 1.0.1
< 1.1
< 2.0.0
Akceptuje ciągi wersji, które są zgodne z semantycznymi konwencjami przechowywania wersji zgodnie z opisem w specyfikacji semantycznej przechowywania wersji.
Zachowanie sortowania: ciągi są sortowane zgodnie z regułami opisanymi w specyfikacji semantycznej przechowywania wersji.
Przykład:
1.0.0-1
< 1.0.0-alpha
< 1.0.0-beta
< 1.0.0
< 1.0.1
< 1.1.0
Akceptuje ciągi wersji, które można przeanalizować do daty po formacie YYYY-MM-DD
ISO-8601. Identyfikatory uściślania są dozwolone w postaci cyfr rozdzielanych kropkami, dodatnimi, liczbami całkowitymi bez zer wiodących.
Jest to zalecany schemat przechowywania wersji dla bibliotek "Live at HEAD", które nie mają ustanowionych wersji wydania.
Wzorzec wyrażeń regularnych dla tego schematu przechowywania wersji to: \d{4}-\d{2}-\d{2}(\.(0|[1-9]\d*))*
Zachowanie sortowania: ciągi są sortowane najpierw według ich części daty, a następnie według liczbowego porównania identyfikatorów uściślania. Identyfikatory uściślania są zgodne z zasadami schematu złagodzonego (version
).
Przykłady: 2021-01-01
<2021-01-01.1
<2021-02-01.1.2
<2021-02-01.1.3
<2021-02-01
W przypadku pakietów korzystających z ciągów wersji, które nie pasują do żadnego z innych schematów, akceptuje większość dowolnych ciągów. Element #
używany do oznaczania wersji portów jest niedozwolony.
Zachowanie sortowania: nie podjęto próby sortowania w samym ciągu wersji. Jeśli jednak ciągi są dokładnie zgodne, ich wersje portów można porównać i posortować.
Przykłady:
apple
<>orange
<>orange.2
<>orange2
watermelon#0
<watermelon#1
Wersje portów śledzą zmiany w plikach pakietów (vcpkg.json
, portfile.cmake
itp.) bez żadnych zmian w nadrzędnej wersji biblioteki.
Wersja portu to nieujemna wartość całkowita.
Reguły dotyczące wersji portów to:
- Zacznij od 0 dla oryginalnej wersji portu,
- zwiększ o 1 za każdym razem, gdy następuje zmiana specyficzna dla programu vcpkg na porcie, który nie zwiększa wersji pakietu,
- i zresetuj wartość 0 za każdym razem, gdy wersja pakietu zostanie zaktualizowana.
Uwaga
Program vcpkg jest zgodny z formatem <version>#<port version>
tekstu . Na przykład 1.2.0#2
oznacza wersję 1.2.0
2
portu . Jeśli wersja portu to 0
#0
sufiks zostanie pominięty (np. 1.2.0
oznacza wersję portu wersji 1.2.0
0
).
Zachowanie sortowania: jeśli dwie wersje są porównywane w równym stopniu, ich wersje portów są porównywane według ich wartości liczbowej, niższe wersje portów mają pierwszeństwo.
Przykłady:
1.2.0
<1.2.0#1
<1.2.0#2
<1.2.0#10
2021-01-01#20
<2021-01-01.1
windows#7
<windows#8
Punkty odniesienia definiują globalną podłogę wersji dla wersji, które będą brane pod uwagę. Dzięki temu manifesty najwyższego poziomu zapewniają aktualność całego grafu zależności bez konieczności indywidualnego określania bezpośrednich "version>="
ograniczeń.
Każdy skonfigurowany rejestr ma skojarzony punkt odniesienia. W przypadku manifestów, które nie konfigurują żadnych rejestrów, "builtin-baseline"
pole definiuje punkt odniesienia wbudowanego rejestru. Jeśli manifest nie konfiguruje żadnych rejestrów i nie ma "builtin-baseline"
, instalacja działa zgodnie z algorytmem trybu klasycznego i ignoruje wszystkie informacje dotyczące przechowywania wersji.
Punkty odniesienia, takie jak inne ustawienia rejestru, są ignorowane z portów używanych jako zależność. Jeśli wymagana jest minimalna wersja podczas przejściowego rozpoznawania wersji, port powinien używać polecenia "version>="
.
{
"name": "project",
"version": "1.0.0",
"dependencies": ["zlib", "fmt"],
"builtin-baseline":"9fd3bd594f41afb8747e20f6ac9619f26f333cbe"
}
Aby dodać początkowy element "builtin-baseline"
, użyj polecenia vcpkg x-update-baseline --add-initial-baseline
. Aby zaktualizować punkty odniesienia w manifeście, użyj polecenia vcpkg x-update-baseline
.
Wyraża minimalne wymaganie dotyczące wersji, version>=
deklaracje nakładają niższą granicę na wersje, których można użyć do spełnienia zależności.
Uwaga
Narzędzie vcpkg wybiera najniższą wersję zgodną ze wszystkimi ograniczeniami, więc ograniczenie mniejsze niż jest wymagane.
Przykład:
{
"name": "project",
"version-semver": "1.0.0",
"dependencies": [
{ "name": "zlib", "version>=": "1.2.11#9" },
{ "name": "fmt", "version>=": "7.1.3#1" }
],
"builtin-baseline":"3426db05b996481ca31e95fff3734cf23e0f51bc"
}
W ramach deklaracji ograniczenia wersji można określić wersję portu, dodając sufiks #<port-version>
, w poprzednim przykładzie 1.2.11#9
odnosi się do wersji portu wersji 1.2.11
9
.
Deklarowanie przesłonięcia wymusza, aby program vcpkg ignorował wszystkie inne ograniczenia wersji i używał wersji określonej w zastąpieniu. Jest to przydatne w przypadku przypinania dokładnych wersji i rozwiązywania konfliktów wersji.
Przesłonięcia są deklarowane jako tablica deklaracji wersji pakietu.
Aby przesłonięcia zaczęły obowiązywać, przesłonięć pakiet musi stanowić część grafu zależności. Oznacza to, że zależność musi być zadeklarowana przez manifest najwyższego poziomu lub być częścią zależności przechodniej.
{
"name": "project",
"version-semver": "1.0.0",
"dependencies": [
"curl",
{ "name": "zlib", "version>=": "1.2.11#9" },
"fmt"
],
"builtin-baseline":"3426db05b996481ca31e95fff3734cf23e0f51bc",
"overrides": [
{ "name": "fmt", "version": "6.0.0" },
{ "name": "openssl", "version": "1.1.1h#3" }
]
}
Opinia o produkcie vcpkg
vcpkg to projekt typu open source. Wybierz link, aby przekazać opinię: