forked from qt-creator/qt-creator
CppTools: Tests: Fix QTemporaryDir warning on Windows
...coming from TemporaryCopiedDir. The warning was: QTemporaryDir: Unable to remove <some path> most likely due to the presence of read-only files. It occurred for plugin tests (e.g ClangCodeModel) that used a Qt resource path as source for TemporaryCopiedDir. Copying a qrc file makes it read-only, see also QTBUG-17163. Therefore, explicitly add the write permission. Change-Id: Idc04acd4844c5bc20e9b3de1efc78da3b06ac97c Reviewed-by: Christian Stenger <christian.stenger@theqtcompany.com> Reviewed-by: Marco Bubke <marco.bubke@theqtcompany.com>
This commit is contained in:
@@ -294,23 +294,51 @@ QString TemporaryDir::createFile(const QByteArray &relativePath, const QByteArra
|
||||
return filePath;
|
||||
}
|
||||
|
||||
static bool copyRecursively(const QString &sourceDirPath,
|
||||
const QString &targetDirPath,
|
||||
QString *error)
|
||||
{
|
||||
auto copyHelper = [](QFileInfo sourceInfo, QFileInfo targetInfo, QString *error) -> bool {
|
||||
const QString sourcePath = sourceInfo.absoluteFilePath();
|
||||
const QString targetPath = targetInfo.absoluteFilePath();
|
||||
if (!QFile::copy(sourcePath, targetPath)) {
|
||||
if (error) {
|
||||
*error = QString::fromLatin1("copyRecursively() failed: \"%1\" to \"%2\".")
|
||||
.arg(sourcePath, targetPath);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// Copied files from Qt resources are read-only. Make them writable
|
||||
// so that their parent directory can be removed without warnings.
|
||||
QFile file(targetPath);
|
||||
return file.setPermissions(file.permissions() | QFile::WriteUser);
|
||||
};
|
||||
|
||||
return Utils::FileUtils::copyRecursively(Utils::FileName::fromString(sourceDirPath),
|
||||
Utils::FileName::fromString(targetDirPath),
|
||||
error,
|
||||
copyHelper);
|
||||
}
|
||||
|
||||
TemporaryCopiedDir::TemporaryCopiedDir(const QString &sourceDirPath)
|
||||
{
|
||||
if (!m_isValid)
|
||||
return;
|
||||
|
||||
if (!sourceDirPath.isEmpty()) {
|
||||
QFileInfo fi(sourceDirPath);
|
||||
if (!fi.exists() || !fi.isReadable()) {
|
||||
m_isValid = false;
|
||||
return;
|
||||
}
|
||||
if (sourceDirPath.isEmpty())
|
||||
return;
|
||||
|
||||
if (!Utils::FileUtils::copyRecursively(Utils::FileName::fromString(sourceDirPath),
|
||||
Utils::FileName::fromString(path()))) {
|
||||
m_isValid = false;
|
||||
return;
|
||||
}
|
||||
QFileInfo fi(sourceDirPath);
|
||||
if (!fi.exists() || !fi.isReadable()) {
|
||||
m_isValid = false;
|
||||
return;
|
||||
}
|
||||
|
||||
QString errorMessage;
|
||||
if (!copyRecursively(sourceDirPath, path(), &errorMessage)) {
|
||||
QWARN(qPrintable(errorMessage));
|
||||
m_isValid = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user