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(())
|
||||||
|
}
|
30
src/scan.rs
30
src/scan.rs
@@ -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?;
|
||||||
|
Reference in New Issue
Block a user