diff --git a/src/parse/cache.rs b/src/parse/cache.rs index 691a9dd..60bce03 100644 --- a/src/parse/cache.rs +++ b/src/parse/cache.rs @@ -145,7 +145,7 @@ fn getlatestpkgs() -> Result<(), Box> { info!("Relver {}", relver); let url = format!( "https://channels.nixos.org/nixos-{}/packages.json.br", - relver + relver.trim() ); // Check newest nixpkgs version @@ -178,6 +178,7 @@ fn getlatestpkgs() -> Result<(), Box> { } fn setuplegacypkgscache() -> Result<(), Box> { + info!("Setting up legacy package cache"); let vout = Command::new("nix-instantiate") .arg("-I") .arg("nixpkgs=/nix/var/nix/profiles/per-user/root/channels/nixos") @@ -190,9 +191,13 @@ fn setuplegacypkgscache() -> Result<(), Box> { let dlver = String::from_utf8_lossy(&vout.stdout) .to_string() - .replace('"', ""); + .replace('"', "") + .trim() + .to_string(); - let mut relver = dlver.split('.').collect::>().join(".")[0..5].to_string(); + let mut relver = dlver.split('.').collect::>().join(".")[0..5] + .trim() + .to_string(); if dlver.len() >= 8 && &dlver[5..8] == "pre" { relver = "unstable".to_string(); @@ -202,7 +207,8 @@ fn setuplegacypkgscache() -> Result<(), Box> { fs::create_dir_all(&cachedir).expect("Failed to create cache directory"); let url = format!( "https://releases.nixos.org/nixos/{}/nixos-{}/packages.json.br", - relver, dlver + relver.trim(), + dlver.trim() ); let cachedir = format!("{}/.cache/nix-software-center", env::var("HOME")?); @@ -216,14 +222,15 @@ fn setuplegacypkgscache() -> Result<(), Box> { } if Path::new(format!("{}/chnver.txt", &cachedir).as_str()).exists() - && fs::read_to_string(&Path::new(format!("{}/chnver.txt", &cachedir).as_str()))? == dlver + && fs::read_to_string(&Path::new(format!("{}/chnver.txt", &cachedir).as_str()))?.trim() + == dlver && Path::new(format!("{}/packages.json", &cachedir).as_str()).exists() { return Ok(()); } else { let oldver = fs::read_to_string(&Path::new(format!("{}/chnver.txt", &cachedir).as_str()))?; let sysver = &dlver; - info!("OLD: {}, != NEW: {}", oldver, sysver); + info!("OLD: {}, != NEW: {}", oldver.trim(), sysver.trim()); } if Path::new(format!("{}/chnver.txt", &cachedir).as_str()).exists() { fs::remove_file(format!("{}/chnver.txt", &cachedir).as_str())?; @@ -236,6 +243,7 @@ fn setuplegacypkgscache() -> Result<(), Box> { } fn setupflakepkgscache(config: NscConfig) -> Result<(), Box> { + info!("Setting up flake cache"); let cachedir = format!("{}/.cache/nix-software-center", env::var("HOME")?); // First remove legacy files @@ -250,7 +258,7 @@ fn setupflakepkgscache(config: NscConfig) -> Result<(), Box> { .get("nixpkgsRevision") .unwrap() .as_str() - .unwrap(); + .unwrap_or("unknown"); let dlver = versiondata.get("nixosVersion").unwrap().as_str().unwrap(); let mut relver = dlver.split('.').collect::>()[0..2].join("."); @@ -261,7 +269,7 @@ fn setupflakepkgscache(config: NscConfig) -> Result<(), Box> { fs::create_dir_all(&cachedir).expect("Failed to create cache directory"); let url = format!( "https://channels.nixos.org/nixos-{}/packages.json.br", - relver + relver.trim() ); fn writesyspkgs(outfile: &str, inputpath: &str) -> Result<(), Box> { @@ -332,17 +340,30 @@ fn setupflakepkgscache(config: NscConfig) -> Result<(), Box> { } fn setupprofilepkgscache() -> Result<(), Box> { + info!("Setting up profile package cache"); let cachedir = format!("{}/.cache/nix-software-center", env::var("HOME")?); - fn writeprofilepkgs(outfile: &str) -> Result<(), Box> { - let output = Command::new("nix") - .arg("search") - .arg("nixpkgs") - .arg("--json") - .output()?; - let mut file = fs::File::create(outfile)?; - file.write_all(&output.stdout)?; - Ok(()) + + // First remove legacy files + if Path::new(format!("{}/chnver.txt", &cachedir).as_str()).exists() { + fs::remove_file(format!("{}/chnver.txt", &cachedir).as_str())?; } + + 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("."); + if relver == "22.11" { + relver = "unstable".to_string(); + } + + fs::create_dir_all(&cachedir).expect("Failed to create cache directory"); + let url = format!( + "https://channels.nixos.org/nixpkgs-{}/packages.json.br", + relver.trim() + ); + // Check nix profile nixpkgs version let client = reqwest::blocking::Client::builder() .user_agent("request") @@ -359,7 +380,8 @@ fn setupprofilepkgscache() -> Result<(), Box> { if !Path::new(&format!("{}/profilever.txt", &cachedir)).exists() { let mut sysver = fs::File::create(format!("{}/profilever.txt", &cachedir))?; sysver.write_all(profilerev.as_bytes())?; - writeprofilepkgs(&format!("{}/profilepackages.json", &cachedir))?; + dlfile(&url, &format!("{}/profilepackages.json", &cachedir))?; + // writeprofilepkgs(&format!("{}/profilepackages.json", &cachedir))?; } else { let oldver = fs::read_to_string(&Path::new(format!("{}/profilever.txt", &cachedir).as_str()))?; @@ -368,29 +390,33 @@ fn setupprofilepkgscache() -> Result<(), Box> { info!("OLD PROFILEVER: {}, != NEW: {}", oldver, sysver); let mut sysver = fs::File::create(format!("{}/profilever.txt", &cachedir))?; sysver.write_all(profilerev.as_bytes())?; - writeprofilepkgs(&format!("{}/profilepackages.json", &cachedir))?; + dlfile(&url, &format!("{}/profilepackages.json", &cachedir))?; + // writeprofilepkgs(&format!("{}/profilepackages.json", &cachedir))?; } else { info!("PROFILEVER UP TO DATE"); } } } - if !Path::new(&format!("{}/profilepackages.json", &cachedir)).exists() { - writeprofilepkgs(&format!("{}/profilepackages.json", &cachedir))?; - } Ok(()) } // nix-instantiate --eval -E '(builtins.getFlake "/home/user/nix").inputs.nixpkgs.outPath' // nix-env -f /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source -qa --json > packages.json fn setupupdatecache() -> Result<(), Box> { + info!("Setting up update cache"); let output = Command::new("nix-instantiate") .arg("--eval") .arg("-E") .arg("with import {}; pkgs.lib.version") .output()?; - let dlver = String::from_utf8(output.stdout)?.replace("\"", ""); + let dlver = String::from_utf8(output.stdout)? + .replace("\"", "") + .trim() + .to_string(); - let mut relver = dlver.split('.').collect::>().join(".")[0..5].to_string(); + let mut relver = dlver.split('.').collect::>().join(".")[0..5] + .trim() + .to_string(); if dlver.len() >= 8 && &dlver[5..8] == "pre" { relver = "unstable".to_string(); @@ -400,7 +426,8 @@ fn setupupdatecache() -> Result<(), Box> { fs::create_dir_all(&cachedir).expect("Failed to create cache directory"); let url = format!( "https://releases.nixos.org/nixos/{}/nixos-{}/packages.json.br", - relver, dlver + relver.trim(), + dlver.trim() ); let cachedir = format!("{}/.cache/nix-software-center", env::var("HOME")?); @@ -414,14 +441,15 @@ fn setupupdatecache() -> Result<(), Box> { } if Path::new(format!("{}/sysver.txt", &cachedir).as_str()).exists() - && fs::read_to_string(&Path::new(format!("{}/sysver.txt", &cachedir).as_str()))? == dlver + && fs::read_to_string(&Path::new(format!("{}/sysver.txt", &cachedir).as_str()))?.trim() + == dlver && Path::new(format!("{}/syspackages.json", &cachedir).as_str()).exists() { return Ok(()); } else { let oldver = fs::read_to_string(&Path::new(format!("{}/sysver.txt", &cachedir).as_str()))?; let sysver = &dlver; - info!("OLD: {}, != NEW: {}", oldver, sysver); + info!("OLD: {}, != NEW: {}", oldver.trim(), sysver.trim()); } if Path::new(format!("{}/sysver.txt", &cachedir).as_str()).exists() { fs::remove_file(format!("{}/sysver.txt", &cachedir).as_str())?; @@ -522,5 +550,6 @@ fn dlfile(url: &str, path: &str) -> Result<(), Box> { } } } + trace!("Finished downloading {} -> {}", url, path); Ok(()) } diff --git a/src/parse/packages.rs b/src/parse/packages.rs index c926334..595c21c 100644 --- a/src/parse/packages.rs +++ b/src/parse/packages.rs @@ -165,11 +165,14 @@ struct FlakeJson { } pub async fn readpkgs() -> Result, Box> { + info!("Reading package list"); let cachedir = format!("{}/.cache/nix-software-center/", env::var("HOME")?); let cachefile = format!("{}/packages.json", cachedir); let file = File::open(cachefile)?; let reader = BufReader::new(file); + trace!("Reading packages.json"); let pkgbase: PackageBase = simd_json::serde::from_reader(reader)?; + trace!("Finished reading packages.json"); let mut pkgs = pkgbase.packages; debug!("APPDATADIR {}", APPINFO); let appdata = File::open(&format!("{}/xmls/nixos_x86_64_linux.yml.gz", APPINFO))?; @@ -192,6 +195,7 @@ pub async fn readpkgs() -> Result, Box Result, Box> { + info!("Reading legacy system package list"); let cachedir = format!("{}/.cache/nix-software-center/", env::var("HOME")?); let cachefile = format!("{}/syspackages.json", cachedir); if let Ok(f) = fs::read_to_string(&cachefile) { @@ -206,6 +210,7 @@ pub fn readlegacysyspkgs() -> Result, Box Result, Box> { + info!("Reading flake system package list"); let cachedir = format!("{}/.cache/nix-software-center/", env::var("HOME")?); let cachefile = format!("{}/syspackages.json", cachedir); if let Ok(f) = fs::read_to_string(&cachefile) { @@ -221,6 +226,7 @@ pub fn readflakesyspkgs() -> Result, Box Result, Box> { + info!("Reading profile package list"); let cachedir = format!("{}/.cache/nix-software-center/", env::var("HOME")?); let cachefile = format!("{}/profilepackages.json", cachedir); if let Ok(f) = fs::read_to_string(&cachefile) {