diff --git a/src/repository/local_versions.rs b/src/repository/local_versions.rs index 6261337..d657ff2 100644 --- a/src/repository/local_versions.rs +++ b/src/repository/local_versions.rs @@ -17,6 +17,7 @@ pub struct InstalledVersions { impl InstalledVersions { pub fn new(mut versions: Vec<(SimpleVersion, VersionMetadata)>) -> Self { versions.sort_by_key(|e| e.0); + versions.dedup_by_key(|e| e.0); Self { ordered_versions: versions, } @@ -53,6 +54,7 @@ impl InstalledVersions { pub fn insert(&mut self, version: (SimpleVersion, VersionMetadata)) { self.ordered_versions.push(version); self.ordered_versions.sort_by_key(|e| e.0); + self.ordered_versions.dedup_by_key(|e| e.0); } /// Removes a version. This keeps the order intact diff --git a/src/repository/mod.rs b/src/repository/mod.rs index 3fc0e91..f7d91e2 100644 --- a/src/repository/mod.rs +++ b/src/repository/mod.rs @@ -104,9 +104,14 @@ impl Repository { let installed_versions = match InstalledVersions::load() { Ok(v) => v, - Err(_) => load_installed_versions_info(downloader.versions().await?) - .await? - .into(), + Err(_) => { + let installed: InstalledVersions = + load_installed_versions_info(downloader.versions().await?) + .await? + .into(); + installed.save()?; + installed + } }; Ok(Self {