buffet: Add the ability to change command visibility
Now it is possible to change the visibility of command and make it
visible to cloud only, local only, both or none.
BUG=brillo:797
TEST=`FEATURES=test emerge-link buffet`
Change-Id: I81d526b3d43adf5d6cd03a4e31a31e1494ff5c1b
Reviewed-on: https://chromium-review.googlesource.com/266396
Trybot-Ready: Alex Vakulenko <avakulenko@chromium.org>
Tested-by: Alex Vakulenko <avakulenko@chromium.org>
Reviewed-by: Vitaly Buka <vitalybuka@chromium.org>
Commit-Queue: Vitaly Buka <vitalybuka@chromium.org>
diff --git a/buffet/buffet_client.cc b/buffet/buffet_client.cc
index 1c930a4..675b4dc 100644
--- a/buffet/buffet_client.cc
+++ b/buffet/buffet_client.cc
@@ -20,6 +20,7 @@
#include <chromeos/dbus/data_serialization.h>
#include <chromeos/dbus/dbus_method_invoker.h>
#include <chromeos/errors/error.h>
+#include <chromeos/strings/string_utils.h>
#include <chromeos/variant_dictionary.h>
#include <dbus/bus.h>
#include <dbus/message.h>
@@ -45,6 +46,7 @@
- UpdateState prop_name prop_value
- GetState
- PendingCommands
+ - SetCommandVisibility pkg1.cmd1[,pkg2.cm2,...] [all|cloud|local|none]
)");
}
@@ -227,6 +229,12 @@
base::Bind(&Daemon::CallGetPendingCommands,
weak_factory_.GetWeakPtr()),
base::TimeDelta::FromMilliseconds(100));
+ } else if (command.compare("SetCommandVisibility") == 0 ||
+ command.compare("cv") == 0) {
+ if (!CheckArgs(command, args, 2))
+ return EX_USAGE;
+ job = base::Bind(&Daemon::CallSetCommandVisibility,
+ weak_factory_.GetWeakPtr(), args.front(), args.back());
} else {
fprintf(stderr, "Unknown command: '%s'\n", command.c_str());
return EX_USAGE;
@@ -374,6 +382,18 @@
OnJobComplete();
}
+ void CallSetCommandVisibility(const std::string& command_list,
+ const std::string& visibility,
+ ManagerProxy* manager_proxy) {
+ ErrorPtr error;
+ std::vector<std::string> commands =
+ chromeos::string_utils::Split(command_list, ",", true, true);
+ if (!manager_proxy->SetCommandVisibility(commands, visibility, &error)) {
+ return ReportError(error.get());
+ }
+ OnJobComplete();
+ }
+
std::unique_ptr<org::chromium::Buffet::ObjectManagerProxy> object_manager_;
int exit_code_{EX_OK};
base::CancelableCallback<void()> timeout_task_;