aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorStefan Boberg <[email protected]>2023-05-17 14:15:03 +0200
committerGitHub <[email protected]>2023-05-17 14:15:03 +0200
commit0fe1591f667d58bed0eb90e35a1880a01595793a (patch)
treeeeb9309accb77f897def9b5199937a63b71dcfd4 /src
parentzen print command should use an extendable string buffer to prevent overflow (diff)
downloadzen-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.cpp44
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)
{