diff --git a/src/cmd/cli.cpp b/src/cmd/cli.cpp index 439726d6..a13f4c58 100644 --- a/src/cmd/cli.cpp +++ b/src/cmd/cli.cpp @@ -431,13 +431,22 @@ static int run(cli_tool_t *p, json11::Json::object cfg) else if (cmd[0] == "rm") { // Remove multiple snapshots and rebase their children - if (cmd.size() > 1) + if (cfg["exact"].bool_value() || cfg["matching"].bool_value()) { - cfg["from"] = cmd[1]; - if (cmd.size() > 2) - cfg["to"] = cmd[2]; + cmd.erase(cmd.begin(), cmd.begin()+1); + cfg["globs"] = cmd; + action_cb = p->start_rm_wildcard(cfg); + } + else + { + if (cmd.size() > 1) + { + cfg["from"] = cmd[1]; + if (cmd.size() > 2) + cfg["to"] = cmd[2]; + } + action_cb = p->start_rm(cfg); } - action_cb = p->start_rm(cfg); } else if (cmd[0] == "describe") { diff --git a/src/cmd/cli_rm.cpp b/src/cmd/cli_rm.cpp index d19a9764..927c42d0 100644 --- a/src/cmd/cli_rm.cpp +++ b/src/cmd/cli_rm.cpp @@ -691,10 +691,6 @@ resume_100: std::function cli_tool_t::start_rm(json11::Json cfg) { - if (cfg["exact"].bool_value() || cfg["matching"].bool_value()) - { - return start_rm_wildcard(cfg); - } auto snap_remover = new snap_remover_t(); snap_remover->parent = this; snap_remover->from_name = cfg["from"].string_value(); diff --git a/src/cmd/cli_rm_wildcard.cpp b/src/cmd/cli_rm_wildcard.cpp index fcd62f11..8aba9d7b 100644 --- a/src/cmd/cli_rm_wildcard.cpp +++ b/src/cmd/cli_rm_wildcard.cpp @@ -146,6 +146,7 @@ struct wildcard_remover_t sub_cfg = cfg.object_items(); sub_cfg.erase("globs"); sub_cfg.erase("exact"); + sub_cfg.erase("matching"); sub_cfg["from"] = from_cfg.name; sub_cfg["to"] = to_cfg.name; sub_cb = parent->start_rm(sub_cfg);