ctest_submit: Refactor file list to use a vector instead of a set

Remove duplicates in a way that preserves order.
This commit is contained in:
Betsy McPhail
2018-10-04 11:34:27 -04:00
committed by Brad King
parent 0abf88f6f6
commit f460bbd4c8
2 changed files with 35 additions and 28 deletions

View File

@@ -12,6 +12,7 @@
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include "cmAlgorithms.h"
#include "cmCTest.h" #include "cmCTest.h"
#include "cmCTestCurl.h" #include "cmCTestCurl.h"
#include "cmCTestScriptHandler.h" #include "cmCTestScriptHandler.h"
@@ -152,10 +153,9 @@ void cmCTestSubmitHandler::Initialize()
this->Files.clear(); this->Files.clear();
} }
bool cmCTestSubmitHandler::SubmitUsingFTP(const std::string& localprefix, bool cmCTestSubmitHandler::SubmitUsingFTP(
const std::set<std::string>& files, const std::string& localprefix, const std::vector<std::string>& files,
const std::string& remoteprefix, const std::string& remoteprefix, const std::string& url)
const std::string& url)
{ {
CURL* curl; CURL* curl;
CURLcode res; CURLcode res;
@@ -299,10 +299,9 @@ bool cmCTestSubmitHandler::SubmitUsingFTP(const std::string& localprefix,
} }
// Uploading files is simpler // Uploading files is simpler
bool cmCTestSubmitHandler::SubmitUsingHTTP(const std::string& localprefix, bool cmCTestSubmitHandler::SubmitUsingHTTP(
const std::set<std::string>& files, const std::string& localprefix, const std::vector<std::string>& files,
const std::string& remoteprefix, const std::string& remoteprefix, const std::string& url)
const std::string& url)
{ {
CURL* curl; CURL* curl;
CURLcode res; CURLcode res;
@@ -662,9 +661,9 @@ void cmCTestSubmitHandler::ParseResponse(
} }
} }
bool cmCTestSubmitHandler::TriggerUsingHTTP(const std::set<std::string>& files, bool cmCTestSubmitHandler::TriggerUsingHTTP(
const std::string& remoteprefix, const std::vector<std::string>& files, const std::string& remoteprefix,
const std::string& url) const std::string& url)
{ {
CURL* curl; CURL* curl;
char error_buffer[1024]; char error_buffer[1024];
@@ -792,11 +791,10 @@ bool cmCTestSubmitHandler::TriggerUsingHTTP(const std::set<std::string>& files,
return true; return true;
} }
bool cmCTestSubmitHandler::SubmitUsingSCP(const std::string& scp_command, bool cmCTestSubmitHandler::SubmitUsingSCP(
const std::string& localprefix, const std::string& scp_command, const std::string& localprefix,
const std::set<std::string>& files, const std::vector<std::string>& files, const std::string& remoteprefix,
const std::string& remoteprefix, const std::string& url)
const std::string& url)
{ {
if (scp_command.empty() || localprefix.empty() || files.empty() || if (scp_command.empty() || localprefix.empty() || files.empty() ||
remoteprefix.empty() || url.empty()) { remoteprefix.empty() || url.empty()) {
@@ -890,7 +888,7 @@ bool cmCTestSubmitHandler::SubmitUsingSCP(const std::string& scp_command,
} }
bool cmCTestSubmitHandler::SubmitUsingCP(const std::string& localprefix, bool cmCTestSubmitHandler::SubmitUsingCP(const std::string& localprefix,
const std::set<std::string>& files, const std::vector<std::string>& files,
const std::string& remoteprefix, const std::string& remoteprefix,
const std::string& destination) const std::string& destination)
{ {
@@ -925,7 +923,7 @@ bool cmCTestSubmitHandler::SubmitUsingCP(const std::string& localprefix,
#if defined(CTEST_USE_XMLRPC) #if defined(CTEST_USE_XMLRPC)
bool cmCTestSubmitHandler::SubmitUsingXMLRPC( bool cmCTestSubmitHandler::SubmitUsingXMLRPC(
const std::string& localprefix, const std::set<std::string>& files, const std::string& localprefix, const std::vector<std::string>& files,
const std::string& remoteprefix, const std::string& url) const std::string& remoteprefix, const std::string& url)
{ {
xmlrpc_env env; xmlrpc_env env;
@@ -1020,7 +1018,7 @@ bool cmCTestSubmitHandler::SubmitUsingXMLRPC(
} }
#else #else
bool cmCTestSubmitHandler::SubmitUsingXMLRPC( bool cmCTestSubmitHandler::SubmitUsingXMLRPC(
std::string const& /*unused*/, std::set<std::string> const& /*unused*/, std::string const& /*unused*/, std::vector<std::string> const& /*unused*/,
std::string const& /*unused*/, std::string const& /*unused*/) std::string const& /*unused*/, std::string const& /*unused*/)
{ {
return false; return false;
@@ -1351,13 +1349,13 @@ int cmCTestSubmitHandler::ProcessHandler()
cmGeneratedFileStream ofs; cmGeneratedFileStream ofs;
this->StartLogFile("Submit", ofs); this->StartLogFile("Submit", ofs);
cmCTest::SetOfStrings files; std::vector<std::string> files;
std::string prefix = this->GetSubmitResultsPrefix(); std::string prefix = this->GetSubmitResultsPrefix();
if (!this->Files.empty()) { if (!this->Files.empty()) {
// Submit the explicitly selected files: // Submit the explicitly selected files:
// //
files.insert(this->Files.begin(), this->Files.end()); files.insert(files.end(), this->Files.begin(), this->Files.end());
} }
// Add to the list of files to submit from any selected, existing parts: // Add to the list of files to submit from any selected, existing parts:
@@ -1404,7 +1402,16 @@ int cmCTestSubmitHandler::ProcessHandler()
// Submit files from this part. // Submit files from this part.
std::vector<std::string> const& pfiles = this->CTest->GetSubmitFiles(p); std::vector<std::string> const& pfiles = this->CTest->GetSubmitFiles(p);
files.insert(pfiles.begin(), pfiles.end()); files.insert(files.end(), pfiles.begin(), pfiles.end());
}
// Make sure files are unique, but preserve order.
{
// This endPos intermediate is needed to work around non-conformant C++11
// standard libraries that have erase(iterator,iterator) instead of
// erase(const_iterator,const_iterator).
size_t endPos = cmRemoveDuplicates(files) - files.cbegin();
files.erase(files.begin() + endPos, files.end());
} }
if (ofs) { if (ofs) {

View File

@@ -57,27 +57,27 @@ private:
* Submit file using various ways * Submit file using various ways
*/ */
bool SubmitUsingFTP(const std::string& localprefix, bool SubmitUsingFTP(const std::string& localprefix,
const std::set<std::string>& files, const std::vector<std::string>& files,
const std::string& remoteprefix, const std::string& url); const std::string& remoteprefix, const std::string& url);
bool SubmitUsingHTTP(const std::string& localprefix, bool SubmitUsingHTTP(const std::string& localprefix,
const std::set<std::string>& files, const std::vector<std::string>& files,
const std::string& remoteprefix, const std::string& remoteprefix,
const std::string& url); const std::string& url);
bool SubmitUsingSCP(const std::string& scp_command, bool SubmitUsingSCP(const std::string& scp_command,
const std::string& localprefix, const std::string& localprefix,
const std::set<std::string>& files, const std::vector<std::string>& files,
const std::string& remoteprefix, const std::string& url); const std::string& remoteprefix, const std::string& url);
bool SubmitUsingCP(const std::string& localprefix, bool SubmitUsingCP(const std::string& localprefix,
const std::set<std::string>& files, const std::vector<std::string>& files,
const std::string& remoteprefix, const std::string& url); const std::string& remoteprefix, const std::string& url);
bool TriggerUsingHTTP(const std::set<std::string>& files, bool TriggerUsingHTTP(const std::vector<std::string>& files,
const std::string& remoteprefix, const std::string& remoteprefix,
const std::string& url); const std::string& url);
bool SubmitUsingXMLRPC(const std::string& localprefix, bool SubmitUsingXMLRPC(const std::string& localprefix,
const std::set<std::string>& files, const std::vector<std::string>& files,
const std::string& remoteprefix, const std::string& remoteprefix,
const std::string& url); const std::string& url);