CPack: Try harder to remove temporary dir (#10793)
Windows filesystems sometimes lock files temporarily. Try removing the CPack temp install folder multiple times before giving up.
This commit is contained in:
parent
3ac3dea6f0
commit
fdb5f78705
|
@ -789,7 +789,7 @@ int cmCPackGenerator::DoPackage()
|
||||||
cmCPackLogger(cmCPackLog::LOG_VERBOSE,
|
cmCPackLogger(cmCPackLog::LOG_VERBOSE,
|
||||||
"Remove toplevel directory: "
|
"Remove toplevel directory: "
|
||||||
<< toplevelDirectory << std::endl);
|
<< toplevelDirectory << std::endl);
|
||||||
if ( !cmSystemTools::RemoveADirectory(toplevelDirectory) )
|
if ( !cmSystemTools::RepeatedRemoveDirectory(toplevelDirectory) )
|
||||||
{
|
{
|
||||||
cmCPackLogger(cmCPackLog::LOG_ERROR,
|
cmCPackLogger(cmCPackLog::LOG_ERROR,
|
||||||
"Problem removing toplevel directory: "
|
"Problem removing toplevel directory: "
|
||||||
|
@ -1084,7 +1084,7 @@ int cmCPackGenerator::CleanTemporaryDirectory()
|
||||||
cmCPackLogger(cmCPackLog::LOG_OUTPUT,
|
cmCPackLogger(cmCPackLog::LOG_OUTPUT,
|
||||||
"- Clean temporary : "
|
"- Clean temporary : "
|
||||||
<< tempInstallDirectory << std::endl);
|
<< tempInstallDirectory << std::endl);
|
||||||
if(!cmsys::SystemTools::RemoveADirectory(tempInstallDirectory))
|
if(!cmSystemTools::RepeatedRemoveDirectory(tempInstallDirectory))
|
||||||
{
|
{
|
||||||
cmCPackLogger(cmCPackLog::LOG_ERROR,
|
cmCPackLogger(cmCPackLog::LOG_ERROR,
|
||||||
"Problem removing temporary directory: " <<
|
"Problem removing temporary directory: " <<
|
||||||
|
|
|
@ -2938,3 +2938,18 @@ bool cmSystemTools::CheckRPath(std::string const& file,
|
||||||
return false;
|
return false;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
bool cmSystemTools::RepeatedRemoveDirectory(const char* dir)
|
||||||
|
{
|
||||||
|
// Windows sometimes locks files temporarily so try a few times.
|
||||||
|
for(int i = 0; i < 10; ++i)
|
||||||
|
{
|
||||||
|
if(cmSystemTools::RemoveADirectory(dir))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
cmSystemTools::Delay(100);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
|
@ -436,6 +436,9 @@ public:
|
||||||
static bool CheckRPath(std::string const& file,
|
static bool CheckRPath(std::string const& file,
|
||||||
std::string const& newRPath);
|
std::string const& newRPath);
|
||||||
|
|
||||||
|
/** Remove a directory; repeat a few times in case of locked files. */
|
||||||
|
static bool RepeatedRemoveDirectory(const char* dir);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static bool s_ForceUnixPaths;
|
static bool s_ForceUnixPaths;
|
||||||
static bool s_RunCommandHideConsole;
|
static bool s_RunCommandHideConsole;
|
||||||
|
|
Loading…
Reference in New Issue