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 0dc9fc182edf0791ca697f587e48dd39948d63c1 Mon Sep 17 00:00:00 2001
From: Igor Gnatenko <ignatenkobrain@fedoraproject.org> From: Igor Gnatenko <ignatenkobrain@fedoraproject.org>
Date: Mon, 10 Sep 2018 23:37:40 +0200 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. 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 561280a0ea35f226ef243526be2bbb656db44af6 Mon Sep 17 00:00:00 2001
From: Igor Gnatenko <ignatenkobrain@fedoraproject.org> From: Igor Gnatenko <ignatenkobrain@fedoraproject.org>
Date: Mon, 10 Sep 2018 23:40:18 +0200 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> Signed-off-by: Igor Gnatenko <ignatenkobrain@fedoraproject.org>
--- ---

@ -1,7 +1,7 @@
From 2050880140d4953b9ebdc7211e30df3ccf5dd61d Mon Sep 17 00:00:00 2001 From 2050880140d4953b9ebdc7211e30df3ccf5dd61d Mon Sep 17 00:00:00 2001
From: Igor Gnatenko <ignatenkobrain@fedoraproject.org> From: Igor Gnatenko <ignatenkobrain@fedoraproject.org>
Date: Tue, 11 Sep 2018 00:06:50 +0200 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> Signed-off-by: Igor Gnatenko <ignatenkobrain@fedoraproject.org>
--- ---

@ -1,7 +1,7 @@
From e6e9cbbb71199c2773b47fa21f1c917a167c1743 Mon Sep 17 00:00:00 2001 From e6e9cbbb71199c2773b47fa21f1c917a167c1743 Mon Sep 17 00:00:00 2001
From: Igor Gnatenko <ignatenkobrain@fedoraproject.org> From: Igor Gnatenko <ignatenkobrain@fedoraproject.org>
Date: Tue, 11 Sep 2018 10:43:53 +0200 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> Signed-off-by: Igor Gnatenko <ignatenkobrain@fedoraproject.org>
--- ---

@ -1,7 +1,7 @@
From 2f12c83d14afe71e9efed2d1be62e1e610e602e9 Mon Sep 17 00:00:00 2001 From 2f12c83d14afe71e9efed2d1be62e1e610e602e9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl> From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
Date: Fri, 17 Aug 2018 10:03:48 +0200 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. 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 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 5a1cde5b8dcaea74ebb2050879036bf46df63adc Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl> From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
Date: Fri, 17 Aug 2018 10:18:59 +0200 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 In the future we might want to be smarter and find the crate, but let's at least
not ignore the option completely. 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> From: Igor Gnatenko <ignatenkobrain@fedoraproject.org>
Date: Fri, 26 Oct 2018 11:20:13 +0200 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 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> 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/__main__.py | 11 +-
rust2rpm/inspector.py | 22 ++- rust2rpm/inspector.py | 22 ++-
rust2rpm/metadata.py | 315 +++++++++++++++++------------------ rust2rpm/metadata.py | 315 +++++++++++++++++------------------
rust2rpm/templates/main.spec | 141 ++++++++-------- rust2rpm/templates/main.spec | 142 ++++++++--------
6 files changed, 259 insertions(+), 244 deletions(-) 6 files changed, 260 insertions(+), 244 deletions(-)
diff --git a/data/cargo.attr b/data/cargo.attr diff --git a/data/cargo.attr b/data/cargo.attr
index 392a72b..4910b5c 100644 index 392a72b..4910b5c 100644
@ -512,10 +512,10 @@ index 5adeb65..119dea5 100644
+def normalize_deps(deps): +def normalize_deps(deps):
+ return set().union(*(d.normalize() for d in deps)) + return set().union(*(d.normalize() for d in deps))
diff --git a/rust2rpm/templates/main.spec b/rust2rpm/templates/main.spec 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 --- a/rust2rpm/templates/main.spec
+++ b/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} ExclusiveArch: %{rust_arches}
BuildRequires: rust-packaging BuildRequires: rust-packaging
@ -586,6 +586,7 @@ index 7dbcc3f..27a448f 100644
+ {% for bin in bins %} + {% for bin in bins %}
+%{_bindir}/{{ bin.name }} +%{_bindir}/{{ bin.name }}
+ {% endfor %} + {% endfor %}
+
+{% endif -%} +{% endif -%}
+ +
{% if include_devel %} {% if include_devel %}
@ -666,7 +667,7 @@ index 7dbcc3f..27a448f 100644
%prep %prep
{% if md.name != crate %} {% if md.name != crate %}
%autosetup -n %{real_crate}-%{version} -p1 %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 %cargo_test
%endif %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 Name: rust-packaging
Version: 6 Version: 6
Release: 12%{?dist} Release: 13%{?dist}
Summary: RPM macros for building Rust packages on various architectures Summary: RPM macros for building Rust packages on various architectures
License: MIT 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 Patch0006: 0006-Throw-an-error-if-s-is-used-without-a-crate.patch
# Still in PR # Still in PR
Patch0007: 0007-split-features-into-subpackages.patch Patch0007: 0007-split-features-into-subpackages.patch
Patch0008: 0008-add-support-for-dependencies-with-same-name.patch
BuildArch: noarch BuildArch: noarch
ExclusiveArch: %{rust_arches} noarch ExclusiveArch: %{rust_arches} noarch
@ -79,6 +80,9 @@ py.test-%{python3_version} -vv test.py
%{python3_sitelib}/rust2rpm/ %{python3_sitelib}/rust2rpm/
%changelog %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 * Sat Oct 27 2018 Igor Gnatenko <ignatenkobrain@fedoraproject.org> - 6-12
- Fix requirements with space - Fix requirements with space

Loading…
Cancel
Save