diff options
author | Matthias Beyer <matthias.beyer@atos.net> | 2021-06-15 09:51:34 +0200 |
---|---|---|
committer | Matthias Beyer <matthias.beyer@atos.net> | 2021-06-16 13:16:29 +0200 |
commit | d1c24497be51603f793ba2bda44b1bcdfb9ed65c (patch) | |
tree | 4413dc398ba6653bc4649947ae299f918b0da7ba | |
parent | 5c57c19913a80d4a0dc9827f858dd7b124d44089 (diff) |
Move what-depends implementation to new package print interface
Signed-off-by: Matthias Beyer <matthias.beyer@atos.net>
Tested-by: Matthias Beyer <matthias.beyer@atos.net>
-rw-r--r-- | src/commands/what_depends.rs | 38 |
1 files changed, 27 insertions, 11 deletions
diff --git a/src/commands/what_depends.rs b/src/commands/what_depends.rs index 10c9edc..1b28620 100644 --- a/src/commands/what_depends.rs +++ b/src/commands/what_depends.rs @@ -10,8 +10,12 @@ //! Implementation of the 'what_depends' subcommand +use std::io::Write; + use anyhow::Result; use clap::ArgMatches; +use futures::stream::StreamExt; +use futures::stream::TryStreamExt; use log::trace; use resiter::Filter; use resiter::Map; @@ -20,6 +24,7 @@ use crate::commands::util::getbool; use crate::config::*; use crate::package::PackageName; use crate::repository::Repository; +use crate::ui::*; /// Implementation of the "what_depends" subcommand pub async fn what_depends( @@ -54,16 +59,9 @@ pub async fn what_depends( ) }; - let format = config.package_print_format(); - let mut stdout = std::io::stdout(); - - let packages = repo - .packages() - .map(|package| package_filter.filter(package).map(|b| (b, package))) - .filter_ok(|(b, _)| *b) - .map_ok(|tpl| tpl.1) - .inspect(|pkg| trace!("Found package: {:?}", pkg)) - .collect::<Result<Vec<_>>>()?; + let hb = crate::ui::handlebars_for_package_printing(config.package_print_format())?; + let stdout = std::io::stdout(); + let mut outlock = stdout.lock(); let flags = crate::ui::PackagePrintFlags { print_all: false, @@ -82,5 +80,23 @@ pub async fn what_depends( script_highlighting: false, }; - crate::ui::print_packages(&mut stdout, format, packages.into_iter(), config, &flags) + let mut i = 0; + let iter = repo + .packages() + .map(|package| package_filter.filter(package).map(|b| (b, package))) + .filter_ok(|(b, _)| *b) + .map_ok(|tpl| tpl.1) + .inspect(|pkg| trace!("Found package: {:?}", pkg)) + .map_ok(|p| { // poor mans enumerate_ok() + i += 1; + p.prepare_print(config, &flags, &hb, i) + }); + + tokio_stream::iter(iter) + .map(|pp| pp.and_then(|p| p.into_displayable())) + .try_for_each(|p| { + let r = writeln!(&mut outlock, "{}", p).map_err(anyhow::Error::from); + futures::future::ready(r) + }) + .await } |