@@ -34,16 +34,6 @@ namespace cuttlefish {
3434namespace selector {
3535namespace {
3636
37- Result<LocalInstanceGroup> GetDefaultGroup (
38- const InstanceManager& instance_manager) {
39- const std::vector<LocalInstanceGroup> all_groups =
40- CF_EXPECT (instance_manager.FindGroups ({}));
41- CF_EXPECTF (all_groups.size () == 1 ,
42- " There are {} instance groups, unable to pick one" ,
43- all_groups.size ());
44- return all_groups.front ();
45- }
46-
4737Result<InstanceDatabase::Filter> BuildFilterFromSelectors (
4838 const SelectorOptions& selectors) {
4939 InstanceDatabase::Filter filter;
@@ -122,13 +112,10 @@ Result<LocalInstanceGroup> PromptUserForGroup(
122112 }
123113}
124114
125- Result<std::pair<LocalInstance, LocalInstanceGroup>> FindDefaultInstance (
126- const InstanceManager& instance_manager) {
127- const LocalInstanceGroup group = CF_EXPECT (GetDefaultGroup (instance_manager));
128- const std::vector<LocalInstance> instances = group.Instances ();
129- CF_EXPECT_EQ (instances.size (), 1u ,
130- " Default instance is the single instance in the default group." );
131- return std::make_pair (instances.front (), group);
115+ Result<std::pair<LocalInstance, LocalInstanceGroup>> PromptUserForInstance (
116+ const InstanceManager& instance_manager, const CommandRequest& request,
117+ InstanceDatabase::Filter filter) {
118+ return CF_ERR (" TODO(chadreynolds): implement in follow-up commit" );
132119}
133120
134121} // namespace
@@ -152,12 +139,21 @@ Result<LocalInstanceGroup> SelectGroup(const InstanceManager& instance_manager,
152139
153140Result<std::pair<LocalInstance, LocalInstanceGroup>> SelectInstance (
154141 const InstanceManager& instance_manager, const CommandRequest& request) {
155- InstanceDatabase::Filter filter =
142+ const InstanceDatabase::Filter filter =
156143 CF_EXPECT (BuildFilterFromSelectors (request.Selectors ()));
157-
158- return filter.Empty ()
159- ? CF_EXPECT (FindDefaultInstance (instance_manager))
160- : CF_EXPECT (instance_manager.FindInstanceWithGroup (filter));
144+ std::vector<std::pair<LocalInstanceGroup, std::vector<LocalInstance>>>
145+ found_instances = CF_EXPECT (instance_manager.FindInstances (filter));
146+ CF_EXPECT (!found_instances.empty (), " No instances available" );
147+ if (found_instances.size () == 1 &&
148+ found_instances.front ().second .size () == 1 ) {
149+ auto [group, instances] = found_instances.front ();
150+ return std::make_pair (instances.front (), group);
151+ }
152+ CF_EXPECT (isatty (0 ),
153+ " Multiple instances found. Narrow the selection with selector "
154+ " arguments or run in an interactive terminal" );
155+ return CF_EXPECT (
156+ PromptUserForInstance (instance_manager, request, std::move (filter)));
161157}
162158
163159} // namespace selector
0 commit comments