Limit Filter "universes" to invocation::filter

Universes are really an optimization of filtering tasks, so let's define
them there, and derive them from the set of conditions.  This means that
complex filters might get missed and end up doing a full task scan, but
that's probably OK.

Note that this does not fix the working-set API issues (#108 and #123).
This commit is contained in:
Dustin J. Mitchell 2020-12-30 00:23:18 +00:00
parent 0a458b5f5b
commit fc977a0fe6
5 changed files with 236 additions and 147 deletions

View file

@ -383,7 +383,7 @@ impl Sync {
#[cfg(test)]
mod test {
use super::*;
use crate::argparse::Universe;
use crate::argparse::Condition;
const EMPTY: Vec<&str> = vec![];
@ -459,8 +459,7 @@ mod test {
fn test_modify_description_multi() {
let subcommand = Subcommand::Modify {
filter: Filter {
universe: Universe::for_ids(vec![123]),
..Default::default()
conditions: vec![Condition::IdList(vec![TaskId::WorkingSetId(123)])],
},
modification: Modification {
description: DescriptionMod::Set(s!("foo bar")),
@ -477,8 +476,7 @@ mod test {
fn test_append() {
let subcommand = Subcommand::Modify {
filter: Filter {
universe: Universe::for_ids(vec![123]),
..Default::default()
conditions: vec![Condition::IdList(vec![TaskId::WorkingSetId(123)])],
},
modification: Modification {
description: DescriptionMod::Append(s!("foo bar")),
@ -495,8 +493,7 @@ mod test {
fn test_prepend() {
let subcommand = Subcommand::Modify {
filter: Filter {
universe: Universe::for_ids(vec![123]),
..Default::default()
conditions: vec![Condition::IdList(vec![TaskId::WorkingSetId(123)])],
},
modification: Modification {
description: DescriptionMod::Prepend(s!("foo bar")),
@ -513,8 +510,7 @@ mod test {
fn test_done() {
let subcommand = Subcommand::Modify {
filter: Filter {
universe: Universe::for_ids(vec![123]),
..Default::default()
conditions: vec![Condition::IdList(vec![TaskId::WorkingSetId(123)])],
},
modification: Modification {
status: Some(Status::Completed),
@ -531,8 +527,7 @@ mod test {
fn test_done_modify() {
let subcommand = Subcommand::Modify {
filter: Filter {
universe: Universe::for_ids(vec![123]),
..Default::default()
conditions: vec![Condition::IdList(vec![TaskId::WorkingSetId(123)])],
},
modification: Modification {
description: DescriptionMod::Set(s!("now-finished")),
@ -550,8 +545,7 @@ mod test {
fn test_start() {
let subcommand = Subcommand::Modify {
filter: Filter {
universe: Universe::for_ids(vec![123]),
..Default::default()
conditions: vec![Condition::IdList(vec![TaskId::WorkingSetId(123)])],
},
modification: Modification {
active: Some(true),
@ -568,8 +562,7 @@ mod test {
fn test_start_modify() {
let subcommand = Subcommand::Modify {
filter: Filter {
universe: Universe::for_ids(vec![123]),
..Default::default()
conditions: vec![Condition::IdList(vec![TaskId::WorkingSetId(123)])],
},
modification: Modification {
active: Some(true),
@ -587,8 +580,7 @@ mod test {
fn test_stop() {
let subcommand = Subcommand::Modify {
filter: Filter {
universe: Universe::for_ids(vec![123]),
..Default::default()
conditions: vec![Condition::IdList(vec![TaskId::WorkingSetId(123)])],
},
modification: Modification {
active: Some(false),
@ -605,8 +597,7 @@ mod test {
fn test_stop_modify() {
let subcommand = Subcommand::Modify {
filter: Filter {
universe: Universe::for_ids(vec![123]),
..Default::default()
conditions: vec![Condition::IdList(vec![TaskId::WorkingSetId(123)])],
},
modification: Modification {
description: DescriptionMod::Set(s!("mod")),
@ -636,8 +627,10 @@ mod test {
fn test_report_filter_before() {
let subcommand = Subcommand::Report {
filter: Filter {
universe: Universe::for_ids(vec![12, 13]),
..Default::default()
conditions: vec![Condition::IdList(vec![
TaskId::WorkingSetId(12),
TaskId::WorkingSetId(13),
])],
},
report_name: "foo".to_owned(),
};
@ -651,8 +644,10 @@ mod test {
fn test_report_filter_after() {
let subcommand = Subcommand::Report {
filter: Filter {
universe: Universe::for_ids(vec![12, 13]),
..Default::default()
conditions: vec![Condition::IdList(vec![
TaskId::WorkingSetId(12),
TaskId::WorkingSetId(13),
])],
},
report_name: "foo".to_owned(),
};
@ -666,8 +661,10 @@ mod test {
fn test_report_filter_next() {
let subcommand = Subcommand::Report {
filter: Filter {
universe: Universe::for_ids(vec![12, 13]),
..Default::default()
conditions: vec![Condition::IdList(vec![
TaskId::WorkingSetId(12),
TaskId::WorkingSetId(13),
])],
},
report_name: "next".to_owned(),
};
@ -696,8 +693,10 @@ mod test {
let subcommand = Subcommand::Info {
debug: false,
filter: Filter {
universe: Universe::for_ids(vec![12, 13]),
..Default::default()
conditions: vec![Condition::IdList(vec![
TaskId::WorkingSetId(12),
TaskId::WorkingSetId(13),
])],
},
};
assert_eq!(
@ -711,8 +710,7 @@ mod test {
let subcommand = Subcommand::Info {
debug: true,
filter: Filter {
universe: Universe::for_ids(vec![12]),
..Default::default()
conditions: vec![Condition::IdList(vec![TaskId::WorkingSetId(12)])],
},
};
assert_eq!(