summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIikka Eklund <iikka.eklund@digia.com>2012-08-03 10:02:06 +0300
committerSimo Fält <simo.falt@nokia.com>2012-08-03 12:20:47 +0200
commit2022912372b4fa10a9a92aab8f65163e675b37d2 (patch)
tree3bf426f4b593af47ee68b56a2ad2745781a5b0ec
parent90c64475cee8255e3fad57194d5e443ebfd1b16b (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>
-rw-r--r--src/libs/installer/qtpatchoperation.cpp35
-rw-r--r--src/libs/installer/qtpatchoperation.h3
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