This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "CMake".
The branch, next has been updated via 23e06aa9e3967be3c4b3a44df30753730482e538 (commit) via 7df8a8f2769de784c24dc6baeb55ad2038aa059f (commit) from 38cf4b108d015c59a3aac7465406f25f43e676f1 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=23e06aa9e3967be3c4b3a44df30753730482e538 commit 23e06aa9e3967be3c4b3a44df30753730482e538 Merge: 38cf4b1 7df8a8f Author: Brad King <brad.k...@kitware.com> AuthorDate: Tue Sep 20 08:32:40 2016 -0400 Commit: CMake Topic Stage <kwro...@kitware.com> CommitDate: Tue Sep 20 08:32:40 2016 -0400 Merge topic 'cmake-server-experimental-protocols' into next 7df8a8f2 server-mode: Add --experimental flag https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=7df8a8f2769de784c24dc6baeb55ad2038aa059f commit 7df8a8f2769de784c24dc6baeb55ad2038aa059f Author: Tobias Hunger <tobias.hun...@qt.io> AuthorDate: Fri Sep 9 10:01:44 2016 +0200 Commit: Brad King <brad.k...@kitware.com> CommitDate: Tue Sep 20 08:32:26 2016 -0400 server-mode: Add --experimental flag Allow for experimental cmProtocolVersions, which will only ever get listed if the server was started with the (undocumented) "--experimental" flag. Mark current protocol version 1.0 as experimental. diff --git a/Source/cmServer.cxx b/Source/cmServer.cxx index 123b6a4..208fac6 100644 --- a/Source/cmServer.cxx +++ b/Source/cmServer.cxx @@ -85,7 +85,8 @@ void read_stdin(uv_stream_t* stream, ssize_t nread, const uv_buf_t* buf) free(buf->base); } -cmServer::cmServer() +cmServer::cmServer(bool supportExperimental) + : SupportExperimental(supportExperimental) { // Register supported protocols: this->RegisterProtocol(new cmServerProtocol1_0); @@ -93,8 +94,9 @@ cmServer::cmServer() cmServer::~cmServer() { - if (!this->Protocol) // Daemon was never fully started! + if (!this->Protocol) { // Server was never fully started! return; + } uv_close(reinterpret_cast<uv_handle_t*>(this->InputStream), NULL); uv_close(reinterpret_cast<uv_handle_t*>(this->OutputStream), NULL); @@ -171,6 +173,9 @@ void cmServer::handleData(const std::string& data) void cmServer::RegisterProtocol(cmServerProtocol* protocol) { + if (protocol->IsExperimental() && !this->SupportExperimental) { + return; + } auto version = protocol->ProtocolVersion(); assert(version.first >= 0); assert(version.second >= 0); @@ -196,6 +201,9 @@ void cmServer::PrintHello() const Json::Value tmp = Json::objectValue; tmp["major"] = version.first; tmp["minor"] = version.second; + if (proto->IsExperimental()) { + tmp["experimental"] = true; + } protocolVersions.append(tmp); } @@ -245,9 +253,11 @@ cmServerResponse cmServer::SetProtocolVersion(const cmServerRequest& request) return request.Reply(Json::objectValue); } -void cmServer::Serve() +bool cmServer::Serve() { - assert(!this->SupportedProtocols.empty()); + if (this->SupportedProtocols.empty()) { + return false; + } assert(!this->Protocol); this->Loop = uv_default_loop(); @@ -279,6 +289,7 @@ void cmServer::Serve() uv_read_start(this->InputStream, alloc_buffer, read_stdin); uv_run(this->Loop, UV_RUN_DEFAULT); + return true; } void cmServer::WriteJsonObject(const Json::Value& jsonValue) const diff --git a/Source/cmServer.h b/Source/cmServer.h index 0ef1e17..4a9c3f5 100644 --- a/Source/cmServer.h +++ b/Source/cmServer.h @@ -31,10 +31,10 @@ class cmServerResponse; class cmServer { public: - cmServer(); + cmServer(bool supportExperimental); ~cmServer(); - void Serve(); + bool Serve(); // for callbacks: void PopOne(); @@ -59,6 +59,8 @@ private: static cmServerProtocol* FindMatchingProtocol( const std::vector<cmServerProtocol*>& protocols, int major, int minor); + const bool SupportExperimental; + cmServerProtocol* Protocol = nullptr; std::vector<cmServerProtocol*> SupportedProtocols; std::vector<std::string> Queue; diff --git a/Source/cmServerProtocol.cxx b/Source/cmServerProtocol.cxx index c3a4d8e..d53ac28 100644 --- a/Source/cmServerProtocol.cxx +++ b/Source/cmServerProtocol.cxx @@ -262,3 +262,8 @@ const cmServerResponse cmServerProtocol1_0::Process( return request.ReportError("Unknown command!"); } + +bool cmServerProtocol1_0::IsExperimental() const +{ + return true; +} diff --git a/Source/cmServerProtocol.h b/Source/cmServerProtocol.h index 33183e9..e95c2f1 100644 --- a/Source/cmServerProtocol.h +++ b/Source/cmServerProtocol.h @@ -82,6 +82,7 @@ public: virtual ~cmServerProtocol() {} virtual std::pair<int, int> ProtocolVersion() const = 0; + virtual bool IsExperimental() const = 0; virtual const cmServerResponse Process(const cmServerRequest& request) = 0; bool Activate(const cmServerRequest& request, std::string* errorMessage); @@ -100,6 +101,7 @@ class cmServerProtocol1_0 : public cmServerProtocol { public: std::pair<int, int> ProtocolVersion() const override; + bool IsExperimental() const override; const cmServerResponse Process(const cmServerRequest& request) override; private: diff --git a/Source/cmcmd.cxx b/Source/cmcmd.cxx index c09ea8b..38f00e6 100644 --- a/Source/cmcmd.cxx +++ b/Source/cmcmd.cxx @@ -913,15 +913,32 @@ int cmcmd::ExecuteCMakeCommand(std::vector<std::string>& args) } return 0; } else if (args[1] == "server") { - if (args.size() > 2) { + if (args.size() > 3) { cmSystemTools::Error("Too many arguments to start server mode"); return 1; } + bool supportExperimental = false; + if (args.size() == 3) { + if (args[2] == "--experimental") { + supportExperimental = true; + } else { + cmSystemTools::Error("Unknown argument for server mode"); + return 1; + } + } #if defined(HAVE_SERVER_MODE) && HAVE_SERVER_MODE - cmServer server; - server.Serve(); - return 0; + cmServer server(supportExperimental); + if (server.Serve()) { + return 0; + } else { + cmSystemTools::Error( + "CMake server could not find any supported protocol. " + "Try with \"--experimental\" to enable " + "experimental support."); + return 1; + } #else + static_cast<void>(supportExperimental); cmSystemTools::Error("CMake was not built with server mode enabled"); return 1; #endif diff --git a/Tests/RunCMake/CommandLine/E_server-arg-stderr.txt b/Tests/RunCMake/CommandLine/E_server-arg-stderr.txt index 7877c01..4dcbab9 100644 --- a/Tests/RunCMake/CommandLine/E_server-arg-stderr.txt +++ b/Tests/RunCMake/CommandLine/E_server-arg-stderr.txt @@ -1 +1 @@ -^CMake Error: Too many arguments to start server mode$ +^CMake Error: Unknown argument for server mode$ diff --git a/Tests/Server/cmakelib.py b/Tests/Server/cmakelib.py index 48ebc89..e89b1f0 100644 --- a/Tests/Server/cmakelib.py +++ b/Tests/Server/cmakelib.py @@ -79,7 +79,7 @@ def writePayload(cmakeCommand, obj): writeRawData(cmakeCommand, json.dumps(obj)) def initProc(cmakeCommand): - cmakeCommand = subprocess.Popen([cmakeCommand, "-E", "server"], + cmakeCommand = subprocess.Popen([cmakeCommand, "-E", "server", "--experimental"], stdin=subprocess.PIPE, stdout=subprocess.PIPE) ----------------------------------------------------------------------- Summary of changes: hooks/post-receive -- CMake _______________________________________________ Cmake-commits mailing list Cmake-commits@cmake.org http://public.kitware.com/mailman/listinfo/cmake-commits