// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "../zen.h" namespace zen { class ProjectStoreCommand : public ZenCmdBase { virtual ZenCmdCategory& CommandCategory() const override { return g_ProjectStoreCategory; } }; class DropProjectCommand : public ProjectStoreCommand { public: DropProjectCommand(); ~DropProjectCommand(); virtual int Run(const ZenCliOptions& GlobalOptions, int argc, char** argv) override; virtual cxxopts::Options& Options() override { return m_Options; } private: cxxopts::Options m_Options{"project-drop", "Drop project or project oplog"}; std::string m_HostName; std::string m_ProjectName; std::string m_OplogName; bool m_DryRun = true; }; class ProjectInfoCommand : public ProjectStoreCommand { public: ProjectInfoCommand(); ~ProjectInfoCommand(); virtual int Run(const ZenCliOptions& GlobalOptions, int argc, char** argv) override; virtual cxxopts::Options& Options() override { return m_Options; } private: cxxopts::Options m_Options{"project-info", "Info on project or project oplog"}; std::string m_HostName; std::string m_ProjectName; std::string m_OplogName; }; class CreateProjectCommand : public ProjectStoreCommand { public: CreateProjectCommand(); ~CreateProjectCommand(); virtual int Run(const ZenCliOptions& GlobalOptions, int argc, char** argv) override; virtual cxxopts::Options& Options() override { return m_Options; } private: cxxopts::Options m_Options{"project-create", "Create project, the project must not already exist."}; std::string m_HostName; std::string m_ProjectId; std::string m_RootDir; std::string m_EngineRootDir; std::string m_ProjectRootDir; std::string m_ProjectFile; bool m_ForceUpdate = false; }; class CreateOplogCommand : public ProjectStoreCommand { public: CreateOplogCommand(); ~CreateOplogCommand(); virtual int Run(const ZenCliOptions& GlobalOptions, int argc, char** argv) override; virtual cxxopts::Options& Options() override { return m_Options; } private: cxxopts::Options m_Options{"oplog-create", "Create oplog in an existing project, the oplog must not already exist."}; std::string m_HostName; std::string m_ProjectId; std::string m_OplogId; std::string m_GcPath; bool m_ForceUpdate = false; }; class ExportOplogCommand : public ProjectStoreCommand { public: ExportOplogCommand(); ~ExportOplogCommand(); virtual int Run(const ZenCliOptions& GlobalOptions, int argc, char** argv) override; virtual cxxopts::Options& Options() override { return m_Options; } private: cxxopts::Options m_Options{"oplog-export", "Export project store oplog to cloud (--cloud), file system (--file) or other Zen instance (--zen)"}; std::string m_HostName; std::string m_ProjectName; std::string m_OplogName; uint64_t m_MaxBlockSize = 0; uint64_t m_MaxChunkEmbedSize = 0; bool m_EmbedLooseFiles = false; bool m_Force = false; bool m_DisableBlocks = false; bool m_Async = false; std::string m_JupiterNamespace; std::string m_JupiterBucket; std::string m_JupiterOpenIdProvider; std::string m_JupiterAccessToken; std::string m_JupiterAccessTokenEnv; std::string m_JupiterAccessTokenPath; std::string m_OidcTokenAuthExecutablePath; bool m_JupiterAssumeHttp2 = false; bool m_JupiterDisableTempBlocks = false; std::string m_CloudUrl; std::string m_CloudKey; std::string m_BaseCloudKey; std::string m_BuildsUrl; std::string m_BuildsId; std::string m_BuildsMetadataPath; std::string m_BuildsMetadata; bool m_IgnoreMissingAttachments = false; std::string m_ZenUrl; std::string m_ZenProjectName; std::string m_ZenOplogName; bool m_ZenClean = false; std::string m_FileDirectoryPath; std::string m_FileName; std::string m_BaseFileName; bool m_FileForceEnableTempBlocks = false; bool m_PlainProgress = false; }; class ImportOplogCommand : public ProjectStoreCommand { public: ImportOplogCommand(); ~ImportOplogCommand(); virtual int Run(const ZenCliOptions& GlobalOptions, int argc, char** argv) override; virtual cxxopts::Options& Options() override { return m_Options; } private: cxxopts::Options m_Options{"oplog-import", "Import project store oplog from cloud (--cloud), file system (--file) or other Zen instance (--zen)"}; std::string m_HostName; std::string m_ProjectName; std::string m_OplogName; std::string m_GcPath; size_t m_MaxBlockSize = 0; size_t m_MaxChunkEmbedSize = 0; bool m_Force = false; bool m_Async = false; bool m_IgnoreMissingAttachments = false; bool m_Clean = false; bool m_PlainProgress = false; std::string m_JupiterNamespace; std::string m_JupiterBucket; std::string m_JupiterOpenIdProvider; std::string m_JupiterAccessToken; std::string m_JupiterAccessTokenEnv; std::string m_JupiterAccessTokenPath; std::string m_OidcTokenAuthExecutablePath; bool m_JupiterAssumeHttp2 = false; std::string m_CloudUrl; std::string m_CloudKey; std::string m_BuildsUrl; std::string m_BuildsId; std::string m_ZenUrl; std::string m_ZenProjectName; std::string m_ZenOplogName; std::string m_FileDirectoryPath; std::string m_FileName; }; class SnapshotOplogCommand : public ProjectStoreCommand { public: SnapshotOplogCommand(); ~SnapshotOplogCommand(); virtual int Run(const ZenCliOptions& GlobalOptions, int argc, char** argv) override; virtual cxxopts::Options& Options() override { return m_Options; } private: cxxopts::Options m_Options{"oplog-snapshot", "Snapshot external file references in project store oplog into zen"}; std::string m_HostName; std::string m_ProjectName; std::string m_OplogName; }; class ProjectStatsCommand : public ProjectStoreCommand { public: ProjectStatsCommand(); ~ProjectStatsCommand(); virtual int Run(const ZenCliOptions& GlobalOptions, int argc, char** argv) override; virtual cxxopts::Options& Options() override { return m_Options; } private: cxxopts::Options m_Options{"project-stats", "Stats info on project store"}; std::string m_HostName; }; class ProjectOpDetailsCommand : public ProjectStoreCommand { public: ProjectOpDetailsCommand(); ~ProjectOpDetailsCommand(); virtual int Run(const ZenCliOptions& GlobalOptions, int argc, char** argv) override; virtual cxxopts::Options& Options() override { return m_Options; } private: cxxopts::Options m_Options{"project-op-details", "Detail info on ops inside a project store oplog"}; std::string m_HostName; bool m_Details = false; bool m_OpDetails = false; bool m_AttachmentDetails = false; bool m_CSV = false; std::string m_ProjectName; std::string m_OplogName; std::string m_OpId; }; class OplogMirrorCommand : public ProjectStoreCommand { public: OplogMirrorCommand(); ~OplogMirrorCommand(); virtual int Run(const ZenCliOptions& GlobalOptions, int argc, char** argv) override; virtual cxxopts::Options& Options() override { return m_Options; } private: cxxopts::Options m_Options{"oplog-mirror", "Mirror oplog to file system"}; std::string m_HostName; std::string m_ProjectName; std::string m_OplogName; std::string m_MirrorRootPath; std::string m_KeyFilter; std::string m_FilenameFilter; std::string m_ChunkIdFilter; bool m_Decompress = false; bool m_TrimToReferencedSet = true; }; class OplogValidateCommand : public ProjectStoreCommand { public: OplogValidateCommand(); ~OplogValidateCommand(); virtual int Run(const ZenCliOptions& GlobalOptions, int argc, char** argv) override; virtual cxxopts::Options& Options() override { return m_Options; } private: cxxopts::Options m_Options{"oplog-validate", "Validate oplog for missing references"}; std::string m_HostName; std::string m_ProjectName; std::string m_OplogName; }; } // namespace zen