Submit global tree revision in Update.xml

We teach CTest to report in a <Revision> element the revision of the
source tree that was tested.  This makes sense for all modern VCS tools
because they version the whole tree.  We simply omit this element for
CVS because it only versions files.  See issue #7541.
This commit is contained in:
Brad King 2009-12-18 08:13:51 -05:00
parent 449b9aea23
commit a73833d037
4 changed files with 36 additions and 0 deletions

View File

@ -106,6 +106,19 @@ void cmCTestGlobalVC::WriteXMLDirectory(std::ostream& xml,
xml << "\t</Directory>\n";
}
//----------------------------------------------------------------------------
void cmCTestGlobalVC::WriteXMLGlobal(std::ostream& xml)
{
if(!this->NewRevision.empty())
{
xml << "\t<Revision>" << this->NewRevision << "</Revision>\n";
}
if(!this->OldRevision.empty() && this->OldRevision != this->NewRevision)
{
xml << "\t<PriorRevision>" << this->OldRevision << "</PriorRevision>\n";
}
}
//----------------------------------------------------------------------------
bool cmCTestGlobalVC::WriteXMLUpdates(std::ostream& xml)
{
@ -117,6 +130,8 @@ bool cmCTestGlobalVC::WriteXMLUpdates(std::ostream& xml)
this->LoadModifications();
this->WriteXMLGlobal(xml);
for(std::map<cmStdString, Directory>::const_iterator
di = this->Dirs.begin(); di != this->Dirs.end(); ++di)
{

View File

@ -60,6 +60,7 @@ protected:
virtual void LoadModifications() = 0;
virtual void LoadRevisions() = 0;
virtual void WriteXMLGlobal(std::ostream& xml);
void WriteXMLDirectory(std::ostream& xml, std::string const& path,
Directory const& dir);
};

View File

@ -5,6 +5,7 @@
# Test in a directory next to this script.
get_filename_component(TOP "${CMAKE_CURRENT_LIST_FILE}" PATH)
set(TOP "${TOP}/@CTestUpdateCVS_DIR@")
set(UPDATE_NOT_GLOBAL 1)
# Include code common to all update tests.
include("@CMAKE_CURRENT_SOURCE_DIR@/CTestUpdateCommon.cmake")

View File

@ -45,6 +45,25 @@ function(check_updates build)
endif()
endforeach(f)
if(NOT UPDATE_NOT_GLOBAL)
set(rev_elements "Revision|PriorRevision")
set(rev_regex "^\t<(${rev_elements})>[^<\n]+</(${rev_elements})>$")
file(STRINGS ${TOP}/${UPDATE_XML_FILE} UPDATE_XML_REVISIONS
REGEX "${rev_regex}"
LIMIT_INPUT 4096
)
foreach(r IN LISTS UPDATE_XML_REVISIONS)
string(REGEX REPLACE "${rev_regex}" "\\1" element "${r}")
set(element_${element} 1)
endforeach()
string(REPLACE "|" ";" rev_elements "${rev_elements}")
foreach(element ${rev_elements})
if(NOT element_${element})
list(APPEND MISSING "global <${element}> element")
endif()
endforeach()
endif()
# Report the result
if(MISSING)
# List the missing entries