From 981aeed93dbc6c72266e9528ab234e979f289d80 Mon Sep 17 00:00:00 2001 From: Alberto Planas Date: Fri, 26 Mar 2021 14:15:46 +0100 Subject: [PATCH] Remove duplicated output at the end --- rust2rpm/inspector.py | 46 ++++++++++++++++++++++++++----------------- rust2rpm/metadata.py | 4 ++-- 2 files changed, 30 insertions(+), 20 deletions(-) diff --git a/rust2rpm/inspector.py b/rust2rpm/inspector.py index 4b65aa4..1fcb0df 100644 --- a/rust2rpm/inspector.py +++ b/rust2rpm/inspector.py @@ -4,7 +4,7 @@ import os import sys from . import Metadata -from .metadata import normalize_deps +from .metadata import normalize_deps, Dependency def _get_binaries(cargo_toml): @@ -81,49 +81,59 @@ def main(): features.add(f or None) def process_metadata(md): - data = set() + data = [] if args.name: - data.add(md.name) + data.append(md.name) if args.version: - data.add(md._version) + data.append(md._version) if args.rpm_version: - data.add(md.version) + data.append(md.version) if args.target_kinds: - data.update(tgt.kind for tgt in md.targets) + data.extend(tgt.kind for tgt in md.targets) if args.list_features: - data.update(f for f in md.dependencies if f is not None) + data.extend(f for f in md.dependencies if f is not None) if args.provides: - data.update(md.provides(f) for f in features) + data.extend(md.provides(f) for f in features) if args.requires: # Someone should own /usr/share/cargo/registry - data.add('cargo') + data.append('cargo') if args.all_features: - data.update(md.all_dependencies) + data.extend(md.all_dependencies) else: for f in features: - data.update(md.requires(f)) + data.extend(md.requires(f)) if args.build_requires: - data.add("rust-packaging") + data.append("rust-packaging") if args.all_features: - data.update(md.all_dependencies) + data.extend(md.all_dependencies) else: for f in features: - data.update(md.requires(f, resolve=True)) + data.extend(md.requires(f, resolve=True)) if args.test_requires: - data.update(md.dev_dependencies) + data.extend(md.dev_dependencies) if args.provides_vendor: # Print the vendoring providers only if the 'vendor' # directory is present if args.vendor or os.path.isdir('vendor'): - data.update(md.resolved_dependencies()) + data.extend(md.resolved_dependencies()) return data for f in files: data = set() mds = Metadata.from_file(f, include_members=args.include_workspaces) for md in mds: - data.update(process_metadata(md)) - for line in data: + # process_metadata can return an [string], but can be also + # a [Dependency] instances, that once presented have + # multiple substrings. If we want to order the data and + # remove all the duplicates we should first normalize it + metadata_lines = [] + for metadata in process_metadata(md): + if isinstance(metadata, Dependency): + metadata_lines.extend(metadata.normalize()) + else: + metadata_lines.append(metadata) + data.update(metadata_lines) + for line in sorted(data): print(line) diff --git a/rust2rpm/metadata.py b/rust2rpm/metadata.py index 073fa64..8866226 100644 --- a/rust2rpm/metadata.py +++ b/rust2rpm/metadata.py @@ -371,9 +371,9 @@ class Metadata: return self @classmethod - def from_file(cls, path): + def from_file(cls, path, include_members=False): instances = [] - members = Metadata.members(path) + members = Metadata.members(path) if include_members else [] for member in (members or [path]): instance = cls.from_json(Metadata.manifest(member)) instance._path = member