You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
86 lines
3.4 KiB
86 lines
3.4 KiB
From 29a3c1b84e0971fc0c2edf483ae3b04139c19b32 Mon Sep 17 00:00:00 2001
|
|
From: Igor Gnatenko <ignatenkobrain@fedoraproject.org>
|
|
Date: Sat, 26 Jan 2019 08:33:37 +0100
|
|
Subject: [PATCH 14/14] Add support for prerelease versions
|
|
|
|
Signed-off-by: Igor Gnatenko <ignatenkobrain@fedoraproject.org>
|
|
---
|
|
rust2rpm/metadata.py | 18 ++++++++++++------
|
|
test.py | 8 ++++++++
|
|
2 files changed, 20 insertions(+), 6 deletions(-)
|
|
|
|
diff --git a/rust2rpm/metadata.py b/rust2rpm/metadata.py
|
|
index 328b67a..f0718d5 100644
|
|
--- a/rust2rpm/metadata.py
|
|
+++ b/rust2rpm/metadata.py
|
|
@@ -45,11 +45,13 @@ class Dependency:
|
|
# Any means any
|
|
continue
|
|
ver = req.spec
|
|
- if ver.prerelease:
|
|
- raise NotImplementedError(f"Pre-release requirement is not supported: {ver}")
|
|
if req.kind in (req.KIND_NEQ, req.KIND_EMPTY):
|
|
raise NotImplementedError(f"'!=' and empty kinds are not supported: {req}")
|
|
- coerced = semver.Version.coerce(str(ver))
|
|
+ coerced = str(semver.Version.coerce(str(ver)))
|
|
+ if ver.prerelease:
|
|
+ coerced = coerced.replace("-", "~")
|
|
+ # This will advance us to closest stable version (2.0.0-beta.6 → 2.0.0)
|
|
+ ver = ver.next_patch()
|
|
if req.kind == req.KIND_EQUAL:
|
|
req.kind = req.KIND_SHORTEQ
|
|
if req.kind in (req.KIND_CARET, req.KIND_COMPATIBLE):
|
|
@@ -107,7 +109,11 @@ class Dependency:
|
|
class Metadata:
|
|
def __init__(self, name, version):
|
|
self.name = name
|
|
- self.version = version
|
|
+ self._version = version
|
|
+ version_normalized = Dependency._normalize_req(f"={self._version}")
|
|
+ if len(version_normalized) != 1:
|
|
+ raise Exception(f"Incorrect version: {self._version}")
|
|
+ self.version = version_normalized[0][1]
|
|
self.license = None
|
|
self.license_file = None
|
|
self.readme = None
|
|
@@ -187,7 +193,7 @@ class Metadata:
|
|
def provides(self, feature=None):
|
|
if feature not in self.dependencies:
|
|
raise KeyError(f"Feature {feature!r} doesn't exist")
|
|
- return Dependency(self.name, f"={self.version}", features={feature})
|
|
+ return Dependency(self.name, f"={self._version}", features={feature})
|
|
|
|
@classmethod
|
|
def _resolve(cls, deps_by_feature, feature):
|
|
@@ -207,7 +213,7 @@ class Metadata:
|
|
return self._resolve(self.dependencies, feature)[1]
|
|
else:
|
|
features, deps = self.dependencies[feature]
|
|
- fdeps = set(Dependency(self.name, f"={self.version}", features={feature})
|
|
+ fdeps = set(Dependency(self.name, f"={self._version}", features={feature})
|
|
for feature in features)
|
|
return fdeps | deps
|
|
|
|
diff --git a/test.py b/test.py
|
|
index 30263b4..035df79 100644
|
|
--- a/test.py
|
|
+++ b/test.py
|
|
@@ -37,6 +37,14 @@ import rust2rpm
|
|
"crate(test) = 1.2.3"),
|
|
(">= 1.2, < 1.5",
|
|
"(crate(test) >= 1.2.0 with crate(test) < 1.5.0)"),
|
|
+ ("^2.0.0-alpha.6",
|
|
+ "(crate(test) >= 2.0.0~alpha.6 with crate(test) < 3.0.0)"),
|
|
+ ("^0.1.0-alpha.6",
|
|
+ "(crate(test) >= 0.1.0~alpha.6 with crate(test) < 0.2.0)"),
|
|
+ ("^0.0.1-alpha.6",
|
|
+ "(crate(test) >= 0.0.1~alpha.6 with crate(test) < 0.0.2)"),
|
|
+ ("^0.0.0-alpha.6",
|
|
+ "(crate(test) >= 0.0.0~alpha.6 with crate(test) < 0.0.1)"),
|
|
])
|
|
def test_dependency(req, rpmdep):
|
|
dep = rust2rpm.Dependency("test", req)
|
|
--
|
|
2.20.1
|
|
|