From cf8a05fbec2ec1a3674eeea45798a85e7f16e93f Mon Sep 17 00:00:00 2001 From: hjk Date: Wed, 16 Jun 2021 09:06:34 +0200 Subject: [PATCH] CMake: Use FilePath in FileApi{Reader,Parser} Helps docker. Change-Id: I2e1eba61be983340260211bbee6c1bab8a59f883 Reviewed-by: Cristian Adam --- .../cmakeprojectmanager/fileapiparser.cpp | 20 ++++++++----------- .../cmakeprojectmanager/fileapireader.cpp | 12 +++-------- 2 files changed, 11 insertions(+), 21 deletions(-) diff --git a/src/plugins/cmakeprojectmanager/fileapiparser.cpp b/src/plugins/cmakeprojectmanager/fileapiparser.cpp index d74f5b130cd..762df18f411 100644 --- a/src/plugins/cmakeprojectmanager/fileapiparser.cpp +++ b/src/plugins/cmakeprojectmanager/fileapiparser.cpp @@ -94,6 +94,7 @@ static std::pair nameValue(const QJsonObject &obj) static QJsonDocument readJsonFile(const FilePath &filePath) { qCDebug(cmakeFileApi) << "readJsonFile:" << filePath; + QTC_ASSERT(!filePath.isEmpty(), return {}); QTC_CHECK(!filePath.needsDevice()); @@ -824,21 +825,17 @@ FilePath FileApiDetails::ReplyFileContents::jsonFile(const QString &kind, const bool FileApiParser::setupCMakeFileApi(const FilePath &buildDirectory, Utils::FileSystemWatcher &watcher) { - const QDir buildDir = QDir(buildDirectory.toString()); - buildDir.mkpath( - QString::fromLatin1(CMAKE_RELATIVE_REPLY_PATH)); // So that we have a directory to watch! + // So that we have a directory to watch. + buildDirectory.pathAppended(CMAKE_RELATIVE_REPLY_PATH).ensureWritableDir(); - const QString relativeQueryPath = QString::fromLatin1(CMAKE_RELATIVE_QUERY_PATH); - buildDir.mkpath(relativeQueryPath); - - QDir queryDir = buildDir; - queryDir.cd(relativeQueryPath); + FilePath queryDir = buildDirectory.pathAppended(CMAKE_RELATIVE_QUERY_PATH); + queryDir.ensureWritableDir(); if (!queryDir.exists()) { reportFileApiSetupFailure(); return false; } - QTC_ASSERT(queryDir.exists(), ); + QTC_ASSERT(queryDir.exists(), return false); bool failedBefore = false; for (const FilePath &filePath : cmakeQueryFilePaths(buildDirectory)) { @@ -971,10 +968,9 @@ FilePath FileApiParser::scanForCMakeReplyFile(const FilePath &buildDirectory) FilePaths FileApiParser::cmakeQueryFilePaths(const FilePath &buildDirectory) { - QTC_CHECK(!buildDirectory.needsDevice()); - QDir queryDir(QDir::cleanPath(buildDirectory.pathAppended(CMAKE_RELATIVE_QUERY_PATH).path())); + FilePath queryDir = buildDirectory / CMAKE_RELATIVE_QUERY_PATH; return transform(CMAKE_QUERY_FILENAMES, [&queryDir](const QString &name) { - return FilePath::fromString(queryDir.absoluteFilePath(name)); + return queryDir.absoluteFilePath(FilePath::fromString(name)); }); } diff --git a/src/plugins/cmakeprojectmanager/fileapireader.cpp b/src/plugins/cmakeprojectmanager/fileapireader.cpp index 5a200bd318d..22b4e0ce1bf 100644 --- a/src/plugins/cmakeprojectmanager/fileapireader.cpp +++ b/src/plugins/cmakeprojectmanager/fileapireader.cpp @@ -36,7 +36,6 @@ #include #include -#include #include using namespace ProjectExplorer; @@ -332,11 +331,7 @@ void FileApiReader::makeBackupConfiguration(bool store) void FileApiReader::writeConfigurationIntoBuildDirectory(const QStringList &configurationArguments) { const FilePath buildDir = m_parameters.buildDirectory; - QTC_ASSERT(buildDir.exists(), buildDir.ensureWritableDir()); - if (!buildDir.exists()) - buildDir.ensureWritableDir(); - - const FilePath settingsFile = buildDir.pathAppended("qtcsettings.cmake"); + QTC_CHECK(buildDir.ensureWritableDir()); QByteArray contents; contents.append("# This file is managed by Qt Creator, do not edit!\n\n"); @@ -348,9 +343,8 @@ void FileApiReader::writeConfigurationIntoBuildDirectory(const QStringList &conf .join('\n') .toUtf8()); - QFile file(settingsFile.toString()); - QTC_ASSERT(file.open(QFile::WriteOnly | QFile::Truncate), return ); - file.write(contents); + const FilePath settingsFile = buildDir / "qtcsettings.cmake"; + QTC_CHECK(settingsFile.writeFileContents(contents)); } void FileApiReader::startCMakeState(const QStringList &configurationArguments)