diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/zen/cmds/projectstore_cmd.cpp | 36 |
1 files changed, 33 insertions, 3 deletions
diff --git a/src/zen/cmds/projectstore_cmd.cpp b/src/zen/cmds/projectstore_cmd.cpp index afcf71346..a0118576b 100644 --- a/src/zen/cmds/projectstore_cmd.cpp +++ b/src/zen/cmds/projectstore_cmd.cpp @@ -328,6 +328,36 @@ namespace { return SB.ToString(); } + std::string FmtProjectIdArray(const std::vector<std::string>& ProjectIds, + std::string_view Separator = ", "sv, + std::string_view Quotes = "'"sv) + { + std::vector<std::string> PrettyProjectIds; + PrettyProjectIds.reserve(ProjectIds.size()); + for (const std::string& ProjectId : ProjectIds) + { + auto PrettyProjectId = [Quotes, &ProjectIds](const std::string& ProjectId) -> std::string { + if (std::string::size_type DotPos = ProjectId.find('.'); DotPos != std::string::npos) + { + const std::string ConflictProjectId = ProjectId.substr(0, DotPos + 1); + auto It = std::find_if(ProjectIds.begin(), + ProjectIds.end(), + [&ProjectId, &ConflictProjectId](const std::string& CheckForConflictProjectId) { + return (ProjectId != CheckForConflictProjectId) && + CheckForConflictProjectId.starts_with(ConflictProjectId); + }); + if (It == ProjectIds.end()) + { + return fmt::format("{}{}{} ({})", Quotes, ProjectId.substr(0, DotPos), Quotes, ProjectId); + } + } + return fmt::format("{}{}{}", Quotes, ProjectId, Quotes); + }; + PrettyProjectIds.push_back(PrettyProjectId(ProjectId)); + } + return FmtArray(PrettyProjectIds, Separator, ""); + } + std::string ResolveProject(HttpClient& Http, std::string_view OptionalProjectName) { std::vector<std::string> AvailableProjects = GetProjectIds(Http); @@ -352,7 +382,7 @@ namespace { } else { - ZEN_CONSOLE("Available projects at {}: {}", Http.GetBaseUri(), FmtArray(AvailableProjects)); + ZEN_CONSOLE("Available projects at {}: {}", Http.GetBaseUri(), FmtProjectIdArray(AvailableProjects)); return {}; } } @@ -363,7 +393,7 @@ namespace { ZEN_CONSOLE("Unable to match project name '{}' at {}, available projects: {}", OptionalProjectName, Http.GetBaseUri(), - FmtArray(AvailableProjects)); + FmtProjectIdArray(AvailableProjects)); return {}; } @@ -375,7 +405,7 @@ namespace { ZEN_CONSOLE("Project name is ambigous '{}' at {}: possible matches: {}", OptionalProjectName, Http.GetBaseUri(), - FmtArray(MatchingProjectIds)); + FmtProjectIdArray(MatchingProjectIds)); return {}; } |