Преглед изворни кода

Merge topic 'ctest_update_status_only'

653529ce CTest: Allow / to be in the build name, and be consistent with the build name
39b5df2f ctest_update: Add CTEST_UPDATE_VERSION_ONLY option to only note the version
Brad King пре 11 година
родитељ
комит
e7dda7b9b7

+ 1 - 0
Help/manual/cmake-variables.7.rst

@@ -362,6 +362,7 @@ Variables for CTest
    /variable/CTEST_TRIGGER_SITE
    /variable/CTEST_UPDATE_COMMAND
    /variable/CTEST_UPDATE_OPTIONS
+   /variable/CTEST_UPDATE_VERSION_ONLY
    /variable/CTEST_USE_LAUNCHERS
 
 Variables for CPack

+ 9 - 0
Help/manual/ctest.1.rst

@@ -668,6 +668,15 @@ Configuration settings to specify the version control tool include:
   * :module:`CTest` module variable: ``UPDATE_TYPE`` if set,
     else ``CTEST_UPDATE_TYPE``
 
+``UpdateVersionOnly``
+  Specify that you want the version control update command to only
+  discover the current version that is checked out, and not to update
+  to a different version.
+
+  * `CTest Script`_ variable: :variable:`CTEST_UPDATE_VERSION_ONLY`
+
+
+
 Additional configuration settings include:
 
 ``NightlyStartTime``

+ 5 - 0
Help/variable/CTEST_UPDATE_VERSION_ONLY.rst

@@ -0,0 +1,5 @@
+CTEST_UPDATE_VERSION_ONLY
+-------------------------
+
+Specify the CTest ``UpdateVersionOnly`` setting
+in a :manual:`ctest(1)` dashboard client script.

+ 3 - 0
Modules/DartConfiguration.tcl.in

@@ -37,6 +37,9 @@ ConfigureCommand: "@CMAKE_COMMAND@" "@PROJECT_SOURCE_DIR@"
 MakeCommand: @MAKECOMMAND@
 DefaultCTestConfigurationType: @DEFAULT_CTEST_CONFIGURATION_TYPE@
 
+# version control
+UpdateVersionOnly: @CTEST_UPDATE_VERSION_ONLY@
+
 # CVS options
 # Default is "-d -P -A"
 CVSCommand: @CVSCOMMAND@

+ 3 - 1
Source/CTest/cmCTestSubmitHandler.cxx

@@ -1479,8 +1479,10 @@ int cmCTestSubmitHandler::ProcessHandler()
 //----------------------------------------------------------------------------
 std::string cmCTestSubmitHandler::GetSubmitResultsPrefix()
 {
+  std::string buildname = cmCTest::SafeBuildIdField(
+    this->CTest->GetCTestConfiguration("BuildName"));
   std::string name = this->CTest->GetCTestConfiguration("Site") +
-    "___" + this->CTest->GetCTestConfiguration("BuildName") +
+    "___" + buildname +
     "___" + this->CTest->GetCurrentTag() + "-" +
     this->CTest->GetTestModelString() + "___XML___";
   return name;

+ 2 - 0
Source/CTest/cmCTestUpdateCommand.cxx

@@ -55,6 +55,8 @@ cmCTestGenericHandler* cmCTestUpdateCommand::InitializeHandler()
     "GITUpdateOptions", "CTEST_GIT_UPDATE_OPTIONS");
   this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile,
     "GITUpdateCustom", "CTEST_GIT_UPDATE_CUSTOM");
+  this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile,
+    "UpdateVersionOnly", "CTEST_UPDATE_VERSION_ONLY");
   this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile,
     "HGCommand", "CTEST_HG_COMMAND");
   this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile,

+ 3 - 2
Source/CTest/cmCTestUpdateHandler.cxx

@@ -258,12 +258,13 @@ int cmCTestUpdateHandler::ProcessHandler()
   double elapsed_time_start = cmSystemTools::GetTime();
 
   bool updated = vc->Update();
-
+  std::string buildname = cmCTest::SafeBuildIdField(
+    this->CTest->GetCTestConfiguration("BuildName"));
   os << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
     << "<Update mode=\"Client\" Generator=\"ctest-"
     << cmVersion::GetCMakeVersion() << "\">\n"
     << "\t<Site>" << this->CTest->GetCTestConfiguration("Site") << "</Site>\n"
-    << "\t<BuildName>" << this->CTest->GetCTestConfiguration("BuildName")
+    << "\t<BuildName>" << buildname
     << "</BuildName>\n"
     << "\t<BuildStamp>" << this->CTest->GetCurrentTag() << "-"
     << this->CTest->GetTestModelString() << "</BuildStamp>" << std::endl;

+ 3 - 2
Source/CTest/cmCTestUploadHandler.cxx

@@ -44,14 +44,15 @@ int cmCTestUploadHandler::ProcessHandler()
       "Cannot open Upload.xml file" << std::endl);
     return -1;
     }
-
+  std::string buildname = cmCTest::SafeBuildIdField(
+    this->CTest->GetCTestConfiguration("BuildName"));
   cmCTest::SetOfStrings::const_iterator it;
   ofs << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
      << "<?xml-stylesheet type=\"text/xsl\" "
     "href=\"Dart/Source/Server/XSL/Build.xsl "
     "<file:///Dart/Source/Server/XSL/Build.xsl> \"?>\n"
      << "<Site BuildName=\""
-     << this->CTest->GetCTestConfiguration("BuildName")
+     << buildname
      << "\" BuildStamp=\""
      << this->CTest->GetCurrentTag() << "-"
      << this->CTest->GetTestModelString() << "\" Name=\""

+ 11 - 4
Source/CTest/cmCTestVC.cxx

@@ -166,10 +166,17 @@ void cmCTestVC::CleanupImpl()
 //----------------------------------------------------------------------------
 bool cmCTestVC::Update()
 {
-  this->NoteOldRevision();
-  this->Log << "--- Begin Update ---\n";
-  bool result = this->UpdateImpl();
-  this->Log << "--- End Update ---\n";
+  bool result = true;
+  // if update version only is on then do not actually update,
+  // just note the current version and finish
+  if(!cmSystemTools::IsOn(
+       this->CTest->GetCTestConfiguration("UpdateVersionOnly").c_str()))
+    {
+    this->NoteOldRevision();
+    this->Log << "--- Begin Update ---\n";
+    result = this->UpdateImpl();
+    this->Log << "--- End Update ---\n";
+    }
   this->NoteNewRevision();
   return result;
 }

+ 9 - 5
Source/cmCTest.cxx

@@ -488,9 +488,11 @@ int cmCTest::Initialize(const char* binary_dir, cmCTestStartCommand* command)
     {
     cmCTestLog(this, DEBUG, "Here: " << __LINE__ << std::endl);
     cmCTestLog(this, OUTPUT,
-      "   Site: " << this->GetCTestConfiguration("Site") << std::endl
-      << "   Build name: " << this->GetCTestConfiguration("BuildName")
-      << std::endl);
+               "   Site: " << this->GetCTestConfiguration("Site") << std::endl
+               << "   Build name: "
+               << cmCTest::SafeBuildIdField(
+                 this->GetCTestConfiguration("BuildName"))
+               << std::endl);
     cmCTestLog(this, DEBUG, "Produce XML is on" << std::endl);
     if ( this->TestModel == cmCTest::NIGHTLY &&
          this->GetCTestConfiguration("NightlyStartTime").empty() )
@@ -1441,7 +1443,7 @@ std::string cmCTest::SafeBuildIdField(const std::string& value)
     // Disallow non-filename and non-space whitespace characters.
     // If they occur, replace them with ""
     //
-    const char *disallowed = "\\/:*?\"<>|\n\r\t\f\v";
+    const char *disallowed = "\\:*?\"<>|\n\r\t\f\v";
 
     if (safevalue.find_first_of(disallowed) != value.npos)
       {
@@ -1582,12 +1584,14 @@ void cmCTest::EndXML(std::ostream& ostr)
 int cmCTest::GenerateCTestNotesOutput(std::ostream& os,
   const cmCTest::VectorOfStrings& files)
 {
+  std::string buildname = cmCTest::SafeBuildIdField(
+    this->GetCTestConfiguration("BuildName"));
   cmCTest::VectorOfStrings::const_iterator it;
   os << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
      << "<?xml-stylesheet type=\"text/xsl\" "
     "href=\"Dart/Source/Server/XSL/Build.xsl "
     "<file:///Dart/Source/Server/XSL/Build.xsl> \"?>\n"
-     << "<Site BuildName=\"" << this->GetCTestConfiguration("BuildName")
+     << "<Site BuildName=\"" << buildname
      << "\" BuildStamp=\""
      << this->CurrentTag << "-" << this->GetTestModelString() << "\" Name=\""
      << this->GetCTestConfiguration("Site") << "\" Generator=\"ctest"

+ 41 - 7
Tests/CTestUpdateCommon.cmake

@@ -218,6 +218,36 @@ function(run_dashboard_command_line bin_dir)
     )
 endfunction()
 
+#-----------------------------------------------------------------------------
+# Function to find the Update.xml file and make sure
+# it only has the Revision in it and no updates
+function(check_no_update bin_dir)
+  set(PATTERN ${TOP}/${bin_dir}/Testing/*/Update.xml)
+  file(GLOB UPDATE_XML_FILE RELATIVE ${TOP} ${PATTERN})
+  string(REGEX REPLACE "//Update.xml$" "/Update.xml"
+    UPDATE_XML_FILE "${UPDATE_XML_FILE}")
+  message(" found ${UPDATE_XML_FILE}")
+  set(rev_regex "Revision|PriorRevision")
+  file(STRINGS ${TOP}/${UPDATE_XML_FILE} UPDATE_XML_REVISIONS
+    REGEX "^\t<(${rev_regex})>[^<\n]+</(${rev_regex})>$"
+    )
+  set(found_revisons FALSE)
+  foreach(r IN LISTS UPDATE_XML_REVISIONS)
+    if("${r}" MATCHES "PriorRevision")
+      message(FATAL_ERROR "Found PriorRevision in no update test")
+    endif()
+    if("${r}" MATCHES "<Revision>")
+      set(found_revisons TRUE)
+    endif()
+  endforeach()
+  if(found_revisons)
+    message(" found <Revision> in no update test")
+  else()
+    message(FATAL_ERROR " missing <Revision> in no update test")
+  endif()
+endfunction()
+
+
 #-----------------------------------------------------------------------------
 # Function to run the dashboard through a script
 function(run_dashboard_script bin_dir)
@@ -228,13 +258,17 @@ function(run_dashboard_script bin_dir)
 
   # Verify the updates reported by CTest.
   list(APPEND UPDATE_MAYBE Updated{subdir} Updated{CTestConfig.cmake})
-  check_updates(${bin_dir}
-    Updated{foo.txt}
-    Updated{bar.txt}
-    Updated{zot.txt}
-    Updated{subdir/foo.txt}
-    Updated{subdir/bar.txt}
-    )
+  if(NO_UPDATE)
+    check_no_update(${bin_dir})
+  else()
+    check_updates(${bin_dir}
+      Updated{foo.txt}
+      Updated{bar.txt}
+      Updated{zot.txt}
+      Updated{subdir/foo.txt}
+      Updated{subdir/bar.txt}
+      )
+  endif()
 endfunction()
 
 #-----------------------------------------------------------------------------

+ 17 - 0
Tests/CTestUpdateGIT.cmake.in

@@ -317,3 +317,20 @@ set(CTEST_GIT_UPDATE_CUSTOM \${CTEST_GIT_COMMAND} pull origin master)
 
 # Run the dashboard script with CTest.
 run_dashboard_script(dash-binary-custom)
+
+
+rewind_source(dash-source)
+
+#-----------------------------------------------------------------------------
+# Test no update with a dashboard script.
+message("Running CTest Dashboard Script (No update)...")
+
+create_dashboard_script(dash-binary-no-update
+  "# git command configuration
+set(CTEST_GIT_COMMAND \"${GIT}\")
+set(CTEST_UPDATE_VERSION_ONLY TRUE)
+")
+
+# Run the dashboard script with CTest.
+set(NO_UPDATE 1)
+run_dashboard_script(dash-binary-no-update)