Версия
Функции для разбора и сопоставления версий с требованиями.
Версия — это строка в определённом формате или Version, сгенерированная после разбора с помощью Version.parse/1.
Version разбор и требования следуют схеме SemVer 2.0.
Версии
Вкратце, версия представлена тремя числами:
MAJOR.MINOR.PATCH
Предварительные версии поддерживаются путём добавления -[0-9A-Za-z-\.]:
"1.0.0-alpha.3"
Информация о сборке может быть добавлена путём добавления +[0-9A-Za-z-\.]:
"1.0.0-alpha.3+20130417140000"
Структура
Версия представлена структурой Version, и поля названы в соответствии со Semver: :major, :minor, :patch, :pre и :build.
Требования
Требования позволяют указать, с какими версиями заданной зависимости вы хотите работать. Они поддерживают стандартные операторы, такие как >=, <=, >, == и аналогичные, которые работают так, как ожидается:
# Only version 2.0.0 "== 2.0.0" # Anything later than 2.0.0 "> 2.0.0"
Требования также поддерживают and и or для сложных условий:
# 2.0.0 and later until 2.1.0 ">= 2.0.0 and < 2.1.0"
Поскольку пример выше является распространённым требованием, его можно выразить следующим образом:
"~> 2.0.0"
~> никогда не будет включать предварительные версии своего верхнего предела. Также его можно использовать для установки верхнего предела только для основной части версии. См. таблицу ниже для ~> требований и их соответствия переводу.
~> | Перевод |
|---|---|
~> 2.0.0 | >= 2.0.0 and < 2.1.0 |
~> 2.1.2 | >= 2.1.2 and < 2.2.0 |
~> 2.1.3-dev | >= 2.1.3-dev and < 2.2.0 |
~> 2.0 | >= 2.0.0 and < 3.0.0 |
~> 2.1 | >= 2.1.0 and < 3.0.0 |
Когда allow_pre: false задано, требование не будет соответствовать предварительной версии, если операнд не является предварительной версией. По умолчанию предварительные версии всегда разрешены, но обратите внимание, что в модуле :allow_pre значение false. задано. См. таблицу ниже для примеров.
| Требование | Версия | :allow_pre | Совпадение |
|---|---|---|---|
~> 2.0 | 2.1.0 | - | true |
~> 2.0 | 3.0.0 | - | false |
~> 2.0.0 | 2.0.1 | - | true |
~> 2.0.0 | 2.1.0 | - | false |
~> 2.1.2 | 2.1.3-dev | true | true |
~> 2.1.2 | 2.1.3-dev | false | false |
~> 2.1-dev | 2.2.0-dev | false | true |
~> 2.1.2-dev | 2.1.3-dev | false | true |
>= 2.1.0 | 2.2.0-dev | false | false |
>= 2.1.0-dev | 2.2.3-dev | true | true |
Обзор
Типы
- build()
- major()
- matchable()
- minor()
- patch()
- pre()
- requirement()
- t()
- version()
Функции
- compare(version1, version2)
-
Сравнивает две версии. Возвращает
:gtесли первая версия больше второй и:ltв обратном случае. Если две версии равны, возвращается:eq - compile_requirement(req)
-
Компилирует требование до его внутренней формы с помощью
:ets.match_spec_compile/1для более быстрого сопоставления. - match?(version, requirement, opts \\ [])
-
Проверяет, соответствует ли заданная версия спецификации.
- parse(string)
-
Разбирает строку версии в
Version. - parse!(string)
-
Разбирает строку версии в
Version. - parse_requirement(string)
-
Разбирает строку требования к версии в
Version.Requirement.
Типы
build()
build() :: String.t | nil
major()
major() :: String.t | non_neg_integer
matchable()
matchable() :: {major :: major, minor :: minor, patch :: patch, pre :: pre} minor()
minor() :: non_neg_integer | nil
patch()
patch() :: non_neg_integer | nil
pre()
pre() :: [String.t | non_neg_integer]
requirement()
requirement() :: String.t | Version.Requirement.t
t()
t() :: %Version{build: build, major: major, minor: minor, patch: patch, pre: pre} version()
version() :: String.t | t
Функции
compare(version1, version2)
compare(version, version) :: :gt | :eq | :lt
Сравнивает две версии. Возвращает :gt если первая версия больше второй и :lt в обратном случае. Если две версии равны, возвращается :eq
Вызывает исключение Version.InvalidVersionError, если version не может быть проанализирован. Если задана уже проанализированная версия, функция не вызовет исключение.
Примеры
iex> Version.compare("2.0.1-alpha1", "2.0.0")
:gt
iex> Version.compare("2.0.1+build0", "2.0.1")
:eq
iex> Version.compare("invalid", "2.0.1")
** (Version.InvalidVersionError) invalid compile_requirement(req)
compile_requirement(Version.Requirement.t) :: Version.Requirement.t
Компилирует требование до его внутренней формы с помощью :ets.match_spec_compile/1 для более быстрого сопоставления.
Внутренняя форма неявна и не может быть преобразована во внешний вид и обратно, не потеряв свои свойства (что означает, что её нельзя отправить процессу на другом узле и сохранить её корректность, и её нельзя сохранить на диске).
match?(version, requirement, opts \\ [])
match?(version, requirement, Keyword.t) :: boolean
Проверяет, соответствует ли заданная версия спецификации.
Возвращает true если version удовлетворяет requirement, false в противном случае. Вызывает исключение Version.InvalidRequirementError, если requirement не может быть проанализирован, или Version.InvalidVersionError, если version не может быть проанализирован. Если заданы уже проанализированная версия и требование, функция не вызовет исключение.
Опции
-
:allow_pre- когдаfalseпредварительные версии не будут соответствовать, если операнд не является предварительной версией, см. таблицу примеров (по умолчанию:true);
Примеры
iex> Version.match?("2.0.0", ">1.0.0")
true
iex> Version.match?("2.0.0", "==1.0.0")
false
iex> Version.match?("foo", "==1.0.0")
** (Version.InvalidVersionError) foo
iex> Version.match?("2.0.0", "== ==1.0.0")
** (Version.InvalidRequirementError) == ==1.0.0 parse(string)
parse(String.t) :: {:ok, t} | :error Разбирает строку версии в Version.
Примеры
iex> {:ok, version} = Version.parse("2.0.1-alpha1")
iex> version
#Version<2.0.1-alpha1>
iex> Version.parse("2.0-alpha1")
:error parse!(строка)
parse!(String.t) :: t | no_return
Парсит строку версии в Version.
Если string — некорректная версия, возникает InvalidVersionError.
Примеры
iex> Version.parse!("2.0.1-alpha1")
#Version<2.0.1-alpha1>
iex> Version.parse!("2.0-alpha1")
** (Version.InvalidVersionError) 2.0-alpha1 parse_requirement(строка)
parse_requirement(String.t) ::
{:ok, Version.Requirement.t} |
:error Парсит строку требования версии в Version.Requirement.
Примеры
iex> {:ok, req} = Version.parse_requirement("== 2.0.1")
iex> req
#Version.Requirement<== 2.0.1>
iex> Version.parse_requirement("== == 2.0.1")
:error
© 2012 Plataformatec
Licensed under the Apache License, Version 2.0.
https://hexdocs.pm/elixir/1.3.4/Version.html