diff options
| author | Stefan Boberg <[email protected]> | 2023-05-17 14:15:03 +0200 |
|---|---|---|
| committer | GitHub <[email protected]> | 2023-05-17 14:15:03 +0200 |
| commit | 0fe1591f667d58bed0eb90e35a1880a01595793a (patch) | |
| tree | eeb9309accb77f897def9b5199937a63b71dcfd4 /src | |
| parent | zen print command should use an extendable string buffer to prevent overflow (diff) | |
| download | zen-0fe1591f667d58bed0eb90e35a1880a01595793a.tar.xz zen-0fe1591f667d58bed0eb90e35a1880a01595793a.zip | |
Sb/oplog export fixes (#315)
* fixed a bug in oplog-export file target RPC message
* updated some option validation code
Diffstat (limited to 'src')
| -rw-r--r-- | src/zen/cmds/projectstore.cpp | 44 |
1 files changed, 28 insertions, 16 deletions
diff --git a/src/zen/cmds/projectstore.cpp b/src/zen/cmds/projectstore.cpp index c30383d1b..70670150a 100644 --- a/src/zen/cmds/projectstore.cpp +++ b/src/zen/cmds/projectstore.cpp @@ -123,24 +123,33 @@ ProjectInfoCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** arg throw zen::OptionParseException("unable to resolve server specification"); } - cpr::Session Session; - Session.SetHeader(cpr::Header{{"Accept", "application/json"}}); + if (!m_OplogName.empty() && m_ProjectName.empty()) + { + throw zen::OptionParseException("an oplog can't be specified without also specifying a project"); + } + + std::string Url; + if (m_ProjectName.empty()) { - ZEN_CONSOLE("Info from '{}'", m_HostName); - Session.SetUrl({fmt::format("{}/prj", m_HostName)}); + Url = fmt::format("{}/prj", m_HostName); + ZEN_CONSOLE("Info from '{}'", Url); } else if (m_OplogName.empty()) { - ZEN_CONSOLE("Info on project '{}' from '{}'", m_ProjectName, m_HostName); - Session.SetUrl({fmt::format("{}/prj/{}", m_HostName, m_ProjectName)}); + Url = fmt::format("{}/prj/{}", m_HostName, m_ProjectName); + ZEN_CONSOLE("Info on project '{}' from '{}'", m_ProjectName, Url); } else { - ZEN_CONSOLE("Info on oplog '{}/{}' from '{}'", m_ProjectName, m_OplogName, m_HostName); - Session.SetUrl({fmt::format("{}/prj/{}/oplog/{}", m_HostName, m_ProjectName, m_OplogName)}); + Url = fmt::format("{}/prj/{}/oplog/{}", m_HostName, m_ProjectName, m_OplogName); + ZEN_CONSOLE("Info on oplog '{}/{}' from '{}'", m_ProjectName, m_OplogName, Url); } + cpr::Session Session; + Session.SetHeader(cpr::Header{{"Accept", "application/json"}}); + Session.SetUrl(Url); + cpr::Response Result = Session.Get(); if (zen::IsHttpSuccessCode(Result.status_code)) @@ -391,14 +400,12 @@ ExportOplogCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** arg if (m_ProjectName.empty()) { - ZEN_ERROR("Project name must be given"); - return 1; + throw zen::OptionParseException("project name must be specified"); } if (m_OplogName.empty()) { - ZEN_ERROR("Oplog name must be given"); - return 1; + throw zen::OptionParseException("oplog identifier must be specified"); } size_t TargetCount = 0; @@ -407,9 +414,14 @@ ExportOplogCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** arg TargetCount += m_FileDirectoryPath.empty() ? 0 : 1; if (TargetCount != 1) { - ZEN_ERROR("Provide one target only"); - ZEN_CONSOLE("{}", m_Options.help({""}).c_str()); - return 1; + if (TargetCount == 0) + { + throw zen::OptionParseException("an export target must be specified"); + } + else + { + throw zen::OptionParseException("a single export target must be specified"); + } } cpr::Session Session; @@ -519,7 +531,7 @@ ExportOplogCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** arg { Writer.BeginObject("file"sv); { - Writer.AddString("file"sv, m_FileDirectoryPath); + Writer.AddString("path"sv, m_FileDirectoryPath); Writer.AddString("name"sv, m_FileName); if (m_DisableBlocks) { |