CTestSVN: Fix segfault when CTEST_UPDATE_VERSION_ONLY is enabled

Before the change the list of externals was queried only
before the svn update.

With the change the list is queried both before and after.
This should also be more accurate since the list of externals might
change during the update.
This commit is contained in:
Nils Gladitz 2016-09-12 18:29:08 +02:00
parent a7305ef00a
commit b35311ca44
2 changed files with 10 additions and 9 deletions

View File

@ -108,13 +108,8 @@ std::string cmCTestSVN::LoadInfo(SVNInfo& svninfo)
void cmCTestSVN::NoteOldRevision() void cmCTestSVN::NoteOldRevision()
{ {
// Info for root repository this->LoadRepositories();
this->Repositories.push_back(SVNInfo(""));
this->RootInfo = &(this->Repositories.back());
// Info for the external repositories
this->LoadExternals();
// Get info for all the repositories
std::list<SVNInfo>::iterator itbeg = this->Repositories.begin(); std::list<SVNInfo>::iterator itbeg = this->Repositories.begin();
std::list<SVNInfo>::iterator itend = this->Repositories.end(); std::list<SVNInfo>::iterator itend = this->Repositories.end();
for (; itbeg != itend; itbeg++) { for (; itbeg != itend; itbeg++) {
@ -134,7 +129,8 @@ void cmCTestSVN::NoteOldRevision()
void cmCTestSVN::NoteNewRevision() void cmCTestSVN::NoteNewRevision()
{ {
// Get info for the external repositories this->LoadRepositories();
std::list<SVNInfo>::iterator itbeg = this->Repositories.begin(); std::list<SVNInfo>::iterator itbeg = this->Repositories.begin();
std::list<SVNInfo>::iterator itend = this->Repositories.end(); std::list<SVNInfo>::iterator itend = this->Repositories.end();
for (; itbeg != itend; itbeg++) { for (; itbeg != itend; itbeg++) {
@ -534,8 +530,13 @@ private:
} }
}; };
void cmCTestSVN::LoadExternals() void cmCTestSVN::LoadRepositories()
{ {
// Info for root repository
this->Repositories.clear();
this->Repositories.push_back(SVNInfo(""));
this->RootInfo = &(this->Repositories.back());
// Run "svn status" to get the list of external repositories // Run "svn status" to get the list of external repositories
std::vector<const char*> svn_status; std::vector<const char*> svn_status;
svn_status.push_back("status"); svn_status.push_back("status");

View File

@ -86,7 +86,7 @@ private:
SVNInfo* RootInfo; SVNInfo* RootInfo;
std::string LoadInfo(SVNInfo& svninfo); std::string LoadInfo(SVNInfo& svninfo);
void LoadExternals(); void LoadRepositories();
void LoadModifications() CM_OVERRIDE; void LoadModifications() CM_OVERRIDE;
void LoadRevisions() CM_OVERRIDE; void LoadRevisions() CM_OVERRIDE;
void LoadRevisions(SVNInfo& svninfo); void LoadRevisions(SVNInfo& svninfo);