diff options
| author | Dan Engelbrecht <[email protected]> | 2024-11-06 09:48:15 +0100 |
|---|---|---|
| committer | GitHub Enterprise <[email protected]> | 2024-11-06 09:48:15 +0100 |
| commit | b8adf1d4e1b67f6667c15d2d2e9251928f7af0cf (patch) | |
| tree | bb2d3fb45220f06adf6e1809d2a69a260ed46a53 /src | |
| parent | oplog capture new attachments for gc (#210) (diff) | |
| download | zen-b8adf1d4e1b67f6667c15d2d2e9251928f7af0cf.tar.xz zen-b8adf1d4e1b67f6667c15d2d2e9251928f7af0cf.zip | |
project name list improvement (#211)
* provide shorter project store name in list when not conflicting
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 {}; } |