fix(AclFamily): renaming commands and subcommands (#2076)

* fix renaming ACL commands
* fix ACL subcommands to be treated as such. For example: ACL list would print all ACL subcommands. Now it only prints ACL
* add tests
This commit is contained in:
Kostas Kyrimis 2023-10-29 18:01:37 +02:00 committed by GitHub
parent 88b4e7dd31
commit 1538f66a35
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 65 additions and 14 deletions

View file

@ -1576,19 +1576,20 @@ optional<bool> StartMultiEval(DbIndex dbid, CmdArgList keys, ScriptMgr::ScriptPa
return false;
}
static std::string FullAclCommandFromArgs(CmdArgList args) {
static std::string FullAclCommandFromArgs(CmdArgList args, std::string_view name) {
ToUpper(&args[1]);
// Guranteed SSO no dynamic allocations here
return std::string("ACL ") + std::string(args[1].begin(), args[1].end());
auto res = absl::StrCat(name, " ", ArgS(args, 1));
return res;
}
std::pair<const CommandId*, CmdArgList> Service::FindCmd(CmdArgList args) const {
const std::string_view command = facade::ToSV(args[0]);
if (command == "ACL") {
std::string_view acl = "ACL";
if (command == registry_.RenamedOrOriginal(acl)) {
if (args.size() == 1) {
return {registry_.Find(ArgS(args, 0)), args};
}
return {registry_.Find(FullAclCommandFromArgs(args)), args.subspan(2)};
return {registry_.Find(FullAclCommandFromArgs(args, command)), args.subspan(2)};
}
const CommandId* res = registry_.Find(ArgS(args, 0));