diff options
author | Iikka Eklund <iikka.eklund@digia.com> | 2012-08-03 10:02:06 +0300 |
---|---|---|
committer | Karsten Heimrich <karsten.heimrich@digia.com> | 2012-09-25 10:37:12 +0200 |
commit | 5804a06bc5cbea1b098573168876fda0163df250 (patch) | |
tree | 78d02051c2d7f4cd980a0b9dcfc7f26039568c1e /src/libs | |
parent | 350d78d6ca17b3abb7f3f23dac3f70b5f59703af (diff) |
Added file mask feature into qtpatchoperation
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 <lars.knoll@nokia.com>
Reviewed-by: Niels Weber <niels.2.weber@nokia.com>
Reviewed-by: Simo Fält <simo.falt@nokia.com>
Reviewed-by: Tim Jenssen <tim.jenssen@digia.com>
Diffstat (limited to 'src/libs')
-rw-r--r-- | src/libs/installer/qtpatchoperation.cpp | 35 | ||||
-rw-r--r-- | src/libs/installer/qtpatchoperation.h | 3 |
2 files changed, 36 insertions, 2 deletions
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 <QFile> #include <QTextStream> #include <QDir> +#include <QDirIterator> #include <QtCore/QDebug> 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 |