diff --git a/0001-name-spec-patch_file-by-real-crate-name.patch b/0001-name-spec-patch_file-by-real-crate-name.patch index 7a14de3..27fbbfa 100644 --- a/0001-name-spec-patch_file-by-real-crate-name.patch +++ b/0001-name-spec-patch_file-by-real-crate-name.patch @@ -1,7 +1,7 @@ From 0dc9fc182edf0791ca697f587e48dd39948d63c1 Mon Sep 17 00:00:00 2001 From: Igor Gnatenko 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. diff --git a/0002-generate-doc-statements.patch b/0002-generate-doc-statements.patch index 3bb4409..fb5ec59 100644 --- a/0002-generate-doc-statements.patch +++ b/0002-generate-doc-statements.patch @@ -1,7 +1,7 @@ From 561280a0ea35f226ef243526be2bbb656db44af6 Mon Sep 17 00:00:00 2001 From: Igor Gnatenko 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 --- diff --git a/0003-do-better-for-renamed-crates.patch b/0003-do-better-for-renamed-crates.patch index a501e87..0c9c3fd 100644 --- a/0003-do-better-for-renamed-crates.patch +++ b/0003-do-better-for-renamed-crates.patch @@ -1,7 +1,7 @@ From 2050880140d4953b9ebdc7211e30df3ccf5dd61d Mon Sep 17 00:00:00 2001 From: Igor Gnatenko 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 --- diff --git a/0004-remove-pre-3.6-leftovers.patch b/0004-remove-pre-3.6-leftovers.patch index 5e7848c..79d041d 100644 --- a/0004-remove-pre-3.6-leftovers.patch +++ b/0004-remove-pre-3.6-leftovers.patch @@ -1,7 +1,7 @@ From e6e9cbbb71199c2773b47fa21f1c917a167c1743 Mon Sep 17 00:00:00 2001 From: Igor Gnatenko 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 --- diff --git a/0005-Remove-half-downloaded-crate-on-C.patch b/0005-Remove-half-downloaded-crate-on-C.patch index d822219..ef0eb21 100644 --- a/0005-Remove-half-downloaded-crate-on-C.patch +++ b/0005-Remove-half-downloaded-crate-on-C.patch @@ -1,7 +1,7 @@ From 2f12c83d14afe71e9efed2d1be62e1e610e602e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= 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 diff --git a/0006-Throw-an-error-if-s-is-used-without-a-crate.patch b/0006-Throw-an-error-if-s-is-used-without-a-crate.patch index 44219dd..44bc5b1 100644 --- a/0006-Throw-an-error-if-s-is-used-without-a-crate.patch +++ b/0006-Throw-an-error-if-s-is-used-without-a-crate.patch @@ -1,7 +1,7 @@ From 5a1cde5b8dcaea74ebb2050879036bf46df63adc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= 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. diff --git a/0007-split-features-into-subpackages.patch b/0007-split-features-into-subpackages.patch index 5455ccc..fe96334 100644 --- a/0007-split-features-into-subpackages.patch +++ b/0007-split-features-into-subpackages.patch @@ -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 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 @@ -11,8 +11,8 @@ Signed-off-by: Igor Gnatenko 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 diff --git a/0008-add-support-for-dependencies-with-same-name.patch b/0008-add-support-for-dependencies-with-same-name.patch new file mode 100644 index 0000000..5d8af44 --- /dev/null +++ b/0008-add-support-for-dependencies-with-same-name.patch @@ -0,0 +1,74 @@ +From 6b5c116b0369a0a6c6ecb40c8bcc0974a36fa714 Mon Sep 17 00:00:00 2001 +From: Igor Gnatenko +Date: Tue, 30 Oct 2018 20:37:38 +0100 +Subject: [PATCH 8/8] add support for dependencies with same name + +Reported-by: Josh Stone +References: https://internals.rust-lang.org/t/optional-dependencies-with-same-name/8728 +Signed-off-by: Igor Gnatenko +--- + 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 + diff --git a/rust-packaging.spec b/rust-packaging.spec index 157a08e..c5bd19c 100644 --- a/rust-packaging.spec +++ b/rust-packaging.spec @@ -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 - 6-13 +- Support multiple dependencies with same name + * Sat Oct 27 2018 Igor Gnatenko - 6-12 - Fix requirements with space