cmCTestUploadHandler.cxx 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  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()
  12. {
  13. this->Initialize();
  14. }
  15. void cmCTestUploadHandler::Initialize()
  16. {
  17. this->Superclass::Initialize();
  18. this->Files.clear();
  19. }
  20. void cmCTestUploadHandler::SetFiles(std::set<std::string> const& files)
  21. {
  22. this->Files = files;
  23. }
  24. int cmCTestUploadHandler::ProcessHandler()
  25. {
  26. cmGeneratedFileStream ofs;
  27. if (!this->CTest->OpenOutputFile(this->CTest->GetCurrentTag(), "Upload.xml",
  28. ofs)) {
  29. cmCTestLog(this->CTest, ERROR_MESSAGE,
  30. "Cannot open Upload.xml file" << std::endl);
  31. return -1;
  32. }
  33. std::string buildname =
  34. cmCTest::SafeBuildIdField(this->CTest->GetCTestConfiguration("BuildName"));
  35. cmXMLWriter xml(ofs);
  36. xml.StartDocument();
  37. xml.ProcessingInstruction("xml-stylesheet",
  38. "type=\"text/xsl\" "
  39. "href=\"Dart/Source/Server/XSL/Build.xsl "
  40. "<file:///Dart/Source/Server/XSL/Build.xsl> \"");
  41. xml.StartElement("Site");
  42. xml.Attribute("BuildName", buildname);
  43. xml.Attribute("BuildStamp",
  44. this->CTest->GetCurrentTag() + "-" +
  45. this->CTest->GetTestModelString());
  46. xml.Attribute("Name", this->CTest->GetCTestConfiguration("Site"));
  47. xml.Attribute("Generator",
  48. std::string("ctest-") + cmVersion::GetCMakeVersion());
  49. this->CTest->AddSiteProperties(xml);
  50. xml.StartElement("Upload");
  51. xml.Element("Time", std::chrono::system_clock::now());
  52. for (std::string const& file : this->Files) {
  53. cmCTestOptionalLog(this->CTest, OUTPUT,
  54. "\tUpload file: " << file << std::endl, this->Quiet);
  55. xml.StartElement("File");
  56. xml.Attribute("filename", file);
  57. xml.StartElement("Content");
  58. xml.Attribute("encoding", "base64");
  59. xml.Content(this->CTest->Base64EncodeFile(file));
  60. xml.EndElement(); // Content
  61. xml.EndElement(); // File
  62. }
  63. xml.EndElement(); // Upload
  64. xml.EndElement(); // Site
  65. xml.EndDocument();
  66. return 0;
  67. }