From 26d4be44e5c32c77e3523ecf5861ed3242f16273 Mon Sep 17 00:00:00 2001 From: ToBinio Date: Mon, 15 Jun 2026 15:14:06 +0200 Subject: [PATCH] always set all tags --- src/main.rs | 29 +++++++++++++++++++---------- src/project.rs | 35 +++++++++++++++-------------------- 2 files changed, 34 insertions(+), 30 deletions(-) diff --git a/src/main.rs b/src/main.rs index 8dadcfc..34824cf 100644 --- a/src/main.rs +++ b/src/main.rs @@ -92,20 +92,29 @@ fn update(ssh: &ssh2::Session, settings: &Settings) -> Result<()> { .iter() .map(|service| (service.name.clone(), service)) .collect_vec(); - let mut service = if services.len() == 1 { - services.first().unwrap().1.clone() - } else { - input_selection(&mut term, services, "Service")?.clone() - }; - let tag = input_text(&mut term, &service.tag, "Tag")?; - service.tag = tag; + let mut updated = vec![]; + for (name, service) in services { + let tag = input_text(&mut term, &service.tag, &name)?; - service.pull_image(ssh)?; - project.update_service(ssh, &sftp, &service)?; + if service.tag == tag { + continue; + } - term.show_cursor()?; + let mut new_service = service.clone(); + + new_service.tag = tag; + updated.push(new_service); + } + for service in &updated { + service.pull_image(ssh)?; + } + + project.update_compose_file(&sftp, &updated)?; + project.update(ssh)?; + + term.show_cursor()?; Ok(()) } diff --git a/src/project.rs b/src/project.rs index ff1fe1f..c1e0c8d 100644 --- a/src/project.rs +++ b/src/project.rs @@ -119,27 +119,29 @@ impl Project { &self.services } - fn update_compose_file(&self, sftp: &ssh2::Sftp, service: &Service) -> Result<()> { + pub fn update_compose_file(&self, sftp: &ssh2::Sftp, services: &[Service]) -> Result<()> { let mut buf = String::new(); sftp.open(&self.path)?.read_to_string(&mut buf)?; let mut value: Value = yaml_serde::from_str(&buf)?; - let services = value + let services_map = value .get_mut("services") .context("invalid compose.yml - no 'services'")? .as_mapping_mut() .context("invalid compose.yml - services is not mapping")?; - let svc = services - .get_mut(Value::from(service.name.clone())) - .context("service not found")? - .as_mapping_mut() - .context("service is not mapping")?; - - svc.insert( - Value::from("image"), - Value::from(format!("{}:{}", service.image, service.tag)), - ); + for service in services { + let svc = services_map + .get_mut(Value::from(service.name.clone())) + .context("service not found")? + .as_mapping_mut() + .context("service is not mapping")?; + + svc.insert( + Value::from("image"), + Value::from(format!("{}:{}", service.image, service.tag)), + ); + } let new_yaml = yaml_serde::to_string(&value)?; @@ -149,14 +151,7 @@ impl Project { Ok(()) } - pub fn update_service( - &self, - ssh: &ssh2::Session, - sftp: &ssh2::Sftp, - service: &Service, - ) -> Result<()> { - self.update_compose_file(sftp, service)?; - + pub fn update(&self, ssh: &ssh2::Session) -> Result<()> { let mut channel = ssh.channel_session()?; channel.exec(&format!( "docker compose -f {} up -d", -- 2.51.2