diff --git a/src/plugins/docker/dockerdevice.cpp b/src/plugins/docker/dockerdevice.cpp index 64d1b1edf6e..260b857815b 100644 --- a/src/plugins/docker/dockerdevice.cpp +++ b/src/plugins/docker/dockerdevice.cpp @@ -902,77 +902,8 @@ void DockerDevice::iterateWithFind(const FilePath &filePath, QTC_ASSERT(callBack, return); QTC_CHECK(filePath.isAbsolutePath()); 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 ¤t : 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 QString out = QString::fromUtf8(output.data(), output.size()); if (!output.isEmpty() && !out.startsWith(filePath.path())) { // missing find, unknown option