Просмотр исходного кода

ctest: allow HTTP headers via command line

Add ability to specify HTTP headers via `ctest -T Submit`.
Matthew Woehlke 1 год назад
Родитель
Сommit
20adf8cfce

+ 10 - 0
Help/manual/ctest.1.rst

@@ -754,6 +754,16 @@ The available ``<dashboard-options>`` are the following:
 
  This option will submit extra files to the dashboard.
 
+.. option:: --http-header <header>
+
+ .. versionadded:: 3.29
+
+ Append HTTP header when submitting to the dashboard.
+
+ This option will cause CTest to append the specified header
+ when submitting to the dashboard.
+ This option may be specified more than once.
+
 .. option:: --http1.0
 
  Submit using `HTTP 1.0`.

+ 5 - 0
Help/release/dev/ctest-cli-http-headers.rst

@@ -0,0 +1,5 @@
+ctest-cli-http-headers
+----------------------
+
+* :manual:`ctest(1)` gained a :option:`--http-header <ctest --http-header>`
+  option to add custom headers on submission to CDash.

+ 13 - 0
Source/CTest/cmCTestSubmitHandler.cxx

@@ -138,6 +138,19 @@ void cmCTestSubmitHandler::Initialize()
   this->Files.clear();
 }
 
+int cmCTestSubmitHandler::ProcessCommandLineArguments(
+  const std::string& currentArg, size_t& idx,
+  const std::vector<std::string>& allArgs)
+{
+  if (cmHasLiteralPrefix(currentArg, "--http-header") &&
+      idx < allArgs.size() - 1) {
+    ++idx;
+    this->HttpHeaders.push_back(allArgs[idx]);
+    this->CommandLineHttpHeaders.push_back(allArgs[idx]);
+  }
+  return 1;
+}
+
 bool cmCTestSubmitHandler::SubmitUsingHTTP(
   const std::string& localprefix, const std::vector<std::string>& files,
   const std::string& remoteprefix, const std::string& url)

+ 13 - 1
Source/CTest/cmCTestSubmitHandler.h

@@ -4,6 +4,7 @@
 
 #include "cmConfigure.h" // IWYU pragma: keep
 
+#include <cstddef>
 #include <iosfwd>
 #include <set>
 #include <string>
@@ -33,6 +34,11 @@ public:
 
   void Initialize() override;
 
+  //! Set all the submit arguments
+  int ProcessCommandLineArguments(
+    const std::string& currentArg, size_t& idx,
+    const std::vector<std::string>& allArgs) override;
+
   /** Specify a set of parts (by name) to submit.  */
   void SelectParts(std::set<cmCTest::Part> const& parts);
 
@@ -44,7 +50,12 @@ public:
 
   void SetHttpHeaders(std::vector<std::string> const& v)
   {
-    this->HttpHeaders = v;
+    if (this->CommandLineHttpHeaders.empty()) {
+      this->HttpHeaders = v;
+    } else {
+      this->HttpHeaders = this->CommandLineHttpHeaders;
+      this->HttpHeaders.insert(this->HttpHeaders.end(), v.begin(), v.end());
+    }
   }
 
 private:
@@ -75,5 +86,6 @@ private:
   bool HasWarnings;
   bool HasErrors;
   std::set<std::string> Files;
+  std::vector<std::string> CommandLineHttpHeaders;
   std::vector<std::string> HttpHeaders;
 };

+ 2 - 1
Source/ctest.cxx

@@ -25,7 +25,7 @@ const cmDocumentationEntry cmDocumentationName = {
 
 const cmDocumentationEntry cmDocumentationUsage = { {}, "  ctest [options]" };
 
-const cmDocumentationEntry cmDocumentationOptions[74] = {
+const cmDocumentationEntry cmDocumentationOptions[] = {
   { "--preset <preset>, --preset=<preset>",
     "Read arguments from a test preset." },
   { "--list-presets", "List available test presets." },
@@ -143,6 +143,7 @@ const cmDocumentationEntry cmDocumentationOptions[74] = {
   { "--tomorrow-tag", "Nightly or experimental starts with next day tag." },
   { "--overwrite", "Overwrite CTest configuration option." },
   { "--extra-submit <file>[;<file>]", "Submit extra files to the dashboard." },
+  { "--http-header <header>", "Append HTTP header when submitting" },
   { "--force-new-ctest-process",
     "Run child CTest instances as new processes" },
   { "--schedule-random", "Use a random order for scheduling tests" },