diff options
| author | Dan Engelbrecht <[email protected]> | 2025-09-17 18:09:12 +0200 |
|---|---|---|
| committer | GitHub Enterprise <[email protected]> | 2025-09-17 18:09:12 +0200 |
| commit | 59ae716aae73190e31ab3214ee69e825200e9f56 (patch) | |
| tree | 61f3d4b65f012fe38611670c9db1ea2575e4c8a5 /src | |
| parent | add builds download force option (#498) (diff) | |
| download | zen-59ae716aae73190e31ab3214ee69e825200e9f56.tar.xz zen-59ae716aae73190e31ab3214ee69e825200e9f56.zip | |
fix quoted wildcard options (#500)
* improve command line parsing to automatically remove quotes
Diffstat (limited to 'src')
| -rw-r--r-- | src/zen/cmds/builds_cmd.cpp | 28 | ||||
| -rw-r--r-- | src/zenutil/commandlineoptions.cpp | 30 |
2 files changed, 24 insertions, 34 deletions
diff --git a/src/zen/cmds/builds_cmd.cpp b/src/zen/cmds/builds_cmd.cpp index 179f34193..949e40085 100644 --- a/src/zen/cmds/builds_cmd.cpp +++ b/src/zen/cmds/builds_cmd.cpp @@ -829,7 +829,7 @@ namespace { std::string& OutBucket, std::string& OutBuildId) { - std::string Url(RemoveQuotes(InUrl)); + std::string Url(InUrl); const std::string_view ExtendedApiString = "api/v2/builds/"; if (auto ApiString = ToLower(Url).find(ExtendedApiString); ApiString != std::string::npos) { @@ -10540,11 +10540,6 @@ BuildsCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv) ParseSystemOptions(); auto ParseStorageOptions = [&](bool RequireNamespace, bool RequireBucket) { - m_Host = RemoveQuotes(m_Host); - m_OverrideHost = RemoveQuotes(m_OverrideHost); - m_Url = RemoveQuotes(m_Url); - m_Namespace = RemoveQuotes(m_Namespace); - m_Bucket = RemoveQuotes(m_Bucket); if (!m_Url.empty()) { if (!m_Host.empty()) @@ -10636,19 +10631,6 @@ BuildsCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv) }; auto ParseAuthOptions = [&]() { - m_OpenIdProviderUrl = RemoveQuotes(m_OpenIdProviderUrl); - m_OpenIdClientId = RemoveQuotes(m_OpenIdClientId); - - m_AccessToken = RemoveQuotes(m_AccessToken); - m_EncryptionKey = RemoveQuotes(m_EncryptionKey); - m_EncryptionIV = RemoveQuotes(m_EncryptionIV); - - m_OAuthUrl = RemoveQuotes(m_OAuthUrl); - m_OAuthClientId = RemoveQuotes(m_OAuthClientId); - m_OAuthClientSecret = RemoveQuotes(m_OAuthClientSecret); - - m_OidcTokenAuthExecutablePath = RemoveQuotes(m_OidcTokenAuthExecutablePath); - if (!m_OpenIdProviderUrl.empty() && !m_OpenIdClientId.empty()) { CreateAuthMgr(); @@ -10774,8 +10756,6 @@ BuildsCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv) bool RequireBucket) -> StorageInstance { ParseStorageOptions(RequireNamespace, RequireBucket); - m_ZenCacheHost = RemoveQuotes(m_ZenCacheHost); - StorageInstance Result; std::string BuildStorageName = ZEN_CLOUD_STORAGE; @@ -11061,7 +11041,6 @@ BuildsCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv) }; auto ParseBlobHash = [&]() -> IoHash { - m_BlobHash = RemoveQuotes(m_BlobHash); if (m_BlobHash.empty()) { throw OptionParseException("'--blob-hash' is required", SubOption->help()); @@ -11084,7 +11063,6 @@ BuildsCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv) }; auto ParseBuildId = [&]() -> Oid { - m_BuildId = RemoveQuotes(m_BuildId); if (m_BuildId.length() != Oid::StringLength) { throw OptionParseException( @@ -11102,7 +11080,6 @@ BuildsCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv) }; auto ParseBuildPartId = [&]() -> Oid { - m_BuildPartId = RemoveQuotes(m_BuildPartId); if (m_BuildPartId.length() != Oid::StringLength) { throw OptionParseException( @@ -11173,7 +11150,6 @@ BuildsCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv) } return MetaData; } - m_BuildMetadata = RemoveQuotes(m_BuildMetadata); if (!m_BuildMetadata.empty()) { CbObjectWriter MetaDataWriter(1024); @@ -11413,8 +11389,6 @@ BuildsCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv) const std::filesystem::path TempDir = ZenTempFolderPath(m_ZenFolderPath); - m_ManifestPath = RemoveQuotes(m_ManifestPath); - UploadFolder(Storage, BuildId, BuildPartId, diff --git a/src/zenutil/commandlineoptions.cpp b/src/zenutil/commandlineoptions.cpp index afef7f6f2..040726c77 100644 --- a/src/zenutil/commandlineoptions.cpp +++ b/src/zenutil/commandlineoptions.cpp @@ -116,10 +116,15 @@ StripCommandlineQuotes(std::vector<std::string>& InOutArgs) { if (Arg.find('"', 1) == Arg.length() - 1) { - if (Arg.find(' ', 1) == std::string::npos) - { - Arg = Arg.substr(1, Arg.length() - 2); - } + Arg = Arg.substr(1, Arg.length() - 2); + } + } + else if (Arg.ends_with("\"")) + { + std::string::size_type EqualSign = Arg.find("=", 1); + if (EqualSign != std::string::npos && Arg[EqualSign + 1] == '\"') + { + Arg = Arg.substr(0, EqualSign + 1) + Arg.substr(EqualSign + 2, Arg.length() - (EqualSign + 2) - 1); } } RawArgs.push_back(const_cast<char*>(Arg.c_str())); @@ -209,12 +214,23 @@ TEST_CASE("CommandLine") CHECK_EQ(v2Stripped[5], std::string("--namespace=ue.oplog")); CHECK_EQ(v2Stripped[6], std::string("--bucket=citysample.packaged-build.fortnite-main.windows")); CHECK_EQ(v2Stripped[7], std::string("c:\\just\\a\\path")); - CHECK_EQ(v2Stripped[8], std::string("--access-token-path=\"C:\\Users\\dan.engelbrecht\\jupiter-token.json\"")); - CHECK_EQ(v2Stripped[9], std::string("\"D:\\Dev\\Spaced Folder\\Target\"")); - CHECK_EQ(v2Stripped[10], std::string("--alt-path=\"D:\\Dev\\Spaced Folder2\\Target\"")); + CHECK_EQ(v2Stripped[8], std::string("--access-token-path=C:\\Users\\dan.engelbrecht\\jupiter-token.json")); + CHECK_EQ(v2Stripped[9], std::string("D:\\Dev\\Spaced Folder\\Target")); + CHECK_EQ(v2Stripped[10], std::string("--alt-path=D:\\Dev\\Spaced Folder2\\Target")); CHECK_EQ(v2Stripped[11], std::string("07dn23ifiwesnvoasjncasab")); CHECK_EQ(v2Stripped[12], std::string("--build-part-name")); CHECK_EQ(v2Stripped[13], std::string("win64,linux,ps5")); + + std::vector<std::string> v3 = ParseCommandLine( + "--tracehost \"127.0.0.1\" builds download --url=\"https://jupiter.devtools.epicgames.com\" --build-part-name=\"win64\""); + std::vector<char*> v3Stripped = StripCommandlineQuotes(v3); + + CHECK_EQ(v3Stripped[0], std::string("--tracehost")); + CHECK_EQ(v3Stripped[1], std::string("127.0.0.1")); + CHECK_EQ(v3Stripped[2], std::string("builds")); + CHECK_EQ(v3Stripped[3], std::string("download")); + CHECK_EQ(v3Stripped[4], std::string("--url=https://jupiter.devtools.epicgames.com")); + CHECK_EQ(v3Stripped[5], std::string("--build-part-name=win64")); } #endif |