diff --git a/CHANGELOG.md b/CHANGELOG.md index 9c6cbb9f..767ff437 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,8 @@ The format is based on [Keep a Changelog]. ### Removed ### Fixed +- Empty `depeneencies` block of `locked` section in `vpm-manifest.json` is removed `#478` + - This follows the changed behavior of the official VPM command. ### Security diff --git a/vrc-get-vpm/src/unity_project.rs b/vrc-get-vpm/src/unity_project.rs index f2485084..2da6ddfc 100644 --- a/vrc-get-vpm/src/unity_project.rs +++ b/vrc-get-vpm/src/unity_project.rs @@ -18,6 +18,7 @@ use crate::version::{UnityVersion, Version, VersionRange}; use futures::future::try_join; use futures::prelude::*; use indexmap::IndexMap; +use lazy_static::lazy_static; use std::collections::HashMap; use std::path::{Path, PathBuf}; @@ -184,7 +185,7 @@ impl UnityProject { .unlocked_packages .iter() .filter_map(|(_, json)| json.as_ref()) - .map(|x| LockedDependencyInfo::new(x.name(), x.version(), x.vpm_dependencies())); + .map(|x| LockedDependencyInfo::new(x.name(), x.version(), Some(x.vpm_dependencies()))); dependencies_locked.chain(dependencies_unlocked) } @@ -237,12 +238,15 @@ impl<'a> LockedDependencyInfo<'a> { fn new( name: &'a str, version: &'a Version, - dependencies: &'a IndexMap, VersionRange>, + dependencies: Option<&'a IndexMap, VersionRange>>, ) -> Self { + lazy_static! { + static ref EMPTY_DEPENDENCIES: IndexMap, VersionRange> = IndexMap::new(); + } Self { name, version, - dependencies, + dependencies: dependencies.unwrap_or(&*EMPTY_DEPENDENCIES), } } diff --git a/vrc-get-vpm/src/unity_project/resolve.rs b/vrc-get-vpm/src/unity_project/resolve.rs index 43f25ee7..0693463f 100644 --- a/vrc-get-vpm/src/unity_project/resolve.rs +++ b/vrc-get-vpm/src/unity_project/resolve.rs @@ -177,7 +177,7 @@ impl UnityProject { for x in changes.get_all_installing() { virtual_locked_dependencies.insert( x.name(), - LockedDependencyInfo::new(x.name(), x.version(), x.vpm_dependencies()), + LockedDependencyInfo::new(x.name(), x.version(), Some(x.vpm_dependencies())), ); } diff --git a/vrc-get-vpm/src/unity_project/vpm_manifest.rs b/vrc-get-vpm/src/unity_project/vpm_manifest.rs index adfc00d6..6a49fc4b 100644 --- a/vrc-get-vpm/src/unity_project/vpm_manifest.rs +++ b/vrc-get-vpm/src/unity_project/vpm_manifest.rs @@ -25,8 +25,8 @@ struct VpmDependency { #[derive(Serialize, Deserialize, Debug, Clone)] struct VpmLockedDependency { pub version: Version, - #[serde(default, skip_serializing_if = "indexmap::IndexMap::is_empty")] - pub dependencies: IndexMap, VersionRange>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub dependencies: Option, VersionRange>>, } #[derive(Debug)] @@ -59,7 +59,7 @@ impl VpmManifest { pub(super) fn all_locked(&self) -> impl Iterator { self.controller.locked.iter().map(|(name, dep)| { - LockedDependencyInfo::new(name.as_ref(), &dep.version, &dep.dependencies) + LockedDependencyInfo::new(name.as_ref(), &dep.version, dep.dependencies.as_ref()) }) } @@ -67,7 +67,9 @@ impl VpmManifest { self.controller .locked .get_key_value(package) - .map(|(package, x)| LockedDependencyInfo::new(package, &x.version, &x.dependencies)) + .map(|(package, x)| { + LockedDependencyInfo::new(package, &x.version, x.dependencies.as_ref()) + }) } pub(super) fn add_dependency(&mut self, name: &str, version: DependencyRange) { @@ -87,7 +89,7 @@ impl VpmManifest { name.into(), VpmLockedDependency { version, - dependencies, + dependencies: Some(dependencies), }, ); }