mirror of
https://github.com/WarrenHood/MCModpackManager.git
synced 2025-04-30 00:04:59 +01:00
Switch all HashSets to BTreeSets
This commit is contained in:
parent
6aa9cff368
commit
6239bb9fd8
|
@ -4,7 +4,7 @@ use std::{borrow::BorrowMut, error::Error};
|
||||||
|
|
||||||
use crate::modpack::ModLoader;
|
use crate::modpack::ModLoader;
|
||||||
|
|
||||||
#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Hash, Clone)]
|
#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Hash, Clone, PartialOrd, Ord)]
|
||||||
pub enum ModProvider {
|
pub enum ModProvider {
|
||||||
/// Get mods from CurseForge
|
/// Get mods from CurseForge
|
||||||
CurseForge,
|
CurseForge,
|
||||||
|
@ -36,7 +36,7 @@ pub struct ModMeta {
|
||||||
pub loader: Option<ModLoader>,
|
pub loader: Option<ModLoader>,
|
||||||
pub download_url: Option<String>,
|
pub download_url: Option<String>,
|
||||||
pub server_side: Option<bool>,
|
pub server_side: Option<bool>,
|
||||||
pub client_side: Option<bool>
|
pub client_side: Option<bool>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl PartialEq for ModMeta {
|
impl PartialEq for ModMeta {
|
||||||
|
@ -46,6 +46,18 @@ impl PartialEq for ModMeta {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl PartialOrd for ModMeta {
|
||||||
|
fn partial_cmp(&self, other: &Self) -> Option<std::cmp::Ordering> {
|
||||||
|
self.name.partial_cmp(&other.name)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Ord for ModMeta {
|
||||||
|
fn cmp(&self, other: &Self) -> std::cmp::Ordering {
|
||||||
|
self.name.cmp(&other.name)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl Eq for ModMeta {}
|
impl Eq for ModMeta {}
|
||||||
|
|
||||||
impl ModMeta {
|
impl ModMeta {
|
||||||
|
|
|
@ -2,7 +2,7 @@ use crate::mod_meta::{ModMeta, ModProvider};
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use std::{
|
use std::{
|
||||||
collections::{BTreeMap, HashSet},
|
collections::{BTreeMap, BTreeSet},
|
||||||
path::{Path, PathBuf},
|
path::{Path, PathBuf},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -43,7 +43,7 @@ pub struct ModpackMeta {
|
||||||
pub modloader: ModLoader,
|
pub modloader: ModLoader,
|
||||||
pub mods: BTreeMap<String, ModMeta>,
|
pub mods: BTreeMap<String, ModMeta>,
|
||||||
pub default_providers: Vec<ModProvider>,
|
pub default_providers: Vec<ModProvider>,
|
||||||
pub forbidden_mods: HashSet<String>,
|
pub forbidden_mods: BTreeSet<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ModpackMeta {
|
impl ModpackMeta {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
use crate::mod_meta::ModMeta;
|
use crate::mod_meta::ModMeta;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use std::{collections::HashSet, fmt::Display, path::PathBuf, str::FromStr};
|
use std::{collections::BTreeSet, fmt::Display, path::PathBuf, str::FromStr};
|
||||||
|
|
||||||
pub mod modrinth;
|
pub mod modrinth;
|
||||||
pub mod raw;
|
pub mod raw;
|
||||||
|
@ -58,7 +58,8 @@ pub struct PinnedMod {
|
||||||
/// Version of mod
|
/// Version of mod
|
||||||
pub version: String,
|
pub version: String,
|
||||||
/// Pinned dependencies of a pinned mod
|
/// Pinned dependencies of a pinned mod
|
||||||
pub deps: Option<HashSet<ModMeta>>,
|
// pub deps: Option<BTreeSet<ModMeta>>,
|
||||||
|
pub deps: Option<BTreeSet<ModMeta>>,
|
||||||
/// Server side
|
/// Server side
|
||||||
pub server_side: bool,
|
pub server_side: bool,
|
||||||
/// Required on client side
|
/// Required on client side
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
use anyhow::{Error, Result};
|
use anyhow::{Error, Result};
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use std::collections::HashSet;
|
use std::collections::BTreeSet;
|
||||||
|
|
||||||
use super::PinnedMod;
|
use super::PinnedMod;
|
||||||
use crate::{
|
use crate::{
|
||||||
|
@ -158,7 +158,7 @@ impl Modrinth {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut deps_meta = HashSet::new();
|
let mut deps_meta = BTreeSet::new();
|
||||||
if let Some(deps) = &package.dependencies {
|
if let Some(deps) = &package.dependencies {
|
||||||
for dep in deps.iter().filter(|dep| dep.dependency_type == "required") {
|
for dep in deps.iter().filter(|dep| dep.dependency_type == "required") {
|
||||||
deps_meta.insert(
|
deps_meta.insert(
|
||||||
|
|
|
@ -4,7 +4,7 @@ use serde::{Deserialize, Serialize};
|
||||||
use sha1::Sha1;
|
use sha1::Sha1;
|
||||||
use sha2::{Digest, Sha512};
|
use sha2::{Digest, Sha512};
|
||||||
use std::{
|
use std::{
|
||||||
collections::{BTreeMap, HashSet},
|
collections::{BTreeMap, BTreeSet},
|
||||||
ffi::{OsStr, OsString},
|
ffi::{OsStr, OsString},
|
||||||
path::{Path, PathBuf},
|
path::{Path, PathBuf},
|
||||||
};
|
};
|
||||||
|
@ -39,7 +39,7 @@ impl PinnedPackMeta {
|
||||||
download_side: DownloadSide,
|
download_side: DownloadSide,
|
||||||
) -> Result<()> {
|
) -> Result<()> {
|
||||||
let files = std::fs::read_dir(mods_dir)?;
|
let files = std::fs::read_dir(mods_dir)?;
|
||||||
let mut pinned_files_cache = HashSet::new();
|
let mut pinned_files_cache = BTreeSet::new();
|
||||||
for file in files.into_iter() {
|
for file in files.into_iter() {
|
||||||
let file = file?;
|
let file = file?;
|
||||||
if file.file_type()?.is_file() {
|
if file.file_type()?.is_file() {
|
||||||
|
@ -109,7 +109,7 @@ impl PinnedPackMeta {
|
||||||
&self,
|
&self,
|
||||||
file_name: &OsStr,
|
file_name: &OsStr,
|
||||||
mod_side: DownloadSide,
|
mod_side: DownloadSide,
|
||||||
cache: &mut HashSet<OsString>,
|
cache: &mut BTreeSet<OsString>,
|
||||||
) -> bool {
|
) -> bool {
|
||||||
if cache.contains(file_name) {
|
if cache.contains(file_name) {
|
||||||
return true;
|
return true;
|
||||||
|
@ -166,7 +166,7 @@ impl PinnedPackMeta {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
let mut deps =
|
let mut deps =
|
||||||
HashSet::from_iter(self.pin_mod(mod_metadata, pack_metadata).await?.into_iter());
|
BTreeSet::from_iter(self.pin_mod(mod_metadata, pack_metadata).await?.into_iter());
|
||||||
|
|
||||||
if ignore_transitive_versions {
|
if ignore_transitive_versions {
|
||||||
// Ignore transitive dep versions
|
// Ignore transitive dep versions
|
||||||
|
@ -181,7 +181,7 @@ impl PinnedPackMeta {
|
||||||
.clone();
|
.clone();
|
||||||
|
|
||||||
while !deps.is_empty() {
|
while !deps.is_empty() {
|
||||||
let mut next_deps = HashSet::new();
|
let mut next_deps = BTreeSet::new();
|
||||||
for dep in deps.iter() {
|
for dep in deps.iter() {
|
||||||
println!(
|
println!(
|
||||||
"Adding mod {}@{} (dependency of {}@{})",
|
"Adding mod {}@{} (dependency of {}@{})",
|
||||||
|
@ -213,7 +213,7 @@ impl PinnedPackMeta {
|
||||||
} else {
|
} else {
|
||||||
&vec![]
|
&vec![]
|
||||||
};
|
};
|
||||||
let mut checked_providers: HashSet<ModProvider> = HashSet::new();
|
let mut checked_providers: BTreeSet<ModProvider> = BTreeSet::new();
|
||||||
for mod_provider in mod_providers
|
for mod_provider in mod_providers
|
||||||
.iter()
|
.iter()
|
||||||
.chain(pack_metadata.default_providers.iter())
|
.chain(pack_metadata.default_providers.iter())
|
||||||
|
@ -305,8 +305,8 @@ impl PinnedPackMeta {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_dependent_mods(&self, mod_name: &str) -> HashSet<String> {
|
fn get_dependent_mods(&self, mod_name: &str) -> BTreeSet<String> {
|
||||||
let mut dependent_mods = HashSet::new();
|
let mut dependent_mods = BTreeSet::new();
|
||||||
|
|
||||||
for (pinned_mod_name, pinned_mod) in self.mods.iter() {
|
for (pinned_mod_name, pinned_mod) in self.mods.iter() {
|
||||||
if let Some(deps) = &pinned_mod.deps {
|
if let Some(deps) = &pinned_mod.deps {
|
||||||
|
@ -356,7 +356,7 @@ impl PinnedPackMeta {
|
||||||
|
|
||||||
/// Remove all mods from lockfile that aren't in the pack metadata or depended on by another mod
|
/// Remove all mods from lockfile that aren't in the pack metadata or depended on by another mod
|
||||||
fn prune_mods(&mut self, pack_metadata: &ModpackMeta) -> Result<()> {
|
fn prune_mods(&mut self, pack_metadata: &ModpackMeta) -> Result<()> {
|
||||||
let mods_to_remove: HashSet<String> = self
|
let mods_to_remove: BTreeSet<String> = self
|
||||||
.mods
|
.mods
|
||||||
.keys()
|
.keys()
|
||||||
.filter(|mod_name| {
|
.filter(|mod_name| {
|
||||||
|
|
Loading…
Reference in a new issue