From 5804a06bc5cbea1b098573168876fda0163df250 Mon Sep 17 00:00:00 2001 From: Iikka Eklund Date: Fri, 3 Aug 2012 10:02:06 +0300 Subject: Added file mask feature into qtpatchoperation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Added option to use file masks in files-to-patch-* to ease maintenance. E.g. to include all .prl files for patching you can add the following line into files-to-patch-* *.prl And the qtpatchoperation will then recursively search and patch all matching files under the base directory. Multiple file masks can be added on separate lines in files-to-patch-*, E.g. *.prl *.la *.pc Change-Id: I9c120b3ffb1f9f308f0c10f40b4a71ac46c84bc3 Reviewed-by: Lars Knoll Reviewed-by: Niels Weber Reviewed-by: Simo Fält Reviewed-by: Tim Jenssen --- src/libs/installer/qtpatchoperation.cpp | 35 +++++++++++++++++++++++++++++++-- src/libs/installer/qtpatchoperation.h | 3 +++ 2 files changed, 36 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/libs/installer/qtpatchoperation.cpp b/src/libs/installer/qtpatchoperation.cpp index a19ed0f77..c37bec8fe 100644 --- a/src/libs/installer/qtpatchoperation.cpp +++ b/src/libs/installer/qtpatchoperation.cpp @@ -43,6 +43,7 @@ #include #include #include +#include #include using namespace QInstaller; @@ -211,6 +212,7 @@ bool QtPatchOperation::performOperation() return false; } + QStringList filters; QStringList filesToPatch, textFilesToPatch; bool readingTextFilesToPatch = false; @@ -230,9 +232,13 @@ bool QtPatchOperation::performOperation() readingTextFilesToPatch = true; //with empty old path we don't know what we want to replace - else if (readingTextFilesToPatch && !oldQtPathFromQMakeIsEmpty) + else if (readingTextFilesToPatch && !oldQtPathFromQMakeIsEmpty) { + // check if file mask filter + if (line.startsWith(QLatin1String("*."), Qt::CaseInsensitive)) { + filters << line; + } textFilesToPatch.append(line); - + } else filesToPatch.append(line); } @@ -302,6 +308,15 @@ bool QtPatchOperation::performOperation() } #endif + // get file list defined by filters and patch them + QStringList filteredContent = getDirContent(prefix, filters); + foreach (QString fileName, filteredContent) { + if (QFile::exists(fileName)) { + QtPatch::patchTextFile(fileName, searchReplacePairs); + } + } + + // patch single items foreach (QString fileName, textFilesToPatch) { fileName.prepend(prefix); @@ -341,6 +356,22 @@ bool QtPatchOperation::performOperation() return true; } +QStringList QtPatchOperation::getDirContent(const QString& aPath, QStringList aFilters) +{ + QStringList list; + QDirIterator dirIterator(aPath, aFilters, QDir::AllDirs|QDir::Files|QDir::NoSymLinks, + QDirIterator::Subdirectories); + while (dirIterator.hasNext()) { + dirIterator.next(); + if (!dirIterator.fileInfo().isDir()) { + list.append(dirIterator.fileInfo().absoluteFilePath()); + qDebug() << QString::fromLatin1("QtPatchOperation::getDirContent match: '%1'").arg(dirIterator.fileInfo().absoluteFilePath()); + } + } + + return list; +} + bool QtPatchOperation::undoOperation() { return true; diff --git a/src/libs/installer/qtpatchoperation.h b/src/libs/installer/qtpatchoperation.h index 31f3abb4e..b4420041b 100644 --- a/src/libs/installer/qtpatchoperation.h +++ b/src/libs/installer/qtpatchoperation.h @@ -47,6 +47,9 @@ public: bool undoOperation(); bool testOperation(); Operation *clone() const; + +private: + QStringList getDirContent(const QString& aPath, QStringList aFilters); }; } // namespace QInstaller -- cgit v1.2.3