forked from qt-creator/qt-creator
Utils: Add a convienience function FileFilter::asFindArguments
Re-usable in a variety of unix-based devices. Change-Id: I480ad9b128336059752b99dc1f1ae3b4899a4077 Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
@@ -1828,6 +1828,81 @@ FileFilter::FileFilter(const QStringList &nameFilters,
|
||||
{
|
||||
}
|
||||
|
||||
QStringList FileFilter::asFindArguments() const
|
||||
{
|
||||
QStringList arguments;
|
||||
|
||||
const QDir::Filters filters = fileFilters;
|
||||
if (filters & QDir::NoSymLinks)
|
||||
arguments.prepend("-H");
|
||||
else
|
||||
arguments.prepend("-L");
|
||||
|
||||
arguments.append({"-mindepth", "1"});
|
||||
|
||||
if (!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::System);
|
||||
|
||||
const QString nameOption = (filters & QDir::CaseSensitive) ? QString{"-name"}
|
||||
: QString{"-iname"};
|
||||
if (!nameFilters.isEmpty()) {
|
||||
const QRegularExpression oneChar("\\[.*?\\]");
|
||||
bool addedFirst = false;
|
||||
for (const QString ¤t : nameFilters) {
|
||||
if (current.indexOf(oneChar) != -1) {
|
||||
qDebug() << "Skipped" << current << "due to presence of [] wildcard";
|
||||
continue;
|
||||
}
|
||||
|
||||
if (addedFirst)
|
||||
filterOptions << "-o";
|
||||
filterOptions << nameOption << current;
|
||||
addedFirst = true;
|
||||
}
|
||||
}
|
||||
arguments << filterOptions;
|
||||
return arguments;
|
||||
}
|
||||
|
||||
DeviceFileHooks &DeviceFileHooks::instance()
|
||||
{
|
||||
return s_deviceHooks;
|
||||
|
||||
Reference in New Issue
Block a user