@@ -130,6 +130,14 @@ Result<LocalInstanceGroup> PromptUserForGroup(
130130 }
131131}
132132
133+ Result<std::pair<LocalInstance, LocalInstanceGroup>> PromptUserForInstance (
134+ const InstanceManager& instance_manager, const CommandRequest& request,
135+ InstanceDatabase::Filter filter) {
136+ // TODO CJR: adapt or clone PromptUserForGroup logic, but only allow instance
137+ // selection
138+ return CF_ERR (" TODO CJR implement" );
139+ }
140+
133141Result<LocalInstanceGroup> FindGroupOrDefault (
134142 const InstanceDatabase::Filter& filter,
135143 const InstanceManager& instance_manager) {
@@ -187,10 +195,24 @@ Result<LocalInstanceGroup> SelectGroup(const InstanceManager& instance_manager,
187195
188196Result<std::pair<LocalInstance, LocalInstanceGroup>> SelectInstance (
189197 const InstanceManager& instance_manager, const CommandRequest& request) {
198+ const bool has_groups = CF_EXPECT (instance_manager.HasInstanceGroups ());
199+ CF_EXPECT (std::move (has_groups), " No instance groups available" );
200+ // TODO CJR: can we have an instance group with no instances?
201+ // or do I need to check for that?
190202 InstanceDatabase::Filter filter =
191203 CF_EXPECT (BuildFilterFromSelectors (request.Selectors (), request.Env ()));
192204
193- return CF_EXPECT (FindInstanceOrDefault (filter, instance_manager));
205+ Result<std::pair<LocalInstance, LocalInstanceGroup>>
206+ instance_selection_result =
207+ CF_EXPECT (FindInstanceOrDefault (filter, instance_manager));
208+ if (instance_selection_result.ok ()) {
209+ return CF_EXPECT (std::move (instance_selection_result));
210+ }
211+ CF_EXPECT (isatty (0 ),
212+ " Multiple instances found. Narrow the selection with selector "
213+ " arguments or run in an interactive terminal" );
214+ return CF_EXPECT (
215+ PromptUserForInstance (instance_manager, request, std::move (filter)));
194216}
195217
196218} // namespace selector
0 commit comments