Cross-platform fixes for checksum/retry code

This commit is contained in:
Zach Mullen 2010-06-03 13:27:26 -04:00
parent e525649a4e
commit 082c87e528
3 changed files with 29 additions and 18 deletions

View File

@ -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@ CTestSubmitRetryDelay: @CTEST_SUBMIT_RETRY_DELAY@
CTestRetryCount: @CTEST_SUBMIT_RETRY_COUNT@ CTestSubmitRetryCount: @CTEST_SUBMIT_RETRY_COUNT@

View File

@ -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);

View File

@ -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); std::string status = cmSystemTools::UpperCase(this->GetCurrentValue());
if(this->CurrentValue == "OK" || this->CurrentValue == "SUCCESS") 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; upload_as += "&MD5=";
md5string << "&MD5=" << md5; upload_as += md5;
upload_as += md5string.str();
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++)
{ {