cmCTestUploadHandler.cxx 2.2 KB

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