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

Reply via email to