//! Utilities. use log::debug; use std::net::TcpStream; use std::path::{Path, PathBuf}; const SSH_PORT: i32 = 22; // Wait for a virtual machine to have opened its SSH port. pub fn wait_for_ssh(name: &str) { debug!("waiting for {} to respond to SSH", name); let addr = format!("{}:{}", name, SSH_PORT); loop { if TcpStream::connect(&addr).is_ok() { return; } } } /// Expand a ~/ at the beginning of a Path to refer to the home directory. pub fn expand_tilde(path: &Path) -> PathBuf { if path.starts_with("~/") { if let Some(home) = std::env::var_os("HOME") { let mut expanded = PathBuf::from(home); for comp in path.components().skip(1) { expanded.push(comp); } expanded } else { path.to_path_buf() } } else { path.to_path_buf() } } pub fn expand_optional_pathbuf(maybe_path: &mut Option) { if let Some(path) = maybe_path { *maybe_path = Some(expand_tilde(path)); } } pub fn expand_optional_pathbufs(maybe_paths: &mut Option>) { if let Some(paths) = maybe_paths { let mut expanded = vec![]; for path in paths { expanded.push(expand_tilde(&path)); } *maybe_paths = Some(expanded); } }