cmCTestUploadHandler.cxx 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
  2. file Copyright.txt or https://cmake.org/licensing for details. */
  3. #include "cmCTestUploadHandler.h"
  4. #include <chrono>
  5. #include <ostream>
  6. #include <string>
  7. #include "cmCTest.h"
  8. #include "cmGeneratedFileStream.h"
  9. #include "cmVersion.h"
  10. #include "cmXMLWriter.h"
  11. cmCTestUploadHandler::cmCTestUploadHandler(cmCTest* ctest)
  12. : Superclass(ctest)
  13. {
  14. }
  15. void cmCTestUploadHandler::SetFiles(std::set<std::string> const& files)
  16. {
  17. this->Files = files;
  18. }
  19. int cmCTestUploadHandler::ProcessHandler()
  20. {
  21. cmGeneratedFileStream ofs;
  22. if (!this->CTest->OpenOutputFile(this->CTest->GetCurrentTag(), "Upload.xml",
  23. ofs)) {
  24. cmCTestLog(this->CTest, ERROR_MESSAGE,
  25. "Cannot open Upload.xml file" << std::endl);
  26. return -1;
  27. }
  28. std::string buildname =
  29. cmCTest::SafeBuildIdField(this->CTest->GetCTestConfiguration("BuildName"));
  30. cmXMLWriter xml(ofs);
  31. xml.StartDocument();
  32. xml.ProcessingInstruction("xml-stylesheet",
  33. "type=\"text/xsl\" "
  34. "href=\"Dart/Source/Server/XSL/Build.xsl "
  35. "<file:///Dart/Source/Server/XSL/Build.xsl> \"");
  36. xml.StartElement("Site");
  37. xml.Attribute("BuildName", buildname);
  38. xml.Attribute("BuildStamp",
  39. this->CTest->GetCurrentTag() + "-" +
  40. this->CTest->GetTestGroupString());
  41. xml.Attribute("Name", this->CTest->GetCTestConfiguration("Site"));
  42. xml.Attribute("Generator",
  43. std::string("ctest-") + cmVersion::GetCMakeVersion());
  44. this->CTest->AddSiteProperties(xml, this->CMake);
  45. xml.StartElement("Upload");
  46. xml.Element("Time", std::chrono::system_clock::now());
  47. for (std::string const& file : this->Files) {
  48. cmCTestOptionalLog(this->CTest, OUTPUT,
  49. "\tUpload file: " << file << std::endl, this->Quiet);
  50. xml.StartElement("File");
  51. xml.Attribute("filename", file);
  52. xml.StartElement("Content");
  53. xml.Attribute("encoding", "base64");
  54. xml.Content(this->CTest->Base64EncodeFile(file));
  55. xml.EndElement(); // Content
  56. xml.EndElement(); // File
  57. }
  58. xml.EndElement(); // Upload
  59. xml.EndElement(); // Site
  60. xml.EndDocument();
  61. return 0;
  62. }