Add flag for limit execution to specific remote hosts (fix #491) (#492)

This commit is contained in:
Roey Darwish Dror
2020-08-02 06:29:16 +03:00
committed by GitHub
parent 43be5bd7da
commit be631c663e
4 changed files with 16 additions and 1 deletions

1
Cargo.lock generated
View File

@@ -1838,6 +1838,7 @@ dependencies = [
"notify-rust",
"openssl-probe",
"pretty_env_logger",
"regex",
"rust-ini",
"self_update",
"serde",

View File

@@ -32,6 +32,7 @@ tempfile = "3.1.0"
cfg-if = "0.1.10"
tokio = { version = "0.2", features = ["rt-core", "process"] }
futures = "0.3"
regex = "1.3.9"
[target.'cfg(target_os = "macos")'.dependencies]
notify-rust = "4.0.0"

View File

@@ -3,6 +3,7 @@ use anyhow::Result;
use directories::BaseDirs;
use log::{debug, LevelFilter};
use pretty_env_logger::formatted_timed_builder;
use regex::Regex;
use serde::Deserialize;
use std::collections::BTreeMap;
use std::fs::write;
@@ -332,6 +333,10 @@ pub struct CommandLineArgs {
/// Alternative configuration file
#[structopt(long = "config")]
config: Option<PathBuf>,
/// A regular expression for restricting remote host execution
#[structopt(long = "remote-host-limit", parse(try_from_str))]
remote_host_limit: Option<Regex>,
}
impl CommandLineArgs {
@@ -649,4 +654,12 @@ impl Config {
#[cfg(target_os = "linux")]
str_value!(linux, emerge_update_flags);
pub fn should_execute_remote(&self, remote: &str) -> bool {
self.opt
.remote_host_limit
.as_ref()
.map(|h| h.is_match(remote))
.unwrap_or(true)
}
}

View File

@@ -113,7 +113,7 @@ fn run() -> Result<()> {
runner.execute(Step::Wsl, "WSL", || windows::run_wsl_topgrade(run_type))?;
if let Some(topgrades) = config.remote_topgrades() {
for remote_topgrade in topgrades {
for remote_topgrade in topgrades.iter().filter(|t| config.should_execute_remote(t)) {
runner.execute(Step::Remotes, format!("Remote ({})", remote_topgrade), || {
generic::run_remote_topgrade(&ctx, remote_topgrade)
})?;