diff --git a/src/path_info.rs b/src/path_info.rs index 5a70c39..0698533 100644 --- a/src/path_info.rs +++ b/src/path_info.rs @@ -22,19 +22,19 @@ pub struct PathInfo { } impl PathInfo { - pub async fn from_path(path: &Path, store: &Store) -> Result { - debug!("query path info for {:?}", path); + pub async fn from_derivation(drv: &Path, store: &Store) -> Result { + debug!("query path info for {:?}", drv); - let derivation = match path.extension() { - Some(ext) if ext == "drv" => path.as_os_str().as_encoded_bytes(), + let derivation = match drv.extension() { + Some(ext) if ext == "drv" => drv.as_os_str().as_encoded_bytes(), _ => { &Command::new("nix") .arg("path-info") .arg("--derivation") - .arg(path) + .arg(drv) .output() .await - .context(format!("run command: nix path-info --derivaiton {path:?}"))? + .context(format!("run command: nix path-info --derivaiton {drv:?}"))? .stdout } }; @@ -43,16 +43,20 @@ impl PathInfo { if derivation.is_empty() { return Err(anyhow!( - "nix path-info did not return a derivation for {path:#?}" + "nix path-info did not return a derivation for {drv:#?}" )); } - let store_path = StorePath::from_absolute_path(derivation.trim().as_bytes()) - .context("storepath from derivation")?; + Self::from_path(derivation.trim(), store).await + } + + pub async fn from_path(path: &str, store: &Store) -> Result { + let store_path = + StorePath::from_absolute_path(path.as_bytes()).context("storepath from path")?; store .query_path_info(store_path) .await - .context("query pathinfo for derivation") + .context("query pathinfo for path") } pub async fn get_closure(&self, store: &Store) -> Result> { diff --git a/src/push.rs b/src/push.rs index c147053..5f7a591 100644 --- a/src/push.rs +++ b/src/push.rs @@ -79,7 +79,7 @@ impl Push { let store = self.store.clone(); futs.push(tokio::spawn(async move { - let path_info = PathInfo::from_path(path.as_path(), &store) + let path_info = PathInfo::from_derivation(path.as_path(), &store) .await .context("get path info for path")?; debug!("path-info for {path:?}: {path_info:?}"); diff --git a/tests/path_info.rs b/tests/path_info.rs index 2653820..59b3dfd 100644 --- a/tests/path_info.rs +++ b/tests/path_info.rs @@ -11,7 +11,7 @@ const HELLO_DRV: &str = "iqbwkm8mjjjlmw6x6ry9rhzin2cp9372-hello-2.12.1.drv"; async fn path_info_from_package() { let ctx = common::context(); let path = PathBuf::from(HELLO); - let path_info = PathInfo::from_path(&path, &ctx.store) + let path_info = PathInfo::from_derivation(&path, &ctx.store) .await .expect("get pathinfo from package"); assert_eq!(path_info.path.to_string(), HELLO_DRV); @@ -28,7 +28,7 @@ async fn path_info_from_path() { .unwrap(); let ctx = common::context(); let path = PathBuf::from("/nix/store/9bwryidal9q3g91cjm6xschfn4ikd82q-hello-2.12.1"); - let path_info = PathInfo::from_path(&path, &ctx.store) + let path_info = PathInfo::from_derivation(&path, &ctx.store) .await .expect("get pathinfo from package"); assert_eq!(path_info.path.to_string(), HELLO_DRV); @@ -38,7 +38,7 @@ async fn path_info_from_path() { async fn closure() { let ctx = common::context(); let path = PathBuf::from(HELLO); - let path_info = PathInfo::from_path(&path, &ctx.store) + let path_info = PathInfo::from_derivation(&path, &ctx.store) .await .expect("get pathinfo from package"); let closure = path_info.get_closure(&ctx.store).await.unwrap();