Add method to scan revisions
This commit is contained in:
35
src/bin/scan-revision.rs
Normal file
35
src/bin/scan-revision.rs
Normal 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(())
|
||||
}
|
28
src/scan.rs
28
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)?;
|
||||
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?;
|
||||
|
Reference in New Issue
Block a user