diff --git a/src/plugin/mod.rs b/src/plugin/mod.rs index b74284c..ec535dd 100644 --- a/src/plugin/mod.rs +++ b/src/plugin/mod.rs @@ -73,7 +73,7 @@ pub struct Dependency { #[serde(alias = "project_id")] pub id: String, #[serde(skip)] - required: bool, + pub required: bool, } impl PartialEq for Dependency { @@ -138,14 +138,16 @@ pub fn add( let info = info.unwrap(); - if !no_deps { - for dep in &info.dependencies { - if !dep.required && !optional_deps { - continue; - } + for dep in &info.dependencies { + if no_deps { + break; + } - add(provider, &dep.id, "latest", false, false)?; + if !dep.required && !optional_deps { + continue; } + + add(provider, &dep.id, "latest", false, false)?; } download(&info.source, &lockfile.loader.name, info.checksum.as_ref())?; diff --git a/src/plugin/modrinth.rs b/src/plugin/modrinth.rs index eb3c86b..4c84dc3 100644 --- a/src/plugin/modrinth.rs +++ b/src/plugin/modrinth.rs @@ -94,7 +94,7 @@ pub fn fetch(lockfile: &Lockfile, id: &str, version: &str) -> Result Result Result { let formatted_url = format!("{BASE_URL}/version/{version}"); - info!("fetching version {version} of {}", project.slug); + info!("fetching version {version} of {slug}"); let resp: Version = ureq::get(&formatted_url) .set("User-Agent", FAKE_USER_AGENT) .call()? .into_json()?; - if project.slug != resp.project_id { + if slug != resp.project_id { return Err(anyhow!( "version id {version} is not a part of project {}", - project.slug + slug )); } diff --git a/src/server/lockfile.rs b/src/server/lockfile.rs index 3cd5c3b..17631e5 100644 --- a/src/server/lockfile.rs +++ b/src/server/lockfile.rs @@ -16,7 +16,7 @@ const LOCKFILE_PATH: &str = "pap.lock"; #[derive(Deserialize, Default, Serialize)] pub struct Lockfile { pub loader: Loader, - pub projects: Vec, + pub plugins: Vec, } #[derive(Deserialize, Serialize)] @@ -51,7 +51,7 @@ impl Lockfile { Ok(Self { loader: Loader::default(), - projects: vec![], + plugins: vec![], }) } @@ -74,7 +74,7 @@ impl Lockfile { let mut lf = Self { loader: l, - projects: vec![], + plugins: vec![], }; lf.save()?; @@ -83,14 +83,14 @@ impl Lockfile { } pub fn get(&self, project_id: &str) -> Result<&plugin::Info> { - self.projects + self.plugins .iter() .find(|p| p.slug == project_id) .ok_or_else(|| anyhow!("key {project_id} not found")) } pub fn add(&mut self, info: plugin::Info) -> Result<()> { - self.projects.push(info); + self.plugins.push(info); self.save()?; @@ -102,13 +102,13 @@ impl Lockfile { return Err(anyhow!("project {slug} does not exist in the lockfile")); } - let mut projects = self.projects.iter(); + let mut plugins = self.plugins.iter(); - let idx = projects + let idx = plugins .position(|p| p.slug == slug) .ok_or_else(|| anyhow!("{slug} does not exist in the lockfile"))?; - let entry = self.projects[idx].clone(); + let entry = self.plugins[idx].clone(); let mut to_remove = vec![entry.slug]; @@ -117,10 +117,11 @@ impl Lockfile { break; } - let cant_be_removed = projects.any(|p| { - let contains = p.dependencies.iter().find(|d| **d == dep); + let cant_be_removed = plugins.any(|p| { + let is_different = p.slug != slug; + let requires_dep = p.dependencies.iter().any(|d| *d == dep && d.required); - contains.is_some() && p.slug != slug + is_different && requires_dep }); if !cant_be_removed { @@ -130,16 +131,16 @@ impl Lockfile { for slug in to_remove { let idx = self - .projects + .plugins .iter() .position(|p| p.slug == slug || p.id == slug) .ok_or_else(|| anyhow!("{slug} does not exist in the lockfile"))?; if !keep_jarfile { - fs::remove_file(&self.projects[idx].get_file_path(&self.loader.name))?; + fs::remove_file(&self.plugins[idx].get_file_path(&self.loader.name))?; } - self.projects.remove(idx); + self.plugins.remove(idx); } self.save()?; diff --git a/src/server/mod.rs b/src/server/mod.rs index a36e1ec..536e504 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -72,7 +72,7 @@ fn install() -> Result<()> { &lf.loader.version, )?; - for entry in &lf.projects { + for entry in &lf.plugins { plugin::download(&entry.source, &lf.loader.name, entry.checksum.as_ref())?; }