refactor ReviewsPerBackend::into_strategies()
This commit is contained in:
@@ -3,6 +3,8 @@ use std::rc::Rc;
|
|||||||
use crate::backend::Backend;
|
use crate::backend::Backend;
|
||||||
use crate::{Group, Package};
|
use crate::{Group, Package};
|
||||||
|
|
||||||
|
use super::strategy::Strategy;
|
||||||
|
|
||||||
#[derive(Debug, PartialEq)]
|
#[derive(Debug, PartialEq)]
|
||||||
pub(super) enum ReviewAction {
|
pub(super) enum ReviewAction {
|
||||||
AsDependency(Package),
|
AsDependency(Package),
|
||||||
@@ -38,6 +40,39 @@ impl ReviewsPerBackend {
|
|||||||
pub(super) fn push(&mut self, value: (Box<dyn Backend>, Vec<ReviewAction>)) {
|
pub(super) fn push(&mut self, value: (Box<dyn Backend>, Vec<ReviewAction>)) {
|
||||||
self.items.push(value);
|
self.items.push(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Convert the reviews per backend to a vector of [`Strategy`], where one `Strategy` contains
|
||||||
|
/// all actions that must be executed for a [`Backend`].
|
||||||
|
///
|
||||||
|
/// If there are no actions for a `Backend`, then that `Backend` is removed from the return
|
||||||
|
/// value.
|
||||||
|
pub(super) fn into_strategies(self) -> Vec<Strategy> {
|
||||||
|
let mut result = vec![];
|
||||||
|
|
||||||
|
for (backend, actions) in self {
|
||||||
|
let mut to_delete = vec![];
|
||||||
|
let mut assign_group = vec![];
|
||||||
|
let mut as_dependency = vec![];
|
||||||
|
|
||||||
|
extract_actions(
|
||||||
|
actions,
|
||||||
|
&mut to_delete,
|
||||||
|
&mut assign_group,
|
||||||
|
&mut as_dependency,
|
||||||
|
);
|
||||||
|
|
||||||
|
result.push(Strategy::new(
|
||||||
|
backend,
|
||||||
|
to_delete,
|
||||||
|
as_dependency,
|
||||||
|
assign_group,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
result.retain(|s| !s.nothing_to_do());
|
||||||
|
|
||||||
|
result
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl IntoIterator for ReviewsPerBackend {
|
impl IntoIterator for ReviewsPerBackend {
|
||||||
@@ -54,3 +89,18 @@ pub(super) enum ContinueWithReview {
|
|||||||
Yes,
|
Yes,
|
||||||
No,
|
No,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn extract_actions(
|
||||||
|
actions: Vec<ReviewAction>,
|
||||||
|
to_delete: &mut Vec<Package>,
|
||||||
|
assign_group: &mut Vec<(Package, Rc<Group>)>,
|
||||||
|
as_dependency: &mut Vec<Package>,
|
||||||
|
) {
|
||||||
|
for action in actions {
|
||||||
|
match action {
|
||||||
|
ReviewAction::Delete(package) => to_delete.push(package),
|
||||||
|
ReviewAction::AssignGroup(package, group) => assign_group.push((package, group)),
|
||||||
|
ReviewAction::AsDependency(package) => as_dependency.push(package),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -44,8 +44,7 @@ pub fn review(
|
|||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut strategies: Vec<Strategy> = reviews.into();
|
let strategies: Vec<Strategy> = reviews.into_strategies();
|
||||||
strategies.retain(|s| !s.nothing_to_do());
|
|
||||||
|
|
||||||
println!();
|
println!();
|
||||||
let mut iter = strategies.iter().peekable();
|
let mut iter = strategies.iter().peekable();
|
||||||
|
|||||||
@@ -5,8 +5,6 @@ use anyhow::Result;
|
|||||||
use crate::backend::Backend;
|
use crate::backend::Backend;
|
||||||
use crate::{Group, Package};
|
use crate::{Group, Package};
|
||||||
|
|
||||||
use super::datastructures::{ReviewAction, ReviewsPerBackend};
|
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub(super) struct Strategy {
|
pub(super) struct Strategy {
|
||||||
backend: Box<dyn Backend>,
|
backend: Box<dyn Backend>,
|
||||||
@@ -79,46 +77,3 @@ impl Strategy {
|
|||||||
self.delete.is_empty() && self.as_dependency.is_empty() && self.assign_group.is_empty()
|
self.delete.is_empty() && self.as_dependency.is_empty() && self.assign_group.is_empty()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<ReviewsPerBackend> for Vec<Strategy> {
|
|
||||||
fn from(reviews: ReviewsPerBackend) -> Self {
|
|
||||||
let mut result = vec![];
|
|
||||||
|
|
||||||
for (backend, actions) in reviews {
|
|
||||||
let mut to_delete = vec![];
|
|
||||||
let mut assign_group = vec![];
|
|
||||||
let mut as_dependency = vec![];
|
|
||||||
|
|
||||||
extract_actions(
|
|
||||||
actions,
|
|
||||||
&mut to_delete,
|
|
||||||
&mut assign_group,
|
|
||||||
&mut as_dependency,
|
|
||||||
);
|
|
||||||
|
|
||||||
result.push(Strategy::new(
|
|
||||||
backend,
|
|
||||||
to_delete,
|
|
||||||
as_dependency,
|
|
||||||
assign_group,
|
|
||||||
));
|
|
||||||
}
|
|
||||||
|
|
||||||
result
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn extract_actions(
|
|
||||||
actions: Vec<ReviewAction>,
|
|
||||||
to_delete: &mut Vec<Package>,
|
|
||||||
assign_group: &mut Vec<(Package, Rc<Group>)>,
|
|
||||||
as_dependency: &mut Vec<Package>,
|
|
||||||
) {
|
|
||||||
for action in actions {
|
|
||||||
match action {
|
|
||||||
ReviewAction::Delete(package) => to_delete.push(package),
|
|
||||||
ReviewAction::AssignGroup(package, group) => assign_group.push((package, group)),
|
|
||||||
ReviewAction::AsDependency(package) => as_dependency.push(package),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
Reference in New Issue
Block a user