From 36daca80f30aea5b3e335cbbce4c2dbe7c615247 Mon Sep 17 00:00:00 2001 From: hjk Date: Fri, 17 May 2019 13:44:09 +0200 Subject: [PATCH] Utils: Make FileName::canonicalPath a member Change-Id: I8d7450dec5c4c14ae3e007d1d66f1a9c3c98f807 Reviewed-by: Eike Ziller --- src/libs/utils/fileutils.cpp | 10 +++++----- src/libs/utils/fileutils.h | 3 ++- .../cmakeprojectmanager/cmakeprojectimporter.cpp | 2 +- src/plugins/cmakeprojectmanager/tealeafreader.cpp | 4 ++-- .../compilationdatabaseproject.cpp | 6 ++---- 5 files changed, 12 insertions(+), 13 deletions(-) diff --git a/src/libs/utils/fileutils.cpp b/src/libs/utils/fileutils.cpp index 9c7481b8fa6..ec407832fb1 100644 --- a/src/libs/utils/fileutils.cpp +++ b/src/libs/utils/fileutils.cpp @@ -234,17 +234,17 @@ FileName FileUtils::resolveSymlinks(const FileName &path) } /*! - Recursively resolves possibly present symlinks in \a filePath. + Recursively resolves possibly present symlinks in this file name. Unlike QFileInfo::canonicalFilePath(), this function will not return an empty string if path doesn't exist. Returns the canonical path. */ -FileName FileUtils::canonicalPath(const FileName &path) +FileName FileName::canonicalPath() const { - const QString result = path.toFileInfo().canonicalFilePath(); + const QString result = toFileInfo().canonicalFilePath(); if (result.isEmpty()) - return path; + return *this; return FileName::fromString(result); } @@ -356,7 +356,7 @@ FileName FileUtils::commonPath(const FileName &oldCommonPath, const FileName &fi FileName newCommonPath = oldCommonPath; while (!newCommonPath.isEmpty() && !fileName.isChildOf(newCommonPath)) newCommonPath = newCommonPath.parentDir(); - return canonicalPath(newCommonPath); + return newCommonPath.canonicalPath(); } // Copied from qfilesystemengine_win.cpp diff --git a/src/libs/utils/fileutils.h b/src/libs/utils/fileutils.h index 0991d4ae688..e765270b490 100644 --- a/src/libs/utils/fileutils.h +++ b/src/libs/utils/fileutils.h @@ -102,6 +102,8 @@ public: FileName pathAppended(const QString &str) const; FileName stringAppended(const QString &str) const; + FileName canonicalPath() const; + void clear() { m_data.clear(); } bool isEmpty() const { return m_data.isEmpty(); } @@ -129,7 +131,6 @@ public: const std::function ©Helper = nullptr); static bool isFileNewerThan(const FileName &filePath, const QDateTime &timeStamp); static FileName resolveSymlinks(const FileName &path); - static FileName canonicalPath(const FileName &path); static QString shortNativePath(const FileName &path); static QString fileSystemFriendlyName(const QString &name); static int indexOfQmakeUnfriendly(const QString &name, int startpos = 0); diff --git a/src/plugins/cmakeprojectmanager/cmakeprojectimporter.cpp b/src/plugins/cmakeprojectmanager/cmakeprojectimporter.cpp index f42d3085184..7593057b661 100644 --- a/src/plugins/cmakeprojectmanager/cmakeprojectimporter.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeprojectimporter.cpp @@ -248,7 +248,7 @@ QList CMakeProjectImporter::examineDirectory(const Utils::FileName &impo } const auto homeDir = Utils::FileName::fromUserInput(QString::fromUtf8(CMakeConfigItem::valueOf("CMAKE_HOME_DIRECTORY", config))); - const Utils::FileName canonicalProjectDirectory = Utils::FileUtils::canonicalPath(projectDirectory()); + const Utils::FileName canonicalProjectDirectory = projectDirectory().canonicalPath(); if (homeDir != canonicalProjectDirectory) { qCDebug(cmInputLog()) << "Wrong source directory:" << homeDir.toUserOutput() << "expected:" << canonicalProjectDirectory.toUserOutput(); diff --git a/src/plugins/cmakeprojectmanager/tealeafreader.cpp b/src/plugins/cmakeprojectmanager/tealeafreader.cpp index 3e3a51d3e2d..73d7ea00f34 100644 --- a/src/plugins/cmakeprojectmanager/tealeafreader.cpp +++ b/src/plugins/cmakeprojectmanager/tealeafreader.cpp @@ -250,8 +250,8 @@ CMakeConfig TeaLeafReader::takeParsedConfiguration() const FileName sourceOfBuildDir = FileName::fromUtf8(CMakeConfigItem::valueOf("CMAKE_HOME_DIRECTORY", result)); - const FileName canonicalSourceOfBuildDir = FileUtils::canonicalPath(sourceOfBuildDir); - const FileName canonicalSourceDirectory = FileUtils::canonicalPath(m_parameters.sourceDirectory); + const FileName canonicalSourceOfBuildDir = sourceOfBuildDir.canonicalPath(); + const FileName canonicalSourceDirectory = m_parameters.sourceDirectory.canonicalPath(); if (canonicalSourceOfBuildDir != canonicalSourceDirectory) { // Uses case-insensitive compare where appropriate emit errorOccured(tr("The build directory is not for %1 but for %2") .arg(canonicalSourceOfBuildDir.toUserOutput(), diff --git a/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseproject.cpp b/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseproject.cpp index d10ec35d791..7f3b77a942d 100644 --- a/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseproject.cpp +++ b/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseproject.cpp @@ -181,10 +181,8 @@ Utils::FileName jsonObjectFilename(const QJsonObject &object) const QString workingDir = QDir::fromNativeSeparators(object["directory"].toString()); Utils::FileName fileName = Utils::FileName::fromString( QDir::fromNativeSeparators(object["file"].toString())); - if (fileName.toFileInfo().isRelative()) { - fileName = Utils::FileUtils::canonicalPath( - Utils::FileName::fromString(workingDir + "/" + fileName.toString())); - } + if (fileName.toFileInfo().isRelative()) + fileName = Utils::FileName::fromString(workingDir + "/" + fileName.toString()).canonicalPath(); return fileName; }