summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkh1 <karsten.heimrich@nokia.com>2012-03-05 18:06:50 +0100
committerTim Jenssen <tim.jenssen@nokia.com>2012-03-05 18:39:22 +0100
commit6fdf3c3bb6c74a21d4c3f170ed63782125057fc1 (patch)
treeabee10c51893a72295981cc15994dbaf73cd8bc4
parent50f21c5ac95ef867826de047ecc1ea13cf7e3dde (diff)
Fix missing operations problem.
After a7c900ce4b6f33f14e1abe9f2dba70f6a16b2105 uninstalling one or several components failed, caused by the fact I used a hash to store the on disk component data after loading. Since the key would be the same for several components, only one single set of data would be available afterwards. Now store a pair of data and keep the order as well, important for uninstalling order... Change-Id: I8033273087361640abc920eb6338c76df0adc99a Reviewed-by: Tim Jenssen <tim.jenssen@nokia.com>
-rw-r--r--installerbuilder/common/binaryformat.cpp15
-rw-r--r--installerbuilder/common/binaryformat.h2
2 files changed, 9 insertions, 8 deletions
diff --git a/installerbuilder/common/binaryformat.cpp b/installerbuilder/common/binaryformat.cpp
index d94698acb..133df3690 100644
--- a/installerbuilder/common/binaryformat.cpp
+++ b/installerbuilder/common/binaryformat.cpp
@@ -1004,7 +1004,7 @@ void BinaryContent::readBinaryData(BinaryContent &content, const QSharedPointer<
for (int i = 0; i < operationsCount; ++i) {
const QString name = retrieveString(file.data());
const QString data = retrieveString(file.data());
- content.d->m_performedOperationsData.insert(name, data);
+ content.d->m_performedOperationsData.append(qMakePair(name, data));
}
// seek to the position of the component index
@@ -1049,13 +1049,14 @@ int BinaryContent::registerPerformedOperations()
if (d->m_performedOperations.count() > 0)
return d->m_performedOperations.count();
- foreach (const QString &name, d->m_performedOperationsData.keys()) {
- QScopedPointer<Operation> op(KDUpdater::UpdateOperationFactory::instance().create(name));
- Q_ASSERT_X(!op.isNull(), __FUNCTION__, QString::fromLatin1("Invalid operation name: %1.").arg(name)
- .toLatin1());
+ for (int i = 0; i < d->m_performedOperationsData.count(); ++ i) {
+ const QPair<QString, QString> opPair = d->m_performedOperationsData.at(i);
+ QScopedPointer<Operation> op(KDUpdater::UpdateOperationFactory::instance().create(opPair.first));
+ Q_ASSERT_X(!op.isNull(), __FUNCTION__, QString::fromLatin1("Invalid operation name: %1.")
+ .arg(opPair.first).toLatin1());
- if (!op->fromXml(d->m_performedOperationsData.value(name))) {
- qWarning() << "Failed to load XML for operation:" << name;
+ if (!op->fromXml(opPair.second)) {
+ qWarning() << "Failed to load XML for operation:" << opPair.first;
continue;
}
d->m_performedOperations.append(op.take());
diff --git a/installerbuilder/common/binaryformat.h b/installerbuilder/common/binaryformat.h
index 4cd92c9cd..e2e1f6a0f 100644
--- a/installerbuilder/common/binaryformat.h
+++ b/installerbuilder/common/binaryformat.h
@@ -204,7 +204,7 @@ public:
QSharedPointer<QFile> m_binaryDataFile;
QList<Operation *> m_performedOperations;
- QHash<QString, QString> m_performedOperationsData;
+ QList<QPair<QString, QString> > m_performedOperationsData;
QVector<const uchar *> m_resourceMappings;
QVector<Range<qint64> > m_metadataResourceSegments;