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; | ||||
|  | ||||
| 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?; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user