Signed-off-by: Igor Gnatenko <ignatenkobrain@fedoraproject.org>epel9
parent
28d6d0d63a
commit
7b23eaea04
@ -0,0 +1,74 @@
|
|||||||
|
From 6b5c116b0369a0a6c6ecb40c8bcc0974a36fa714 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Igor Gnatenko <ignatenkobrain@fedoraproject.org>
|
||||||
|
Date: Tue, 30 Oct 2018 20:37:38 +0100
|
||||||
|
Subject: [PATCH 8/8] add support for dependencies with same name
|
||||||
|
|
||||||
|
Reported-by: Josh Stone <jistone@redhat.com>
|
||||||
|
References: https://internals.rust-lang.org/t/optional-dependencies-with-same-name/8728
|
||||||
|
Signed-off-by: Igor Gnatenko <ignatenkobrain@fedoraproject.org>
|
||||||
|
---
|
||||||
|
rust2rpm/metadata.py | 32 ++++++++++++++++++++------------
|
||||||
|
1 file changed, 20 insertions(+), 12 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/rust2rpm/metadata.py b/rust2rpm/metadata.py
|
||||||
|
index 119dea5..10c0011 100644
|
||||||
|
--- a/rust2rpm/metadata.py
|
||||||
|
+++ b/rust2rpm/metadata.py
|
||||||
|
@@ -1,5 +1,6 @@
|
||||||
|
__all__ = ["Dependency", "Metadata"]
|
||||||
|
|
||||||
|
+import collections
|
||||||
|
import copy
|
||||||
|
import json
|
||||||
|
import subprocess
|
||||||
|
@@ -124,9 +125,11 @@ class Metadata:
|
||||||
|
self.description = md.get("description")
|
||||||
|
|
||||||
|
# dependencies + build-dependencies → runtime
|
||||||
|
- deps_by_name = {dep["name"]: Dependency.from_json(dep)
|
||||||
|
- for dep in md["dependencies"]
|
||||||
|
- if dep["kind"] != "dev"}
|
||||||
|
+ deps_by_name = collections.defaultdict(list)
|
||||||
|
+ for dep in md["dependencies"]:
|
||||||
|
+ if dep["kind"] == "dev":
|
||||||
|
+ continue
|
||||||
|
+ deps_by_name[dep["name"]].append(Dependency.from_json(dep))
|
||||||
|
|
||||||
|
deps_by_feature = {}
|
||||||
|
for feature, f_deps in md["features"].items():
|
||||||
|
@@ -137,18 +140,23 @@ class Metadata:
|
||||||
|
features.add(dep)
|
||||||
|
else:
|
||||||
|
pkg, _, f = dep.partition("/")
|
||||||
|
- dep = copy.deepcopy(deps_by_name[pkg])
|
||||||
|
- if f:
|
||||||
|
- dep.features = {f}
|
||||||
|
- deps.add(dep)
|
||||||
|
+ for dep in deps_by_name[pkg]:
|
||||||
|
+ dep = copy.deepcopy(dep)
|
||||||
|
+ if f:
|
||||||
|
+ dep.features = {f}
|
||||||
|
+ deps.add(dep)
|
||||||
|
deps_by_feature[feature] = (features, deps)
|
||||||
|
|
||||||
|
mandatory_deps = set()
|
||||||
|
- for dep in deps_by_name.values():
|
||||||
|
- if dep.optional:
|
||||||
|
- deps_by_feature[dep.name] = ({None}, {copy.deepcopy(dep)})
|
||||||
|
- else:
|
||||||
|
- mandatory_deps.add(copy.deepcopy(dep))
|
||||||
|
+ for deps in deps_by_name.values():
|
||||||
|
+ fdeps = set()
|
||||||
|
+ for dep in deps:
|
||||||
|
+ if dep.optional:
|
||||||
|
+ fdeps.add(copy.deepcopy(dep))
|
||||||
|
+ else:
|
||||||
|
+ mandatory_deps.add(copy.deepcopy(dep))
|
||||||
|
+ if fdeps:
|
||||||
|
+ deps_by_feature[name] = ({None}, fdeps)
|
||||||
|
deps_by_feature[None] = (set(), mandatory_deps)
|
||||||
|
|
||||||
|
if "default" not in deps_by_feature:
|
||||||
|
--
|
||||||
|
2.19.1
|
||||||
|
|
Loading…
Reference in new issue