diff --git a/src/api/registry.rs b/src/api/registry.rs index 944b3e3..2ced1de 100644 --- a/src/api/registry.rs +++ b/src/api/registry.rs @@ -37,7 +37,6 @@ struct History { created: Option, } - impl<'a> Registry<'a> { pub async fn get_repositories(&self) -> Result> { let registry_url = Url::parse(self.url).unwrap(); @@ -86,20 +85,25 @@ impl<'a> Registry<'a> { // .unwrap() // .to_string(); - let digest = reqwest::Client::new() + let mut digest = String::new(); + let rr = reqwest::Client::new() .get(api_url.clone()) .header( reqwest::header::ACCEPT, "application/vnd.docker.distribution.manifest.v2+json", ) .send() - .await? - .headers() - .get("Docker-Content-Digest") - .unwrap() - .to_str() - .unwrap() - .to_string(); + .await?; + + if rr.headers().get("Docker-Content-Digest").is_some() { + digest.push_str( + rr.headers() + .get("Docker-Content-Digest") + .unwrap() + .to_str() + .unwrap_or(""), + ); + } let mut data = resp.json::().await?; @@ -153,7 +157,7 @@ impl<'a> Registry<'a> { // println!("Status : {}", resp.status()); // if resp.status().as_u16() >= 400 { - + // } Ok(()) diff --git a/src/main.rs b/src/main.rs index 85d5779..791c919 100644 --- a/src/main.rs +++ b/src/main.rs @@ -46,6 +46,7 @@ fn main() { // println!("proc images ::: {:?}", proc_images); for img in proc_images.into_iter() { + println!("ProcImage: {}", img); let _repo_tags = registry.get_repository_tags(img.as_str()).await.unwrap(); let mut tags: Vec = Vec::new(); @@ -56,24 +57,36 @@ fn main() { if _parsed.exclude.contains(x) { continue; } - let manifests = registry - .get_repository_tag_manifest(img.as_str(), x) - .await - .unwrap(); - tags.push(manifests); + let manifests = registry.get_repository_tag_manifest(img.as_str(), x).await; + match manifests { + Err(_) => continue, + Ok(v) => tags.push(v), + }; } } - _ => (), - } + _ => continue, + }; tags.sort_by(|a, b| b.ts.partial_cmp(&a.ts).unwrap()); // println!("{:?}", tags); - tags.drain(0.._parsed.keep as usize); + let del_count: usize = if tags.len() > _parsed.keep as usize { + _parsed.keep as usize + } else { + tags.len() + }; + + tags.drain(0..del_count); println!("delete tag number : {}", tags.len()); for x in tags.iter() { - match registry.delete_repository_tag(img.as_str(), x.digest.as_str()).await { + if x.digest.len() == 0 { + continue; + } + match registry + .delete_repository_tag(img.as_str(), x.digest.as_str()) + .await + { Ok(_) => println!("delete {} success", x.tag), Err(_) => println!("delete {} fail", x.tag), };