Skip to content

Commit

Permalink
refactor: Use type aliases properly
Browse files Browse the repository at this point in the history
  • Loading branch information
VorpalBlade committed Jul 31, 2024
1 parent 4ba647b commit 65a21c2
Show file tree
Hide file tree
Showing 17 changed files with 48 additions and 43 deletions.
6 changes: 2 additions & 4 deletions crates/konfigkoll/src/apply.rs
Original file line number Diff line number Diff line change
@@ -1,16 +1,14 @@
//! Code for applying the configuration to the system.
use std::collections::BTreeMap;
use std::sync::Arc;

use either::Either;

use konfigkoll::cli::Paranoia;
use konfigkoll_core::apply::Applicator;
use paketkoll_types::backend::Backend;
use paketkoll_types::backend::Files;
use paketkoll_types::backend::PackageBackendMap;
use paketkoll_types::backend::PackageMap;
use paketkoll_types::backend::PackageMapMap;
use paketkoll_types::intern::Interner;

#[allow(clippy::too_many_arguments)]
Expand All @@ -19,7 +17,7 @@ pub(crate) fn create_applicator(
force_dry_run: bool,
backend_map: &PackageBackendMap,
interner: &Arc<Interner>,
package_maps: &BTreeMap<Backend, Arc<PackageMap>>,
package_maps: &PackageMapMap,
files_backend: &Arc<dyn Files>,
diff_command: Vec<String>,
pager_command: Vec<String>,
Expand Down
7 changes: 2 additions & 5 deletions crates/konfigkoll/src/pkgs.rs
Original file line number Diff line number Diff line change
@@ -1,16 +1,13 @@
//! Package scanning functions
use std::collections::BTreeMap;
use std::sync::Arc;

use anyhow::Context;
use itertools::Itertools;
use rayon::prelude::*;

use konfigkoll_types::PkgInstructions;
use paketkoll_types::backend::Backend;
use paketkoll_types::backend::PackageBackendMap;
use paketkoll_types::backend::PackageMap;
use paketkoll_types::backend::PackageMapMap;
use paketkoll_types::intern::Interner;
use paketkoll_types::package::PackageInstallStatus;
Expand All @@ -20,8 +17,8 @@ pub(crate) fn load_packages(
interner: &Arc<Interner>,
backends_pkg: &PackageBackendMap,
) -> anyhow::Result<(PkgInstructions, PackageMapMap)> {
let mut pkgs_sys = BTreeMap::new();
let mut package_maps: BTreeMap<Backend, Arc<PackageMap>> = BTreeMap::new();
let mut pkgs_sys = PkgInstructions::new();
let mut package_maps: PackageMapMap = PackageMapMap::new();
let backend_maps: Vec<_> = backends_pkg
.values()
.par_bridge()
Expand Down
6 changes: 2 additions & 4 deletions crates/konfigkoll_core/src/apply.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
//! Apply a stream of instructions to the current system
use std::collections::BTreeMap;
use std::fs::Permissions;
use std::os::unix::fs::PermissionsExt;
use std::sync::Arc;
Expand All @@ -21,7 +20,6 @@ use paketkoll_types::backend::Backend;
use paketkoll_types::backend::Files;
use paketkoll_types::backend::OriginalFileQuery;
use paketkoll_types::backend::PackageBackendMap;
use paketkoll_types::backend::PackageMap;
use paketkoll_types::backend::PackageMapMap;
use paketkoll_types::intern::Interner;
use paketkoll_types::intern::PackageRef;
Expand Down Expand Up @@ -83,15 +81,15 @@ pub struct InProcessApplicator {
package_backends: PackageBackendMap,
file_backend: Arc<dyn Files>,
interner: Arc<Interner>,
package_maps: BTreeMap<Backend, Arc<PackageMap>>,
package_maps: PackageMapMap,
id_resolver: NameToNumericResolveCache,
}

impl InProcessApplicator {
pub fn new(
package_backends: PackageBackendMap,
interner: &Arc<Interner>,
package_maps: &BTreeMap<Backend, Arc<PackageMap>>,
package_maps: &PackageMapMap,
file_backend: &Arc<dyn Files>,
) -> Self {
Self {
Expand Down
5 changes: 2 additions & 3 deletions crates/konfigkoll_core/src/save.rs
Original file line number Diff line number Diff line change
Expand Up @@ -160,8 +160,7 @@ pub fn save_packages<'instructions>(

#[cfg(test)]
mod tests {
use std::collections::HashMap;

use ahash::AHashMap;
use camino::Utf8Path;
use camino::Utf8PathBuf;
use pretty_assertions::assert_eq;
Expand All @@ -180,7 +179,7 @@ mod tests {
#[test]
fn test_save_fs_changes() {
let mut output = Vec::new();
let mut file_data = HashMap::new();
let mut file_data = AHashMap::new();
let file_data_saver = |path: &Utf8Path, contents: &FileContents| {
file_data.insert(path.to_owned(), contents.clone());
Ok(())
Expand Down
1 change: 1 addition & 0 deletions crates/konfigkoll_core/src/state.rs
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,7 @@ enum FsEntry {

#[derive(Debug, Default, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct FsEntries {
/// This must be an ordered map, [`diff`] depends on it
fs: BTreeMap<Utf8PathBuf, FsNode>,
}

Expand Down
5 changes: 2 additions & 3 deletions crates/konfigkoll_script/src/engine.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
use std::collections::BTreeMap;
use std::fmt::Display;
use std::io::Write;
use std::panic::catch_unwind;
Expand All @@ -18,7 +17,7 @@ use rune::Vm;
use paketkoll_types::backend::Backend;
use paketkoll_types::backend::Files;
use paketkoll_types::backend::PackageBackendMap;
use paketkoll_types::backend::PackageMap;
use paketkoll_types::backend::PackageMapMap;
use paketkoll_types::intern::Interner;

use crate::plugins::command::Commands;
Expand Down Expand Up @@ -97,7 +96,7 @@ impl EngineState {
package_backends: &PackageBackendMap,
file_backend_id: Backend,
files_backend: &Arc<dyn Files>,
package_maps: &BTreeMap<Backend, Arc<PackageMap>>,
package_maps: &PackageMapMap,
interner: &Arc<Interner>,
) {
self.package_managers = Some(PackageManagers::create_from(
Expand Down
3 changes: 2 additions & 1 deletion crates/konfigkoll_script/src/plugins/package_managers.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ use paketkoll_types::backend::Files;
use paketkoll_types::backend::OriginalFileQuery;
use paketkoll_types::backend::PackageBackendMap;
use paketkoll_types::backend::PackageMap;
use paketkoll_types::backend::PackageMapMap;
use paketkoll_types::backend::Packages;
use paketkoll_types::intern::Interner;

Expand All @@ -38,7 +39,7 @@ impl PackageManagers {
package_backends: &PackageBackendMap,
file_backend_id: Backend,
files_backend: &Arc<dyn Files>,
package_maps: &BTreeMap<Backend, Arc<PackageMap>>,
package_maps: &PackageMapMap,
interner: &Arc<Interner>,
) -> Self {
let files_backends = [(file_backend_id, files_backend)];
Expand Down
4 changes: 2 additions & 2 deletions crates/konfigkoll_script/src/plugins/passwd.rs
Original file line number Diff line number Diff line change
Expand Up @@ -175,8 +175,8 @@ impl Passwd {
log_and_error!("Duplicate group IDs in group ID mapping");
}
Ok(Self {
users: BTreeMap::new(),
groups: BTreeMap::new(),
users: Users::new(),
groups: Groups::new(),
user_ids: uids,
group_ids: gids,
})
Expand Down
3 changes: 2 additions & 1 deletion crates/paketkoll_cache/src/from_archives.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ use paketkoll_types::backend::Files;
use paketkoll_types::backend::Name;
use paketkoll_types::backend::OriginalFileError;
use paketkoll_types::backend::OriginalFileQuery;
use paketkoll_types::backend::OriginalFilesResult;
use paketkoll_types::backend::PackageManagerError;
use paketkoll_types::backend::PackageMap;
use paketkoll_types::files::FileEntry;
Expand Down Expand Up @@ -135,7 +136,7 @@ impl Files for FromArchiveCache {
queries: &[OriginalFileQuery],
packages: &PackageMap,
interner: &Interner,
) -> Result<AHashMap<OriginalFileQuery, Vec<u8>>, OriginalFileError> {
) -> Result<OriginalFilesResult, OriginalFileError> {
self.inner.original_files(queries, packages, interner)
}

Expand Down
5 changes: 3 additions & 2 deletions crates/paketkoll_cache/src/original_files.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ use paketkoll_types::backend::Files;
use paketkoll_types::backend::Name;
use paketkoll_types::backend::OriginalFileError;
use paketkoll_types::backend::OriginalFileQuery;
use paketkoll_types::backend::OriginalFilesResult;
use paketkoll_types::backend::PackageManagerError;
use paketkoll_types::backend::PackageMap;
use paketkoll_types::files::FileEntry;
Expand Down Expand Up @@ -105,9 +106,9 @@ impl Files for OriginalFilesCache {
queries: &[OriginalFileQuery],
packages: &PackageMap,
interner: &Interner,
) -> Result<AHashMap<OriginalFileQuery, Vec<u8>>, OriginalFileError> {
) -> Result<OriginalFilesResult, OriginalFileError> {
// Build up lists of cached and uncached queries
let mut results = AHashMap::new();
let mut results = OriginalFilesResult::new();
let mut uncached_queries = Vec::new();
let mut cache_keys = AHashMap::new();
let inner_name = self.name();
Expand Down
10 changes: 6 additions & 4 deletions crates/paketkoll_core/src/backend/arch.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ use dashmap::DashMap;
use dashmap::DashSet;
use either::Either;
use paketkoll_types::backend::OriginalFileError;
use paketkoll_types::backend::OriginalFilesResult;
use paketkoll_types::backend::OwningPackagesResult;
use rayon::prelude::*;
use regex::RegexSet;

Expand Down Expand Up @@ -149,7 +151,7 @@ impl Files for ArchLinux {
&self,
paths: &AHashSet<&Path>,
interner: &Interner,
) -> anyhow::Result<DashMap<PathBuf, Option<PackageRef>, ahash::RandomState>> {
) -> anyhow::Result<OwningPackagesResult> {
// Optimise for speed, go directly into package cache and look for files that
// contain the given string
let file_to_package = DashMap::with_hasher(ahash::RandomState::new());
Expand Down Expand Up @@ -185,10 +187,10 @@ impl Files for ArchLinux {
queries: &[OriginalFileQuery],
packages: &PackageMap,
interner: &Interner,
) -> Result<ahash::AHashMap<OriginalFileQuery, Vec<u8>>, OriginalFileError> {
) -> Result<OriginalFilesResult, OriginalFileError> {
let queries_by_pkg = group_queries_by_pkg(queries);

let mut results = ahash::AHashMap::new();
let mut results = OriginalFilesResult::new();

// List of directories to search for the package
let dir_candidates = smallvec::smallvec_inline![self.pacman_config.cache_dir.as_str()];
Expand Down Expand Up @@ -342,7 +344,7 @@ fn find_files(
interner: &Interner,
re: &RegexSet,
paths: &[String],
output: &DashMap<PathBuf, Option<PackageRef>, ahash::RandomState>,
output: &OwningPackagesResult,
) -> anyhow::Result<()> {
if !entry.file_type()?.is_dir() {
return Ok(());
Expand Down
10 changes: 6 additions & 4 deletions crates/paketkoll_core/src/backend/deb.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ use compact_str::format_compact;
use compact_str::CompactString;
use dashmap::DashMap;
use paketkoll_types::backend::OriginalFileError;
use paketkoll_types::backend::OriginalFilesResult;
use paketkoll_types::backend::OwningPackagesResult;
use rayon::prelude::*;
use regex::RegexSet;

Expand Down Expand Up @@ -164,7 +166,7 @@ impl Files for Debian {
&self,
paths: &ahash::AHashSet<&Path>,
interner: &Interner,
) -> anyhow::Result<DashMap<PathBuf, Option<PackageRef>, ahash::RandomState>> {
) -> anyhow::Result<OwningPackagesResult> {
// Optimise for speed, go directly into package cache and look for files that
// contain the given string
let file_to_package = DashMap::with_hasher(ahash::RandomState::new());
Expand Down Expand Up @@ -204,9 +206,9 @@ impl Files for Debian {
queries: &[OriginalFileQuery],
packages: &PackageMap,
interner: &Interner,
) -> Result<ahash::AHashMap<OriginalFileQuery, Vec<u8>>, OriginalFileError> {
) -> Result<OriginalFilesResult, OriginalFileError> {
let queries_by_pkg = group_queries_by_pkg(queries);
let mut results = ahash::AHashMap::new();
let mut results = OriginalFilesResult::new();

// List of directories to search for the package
let dir_candidates = smallvec::smallvec_inline![CACHE_PATH];
Expand Down Expand Up @@ -437,7 +439,7 @@ fn is_file_match(
interner: &Interner,
re: &RegexSet,
paths: &[String],
output: &DashMap<PathBuf, Option<PackageRef>, ahash::RandomState>,
output: &OwningPackagesResult,
) -> anyhow::Result<()> {
let contents = std::fs::read_to_string(list_path)
.with_context(|| format!("Failed to read {list_path:?}"))?;
Expand Down
7 changes: 3 additions & 4 deletions crates/paketkoll_core/src/backend/deb/divert.rs
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ pub(super) fn get_diversions(interner: &Interner) -> anyhow::Result<Diversions>

/// Parse output from dpkg-divert --list
fn parse_diversions(mut input: impl BufRead, interner: &Interner) -> anyhow::Result<Diversions> {
let mut results = BTreeMap::new();
let mut results = Diversions::new();

let re = regex::Regex::new(r"^diversion of (?<orig>.+) to (?<new>.+) by (?<pkg>.+)$")?;

Expand Down Expand Up @@ -84,15 +84,14 @@ fn parse_diversions(mut input: impl BufRead, interner: &Interner) -> anyhow::Res

#[cfg(test)]
mod tests {
use std::collections::BTreeMap;

use pretty_assertions::assert_eq;

use paketkoll_types::intern::Interner;
use paketkoll_types::intern::PackageRef;

use super::parse_diversions;
use super::Diversion;
use super::Diversions;

#[test]
fn test_parse_diversions() {
Expand All @@ -108,7 +107,7 @@ mod tests {
let interner = Interner::new();
let parsed = parse_diversions(input.as_bytes(), &interner).unwrap();

let expected = BTreeMap::from_iter(vec![
let expected = Diversions::from_iter(vec![
(
"/usr/lib/python3.11/EXTERNALLY-MANAGED".into(),
Diversion {
Expand Down
2 changes: 1 addition & 1 deletion crates/paketkoll_core/src/backend/systemd_tmpfiles.rs
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ impl Files for SystemdTmpfiles {
_queries: &[OriginalFileQuery],
_packages: &PackageMap,
_interner: &paketkoll_types::intern::Interner,
) -> Result<AHashMap<OriginalFileQuery, Vec<u8>>, OriginalFileError> {
) -> Result<OriginalFilesResult, OriginalFileError> {
Err(anyhow::anyhow!(
"Original file queries are not supported for systemd-tmpfiles"
))?
Expand Down
3 changes: 2 additions & 1 deletion crates/paketkoll_core/src/file_ops.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ use ignore::overrides::OverrideBuilder;
use ignore::Match;
use ignore::WalkBuilder;
use ignore::WalkState;
use paketkoll_types::backend::OriginalFilesResult;
use rayon::prelude::*;

use paketkoll_types::backend::OriginalFileQuery;
Expand All @@ -25,7 +26,7 @@ pub fn original_files(
backend: &crate::backend::ConcreteBackend,
backend_config: &crate::backend::BackendConfiguration,
queries: &[OriginalFileQuery],
) -> anyhow::Result<ahash::AHashMap<OriginalFileQuery, Vec<u8>>> {
) -> anyhow::Result<OriginalFilesResult> {
let interner = Interner::new();
let backend_impl = backend
.create_full(backend_config, &interner)
Expand Down
2 changes: 1 addition & 1 deletion crates/paketkoll_core/src/utils.rs
Original file line number Diff line number Diff line change
Expand Up @@ -215,7 +215,7 @@ pub(crate) fn missing_packages<'strings>(
pub(crate) fn extract_files(
mut archive: tar::Archive<impl Read>,
queries: &AHashSet<&str>,
results: &mut AHashMap<paketkoll_types::backend::OriginalFileQuery, Vec<u8>>,
results: &mut paketkoll_types::backend::OriginalFilesResult,
pkg: &str,
name_map_filter: impl Fn(&str) -> Option<CompactString>,
) -> Result<(), paketkoll_types::backend::OriginalFileError> {
Expand Down
12 changes: 9 additions & 3 deletions crates/paketkoll_types/src/backend.rs
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,12 @@ pub type PackageBackendMap = BTreeMap<Backend, Arc<dyn Packages>>;
/// Type of map of file backends
pub type FilesBackendMap = BTreeMap<Backend, Arc<dyn Files>>;

/// Type of return value of owning packages queries
pub type OwningPackagesResult = DashMap<PathBuf, Option<PackageRef>, ahash::RandomState>;

/// Type of return value of original files queries
pub type OriginalFilesResult = AHashMap<OriginalFileQuery, Vec<u8>>;

/// Get the name of a backend (useful in dynamic dispatch for generating
/// reports)
pub trait Name: Send + Sync + std::fmt::Debug {
Expand Down Expand Up @@ -92,15 +98,15 @@ pub trait Files: Name {
&self,
paths: &AHashSet<&Path>,
interner: &Interner,
) -> anyhow::Result<DashMap<PathBuf, Option<PackageRef>, ahash::RandomState>>;
) -> anyhow::Result<OwningPackagesResult>;

/// Get the original contents of files
fn original_files(
&self,
queries: &[OriginalFileQuery],
packages: &PackageMap,
interner: &Interner,
) -> Result<AHashMap<OriginalFileQuery, Vec<u8>>, OriginalFileError>;
) -> Result<OriginalFilesResult, OriginalFileError>;
}

/// Query type for original file contents
Expand Down Expand Up @@ -169,7 +175,7 @@ pub fn packages_to_package_map<'a>(
packages: impl Iterator<Item = &'a PackageInterned>,
) -> PackageMap {
let mut package_map =
AHashMap::with_capacity_and_hasher(packages.size_hint().0, ahash::RandomState::new());
PackageMap::with_capacity_and_hasher(packages.size_hint().0, ahash::RandomState::new());
for package in packages {
if package.ids.is_empty() {
package_map.insert(package.name, package.clone());
Expand Down

0 comments on commit 65a21c2

Please sign in to comment.