From 55e0bbc6c68834682c314f264c8ddb5bab76a29d Mon Sep 17 00:00:00 2001 From: clerie Date: Mon, 10 Feb 2025 18:45:30 +0100 Subject: [PATCH] Converting flake metadata into sql rows in separate functions --- src/scan.rs | 64 +++++++++++++++++++++++++++++++++++------------------ 1 file changed, 42 insertions(+), 22 deletions(-) diff --git a/src/scan.rs b/src/scan.rs index 27af2c3..2a4aa3c 100644 --- a/src/scan.rs +++ b/src/scan.rs @@ -23,33 +23,16 @@ use std::process::Command; pub async fn scan_flake(storage: Storage, flake_uri: &str) -> Result<()> { let scan_time = Utc::now().timestamp(); - let flake_metadata_raw = Command::new("nix") - .arg("flake") - .arg("metadata") - .arg("--json") - .arg(flake_uri) - .output() - .context("Failed to fetch flake metadata")?; + let flake_metadata = fetch_metadata(flake_uri) + .await?; - let flake_metadata: FlakeMetadata = serde_json::from_slice(&flake_metadata_raw.stdout) - .context("Failed to parse flake metadata")?; - - let revision_row = RevisionRow { - revision_uri: flake_metadata.locked.flake_uri()?.clone(), - flake_uri: Some(flake_metadata.resolved.flake_uri()?.clone()), - nix_store_path: Some(flake_metadata.path.clone()), - nar_hash: Some(flake_metadata.locked.nar_hash.clone()), - last_modified: Some(flake_metadata.locked.last_modified.clone()), - }; + let revision_row = get_revision_from_metadata(&flake_metadata)?; storage.set_revision(revision_row) .await?; - let flake_row = FlakeRow { - flake_uri: flake_metadata.resolved.flake_uri()?.clone(), - tracker_track: false, - tracker_last_scanned: Some(scan_time.clone()), - }; + let mut flake_row = get_flake_from_metadata(&flake_metadata)?; + flake_row.tracker_last_scanned = Some(scan_time.clone()); storage.set_flake(flake_row) .await?; @@ -99,3 +82,40 @@ pub async fn scan_flake(storage: Storage, flake_uri: &str) -> Result<()> { Ok(()) } + +pub async fn fetch_metadata(flake_uri: &str) -> Result { + let flake_metadata_raw = Command::new("nix") + .arg("flake") + .arg("metadata") + .arg("--json") + .arg(flake_uri) + .output() + .context("Failed to fetch flake metadata")?; + + let flake_metadata: FlakeMetadata = serde_json::from_slice(&flake_metadata_raw.stdout) + .context("Failed to parse flake metadata")?; + + Ok(flake_metadata) +} + +pub fn get_flake_from_metadata(flake_metadata: &FlakeMetadata) -> Result { + let flake_row = FlakeRow { + flake_uri: flake_metadata.resolved.flake_uri()?.clone(), + tracker_track: false, + tracker_last_scanned: None, + }; + + Ok(flake_row) +} + +pub fn get_revision_from_metadata(flake_metadata: &FlakeMetadata) -> Result { + let revision_row = RevisionRow { + revision_uri: flake_metadata.locked.flake_uri()?.clone(), + flake_uri: Some(flake_metadata.resolved.flake_uri()?.clone()), + nix_store_path: Some(flake_metadata.path.clone()), + nar_hash: Some(flake_metadata.locked.nar_hash.clone()), + last_modified: Some(flake_metadata.locked.last_modified.clone()), + }; + + Ok(revision_row) +}