From 4885808331e9d6e828f6bbcb7fa1920955ef6fbc Mon Sep 17 00:00:00 2001 From: Victor Fuentes Date: Mon, 26 Sep 2022 11:54:26 -0400 Subject: [PATCH] Fix caching with no system --- src/parse/cache.rs | 74 +++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 66 insertions(+), 8 deletions(-) diff --git a/src/parse/cache.rs b/src/parse/cache.rs index 4cfb8e4..691a9dd 100644 --- a/src/parse/cache.rs +++ b/src/parse/cache.rs @@ -26,7 +26,11 @@ struct NewPackage { version: IString, } -pub fn checkcache(syspkgs: SystemPkgs, userpkgs: UserPkgs, config: NscConfig) -> Result<(), Box> { +pub fn checkcache( + syspkgs: SystemPkgs, + userpkgs: UserPkgs, + config: NscConfig, +) -> Result<(), Box> { match syspkgs { SystemPkgs::Legacy => { setuplegacypkgscache()?; @@ -36,7 +40,11 @@ pub fn checkcache(syspkgs: SystemPkgs, userpkgs: UserPkgs, config: NscConfig) -> SystemPkgs::Flake => { setupflakepkgscache(config)?; } - SystemPkgs::None => {} + SystemPkgs::None => { + if userpkgs == UserPkgs::Profile { + getlatestpkgs().unwrap(); + } + } } if userpkgs == UserPkgs::Env && syspkgs != SystemPkgs::Legacy { @@ -121,6 +129,54 @@ pub fn flakever() -> Result, Box> { } } +fn getlatestpkgs() -> Result<(), Box> { + let vout = Command::new("nixos-version").arg("--json").output()?; + + let versiondata: Value = serde_json::from_str(&String::from_utf8_lossy(&vout.stdout))?; + let dlver = versiondata.get("nixosVersion").unwrap().as_str().unwrap(); + + let mut relver = dlver.split('.').collect::>()[0..2].join(".")[0..5].to_string(); + if relver == "22.11" { + relver = "unstable".to_string(); + } + + let cachedir = format!("{}/.cache/nix-software-center", env::var("HOME")?); + fs::create_dir_all(&cachedir).expect("Failed to create cache directory"); + info!("Relver {}", relver); + let url = format!( + "https://channels.nixos.org/nixos-{}/packages.json.br", + relver + ); + + // Check newest nixpkgs version + let revurl = format!("https://channels.nixos.org/nixos-{}/git-revision", relver); + let response = reqwest::blocking::get(revurl)?; + let mut dl = false; + if response.status().is_success() { + let newrev = response.text()?; + info!("NEW REV: {}", newrev); + if Path::new(&format!("{}/newver.txt", &cachedir)).exists() { + let oldrev = fs::read_to_string(&format!("{}/newver.txt", &cachedir))?; + if oldrev != newrev { + dl = true; + } + } else { + dl = true; + } + let mut sysver = fs::File::create(format!("{}/newver.txt", &cachedir))?; + sysver.write_all(newrev.as_bytes())?; + } else { + error!("Failed to get newest nixpkgs version"); + } + + let outfile = format!("{}/packages.json", &cachedir); + if dl { + dlfile(&url, &outfile)?; + } + + Ok(()) +} + fn setuplegacypkgscache() -> Result<(), Box> { let vout = Command::new("nix-instantiate") .arg("-I") @@ -208,11 +264,6 @@ fn setupflakepkgscache(config: NscConfig) -> Result<(), Box> { relver ); - let cachedir = format!("{}/.cache/nix-software-center", env::var("HOME")?); - if !Path::new(&cachedir).exists() { - fs::create_dir_all(&cachedir).expect("Failed to create cache directory"); - } - fn writesyspkgs(outfile: &str, inputpath: &str) -> Result<(), Box> { let output = Command::new("nix") .arg("search") @@ -226,7 +277,14 @@ fn setupflakepkgscache(config: NscConfig) -> Result<(), Box> { Ok(()) } - let flakepath = config.flake.map(|x| x.strip_suffix("/flake.nix").unwrap_or(x.as_str()).to_string()).unwrap_or_else(|| String::from("/etc/nixos")); + let flakepath = config + .flake + .map(|x| { + x.strip_suffix("/flake.nix") + .unwrap_or(x.as_str()) + .to_string() + }) + .unwrap_or_else(|| String::from("/etc/nixos")); if !Path::new(&format!("{}/flakever.txt", &cachedir)).exists() { let mut sysver = fs::File::create(format!("{}/flakever.txt", &cachedir))?; sysver.write_all(rev.as_bytes())?;