Add method to scan revisions

This commit is contained in:
2025-02-10 19:01:13 +01:00
parent 55e0bbc6c6
commit 71d38cbd78
2 changed files with 60 additions and 5 deletions

35
src/bin/scan-revision.rs Normal file
View File

@@ -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(())
}

View File

@@ -21,18 +21,38 @@ use crate::{
use std::process::Command; use std::process::Command;
pub async fn scan_flake(storage: Storage, flake_uri: &str) -> Result<()> { pub async fn scan_flake(storage: Storage, flake_uri: &str) -> Result<()> {
let scan_time = Utc::now().timestamp(); scan_revision(storage, flake_uri, None)
let flake_metadata = fetch_metadata(flake_uri)
.await?; .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) storage.set_revision(revision_row)
.await?; .await?;
let mut flake_row = get_flake_from_metadata(&flake_metadata)?; 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) storage.set_flake(flake_row)
.await?; .await?;