From 3b97db5c258d0700957ad41c6884badc27cd20c2 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Fri, 11 May 2018 14:22:35 +0200 Subject: [PATCH] Fix: Duplicated printing of entries with "show --all" The problem was that the used `Diary::diary_names()` iterator does not call `unique()` on its output. That decision was made because the return type would get more complicated with that feature. Now that rustc 1.26 with Impl Trait is out, we can refactor the return types of these functions (so also with `Diary::diary_names()`) to automatically do this. --- bin/domain/imag-log/src/main.rs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/bin/domain/imag-log/src/main.rs b/bin/domain/imag-log/src/main.rs index befed156..053f06e5 100644 --- a/bin/domain/imag-log/src/main.rs +++ b/bin/domain/imag-log/src/main.rs @@ -104,6 +104,8 @@ fn main() { } fn show(rt: &Runtime) { + use std::borrow::Cow; + use libimagdiary::iter::DiaryEntryIterator; use libimagdiary::entry::DiaryEntry; @@ -114,13 +116,19 @@ fn show(rt: &Runtime) { .collect(), None => if scmd.is_present("show-all") { + debug!("Showing for all diaries"); rt.store() .diary_names() .map_err_trace_exit_unwrap(1) .map(|diary_name| { let diary_name = diary_name.map_err_trace_exit_unwrap(1); - Diary::entries(rt.store(), &diary_name).map_err_trace_exit_unwrap(1) + debug!("Getting entries for Diary: {}", diary_name); + let entries = Diary::entries(rt.store(), &diary_name).map_err_trace_exit_unwrap(1); + let diary_name = Cow::from(diary_name); + (entries, diary_name) }) + .unique_by(|tpl| tpl.1.clone()) + .map(|tpl| tpl.0) .collect() } else { // showing default logs @@ -144,6 +152,7 @@ fn show(rt: &Runtime) { .sorted_by_key(|&(ref id, _)| id.clone()) .into_iter() .map(|(id, entry)| { + debug!("Found entry: {:?}", entry); writeln!(rt.stdout(), "{dname: >10} - {y: >4}-{m:0>2}-{d:0>2}T{H:0>2}:{M:0>2} - {text}", dname = id.diary_name(),