forked from qt-creator/qt-creator
Utils: Wrap various file system iteration flags and filters
... into a single class. This makes passing them around as a whole easier, and opens a path to have "generic" filters in form of a lambda or such. Change-Id: Ibf644b2fedcf0f1a35258030710afff8f5873f88 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
@@ -88,9 +88,7 @@ static FilePath findQmakeInDir(const FilePath &dir)
|
|||||||
|
|
||||||
// Prefer qmake-qt5 to qmake-qt4 by sorting the filenames in reverse order.
|
// Prefer qmake-qt5 to qmake-qt4 by sorting the filenames in reverse order.
|
||||||
const FilePaths candidates = dir.dirEntries(
|
const FilePaths candidates = dir.dirEntries(
|
||||||
BuildableHelperLibrary::possibleQMakeCommands(),
|
{BuildableHelperLibrary::possibleQMakeCommands(), QDir::Files},
|
||||||
QDir::Files,
|
|
||||||
QDirIterator::NoIteratorFlags,
|
|
||||||
QDir::Name | QDir::Reversed);
|
QDir::Name | QDir::Reversed);
|
||||||
for (const FilePath &candidate : candidates) {
|
for (const FilePath &candidate : candidates) {
|
||||||
if (candidate == qmakePath)
|
if (candidate == qmakePath)
|
||||||
|
@@ -718,19 +718,16 @@ bool FilePath::createDir() const
|
|||||||
return dir.mkpath(dir.absolutePath());
|
return dir.mkpath(dir.absolutePath());
|
||||||
}
|
}
|
||||||
|
|
||||||
FilePaths FilePath::dirEntries(const QStringList &nameFilters,
|
FilePaths FilePath::dirEntries(const FileFilter &filter, QDir::SortFlags sort) const
|
||||||
QDir::Filters filters,
|
|
||||||
QDirIterator::IteratorFlags flags,
|
|
||||||
QDir::SortFlags sort) const
|
|
||||||
{
|
{
|
||||||
FilePaths result;
|
FilePaths result;
|
||||||
|
|
||||||
if (needsDevice()) {
|
if (needsDevice()) {
|
||||||
QTC_ASSERT(s_deviceHooks.iterateDirectory, return {});
|
QTC_ASSERT(s_deviceHooks.iterateDirectory, return {});
|
||||||
const auto callBack = [&result](const FilePath &path) { result.append(path); return true; };
|
const auto callBack = [&result](const FilePath &path) { result.append(path); return true; };
|
||||||
s_deviceHooks.iterateDirectory(*this, callBack, nameFilters, filters, flags);
|
s_deviceHooks.iterateDirectory(*this, callBack, filter);
|
||||||
} else {
|
} else {
|
||||||
QDirIterator dit(m_data, nameFilters, filters, flags);
|
QDirIterator dit(m_data, filter.nameFilters, filter.fileFilters, filter.iteratorFlags);
|
||||||
while (dit.hasNext())
|
while (dit.hasNext())
|
||||||
result.append(FilePath::fromString(dit.next()));
|
result.append(FilePath::fromString(dit.next()));
|
||||||
}
|
}
|
||||||
@@ -748,7 +745,7 @@ FilePaths FilePath::dirEntries(const QStringList &nameFilters,
|
|||||||
|
|
||||||
FilePaths FilePath::dirEntries(QDir::Filters filters) const
|
FilePaths FilePath::dirEntries(QDir::Filters filters) const
|
||||||
{
|
{
|
||||||
return dirEntries({}, filters);
|
return dirEntries(FileFilter({}, filters));
|
||||||
}
|
}
|
||||||
|
|
||||||
// This runs \a callBack on each directory entry matching all \a filters and
|
// This runs \a callBack on each directory entry matching all \a filters and
|
||||||
@@ -756,17 +753,15 @@ FilePaths FilePath::dirEntries(QDir::Filters filters) const
|
|||||||
// An empty \nameFilters list matches every name.
|
// An empty \nameFilters list matches every name.
|
||||||
|
|
||||||
void FilePath::iterateDirectory(const std::function<bool(const FilePath &item)> &callBack,
|
void FilePath::iterateDirectory(const std::function<bool(const FilePath &item)> &callBack,
|
||||||
const QStringList &nameFilters,
|
const FileFilter &filter) const
|
||||||
QDir::Filters filters,
|
|
||||||
QDirIterator::IteratorFlags flags) const
|
|
||||||
{
|
{
|
||||||
if (needsDevice()) {
|
if (needsDevice()) {
|
||||||
QTC_ASSERT(s_deviceHooks.iterateDirectory, return);
|
QTC_ASSERT(s_deviceHooks.iterateDirectory, return);
|
||||||
s_deviceHooks.iterateDirectory(*this, callBack, nameFilters, filters, flags);
|
s_deviceHooks.iterateDirectory(*this, callBack, filter);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
QDirIterator it(m_data, nameFilters, filters, flags);
|
QDirIterator it(m_data, filter.nameFilters, filter.fileFilters, filter.iteratorFlags);
|
||||||
while (it.hasNext()) {
|
while (it.hasNext()) {
|
||||||
if (!callBack(FilePath::fromString(it.next())))
|
if (!callBack(FilePath::fromString(it.next())))
|
||||||
return;
|
return;
|
||||||
@@ -1454,6 +1449,15 @@ QTextStream &operator<<(QTextStream &s, const FilePath &fn)
|
|||||||
return s << fn.toString();
|
return s << fn.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FileFilter::FileFilter(const QStringList &nameFilters,
|
||||||
|
const QDir::Filters fileFilters,
|
||||||
|
const QDirIterator::IteratorFlags flags)
|
||||||
|
: nameFilters(nameFilters),
|
||||||
|
fileFilters(fileFilters),
|
||||||
|
iteratorFlags(flags)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace Utils
|
} // namespace Utils
|
||||||
|
|
||||||
std::hash<Utils::FilePath>::result_type
|
std::hash<Utils::FilePath>::result_type
|
||||||
|
@@ -51,6 +51,18 @@ namespace Utils {
|
|||||||
class Environment;
|
class Environment;
|
||||||
class EnvironmentChange;
|
class EnvironmentChange;
|
||||||
|
|
||||||
|
class QTCREATOR_UTILS_EXPORT FileFilter
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
FileFilter(const QStringList &nameFilters,
|
||||||
|
const QDir::Filters fileFilters = QDir::NoFilter,
|
||||||
|
const QDirIterator::IteratorFlags flags = QDirIterator::NoIteratorFlags);
|
||||||
|
|
||||||
|
const QStringList nameFilters;
|
||||||
|
const QDir::Filters fileFilters = QDir::NoFilter;
|
||||||
|
const QDirIterator::IteratorFlags iteratorFlags = QDirIterator::NoIteratorFlags;
|
||||||
|
};
|
||||||
|
|
||||||
class QTCREATOR_UTILS_EXPORT FilePath
|
class QTCREATOR_UTILS_EXPORT FilePath
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -121,9 +133,7 @@ public:
|
|||||||
qint64 fileSize() const;
|
qint64 fileSize() const;
|
||||||
qint64 bytesAvailable() const;
|
qint64 bytesAvailable() const;
|
||||||
bool createDir() const;
|
bool createDir() const;
|
||||||
QList<FilePath> dirEntries(const QStringList &nameFilters,
|
QList<FilePath> dirEntries(const FileFilter &filter,
|
||||||
QDir::Filters filters = QDir::NoFilter,
|
|
||||||
QDirIterator::IteratorFlags flags = QDirIterator::NoIteratorFlags,
|
|
||||||
QDir::SortFlags sort = QDir::NoSort) const;
|
QDir::SortFlags sort = QDir::NoSort) const;
|
||||||
QList<FilePath> dirEntries(QDir::Filters filters) const;
|
QList<FilePath> dirEntries(QDir::Filters filters) const;
|
||||||
QByteArray fileContents(qint64 maxSize = -1, qint64 offset = 0) const;
|
QByteArray fileContents(qint64 maxSize = -1, qint64 offset = 0) const;
|
||||||
@@ -160,9 +170,7 @@ public:
|
|||||||
[[nodiscard]] FilePath onDevice(const FilePath &deviceTemplate) const;
|
[[nodiscard]] FilePath onDevice(const FilePath &deviceTemplate) const;
|
||||||
[[nodiscard]] FilePath withNewPath(const QString &newPath) const;
|
[[nodiscard]] FilePath withNewPath(const QString &newPath) const;
|
||||||
void iterateDirectory(const std::function<bool(const FilePath &item)> &callBack,
|
void iterateDirectory(const std::function<bool(const FilePath &item)> &callBack,
|
||||||
const QStringList &nameFilters,
|
const FileFilter &filter) const;
|
||||||
QDir::Filters filters = QDir::NoFilter,
|
|
||||||
QDirIterator::IteratorFlags flags = QDirIterator::NoIteratorFlags) const;
|
|
||||||
|
|
||||||
// makes sure that capitalization of directories is canonical
|
// makes sure that capitalization of directories is canonical
|
||||||
// on Windows and macOS. This is rarely needed.
|
// on Windows and macOS. This is rarely needed.
|
||||||
|
@@ -82,9 +82,7 @@ public:
|
|||||||
std::function<QString(const FilePath &)> mapToDevicePath;
|
std::function<QString(const FilePath &)> mapToDevicePath;
|
||||||
std::function<void(const FilePath &,
|
std::function<void(const FilePath &,
|
||||||
const std::function<bool(const FilePath &)> &, // Abort on 'false' return.
|
const std::function<bool(const FilePath &)> &, // Abort on 'false' return.
|
||||||
const QStringList &,
|
const FileFilter &)> iterateDirectory;
|
||||||
QDir::Filters,
|
|
||||||
QDirIterator::IteratorFlags)> iterateDirectory;
|
|
||||||
std::function<QByteArray(const FilePath &, qint64, qint64)> fileContents;
|
std::function<QByteArray(const FilePath &, qint64, qint64)> fileContents;
|
||||||
std::function<bool(const FilePath &, const QByteArray &)> writeFileContents;
|
std::function<bool(const FilePath &, const QByteArray &)> writeFileContents;
|
||||||
std::function<QDateTime(const FilePath &)> lastModified;
|
std::function<QDateTime(const FilePath &)> lastModified;
|
||||||
|
@@ -221,7 +221,7 @@ FilePaths BackUpStrategy::readFileCandidates(const FilePath &baseFileName) const
|
|||||||
const QStringList filter(baseFileName.fileName() + '*');
|
const QStringList filter(baseFileName.fileName() + '*');
|
||||||
const FilePath baseFileDir = baseFileName.parentDir();
|
const FilePath baseFileDir = baseFileName.parentDir();
|
||||||
|
|
||||||
return baseFileDir.dirEntries(filter, QDir::Files | QDir::Hidden | QDir::System);
|
return baseFileDir.dirEntries({filter, QDir::Files | QDir::Hidden | QDir::System});
|
||||||
}
|
}
|
||||||
|
|
||||||
int BackUpStrategy::compare(const SettingsAccessor::RestoreData &data1,
|
int BackUpStrategy::compare(const SettingsAccessor::RestoreData &data1,
|
||||||
|
@@ -382,8 +382,7 @@ QVector<int> AndroidConfig::availableNdkPlatforms(const QtVersion *qtVersion) co
|
|||||||
.toInt());
|
.toInt());
|
||||||
return true;
|
return true;
|
||||||
},
|
},
|
||||||
{"android-*"},
|
{{"android-*"}, QDir::Dirs});
|
||||||
QDir::Dirs);
|
|
||||||
|
|
||||||
Utils::sort(availableNdkPlatforms, std::greater<>());
|
Utils::sort(availableNdkPlatforms, std::greater<>());
|
||||||
return availableNdkPlatforms;
|
return availableNdkPlatforms;
|
||||||
|
@@ -423,7 +423,7 @@ QString AndroidManager::apkDevicePreferredAbi(const Target *target)
|
|||||||
QStringList apkAbis;
|
QStringList apkAbis;
|
||||||
const FilePaths libsPaths = libsPath.dirEntries(QDir::Dirs | QDir::NoDotAndDotDot);
|
const FilePaths libsPaths = libsPath.dirEntries(QDir::Dirs | QDir::NoDotAndDotDot);
|
||||||
for (const FilePath &abiDir : libsPaths) {
|
for (const FilePath &abiDir : libsPaths) {
|
||||||
if (!abiDir.dirEntries(QStringList("*.so"), QDir::Files | QDir::NoDotAndDotDot).isEmpty())
|
if (!abiDir.dirEntries({{"*.so"}, QDir::Files | QDir::NoDotAndDotDot}).isEmpty())
|
||||||
apkAbis << abiDir.fileName();
|
apkAbis << abiDir.fileName();
|
||||||
}
|
}
|
||||||
return preferredAbi(apkAbis, target);
|
return preferredAbi(apkAbis, target);
|
||||||
|
@@ -256,7 +256,7 @@ static QImage scaleWithoutStretching(const QImage& original, const QSize& target
|
|||||||
|
|
||||||
static bool similarFilesExist(const FilePath &path)
|
static bool similarFilesExist(const FilePath &path)
|
||||||
{
|
{
|
||||||
const FilePaths entries = path.parentDir().dirEntries({path.completeBaseName() + ".*"}, {});
|
const FilePaths entries = path.parentDir().dirEntries({{path.completeBaseName() + ".*"}});
|
||||||
return !entries.empty();
|
return !entries.empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -73,9 +73,7 @@ static void setSdkFilesExecPermission( const FilePath &sdkExtractPath)
|
|||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
},
|
},
|
||||||
{"*"},
|
{{"*"}, QDir::Files, QDirIterator::Subdirectories});
|
||||||
QDir::Files,
|
|
||||||
QDirIterator::Subdirectories);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void AndroidSdkDownloader::downloadAndExtractSdk(const FilePath &jdkPath, const FilePath &sdkExtractPath)
|
void AndroidSdkDownloader::downloadAndExtractSdk(const FilePath &jdkPath, const FilePath &sdkExtractPath)
|
||||||
|
@@ -322,7 +322,7 @@ void JLSClient::updateProjectFiles()
|
|||||||
const FilePath androidJar = sdkLocation / QString("platforms/%2/android.jar")
|
const FilePath androidJar = sdkLocation / QString("platforms/%2/android.jar")
|
||||||
.arg(targetSDK);
|
.arg(targetSDK);
|
||||||
FilePaths libs = {androidJar};
|
FilePaths libs = {androidJar};
|
||||||
libs << packageSourceDir.pathAppended("libs").dirEntries({"*.jar"}, QDir::Files);
|
libs << packageSourceDir.pathAppended("libs").dirEntries({{"*.jar"}, QDir::Files});
|
||||||
generateProjectFile(projectDir, qtSrc, project()->displayName());
|
generateProjectFile(projectDir, qtSrc, project()->displayName());
|
||||||
generateClassPathFile(projectDir, sourceDir, libs);
|
generateClassPathFile(projectDir, sourceDir, libs);
|
||||||
}
|
}
|
||||||
|
@@ -79,7 +79,7 @@ static QStringList scanDirectory(const FilePath &path, const QString &prefix)
|
|||||||
QStringList result;
|
QStringList result;
|
||||||
qCDebug(cmInputLog) << "Scanning for directories matching" << prefix << "in" << path;
|
qCDebug(cmInputLog) << "Scanning for directories matching" << prefix << "in" << path;
|
||||||
|
|
||||||
foreach (const FilePath &entry, path.dirEntries({prefix + "*"}, QDir::Dirs | QDir::NoDotAndDotDot)) {
|
foreach (const FilePath &entry, path.dirEntries({{prefix + "*"}, QDir::Dirs | QDir::NoDotAndDotDot})) {
|
||||||
QTC_ASSERT(entry.isDir(), continue);
|
QTC_ASSERT(entry.isDir(), continue);
|
||||||
result.append(entry.toString());
|
result.append(entry.toString());
|
||||||
}
|
}
|
||||||
|
@@ -948,10 +948,7 @@ FilePath FileApiParser::scanForCMakeReplyFile(const FilePath &buildDirectory)
|
|||||||
if (!replyDir.exists())
|
if (!replyDir.exists())
|
||||||
return {};
|
return {};
|
||||||
|
|
||||||
const FilePaths entries = replyDir.dirEntries({"index-*.json"},
|
const FilePaths entries = replyDir.dirEntries({{"index-*.json"}, QDir::Files}, QDir::Name);
|
||||||
QDir::Files,
|
|
||||||
QDirIterator::NoIteratorFlags,
|
|
||||||
QDir::Name);
|
|
||||||
return entries.isEmpty() ? FilePath() : entries.first();
|
return entries.isEmpty() ? FilePath() : entries.first();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -780,7 +780,7 @@ void DebuggerItemManagerPrivate::autoDetectGdbOrLldbDebuggers(const FilePaths &s
|
|||||||
|
|
||||||
const auto addSuspect = [&suspects](const FilePath &entry) { suspects.append(entry); return true; };
|
const auto addSuspect = [&suspects](const FilePath &entry) { suspects.append(entry); return true; };
|
||||||
for (const FilePath &path : paths)
|
for (const FilePath &path : paths)
|
||||||
path.iterateDirectory(addSuspect, filters, QDir::Files | QDir::Executable);
|
path.iterateDirectory(addSuspect, {filters, QDir::Files | QDir::Executable});
|
||||||
|
|
||||||
QStringList logMessages{tr("Searching debuggers...")};
|
QStringList logMessages{tr("Searching debuggers...")};
|
||||||
for (const FilePath &command : qAsConst(suspects)) {
|
for (const FilePath &command : qAsConst(suspects)) {
|
||||||
|
@@ -1615,9 +1615,7 @@ QString GdbEngine::cleanupFullName(const QString &fileName)
|
|||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
},
|
},
|
||||||
{"*"},
|
{{"*"}, QDir::NoFilter, QDirIterator::Subdirectories});
|
||||||
QDir::NoFilter,
|
|
||||||
QDirIterator::Subdirectories);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1455,17 +1455,20 @@ bool DockerDevice::setPermissions(const FilePath &filePath, QFileDevice::Permiss
|
|||||||
|
|
||||||
void DockerDevice::iterateWithFind(const FilePath &filePath,
|
void DockerDevice::iterateWithFind(const FilePath &filePath,
|
||||||
const std::function<bool(const Utils::FilePath &)> &callBack,
|
const std::function<bool(const Utils::FilePath &)> &callBack,
|
||||||
const QStringList &nameFilters,
|
const FileFilter &filter) const
|
||||||
QDir::Filters filters) const
|
|
||||||
{
|
{
|
||||||
QTC_ASSERT(callBack, return);
|
QTC_ASSERT(callBack, return);
|
||||||
QTC_CHECK(filePath.isAbsolutePath());
|
QTC_CHECK(filePath.isAbsolutePath());
|
||||||
QStringList arguments{filePath.path(), "-maxdepth", "1"};
|
QStringList arguments{filePath.path()};
|
||||||
|
|
||||||
|
const QDir::Filters filters = filter.fileFilters;
|
||||||
if (filters & QDir::NoSymLinks)
|
if (filters & QDir::NoSymLinks)
|
||||||
arguments.prepend("-H");
|
arguments.prepend("-H");
|
||||||
else
|
else
|
||||||
arguments.prepend("-L");
|
arguments.prepend("-L");
|
||||||
|
|
||||||
|
if (!filter.iteratorFlags.testFlag(QDirIterator::Subdirectories))
|
||||||
|
arguments.append({"-maxdepth", "1"});
|
||||||
|
|
||||||
QStringList filterOptions;
|
QStringList filterOptions;
|
||||||
if (filters & QDir::Dirs)
|
if (filters & QDir::Dirs)
|
||||||
@@ -1493,12 +1496,12 @@ void DockerDevice::iterateWithFind(const FilePath &filePath,
|
|||||||
const QString nameOption = (filters & QDir::CaseSensitive) ? QString{"-name"}
|
const QString nameOption = (filters & QDir::CaseSensitive) ? QString{"-name"}
|
||||||
: QString{"-iname"};
|
: QString{"-iname"};
|
||||||
QStringList criticalWildcards;
|
QStringList criticalWildcards;
|
||||||
if (!nameFilters.isEmpty()) {
|
if (!filter.nameFilters.isEmpty()) {
|
||||||
const QRegularExpression oneChar("\\[.*?\\]");
|
const QRegularExpression oneChar("\\[.*?\\]");
|
||||||
for (int i = 0, len = nameFilters.size(); i < len; ++i) {
|
for (int i = 0, len = filter.nameFilters.size(); i < len; ++i) {
|
||||||
if (i > 0)
|
if (i > 0)
|
||||||
filterOptions << "-o";
|
filterOptions << "-o";
|
||||||
QString current = nameFilters.at(i);
|
QString current = filter.nameFilters.at(i);
|
||||||
if (current.indexOf(oneChar) != -1)
|
if (current.indexOf(oneChar) != -1)
|
||||||
criticalWildcards.append(current);
|
criticalWildcards.append(current);
|
||||||
current.replace(oneChar, "?"); // BAD! but still better than nothing
|
current.replace(oneChar, "?"); // BAD! but still better than nothing
|
||||||
@@ -1537,15 +1540,17 @@ void DockerDevice::iterateWithFind(const FilePath &filePath,
|
|||||||
static void filterEntriesHelper(const FilePath &base,
|
static void filterEntriesHelper(const FilePath &base,
|
||||||
const std::function<bool(const FilePath &)> &callBack,
|
const std::function<bool(const FilePath &)> &callBack,
|
||||||
const QStringList &entries,
|
const QStringList &entries,
|
||||||
const QStringList &nameFilters,
|
const FileFilter &filter)
|
||||||
QDir::Filters filters)
|
|
||||||
{
|
{
|
||||||
const QList<QRegularExpression> nameRegexps = transform(nameFilters, [](const QString &filter) {
|
QTC_CHECK(filter.iteratorFlags != QDirIterator::NoIteratorFlags); // FIXME: Not supported yet below.
|
||||||
QRegularExpression re;
|
|
||||||
re.setPattern(QRegularExpression::wildcardToRegularExpression(filter));
|
const QList<QRegularExpression> nameRegexps =
|
||||||
QTC_CHECK(re.isValid());
|
transform(filter.nameFilters, [](const QString &filter) {
|
||||||
return re;
|
QRegularExpression re;
|
||||||
});
|
re.setPattern(QRegularExpression::wildcardToRegularExpression(filter));
|
||||||
|
QTC_CHECK(re.isValid());
|
||||||
|
return re;
|
||||||
|
});
|
||||||
|
|
||||||
const auto nameMatches = [&nameRegexps](const QString &fileName) {
|
const auto nameMatches = [&nameRegexps](const QString &fileName) {
|
||||||
for (const QRegularExpression &re : nameRegexps) {
|
for (const QRegularExpression &re : nameRegexps) {
|
||||||
@@ -1557,7 +1562,7 @@ static void filterEntriesHelper(const FilePath &base,
|
|||||||
};
|
};
|
||||||
|
|
||||||
// FIXME: Handle filters. For now bark on unsupported options.
|
// FIXME: Handle filters. For now bark on unsupported options.
|
||||||
QTC_CHECK(filters == QDir::NoFilter);
|
QTC_CHECK(filter.fileFilters == QDir::NoFilter);
|
||||||
|
|
||||||
for (const QString &entry : entries) {
|
for (const QString &entry : entries) {
|
||||||
if (!nameMatches(entry))
|
if (!nameMatches(entry))
|
||||||
@@ -1569,12 +1574,8 @@ static void filterEntriesHelper(const FilePath &base,
|
|||||||
|
|
||||||
void DockerDevice::iterateDirectory(const FilePath &filePath,
|
void DockerDevice::iterateDirectory(const FilePath &filePath,
|
||||||
const std::function<bool(const FilePath &)> &callBack,
|
const std::function<bool(const FilePath &)> &callBack,
|
||||||
const QStringList &nameFilters,
|
const FileFilter &filter) const
|
||||||
QDir::Filters filters,
|
|
||||||
QDirIterator::IteratorFlags flags) const
|
|
||||||
{
|
{
|
||||||
Q_UNUSED(flags) // FIXME: Use it.
|
|
||||||
|
|
||||||
QTC_ASSERT(handlesFile(filePath), return);
|
QTC_ASSERT(handlesFile(filePath), return);
|
||||||
updateContainerAccess();
|
updateContainerAccess();
|
||||||
if (hasLocalFileAccess()) {
|
if (hasLocalFileAccess()) {
|
||||||
@@ -1582,12 +1583,12 @@ void DockerDevice::iterateDirectory(const FilePath &filePath,
|
|||||||
local.iterateDirectory([&callBack, this](const FilePath &entry) {
|
local.iterateDirectory([&callBack, this](const FilePath &entry) {
|
||||||
return callBack(mapFromLocalAccess(entry));
|
return callBack(mapFromLocalAccess(entry));
|
||||||
},
|
},
|
||||||
nameFilters, filters);
|
filter);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (d->m_useFind) {
|
if (d->m_useFind) {
|
||||||
iterateWithFind(filePath, callBack, nameFilters, filters);
|
iterateWithFind(filePath, callBack, filter);
|
||||||
// d->m_useFind will be set to false if 'find' is not found. In this
|
// d->m_useFind will be set to false if 'find' is not found. In this
|
||||||
// case fall back to 'ls' below.
|
// case fall back to 'ls' below.
|
||||||
if (d->m_useFind)
|
if (d->m_useFind)
|
||||||
@@ -1597,7 +1598,7 @@ void DockerDevice::iterateDirectory(const FilePath &filePath,
|
|||||||
// if we do not have find - use ls as fallback
|
// if we do not have find - use ls as fallback
|
||||||
const QString output = d->outputForRunInShell({"ls", {"-1", "-b", "--", filePath.path()}});
|
const QString output = d->outputForRunInShell({"ls", {"-1", "-b", "--", filePath.path()}});
|
||||||
const QStringList entries = output.split('\n', Qt::SkipEmptyParts);
|
const QStringList entries = output.split('\n', Qt::SkipEmptyParts);
|
||||||
filterEntriesHelper(filePath, callBack, entries, nameFilters, filters);
|
filterEntriesHelper(filePath, callBack, entries, filter);
|
||||||
}
|
}
|
||||||
|
|
||||||
QByteArray DockerDevice::fileContents(const FilePath &filePath, qint64 limit, qint64 offset) const
|
QByteArray DockerDevice::fileContents(const FilePath &filePath, qint64 limit, qint64 offset) const
|
||||||
|
@@ -96,9 +96,7 @@ public:
|
|||||||
Utils::FilePath symLinkTarget(const Utils::FilePath &filePath) const override;
|
Utils::FilePath symLinkTarget(const Utils::FilePath &filePath) const override;
|
||||||
void iterateDirectory(const Utils::FilePath &filePath,
|
void iterateDirectory(const Utils::FilePath &filePath,
|
||||||
const std::function<bool(const Utils::FilePath &)> &callBack,
|
const std::function<bool(const Utils::FilePath &)> &callBack,
|
||||||
const QStringList &nameFilters,
|
const Utils::FileFilter &filter) const override;
|
||||||
QDir::Filters filters,
|
|
||||||
QDirIterator::IteratorFlags flags = QDirIterator::NoIteratorFlags) const override;
|
|
||||||
QByteArray fileContents(const Utils::FilePath &filePath, qint64 limit, qint64 offset) const override;
|
QByteArray fileContents(const Utils::FilePath &filePath, qint64 limit, qint64 offset) const override;
|
||||||
bool writeFileContents(const Utils::FilePath &filePath, const QByteArray &data) const override;
|
bool writeFileContents(const Utils::FilePath &filePath, const QByteArray &data) const override;
|
||||||
QDateTime lastModified(const Utils::FilePath &filePath) const override;
|
QDateTime lastModified(const Utils::FilePath &filePath) const override;
|
||||||
@@ -127,8 +125,7 @@ protected:
|
|||||||
private:
|
private:
|
||||||
void iterateWithFind(const Utils::FilePath &filePath,
|
void iterateWithFind(const Utils::FilePath &filePath,
|
||||||
const std::function<bool(const Utils::FilePath &)> &callBack,
|
const std::function<bool(const Utils::FilePath &)> &callBack,
|
||||||
const QStringList &nameFilters,
|
const Utils::FileFilter &filter) const;
|
||||||
QDir::Filters filters) const;
|
|
||||||
|
|
||||||
void aboutToBeRemoved() const final;
|
void aboutToBeRemoved() const final;
|
||||||
|
|
||||||
|
@@ -70,7 +70,7 @@ static FilePath detectApp(const QString &defaultExe)
|
|||||||
if (!gitBinDir.endsWith("/usr/bin"))
|
if (!gitBinDir.endsWith("/usr/bin"))
|
||||||
return {};
|
return {};
|
||||||
path = gitBinDir.parentDir().parentDir();
|
path = gitBinDir.parentDir().parentDir();
|
||||||
const FilePaths entries = path.dirEntries({"mingw*"}, {});
|
const FilePaths entries = path.dirEntries({{"mingw*"}});
|
||||||
if (entries.isEmpty())
|
if (entries.isEmpty())
|
||||||
return {};
|
return {};
|
||||||
path = entries.first() / "bin" / defaultApp;
|
path = entries.first() / "bin" / defaultApp;
|
||||||
|
@@ -217,8 +217,7 @@ static McuPackage *createRGLPackage()
|
|||||||
if (rglPath.exists()) {
|
if (rglPath.exists()) {
|
||||||
defaultPath = rglPath;
|
defaultPath = rglPath;
|
||||||
const FilePaths subDirs =
|
const FilePaths subDirs =
|
||||||
defaultPath.dirEntries({QLatin1String("rgl_ghs_D1Mx_*")},
|
defaultPath.dirEntries({{"rgl_ghs_D1Mx_*"}, QDir::Dirs | QDir::NoDotAndDotDot});
|
||||||
QDir::Dirs | QDir::NoDotAndDotDot);
|
|
||||||
if (subDirs.count() == 1)
|
if (subDirs.count() == 1)
|
||||||
defaultPath = subDirs.first();
|
defaultPath = subDirs.first();
|
||||||
}
|
}
|
||||||
@@ -272,8 +271,7 @@ static McuPackage *createMcuXpressoIdePackage()
|
|||||||
defaultPath = programPath;
|
defaultPath = programPath;
|
||||||
// If default dir has exactly one sub dir that could be the IDE path, pre-select that.
|
// If default dir has exactly one sub dir that could be the IDE path, pre-select that.
|
||||||
const FilePaths subDirs =
|
const FilePaths subDirs =
|
||||||
defaultPath.dirEntries({QLatin1String("MCUXpressoIDE*")},
|
defaultPath.dirEntries({{"MCUXpressoIDE*"}, QDir::Dirs | QDir::NoDotAndDotDot});
|
||||||
QDir::Dirs | QDir::NoDotAndDotDot);
|
|
||||||
if (subDirs.count() == 1)
|
if (subDirs.count() == 1)
|
||||||
defaultPath = subDirs.first();
|
defaultPath = subDirs.first();
|
||||||
}
|
}
|
||||||
@@ -304,8 +302,8 @@ static McuPackage *createCypressProgrammerPackage()
|
|||||||
const FilePath candidate = findInProgramFiles("Cypress");
|
const FilePath candidate = findInProgramFiles("Cypress");
|
||||||
if (candidate.exists()) {
|
if (candidate.exists()) {
|
||||||
// "Cypress Auto Flash Utility 1.0"
|
// "Cypress Auto Flash Utility 1.0"
|
||||||
const auto subDirs = candidate.dirEntries({"Cypress Auto Flash Utility*"},
|
const auto subDirs = candidate.dirEntries({{"Cypress Auto Flash Utility*"}, QDir::Dirs},
|
||||||
QDir::Dirs, QDirIterator::NoIteratorFlags, QDir::Unsorted);
|
QDir::Unsorted);
|
||||||
if (!subDirs.empty())
|
if (!subDirs.empty())
|
||||||
defaultPath = subDirs.first();
|
defaultPath = subDirs.first();
|
||||||
}
|
}
|
||||||
@@ -331,8 +329,8 @@ static McuPackage *createRenesasProgrammerPackage()
|
|||||||
const FilePath candidate = findInProgramFiles("Renesas Electronics/Programming Tools");
|
const FilePath candidate = findInProgramFiles("Renesas Electronics/Programming Tools");
|
||||||
if (candidate.exists()) {
|
if (candidate.exists()) {
|
||||||
// "Renesas Flash Programmer V3.09"
|
// "Renesas Flash Programmer V3.09"
|
||||||
const auto subDirs = candidate.dirEntries({"Renesas Flash Programmer*"},
|
const auto subDirs = candidate.dirEntries({{"Renesas Flash Programmer*"}, QDir::Dirs},
|
||||||
QDir::Dirs, QDirIterator::NoIteratorFlags, QDir::Unsorted);
|
QDir::Unsorted);
|
||||||
if (!subDirs.empty())
|
if (!subDirs.empty())
|
||||||
defaultPath = subDirs.first();
|
defaultPath = subDirs.first();
|
||||||
}
|
}
|
||||||
|
@@ -177,13 +177,11 @@ bool DesktopDevice::handlesFile(const FilePath &filePath) const
|
|||||||
}
|
}
|
||||||
|
|
||||||
void DesktopDevice::iterateDirectory(const FilePath &filePath,
|
void DesktopDevice::iterateDirectory(const FilePath &filePath,
|
||||||
const std::function<bool(const Utils::FilePath &)> &callBack,
|
const std::function<bool(const FilePath &)> &callBack,
|
||||||
const QStringList &nameFilters,
|
const FileFilter &filter) const
|
||||||
QDir::Filters filters,
|
|
||||||
QDirIterator::IteratorFlags flags) const
|
|
||||||
{
|
{
|
||||||
QTC_CHECK(!filePath.needsDevice());
|
QTC_CHECK(!filePath.needsDevice());
|
||||||
filePath.iterateDirectory(callBack, nameFilters, filters, flags);
|
filePath.iterateDirectory(callBack, filter);
|
||||||
}
|
}
|
||||||
|
|
||||||
qint64 DesktopDevice::fileSize(const FilePath &filePath) const
|
qint64 DesktopDevice::fileSize(const FilePath &filePath) const
|
||||||
|
@@ -75,9 +75,7 @@ public:
|
|||||||
Utils::FilePath symLinkTarget(const Utils::FilePath &filePath) const override;
|
Utils::FilePath symLinkTarget(const Utils::FilePath &filePath) const override;
|
||||||
void iterateDirectory(const Utils::FilePath &filePath,
|
void iterateDirectory(const Utils::FilePath &filePath,
|
||||||
const std::function<bool(const Utils::FilePath &)> &callBack,
|
const std::function<bool(const Utils::FilePath &)> &callBack,
|
||||||
const QStringList &nameFilters,
|
const Utils::FileFilter &filter) const override;
|
||||||
QDir::Filters filters,
|
|
||||||
QDirIterator::IteratorFlags flags) const override;
|
|
||||||
QByteArray fileContents(const Utils::FilePath &filePath, qint64 limit, qint64 offset) const override;
|
QByteArray fileContents(const Utils::FilePath &filePath, qint64 limit, qint64 offset) const override;
|
||||||
bool writeFileContents(const Utils::FilePath &filePath, const QByteArray &data) const override;
|
bool writeFileContents(const Utils::FilePath &filePath, const QByteArray &data) const override;
|
||||||
qint64 fileSize(const Utils::FilePath &filePath) const override;
|
qint64 fileSize(const Utils::FilePath &filePath) const override;
|
||||||
|
@@ -524,12 +524,10 @@ DeviceManager::DeviceManager(bool isInstance) : d(std::make_unique<DeviceManager
|
|||||||
|
|
||||||
deviceHooks.iterateDirectory = [](const FilePath &filePath,
|
deviceHooks.iterateDirectory = [](const FilePath &filePath,
|
||||||
const std::function<bool(const FilePath &)> &callBack,
|
const std::function<bool(const FilePath &)> &callBack,
|
||||||
const QStringList &nameFilters,
|
const FileFilter &filter) {
|
||||||
QDir::Filters filters,
|
|
||||||
QDirIterator::IteratorFlags flags) {
|
|
||||||
auto device = DeviceManager::deviceForPath(filePath);
|
auto device = DeviceManager::deviceForPath(filePath);
|
||||||
QTC_ASSERT(device, return);
|
QTC_ASSERT(device, return);
|
||||||
device->iterateDirectory(filePath, callBack, nameFilters, filters, flags);
|
device->iterateDirectory(filePath, callBack, filter);
|
||||||
};
|
};
|
||||||
|
|
||||||
deviceHooks.fileContents = [](const FilePath &filePath, qint64 maxSize, qint64 offset) {
|
deviceHooks.fileContents = [](const FilePath &filePath, qint64 maxSize, qint64 offset) {
|
||||||
|
@@ -363,15 +363,11 @@ FilePath IDevice::symLinkTarget(const FilePath &filePath) const
|
|||||||
|
|
||||||
void IDevice::iterateDirectory(const FilePath &filePath,
|
void IDevice::iterateDirectory(const FilePath &filePath,
|
||||||
const std::function<bool(const FilePath &)> &callBack,
|
const std::function<bool(const FilePath &)> &callBack,
|
||||||
const QStringList &nameFilters,
|
const FileFilter &filter) const
|
||||||
QDir::Filters filters,
|
|
||||||
QDirIterator::IteratorFlags flags) const
|
|
||||||
{
|
{
|
||||||
Q_UNUSED(filePath);
|
Q_UNUSED(filePath);
|
||||||
Q_UNUSED(callBack);
|
Q_UNUSED(callBack);
|
||||||
Q_UNUSED(nameFilters);
|
Q_UNUSED(filter);
|
||||||
Q_UNUSED(filters);
|
|
||||||
Q_UNUSED(flags);
|
|
||||||
QTC_CHECK(false);
|
QTC_CHECK(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -33,7 +33,6 @@
|
|||||||
|
|
||||||
#include <QAbstractSocket>
|
#include <QAbstractSocket>
|
||||||
#include <QCoreApplication>
|
#include <QCoreApplication>
|
||||||
#include <QDir>
|
|
||||||
#include <QList>
|
#include <QList>
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
#include <QSharedPointer>
|
#include <QSharedPointer>
|
||||||
@@ -257,13 +256,11 @@ public:
|
|||||||
virtual bool renameFile(const Utils::FilePath &filePath, const Utils::FilePath &target) const;
|
virtual bool renameFile(const Utils::FilePath &filePath, const Utils::FilePath &target) const;
|
||||||
virtual Utils::FilePath searchExecutableInPath(const QString &fileName) const;
|
virtual Utils::FilePath searchExecutableInPath(const QString &fileName) const;
|
||||||
virtual Utils::FilePath searchExecutable(const QString &fileName,
|
virtual Utils::FilePath searchExecutable(const QString &fileName,
|
||||||
const QList<Utils::FilePath> &dirs) const;
|
const Utils::FilePaths &dirs) const;
|
||||||
virtual Utils::FilePath symLinkTarget(const Utils::FilePath &filePath) const;
|
virtual Utils::FilePath symLinkTarget(const Utils::FilePath &filePath) const;
|
||||||
virtual void iterateDirectory(const Utils::FilePath &filePath,
|
virtual void iterateDirectory(const Utils::FilePath &filePath,
|
||||||
const std::function<bool(const Utils::FilePath &)> &callBack,
|
const std::function<bool(const Utils::FilePath &)> &callBack,
|
||||||
const QStringList &nameFilters,
|
const Utils::FileFilter &filter) const;
|
||||||
QDir::Filters filters,
|
|
||||||
QDirIterator::IteratorFlags flags = QDirIterator::NoIteratorFlags) const;
|
|
||||||
virtual QByteArray fileContents(const Utils::FilePath &filePath,
|
virtual QByteArray fileContents(const Utils::FilePath &filePath,
|
||||||
qint64 limit,
|
qint64 limit,
|
||||||
qint64 offset) const;
|
qint64 offset) const;
|
||||||
|
@@ -1126,7 +1126,8 @@ static FilePaths findCompilerCandidates(const IDevice::ConstPtr &device,
|
|||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
const FilePath globalDir = device->mapToGlobalPath(deviceDir);
|
const FilePath globalDir = device->mapToGlobalPath(deviceDir);
|
||||||
device->iterateDirectory(globalDir, callBack, nameFilters, QDir::Files | QDir::Executable);
|
device->iterateDirectory(globalDir, callBack,
|
||||||
|
{nameFilters, QDir::Files | QDir::Executable});
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// The normal, local host case.
|
// The normal, local host case.
|
||||||
|
@@ -423,10 +423,11 @@ QList<Core::IWizardFactory *> JsonWizardFactory::createWizardFactories()
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
const QDir::Filters filters = QDir::Dirs|QDir::Readable|QDir::NoDotAndDotDot;
|
const FileFilter filter {
|
||||||
|
{}, QDir::Dirs|QDir::Readable|QDir::NoDotAndDotDot, QDirIterator::NoIteratorFlags
|
||||||
|
};
|
||||||
const QDir::SortFlags sortflags = QDir::Name|QDir::IgnoreCase;
|
const QDir::SortFlags sortflags = QDir::Name|QDir::IgnoreCase;
|
||||||
const QDirIterator::IteratorFlag iteratorFlags = QDirIterator::NoIteratorFlags;
|
FilePaths dirs = path.dirEntries(filter, sortflags);
|
||||||
FilePaths dirs = path.dirEntries({}, filters, iteratorFlags, sortflags);
|
|
||||||
|
|
||||||
while (!dirs.isEmpty()) {
|
while (!dirs.isEmpty()) {
|
||||||
const FilePath currentDir = dirs.takeFirst();
|
const FilePath currentDir = dirs.takeFirst();
|
||||||
@@ -483,7 +484,7 @@ QList<Core::IWizardFactory *> JsonWizardFactory::createWizardFactories()
|
|||||||
|
|
||||||
result << factory;
|
result << factory;
|
||||||
} else {
|
} else {
|
||||||
FilePaths subDirs = currentDir.dirEntries({}, filters, iteratorFlags, sortflags);
|
FilePaths subDirs = currentDir.dirEntries(filter, sortflags);
|
||||||
if (!subDirs.isEmpty()) {
|
if (!subDirs.isEmpty()) {
|
||||||
// There is no QList::prepend(QList)...
|
// There is no QList::prepend(QList)...
|
||||||
dirs.swap(subDirs);
|
dirs.swap(subDirs);
|
||||||
@@ -579,7 +580,7 @@ static QString qmlProjectName(const FilePath &folder)
|
|||||||
{
|
{
|
||||||
FilePath currentFolder = folder;
|
FilePath currentFolder = folder;
|
||||||
while (!currentFolder.isEmpty()) {
|
while (!currentFolder.isEmpty()) {
|
||||||
const QList<FilePath> fileList = currentFolder.dirEntries({"*.qmlproject"});
|
const FilePaths fileList = currentFolder.dirEntries({{"*.qmlproject"}});
|
||||||
if (!fileList.isEmpty())
|
if (!fileList.isEmpty())
|
||||||
return fileList.first().baseName();
|
return fileList.first().baseName();
|
||||||
currentFolder = currentFolder.parentDir();
|
currentFolder = currentFolder.parentDir();
|
||||||
|
@@ -694,7 +694,7 @@ static ProjectExplorerPluginPrivate *dd = nullptr;
|
|||||||
|
|
||||||
static FilePaths projectFilesInDirectory(const FilePath &path)
|
static FilePaths projectFilesInDirectory(const FilePath &path)
|
||||||
{
|
{
|
||||||
return path.dirEntries(ProjectExplorerPlugin::projectFileGlobs(), QDir::Files);
|
return path.dirEntries({ProjectExplorerPlugin::projectFileGlobs(), QDir::Files});
|
||||||
}
|
}
|
||||||
|
|
||||||
static FilePaths projectsInDirectory(const FilePath &filePath)
|
static FilePaths projectsInDirectory(const FilePath &filePath)
|
||||||
|
@@ -791,8 +791,7 @@ QStringList SessionManager::sessions()
|
|||||||
{
|
{
|
||||||
if (d->m_sessions.isEmpty()) {
|
if (d->m_sessions.isEmpty()) {
|
||||||
// We are not initialized yet, so do that now
|
// We are not initialized yet, so do that now
|
||||||
const FilePaths sessionFiles = ICore::userResourcePath().dirEntries({"*.qws"},
|
const FilePaths sessionFiles = ICore::userResourcePath().dirEntries({{"*qws"}}, QDir::Time);
|
||||||
QDir::NoFilter, QDirIterator::NoIteratorFlags, QDir::Time);
|
|
||||||
for (const FilePath &file : sessionFiles) {
|
for (const FilePath &file : sessionFiles) {
|
||||||
const QString &name = file.completeBaseName();
|
const QString &name = file.completeBaseName();
|
||||||
d->m_sessionDateTimes.insert(name, file.lastModified());
|
d->m_sessionDateTimes.insert(name, file.lastModified());
|
||||||
|
@@ -354,7 +354,7 @@ void generateModuleCmake(const FilePath &dir, const QString &uri)
|
|||||||
QString fileTemplate = GenerateCmake::readTemplate(MODULEFILE_TEMPLATE_PATH);
|
QString fileTemplate = GenerateCmake::readTemplate(MODULEFILE_TEMPLATE_PATH);
|
||||||
|
|
||||||
QString singletonContent;
|
QString singletonContent;
|
||||||
FilePaths qmldirFileList = dir.dirEntries(QStringList(FILENAME_QMLDIR), FILES_ONLY);
|
FilePaths qmldirFileList = dir.dirEntries({QStringList(FILENAME_QMLDIR), FILES_ONLY});
|
||||||
if (!qmldirFileList.isEmpty()) {
|
if (!qmldirFileList.isEmpty()) {
|
||||||
QStringList singletons = getSingletonsFromQmldirFile(qmldirFileList.first());
|
QStringList singletons = getSingletonsFromQmldirFile(qmldirFileList.first());
|
||||||
for (QString &singleton : singletons) {
|
for (QString &singleton : singletons) {
|
||||||
@@ -418,7 +418,7 @@ FilePaths getDirectoryQmls(const FilePath &dir)
|
|||||||
{
|
{
|
||||||
const QStringList qmlFilesOnly("*.qml");
|
const QStringList qmlFilesOnly("*.qml");
|
||||||
ProjectExplorer::Project *project = ProjectExplorer::SessionManager::startupProject();
|
ProjectExplorer::Project *project = ProjectExplorer::SessionManager::startupProject();
|
||||||
FilePaths allFiles = dir.dirEntries(qmlFilesOnly, FILES_ONLY);
|
FilePaths allFiles = dir.dirEntries({qmlFilesOnly, FILES_ONLY});
|
||||||
FilePaths moduleFiles;
|
FilePaths moduleFiles;
|
||||||
for (FilePath &file : allFiles) {
|
for (FilePath &file : allFiles) {
|
||||||
if (!isFileBlacklisted(file.fileName()) &&
|
if (!isFileBlacklisted(file.fileName()) &&
|
||||||
@@ -436,7 +436,7 @@ QStringList getDirectoryTreeQmls(const FilePath &dir)
|
|||||||
ProjectExplorer::Project *project = ProjectExplorer::SessionManager::startupProject();
|
ProjectExplorer::Project *project = ProjectExplorer::SessionManager::startupProject();
|
||||||
QStringList qmlFileList;
|
QStringList qmlFileList;
|
||||||
|
|
||||||
FilePaths thisDirFiles = dir.dirEntries(qmlFilesOnly, FILES_ONLY);
|
FilePaths thisDirFiles = dir.dirEntries({qmlFilesOnly, FILES_ONLY});
|
||||||
for (FilePath &file : thisDirFiles) {
|
for (FilePath &file : thisDirFiles) {
|
||||||
if (!isFileBlacklisted(file.fileName()) &&
|
if (!isFileBlacklisted(file.fileName()) &&
|
||||||
project->isKnownFile(file)) {
|
project->isKnownFile(file)) {
|
||||||
|
@@ -444,9 +444,8 @@ void QnxConfiguration::updateTargets()
|
|||||||
void QnxConfiguration::assignDebuggersToTargets()
|
void QnxConfiguration::assignDebuggersToTargets()
|
||||||
{
|
{
|
||||||
const FilePath hostUsrBinDir = m_qnxHost.pathAppended("usr/bin");
|
const FilePath hostUsrBinDir = m_qnxHost.pathAppended("usr/bin");
|
||||||
FilePaths debuggerNames = hostUsrBinDir.dirEntries(
|
const FilePaths debuggerNames = hostUsrBinDir.dirEntries(
|
||||||
QStringList(HostOsInfo::withExecutableSuffix("nto*-gdb")),
|
{{HostOsInfo::withExecutableSuffix("nto*-gdb")}, QDir::Files});
|
||||||
QDir::Files);
|
|
||||||
Environment sysEnv = Environment::systemEnvironment();
|
Environment sysEnv = Environment::systemEnvironment();
|
||||||
sysEnv.modify(qnxEnvironmentItems());
|
sysEnv.modify(qnxEnvironmentItems());
|
||||||
for (const FilePath &debuggerPath : debuggerNames) {
|
for (const FilePath &debuggerPath : debuggerNames) {
|
||||||
|
@@ -144,9 +144,9 @@ FilePath QnxUtils::envFilePath(const FilePath &sdpPath)
|
|||||||
{
|
{
|
||||||
FilePaths entries;
|
FilePaths entries;
|
||||||
if (sdpPath.osType() == OsTypeWindows)
|
if (sdpPath.osType() == OsTypeWindows)
|
||||||
entries = sdpPath.dirEntries({"*-env.bat"});
|
entries = sdpPath.dirEntries({{"*-env.bat"}});
|
||||||
else
|
else
|
||||||
entries = sdpPath.dirEntries({"*-env.sh"});
|
entries = sdpPath.dirEntries({{"*-env.sh"}});
|
||||||
|
|
||||||
if (!entries.isEmpty())
|
if (!entries.isEmpty())
|
||||||
return entries.first();
|
return entries.first();
|
||||||
|
@@ -114,8 +114,7 @@ void FileSystemAccessTest::testDirStatuses()
|
|||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
},
|
},
|
||||||
{"test"},
|
{{"test"}, QDir::Files});
|
||||||
QDir::Files);
|
|
||||||
|
|
||||||
QVERIFY(fileExists);
|
QVERIFY(fileExists);
|
||||||
QVERIFY(testFilePath.removeFile());
|
QVERIFY(testFilePath.removeFile());
|
||||||
|
@@ -679,16 +679,15 @@ bool LinuxDevice::setPermissions(const Utils::FilePath &filePath, QFileDevice::P
|
|||||||
static void filterEntriesHelper(const FilePath &base,
|
static void filterEntriesHelper(const FilePath &base,
|
||||||
const std::function<bool(const FilePath &)> &callBack,
|
const std::function<bool(const FilePath &)> &callBack,
|
||||||
const QStringList &entries,
|
const QStringList &entries,
|
||||||
const QStringList &nameFilters,
|
const FileFilter &filter)
|
||||||
QDir::Filters filters,
|
|
||||||
QDirIterator::IteratorFlags flags)
|
|
||||||
{
|
{
|
||||||
const QList<QRegularExpression> nameRegexps = transform(nameFilters, [](const QString &filter) {
|
const QList<QRegularExpression> nameRegexps =
|
||||||
QRegularExpression re;
|
transform(filter.nameFilters, [](const QString &filter) {
|
||||||
re.setPattern(QRegularExpression::wildcardToRegularExpression(filter));
|
QRegularExpression re;
|
||||||
QTC_CHECK(re.isValid());
|
re.setPattern(QRegularExpression::wildcardToRegularExpression(filter));
|
||||||
return re;
|
QTC_CHECK(re.isValid());
|
||||||
});
|
return re;
|
||||||
|
});
|
||||||
|
|
||||||
const auto nameMatches = [&nameRegexps](const QString &fileName) {
|
const auto nameMatches = [&nameRegexps](const QString &fileName) {
|
||||||
for (const QRegularExpression &re : nameRegexps) {
|
for (const QRegularExpression &re : nameRegexps) {
|
||||||
@@ -700,8 +699,8 @@ static void filterEntriesHelper(const FilePath &base,
|
|||||||
};
|
};
|
||||||
|
|
||||||
// FIXME: Handle filters. For now bark on unsupported options.
|
// FIXME: Handle filters. For now bark on unsupported options.
|
||||||
QTC_CHECK(filters == QDir::NoFilter);
|
QTC_CHECK(filter.fileFilters == QDir::NoFilter);
|
||||||
QTC_CHECK(flags == QDirIterator::NoIteratorFlags);
|
QTC_CHECK(filter.iteratorFlags == QDirIterator::NoIteratorFlags);
|
||||||
|
|
||||||
for (const QString &entry : entries) {
|
for (const QString &entry : entries) {
|
||||||
if (!nameMatches(entry))
|
if (!nameMatches(entry))
|
||||||
@@ -713,15 +712,13 @@ static void filterEntriesHelper(const FilePath &base,
|
|||||||
|
|
||||||
void LinuxDevice::iterateDirectory(const FilePath &filePath,
|
void LinuxDevice::iterateDirectory(const FilePath &filePath,
|
||||||
const std::function<bool(const FilePath &)> &callBack,
|
const std::function<bool(const FilePath &)> &callBack,
|
||||||
const QStringList &nameFilters,
|
const FileFilter &filter) const
|
||||||
QDir::Filters filters,
|
|
||||||
QDirIterator::IteratorFlags flags) const
|
|
||||||
{
|
{
|
||||||
QTC_ASSERT(handlesFile(filePath), return);
|
QTC_ASSERT(handlesFile(filePath), return);
|
||||||
// if we do not have find - use ls as fallback
|
// if we do not have find - use ls as fallback
|
||||||
const QString output = d->outputForRunInShell({"ls", {"-1", "-b", "--", filePath.path()}});
|
const QString output = d->outputForRunInShell({"ls", {"-1", "-b", "--", filePath.path()}});
|
||||||
const QStringList entries = output.split('\n', Qt::SkipEmptyParts);
|
const QStringList entries = output.split('\n', Qt::SkipEmptyParts);
|
||||||
filterEntriesHelper(filePath, callBack, entries, nameFilters, filters, flags);
|
filterEntriesHelper(filePath, callBack, entries, filter);
|
||||||
}
|
}
|
||||||
|
|
||||||
QByteArray LinuxDevice::fileContents(const FilePath &filePath, qint64 limit, qint64 offset) const
|
QByteArray LinuxDevice::fileContents(const FilePath &filePath, qint64 limit, qint64 offset) const
|
||||||
|
@@ -78,9 +78,7 @@ public:
|
|||||||
Utils::FilePath symLinkTarget(const Utils::FilePath &filePath) const override;
|
Utils::FilePath symLinkTarget(const Utils::FilePath &filePath) const override;
|
||||||
void iterateDirectory(const Utils::FilePath &filePath,
|
void iterateDirectory(const Utils::FilePath &filePath,
|
||||||
const std::function<bool(const Utils::FilePath &)> &callBack,
|
const std::function<bool(const Utils::FilePath &)> &callBack,
|
||||||
const QStringList &nameFilters,
|
const Utils::FileFilter &filter) const override;
|
||||||
QDir::Filters filters,
|
|
||||||
QDirIterator::IteratorFlags flags) const override;
|
|
||||||
QByteArray fileContents(const Utils::FilePath &filePath, qint64 limit, qint64 offset) const override;
|
QByteArray fileContents(const Utils::FilePath &filePath, qint64 limit, qint64 offset) const override;
|
||||||
bool writeFileContents(const Utils::FilePath &filePath, const QByteArray &data) const override;
|
bool writeFileContents(const Utils::FilePath &filePath, const QByteArray &data) const override;
|
||||||
QDateTime lastModified(const Utils::FilePath &filePath) const override;
|
QDateTime lastModified(const Utils::FilePath &filePath) const override;
|
||||||
|
@@ -58,7 +58,7 @@ FilePath findFallbackDefinitionsLocation()
|
|||||||
FilePath("/opt") / kateSyntaxPath
|
FilePath("/opt") / kateSyntaxPath
|
||||||
};
|
};
|
||||||
for (const FilePath &path : paths) {
|
for (const FilePath &path : paths) {
|
||||||
if (path.exists() && !path.dirEntries({"*.xml"}).isEmpty())
|
if (path.exists() && !path.dirEntries({{"*.xml"}}).isEmpty())
|
||||||
return path;
|
return path;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -76,7 +76,7 @@ FilePath findFallbackDefinitionsLocation()
|
|||||||
const FilePath dir = FilePath::fromString(output);
|
const FilePath dir = FilePath::fromString(output);
|
||||||
for (auto &kateSyntaxPath : kateSyntaxPaths) {
|
for (auto &kateSyntaxPath : kateSyntaxPaths) {
|
||||||
const FilePath path = dir / kateSyntaxPath;
|
const FilePath path = dir / kateSyntaxPath;
|
||||||
if (path.exists() && !path.dirEntries({"*.xml"}).isEmpty())
|
if (path.exists() && !path.dirEntries({{"*.xml"}}).isEmpty())
|
||||||
return path;
|
return path;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -84,7 +84,7 @@ FilePath findFallbackDefinitionsLocation()
|
|||||||
}
|
}
|
||||||
|
|
||||||
const FilePath dir = Core::ICore::resourcePath("generic-highlighter");
|
const FilePath dir = Core::ICore::resourcePath("generic-highlighter");
|
||||||
if (dir.exists() && !dir.dirEntries({"*.xml"}).isEmpty())
|
if (dir.exists() && !dir.dirEntries({{"*.xml"}}).isEmpty())
|
||||||
return dir;
|
return dir;
|
||||||
|
|
||||||
return {};
|
return {};
|
||||||
|
@@ -95,7 +95,8 @@ SnippetsCollection *SnippetsCollection::instance()
|
|||||||
// SnippetsCollection
|
// SnippetsCollection
|
||||||
SnippetsCollection::SnippetsCollection()
|
SnippetsCollection::SnippetsCollection()
|
||||||
: m_userSnippetsFile(Core::ICore::userResourcePath("snippets/snippets.xml")),
|
: m_userSnippetsFile(Core::ICore::userResourcePath("snippets/snippets.xml")),
|
||||||
m_builtInSnippetsFiles(Core::ICore::resourcePath("snippets").dirEntries({"*.xml"}))
|
m_builtInSnippetsFiles(Core::ICore::resourcePath("snippets")
|
||||||
|
.dirEntries(FileFilter({"*.xml"})))
|
||||||
{
|
{
|
||||||
|
|
||||||
connect(Core::ICore::instance(), &Core::ICore::coreOpened,
|
connect(Core::ICore::instance(), &Core::ICore::coreOpened,
|
||||||
|
Reference in New Issue
Block a user