Docker: Use new FileFilter::asFindArguments function

Change-Id: I7a4e02740f27cdb72d3a876985b0941ffedc1ff2
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
hjk
2022-10-05 17:12:41 +02:00
parent 5c65115271
commit a234443bee

View File

@@ -902,77 +902,8 @@ void DockerDevice::iterateWithFind(const FilePath &filePath,
QTC_ASSERT(callBack, return); QTC_ASSERT(callBack, return);
QTC_CHECK(filePath.isAbsolutePath()); QTC_CHECK(filePath.isAbsolutePath());
QStringList arguments{filePath.path()}; QStringList arguments{filePath.path()};
arguments << filter.asFindArguments();
const QDir::Filters filters = filter.fileFilters;
if (filters & QDir::NoSymLinks)
arguments.prepend("-H");
else
arguments.prepend("-L");
arguments.append({"-mindepth", "1"});
if (!filter.iteratorFlags.testFlag(QDirIterator::Subdirectories))
arguments.append({"-maxdepth", "1"});
QStringList filterOptions;
if (!(filters & QDir::Hidden))
filterOptions << "!" << "-name" << ".*";
QStringList filterFilesAndDirs;
if (filters & QDir::Dirs)
filterFilesAndDirs << "-type" << "d";
if (filters & QDir::Files) {
if (!filterFilesAndDirs.isEmpty())
filterFilesAndDirs << "-o";
filterFilesAndDirs << "-type" << "f";
}
if (!filterFilesAndDirs.isEmpty())
filterOptions << "(" << filterFilesAndDirs << ")";
QStringList accessOptions;
if (filters & QDir::Readable)
accessOptions << "-readable";
if (filters & QDir::Writable) {
if (!accessOptions.isEmpty())
accessOptions << "-o";
accessOptions << "-writable";
}
if (filters & QDir::Executable) {
if (!accessOptions.isEmpty())
accessOptions << "-o";
accessOptions << "-executable";
}
if (!accessOptions.isEmpty())
filterOptions << "(" << accessOptions << ")";
QTC_CHECK(filters ^ QDir::AllDirs);
QTC_CHECK(filters ^ QDir::Drives);
QTC_CHECK(filters ^ QDir::NoDot);
QTC_CHECK(filters ^ QDir::NoDotDot);
QTC_CHECK(filters ^ QDir::Hidden);
QTC_CHECK(filters ^ QDir::System);
const QString nameOption = (filters & QDir::CaseSensitive) ? QString{"-name"}
: QString{"-iname"};
if (!filter.nameFilters.isEmpty()) {
const QRegularExpression oneChar("\\[.*?\\]");
bool addedFirst = false;
for (const QString &current : filter.nameFilters) {
if (current.indexOf(oneChar) != -1) {
qCDebug(dockerDeviceLog)
<< "Skipped" << current << "due to presence of [] wildcard";
continue;
}
if (addedFirst)
filterOptions << "-o";
filterOptions << nameOption << current;
addedFirst = true;
}
}
arguments << filterOptions;
const QByteArray output = d->outputForRunInShell({"find", arguments}); const QByteArray output = d->outputForRunInShell({"find", arguments});
const QString out = QString::fromUtf8(output.data(), output.size()); const QString out = QString::fromUtf8(output.data(), output.size());
if (!output.isEmpty() && !out.startsWith(filePath.path())) { // missing find, unknown option if (!output.isEmpty() && !out.startsWith(filePath.path())) { // missing find, unknown option