support multiple dependencies with same name

Signed-off-by: Igor Gnatenko <ignatenkobrain@fedoraproject.org>
epel9
Igor Gnatenko 6 years ago
parent 28d6d0d63a
commit 7b23eaea04
No known key found for this signature in database
GPG Key ID: 695714BD1BBC5F4C

@ -1,7 +1,7 @@
From 0dc9fc182edf0791ca697f587e48dd39948d63c1 Mon Sep 17 00:00:00 2001
From: Igor Gnatenko <ignatenkobrain@fedoraproject.org>
Date: Mon, 10 Sep 2018 23:37:40 +0200
Subject: [PATCH 1/7] name spec/patch_file by real crate name
Subject: [PATCH 1/8] name spec/patch_file by real crate name
When renaming using patch file, we really want to change file names too.

@ -1,7 +1,7 @@
From 561280a0ea35f226ef243526be2bbb656db44af6 Mon Sep 17 00:00:00 2001
From: Igor Gnatenko <ignatenkobrain@fedoraproject.org>
Date: Mon, 10 Sep 2018 23:40:18 +0200
Subject: [PATCH 2/7] generate %doc statements
Subject: [PATCH 2/8] generate %doc statements
Signed-off-by: Igor Gnatenko <ignatenkobrain@fedoraproject.org>
---

@ -1,7 +1,7 @@
From 2050880140d4953b9ebdc7211e30df3ccf5dd61d Mon Sep 17 00:00:00 2001
From: Igor Gnatenko <ignatenkobrain@fedoraproject.org>
Date: Tue, 11 Sep 2018 00:06:50 +0200
Subject: [PATCH 3/7] do better for renamed crates
Subject: [PATCH 3/8] do better for renamed crates
Signed-off-by: Igor Gnatenko <ignatenkobrain@fedoraproject.org>
---

@ -1,7 +1,7 @@
From e6e9cbbb71199c2773b47fa21f1c917a167c1743 Mon Sep 17 00:00:00 2001
From: Igor Gnatenko <ignatenkobrain@fedoraproject.org>
Date: Tue, 11 Sep 2018 10:43:53 +0200
Subject: [PATCH 4/7] remove pre-3.6 leftovers
Subject: [PATCH 4/8] remove pre-3.6 leftovers
Signed-off-by: Igor Gnatenko <ignatenkobrain@fedoraproject.org>
---

@ -1,7 +1,7 @@
From 2f12c83d14afe71e9efed2d1be62e1e610e602e9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
Date: Fri, 17 Aug 2018 10:03:48 +0200
Subject: [PATCH 5/7] Remove half-downloaded crate on ^C
Subject: [PATCH 5/8] Remove half-downloaded crate on ^C
Subsequent invocations would fail with an error about a corrupted file.
We don't have support for resuming a failed download, so let's remove the

@ -1,7 +1,7 @@
From 5a1cde5b8dcaea74ebb2050879036bf46df63adc Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
Date: Fri, 17 Aug 2018 10:18:59 +0200
Subject: [PATCH 6/7] Throw an error if -s is used without a crate
Subject: [PATCH 6/8] Throw an error if -s is used without a crate
In the future we might want to be smarter and find the crate, but let's at least
not ignore the option completely.

@ -1,7 +1,7 @@
From a61a367883b7cd60f600d25958fb634c530500fa Mon Sep 17 00:00:00 2001
From d7caa1148d5fcac70030e3fb1eb698927e69960f Mon Sep 17 00:00:00 2001
From: Igor Gnatenko <ignatenkobrain@fedoraproject.org>
Date: Fri, 26 Oct 2018 11:20:13 +0200
Subject: [PATCH 7/7] split features into subpackages
Subject: [PATCH 7/8] split features into subpackages
References: https://discussion.fedoraproject.org/t/rfc-new-crates-packaging-design-features-have-their-own-subpackages/563?u=ignatenkobrain
Signed-off-by: Igor Gnatenko <ignatenkobrain@fedoraproject.org>
@ -11,8 +11,8 @@ Signed-off-by: Igor Gnatenko <ignatenkobrain@fedoraproject.org>
rust2rpm/__main__.py | 11 +-
rust2rpm/inspector.py | 22 ++-
rust2rpm/metadata.py | 315 +++++++++++++++++------------------
rust2rpm/templates/main.spec | 141 ++++++++--------
6 files changed, 259 insertions(+), 244 deletions(-)
rust2rpm/templates/main.spec | 142 ++++++++--------
6 files changed, 260 insertions(+), 244 deletions(-)
diff --git a/data/cargo.attr b/data/cargo.attr
index 392a72b..4910b5c 100644
@ -512,10 +512,10 @@ index 5adeb65..119dea5 100644
+def normalize_deps(deps):
+ return set().union(*(d.normalize() for d in deps))
diff --git a/rust2rpm/templates/main.spec b/rust2rpm/templates/main.spec
index 7dbcc3f..27a448f 100644
index 7dbcc3f..0d9a80b 100644
--- a/rust2rpm/templates/main.spec
+++ b/rust2rpm/templates/main.spec
@@ -48,82 +48,101 @@ Patch0: {{ patch_file }}
@@ -48,82 +48,102 @@ Patch0: {{ patch_file }}
ExclusiveArch: %{rust_arches}
BuildRequires: rust-packaging
@ -586,6 +586,7 @@ index 7dbcc3f..27a448f 100644
+ {% for bin in bins %}
+%{_bindir}/{{ bin.name }}
+ {% endfor %}
+
+{% endif -%}
+
{% if include_devel %}
@ -666,7 +667,7 @@ index 7dbcc3f..27a448f 100644
%prep
{% if md.name != crate %}
%autosetup -n %{real_crate}-%{version} -p1
@@ -143,29 +162,5 @@ which use %{crate} from crates.io.
@@ -143,29 +163,5 @@ which use %{crate} from crates.io.
%cargo_test
%endif

@ -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

@ -4,7 +4,7 @@
Name: rust-packaging
Version: 6
Release: 12%{?dist}
Release: 13%{?dist}
Summary: RPM macros for building Rust packages on various architectures
License: MIT
@ -18,6 +18,7 @@ Patch0005: 0005-Remove-half-downloaded-crate-on-C.patch
Patch0006: 0006-Throw-an-error-if-s-is-used-without-a-crate.patch
# Still in PR
Patch0007: 0007-split-features-into-subpackages.patch
Patch0008: 0008-add-support-for-dependencies-with-same-name.patch
BuildArch: noarch
ExclusiveArch: %{rust_arches} noarch
@ -79,6 +80,9 @@ py.test-%{python3_version} -vv test.py
%{python3_sitelib}/rust2rpm/
%changelog
* Tue Oct 30 2018 Igor Gnatenko <ignatenkobrain@fedoraproject.org> - 6-13
- Support multiple dependencies with same name
* Sat Oct 27 2018 Igor Gnatenko <ignatenkobrain@fedoraproject.org> - 6-12
- Fix requirements with space

Loading…
Cancel
Save