aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDan Engelbrecht <[email protected]>2024-11-06 09:48:15 +0100
committerGitHub Enterprise <[email protected]>2024-11-06 09:48:15 +0100
commitb8adf1d4e1b67f6667c15d2d2e9251928f7af0cf (patch)
treebb2d3fb45220f06adf6e1809d2a69a260ed46a53 /src
parentoplog capture new attachments for gc (#210) (diff)
downloadzen-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.cpp36
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 {};
}