Skip to content

Commit c54a159

Browse files
committed
feat: keep index and overrides in separate folders
1 parent d06c5e8 commit c54a159

File tree

4 files changed

+42
-9
lines changed

4 files changed

+42
-9
lines changed

src/commands.rs

+3-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
use crate::files::versions::{remove, upsert};
2-
use crate::packages;
32
use crate::packages::Package;
43
use crate::runner::run;
54
use crate::shims::{add_shim, remove_shim};
@@ -29,7 +28,7 @@ pub fn show_info() -> Result<(), Box<dyn Error>> {
2928

3029
pub fn list_packages(name: Option<&str>, verbose: bool) -> Result<(), Box<dyn Error>> {
3130
if let Some(name) = name {
32-
if let Some(package) = packages::Package::load(name)? {
31+
if let Some(package) = Package::load(name)? {
3332
package.print(verbose);
3433
Ok(())
3534
} else {
@@ -40,7 +39,7 @@ pub fn list_packages(name: Option<&str>, verbose: bool) -> Result<(), Box<dyn Er
4039
.into())
4140
}
4241
} else {
43-
let packages = packages::Package::load_all()?;
42+
let packages = Package::load_all()?;
4443
if !packages.is_empty() {
4544
for package in &packages {
4645
package.print(verbose);
@@ -118,7 +117,7 @@ pub fn set_package_version(name: String, version: String) -> Result<(), Box<dyn
118117
if package.versions.versions.contains(&version) {
119118
package.versions.current = version.clone();
120119
upsert(&name, package)?;
121-
info!("'{}' set to version '{}'", name, version);
120+
info!("Package '{}' set to version '{}'", name, version);
122121
Ok(())
123122
} else {
124123
Err(format!(

src/files/index.rs

+30-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
use crate::files::variables::AppConfig;
22
use crate::serialization::parse_json;
3+
use log::debug;
34
use serde::{Deserialize, Serialize};
45
use std::collections::HashMap;
56
use std::error::Error;
7+
use std::path::Path;
68

79
#[derive(Serialize, Deserialize, Debug)]
810
pub struct Root {
@@ -51,7 +53,33 @@ pub struct EnvironmentVariable {
5153
pub value: String,
5254
}
5355

54-
pub fn parse() -> Result<Root, Box<dyn Error>> {
56+
fn load_package(
57+
name: &str,
58+
index_path: &Path,
59+
overrides_path: &Path,
60+
) -> Result<Package, Box<dyn Error>> {
61+
let index_file = index_path.join(format!("{}.json", name));
62+
let override_file = overrides_path.join(format!("{}.json", name));
63+
64+
if override_file.exists() {
65+
debug!("Using override config at {:?}", &override_file);
66+
parse_json(&override_file)
67+
} else {
68+
debug!("Using normal config at {:?}", &index_file);
69+
parse_json(&index_file)
70+
}
71+
}
72+
73+
pub fn parse(name: String) -> Result<Root, Box<dyn Error>> {
5574
let config = AppConfig::new();
56-
parse_json(&config.index_path())
75+
let index_path = config.index_path().to_owned();
76+
let package_dir = Path::new(&index_path);
77+
let overrides_path = config.overrides_path().to_owned();
78+
let overrides_dir = Path::new(&overrides_path);
79+
let mut packages = HashMap::new();
80+
81+
let package = load_package(&name, package_dir, overrides_dir)?;
82+
packages.insert(name, package);
83+
84+
Ok(Root { packages })
5785
}

src/files/variables.rs

+5-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,11 @@ impl AppConfig {
2828
}
2929

3030
pub fn index_path(&self) -> PathBuf {
31-
self.base_dir.join("index.json")
31+
self.base_dir.join("index")
32+
}
33+
34+
pub fn overrides_path(&self) -> PathBuf {
35+
self.base_dir.join("overrides")
3236
}
3337

3438
pub fn versions_path(&self) -> PathBuf {

src/packages.rs

+4-2
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ pub struct Package {
1313
// Public API
1414
impl Package {
1515
pub fn new(name: &str, versions_package: VersionsPackage) -> Result<Self, Box<dyn Error>> {
16-
let index_packages = crate::files::index::parse()?;
16+
let index_packages = crate::files::index::parse(name.to_owned())?;
1717
let index_package = index_packages
1818
.packages
1919
.get(name)
@@ -27,7 +27,9 @@ impl Package {
2727
}
2828

2929
pub fn load(name: &str) -> Result<Option<Self>, Box<dyn Error>> {
30-
let index_package = crate::files::index::parse()?.packages.remove(name);
30+
let index_package = crate::files::index::parse(name.to_owned())?
31+
.packages
32+
.remove(name);
3133
let versions_package = crate::files::versions::parse()?.packages.remove(name);
3234
Self::make_from(name, index_package, versions_package)
3335
}

0 commit comments

Comments
 (0)