Browse Source

ctest_submit: Generate Done.xml at submit time

This fixes a bug where calling `ctest_submit()` would result in a Done.xml
file with an empty <buildId> element.

CDash responds with a buildId when CTest submits a file. For this reason,
Done.xml needs to generated after CTest has submitted some other file to
CDash. This change also has the benefit of making Done.xml's timestamp as
late as possible, giving us a more accurate record of how long the entire
build took to complete.
Zack Galbreath 7 years ago
parent
commit
60ca88d726
1 changed files with 11 additions and 1 deletions
  1. 11 1
      Source/CTest/cmCTestSubmitHandler.cxx

+ 11 - 1
Source/CTest/cmCTestSubmitHandler.cxx

@@ -467,6 +467,17 @@ bool cmCTestSubmitHandler::SubmitUsingHTTP(
           cmSystemTools::ComputeFileHash(local_file, cmCryptoHash::AlgoMD5);
       }
 
+      // Generate Done.xml right before it is submitted.
+      // The reason for this is two-fold:
+      // 1) It must be generated after some other part has been submitted
+      //    so we have a buildId to refer to in its contents.
+      // 2) By generating Done.xml here its timestamp will be as late as
+      //    possible. This gives us a more accurate record of how long the
+      //    entire build took to complete.
+      if (file == "Done.xml") {
+        this->CTest->GenerateDoneFile();
+      }
+
       if (!cmSystemTools::FileExists(local_file)) {
         cmCTestLog(this->CTest, ERROR_MESSAGE,
                    "   Cannot find file: " << local_file << std::endl);
@@ -1420,7 +1431,6 @@ int cmCTestSubmitHandler::ProcessHandler()
 
   // Submit Done.xml last
   if (this->SubmitPart[cmCTest::PartDone]) {
-    this->CTest->GenerateDoneFile();
     files.push_back("Done.xml");
   }