浏览代码

Cross-platform fixes for checksum/retry code

Zach Mullen 15 年之前
父节点
当前提交
082c87e528
共有 3 个文件被更改,包括 29 次插入18 次删除
  1. 2 2
      Modules/DartConfiguration.tcl.in
  2. 7 2
      Source/CTest/cmCTestSubmitCommand.h
  3. 20 14
      Source/CTest/cmCTestSubmitHandler.cxx

+ 2 - 2
Modules/DartConfiguration.tcl.in

@@ -85,5 +85,5 @@ CurlOptions: @CTEST_CURL_OPTIONS@
 
 
 # For CTest submissions that timeout, these options
 # For CTest submissions that timeout, these options
 # specify behavior for retrying the submission
 # specify behavior for retrying the submission
-CTestRetryTime: @CTEST_SUBMIT_RETRY_DELAY@
-CTestRetryCount: @CTEST_SUBMIT_RETRY_COUNT@
+CTestSubmitRetryDelay: @CTEST_SUBMIT_RETRY_DELAY@
+CTestSubmitRetryCount: @CTEST_SUBMIT_RETRY_COUNT@

+ 7 - 2
Source/CTest/cmCTestSubmitCommand.h

@@ -63,7 +63,8 @@ public:
   virtual const char* GetFullDocumentation()
   virtual const char* GetFullDocumentation()
     {
     {
     return
     return
-      "  ctest_submit([PARTS ...] [FILES ...] [RETURN_VALUE res])\n"
+      "  ctest_submit([PARTS ...] [FILES ...] [RETRY_COUNT count] "
+      "               [RETRY_DELAY delay][RETURN_VALUE res])\n"
       "By default all available parts are submitted if no PARTS or FILES "
       "By default all available parts are submitted if no PARTS or FILES "
       "are specified.  "
       "are specified.  "
       "The PARTS option lists a subset of parts to be submitted.  "
       "The PARTS option lists a subset of parts to be submitted.  "
@@ -79,7 +80,11 @@ public:
       "  ExtraFiles = Files listed by CTEST_EXTRA_SUBMIT_FILES\n"
       "  ExtraFiles = Files listed by CTEST_EXTRA_SUBMIT_FILES\n"
       "  Submit     = nothing\n"
       "  Submit     = nothing\n"
       "The FILES option explicitly lists specific files to be submitted.  "
       "The FILES option explicitly lists specific files to be submitted.  "
-      "Each individual file must exist at the time of the call.\n";
+      "Each individual file must exist at the time of the call.\n"
+      "The RETRY_DELAY option specifies how long in seconds to wait after "
+      "a timed-out submission before attempting to re-submit.\n"
+      "The RETRY_COUNT option specifies how many times to retry a timed-out "
+      "submission.\n";
     }
     }
 
 
   cmTypeMacro(cmCTestSubmitCommand, cmCTestHandlerCommand);
   cmTypeMacro(cmCTestSubmitCommand, cmCTestHandlerCommand);

+ 20 - 14
Source/CTest/cmCTestSubmitHandler.cxx

@@ -55,12 +55,19 @@ public:
   std::string Message;
   std::string Message;
 
 
 private:
 private:
-  std::string CurrentValue;
-  std::string CurrentTag;
+
+  std::vector<char> CurrentValue;
+
+  std::string GetCurrentValue()
+    {
+    std::string val;
+    val.assign(&this->CurrentValue[0], this->CurrentValue.size());
+    return val;
+    }
 
 
   virtual void StartElement(const char* name, const char** atts)
   virtual void StartElement(const char* name, const char** atts)
     {
     {
-    this->CurrentValue = "";
+    this->CurrentValue.clear();
     if(strcmp(name, "cdash") == 0)
     if(strcmp(name, "cdash") == 0)
       {
       {
       this->CDashVersion = this->FindAttribute(atts, "version");
       this->CDashVersion = this->FindAttribute(atts, "version");
@@ -76,12 +83,12 @@ private:
     {
     {
     if(strcmp(name, "status") == 0)
     if(strcmp(name, "status") == 0)
       {
       {
-      this->CurrentValue = cmSystemTools::UpperCase(this->CurrentValue);
-      if(this->CurrentValue == "OK" || this->CurrentValue == "SUCCESS")
+      std::string status = cmSystemTools::UpperCase(this->GetCurrentValue());
+      if(status == "OK" || status == "SUCCESS")
         {
         {
         this->Status = STATUS_OK;
         this->Status = STATUS_OK;
         }
         }
-      else if(this->CurrentValue == "WARNING")
+      else if(status == "WARNING")
         {
         {
         this->Status = STATUS_WARNING;
         this->Status = STATUS_WARNING;
         }
         }
@@ -92,15 +99,15 @@ private:
       }
       }
     else if(strcmp(name, "filename") == 0)
     else if(strcmp(name, "filename") == 0)
       {
       {
-      this->Filename = this->CurrentValue;
+      this->Filename = this->GetCurrentValue();
       }
       }
     else if(strcmp(name, "md5") == 0)
     else if(strcmp(name, "md5") == 0)
       {
       {
-      this->MD5 = this->CurrentValue;
+      this->MD5 = this->GetCurrentValue();
       }
       }
     else if(strcmp(name, "message") == 0)
     else if(strcmp(name, "message") == 0)
       {
       {
-      this->Message = this->CurrentValue;
+      this->Message = this->GetCurrentValue();
       }
       }
     }
     }
 };
 };
@@ -445,9 +452,8 @@ bool cmCTestSubmitHandler::SubmitUsingHTTP(const cmStdString& localprefix,
       char md5[33];
       char md5[33];
       cmSystemTools::ComputeFileMD5(local_file.c_str(), md5);
       cmSystemTools::ComputeFileMD5(local_file.c_str(), md5);
       md5[32] = 0;
       md5[32] = 0;
-      std::stringstream md5string;
-      md5string << "&MD5=" << md5;
-      upload_as += md5string.str();
+      upload_as += "&MD5=";
+      upload_as += md5;
 
 
       struct stat st;
       struct stat st;
       if ( ::stat(local_file.c_str(), &st) )
       if ( ::stat(local_file.c_str(), &st) )
@@ -501,9 +507,9 @@ bool cmCTestSubmitHandler::SubmitUsingHTTP(const cmStdString& localprefix,
           "" : this->GetOption("RetryCount");
           "" : this->GetOption("RetryCount");
 
 
         int time = retryTime == "" ? atoi(this->CTest->GetCTestConfiguration(
         int time = retryTime == "" ? atoi(this->CTest->GetCTestConfiguration(
-          "CTestRetryTime").c_str()) : atoi(retryTime.c_str());
+          "CTestSubmitRetryDelay").c_str()) : atoi(retryTime.c_str());
         int count = retryCount == "" ? atoi(this->CTest->GetCTestConfiguration(
         int count = retryCount == "" ? atoi(this->CTest->GetCTestConfiguration(
-          "CTestRetryCount").c_str()) : atoi(retryCount.c_str());
+          "CTestSubmitRetryCount").c_str()) : atoi(retryCount.c_str());
 
 
         for(int i = 0; i < count; i++)
         for(int i = 0; i < count; i++)
           {
           {