diff options
| author | Per Larsson <[email protected]> | 2021-12-14 12:34:47 +0100 |
|---|---|---|
| committer | Per Larsson <[email protected]> | 2021-12-14 12:34:47 +0100 |
| commit | b6c6568e1618f10d2160d836b65e35586e3c740f (patch) | |
| tree | f6a929cf918850bbba87d0ee67cd3482b2d50e24 /zen/cmds/deploy.cpp | |
| parent | Fixed bug in z$ service returning partial cache records and enable small obje... (diff) | |
| parent | Partial revert b363c5b (diff) | |
| download | archived-zen-b6c6568e1618f10d2160d836b65e35586e3c740f.tar.xz archived-zen-b6c6568e1618f10d2160d836b65e35586e3c740f.zip | |
Merged main.
Diffstat (limited to 'zen/cmds/deploy.cpp')
| -rw-r--r-- | zen/cmds/deploy.cpp | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/zen/cmds/deploy.cpp b/zen/cmds/deploy.cpp new file mode 100644 index 000000000..10808d063 --- /dev/null +++ b/zen/cmds/deploy.cpp @@ -0,0 +1,87 @@ +// Copyright Epic Games, Inc. All Rights Reserved. + +#include "deploy.h" + +#include <zencore/filesystem.h> +#include <zencore/logging.h> +#include <zencore/string.h> + +namespace zen { + +DeployCommand::DeployCommand() +{ + m_Options.add_options()("h,help", "Print help"); + m_Options.add_options()("no-clone", "Do not perform block clone", cxxopts::value(m_NoClone)->default_value("false")); + m_Options.add_options()("clean", + "Make clean deploy (i.e remove anything in target first)", + cxxopts::value(m_IsClean)->default_value("false")); + m_Options.add_option("", "s", "source", "Deploy source", cxxopts::value(m_CopySource), "<build store>"); + m_Options.add_option("", "t", "target", "Deploy target", cxxopts::value(m_CopyTarget), "<directory>"); + m_Options.add_option("", "", "positional", "Positional arguments", cxxopts::value(m_Positional), ""); +} + +DeployCommand::~DeployCommand() = default; + +int +DeployCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv) +{ + ZEN_UNUSED(GlobalOptions); + + m_Options.parse_positional({"source", "target", "positional"}); + + auto result = m_Options.parse(argc, argv); + + if (result.count("help")) + { + std::cout << m_Options.help({"", "Group"}) << std::endl; + + return 0; + } + + // Validate arguments + + if (m_CopySource.empty()) + throw std::runtime_error("No source specified"); + + if (m_CopyTarget.empty()) + throw std::runtime_error("No target specified"); + + std::filesystem::path ToPath; + + ToPath = m_CopyTarget; + + const bool IsTargetDir = std::filesystem::is_directory(ToPath); + bool IsTargetNew = !std::filesystem::exists(ToPath); + + if (!IsTargetNew && !IsTargetDir) + { + throw std::runtime_error("Invalid target specification (needs to be a directory)"); + } + + zen::ExtendableStringBuilder<128> Path8; + zen::PathToUtf8(ToPath, Path8); + + if (IsTargetNew == false && m_IsClean) + { + ZEN_INFO("Clean deploy -- deleting directory {}", Path8.c_str()); + + std::filesystem::remove_all(ToPath); + + IsTargetNew = true; // Create fresh new directory + } + + if (IsTargetNew) + { + ZEN_INFO("Creating directory {}", Path8.c_str()); + + std::filesystem::create_directories(ToPath); + } + + ZEN_INFO("Starting deploy operation..."); + + // TODO: implement! + + return 0; +} + +} // namespace zen |