From 71d38cbd7844525f34a394caa5de8e1fed112dd3 Mon Sep 17 00:00:00 2001 From: clerie Date: Mon, 10 Feb 2025 19:01:13 +0100 Subject: [PATCH] Add method to scan revisions --- src/bin/scan-revision.rs | 35 +++++++++++++++++++++++++++++++++++ src/scan.rs | 30 +++++++++++++++++++++++++----- 2 files changed, 60 insertions(+), 5 deletions(-) create mode 100644 src/bin/scan-revision.rs diff --git a/src/bin/scan-revision.rs b/src/bin/scan-revision.rs new file mode 100644 index 0000000..7933489 --- /dev/null +++ b/src/bin/scan-revision.rs @@ -0,0 +1,35 @@ +use anyhow::{ + Context, + Result, +}; +use clap::{ + Parser, +}; +use flake_tracker::{ + scan::{ + scan_revision, + }, + storage::{ + Storage, + }, +}; + +#[derive(Parser)] +#[command(version, about, long_about = None)] +struct Cli { + flake_uri: String, + revision_uri: String, +} + +#[tokio::main] +async fn main() -> Result<()> { + let cli = Cli::parse(); + + let storage = Storage::connect("sqlite://flake-tracker.db") + .await + .context("Failed to connect to database")?; + + scan_revision(storage, &cli.flake_uri, Some(&cli.revision_uri)).await?; + + Ok(()) +} diff --git a/src/scan.rs b/src/scan.rs index 2a4aa3c..609ae99 100644 --- a/src/scan.rs +++ b/src/scan.rs @@ -21,18 +21,38 @@ use crate::{ use std::process::Command; pub async fn scan_flake(storage: Storage, flake_uri: &str) -> Result<()> { - let scan_time = Utc::now().timestamp(); - - let flake_metadata = fetch_metadata(flake_uri) + scan_revision(storage, flake_uri, None) .await?; - let revision_row = get_revision_from_metadata(&flake_metadata)?; + Ok(()) +} + +pub async fn scan_revision(storage: Storage, flake_uri: &str, revision_uri: Option<&str>) -> Result<()> { + let scan_time = Utc::now().timestamp(); + + let fetch_uri = match revision_uri { + Some(revision_uri) => revision_uri, + None => flake_uri, + }; + + let flake_metadata = fetch_metadata(fetch_uri) + .await?; + + let mut revision_row = get_revision_from_metadata(&flake_metadata)?; + if let Some(_) = revision_uri { + revision_row.flake_uri = Some(flake_uri.to_string()); + } storage.set_revision(revision_row) .await?; let mut flake_row = get_flake_from_metadata(&flake_metadata)?; - flake_row.tracker_last_scanned = Some(scan_time.clone()); + if let Some(_) = revision_uri { + flake_row.flake_uri = flake_uri.to_string(); + } + else { + flake_row.tracker_last_scanned = Some(scan_time.clone()); + } storage.set_flake(flake_row) .await?;