From 6fdf3c3bb6c74a21d4c3f170ed63782125057fc1 Mon Sep 17 00:00:00 2001 From: kh1 Date: Mon, 5 Mar 2012 18:06:50 +0100 Subject: 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 --- installerbuilder/common/binaryformat.cpp | 15 ++++++++------- installerbuilder/common/binaryformat.h | 2 +- 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 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 opPair = d->m_performedOperationsData.at(i); + QScopedPointer 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 m_binaryDataFile; QList m_performedOperations; - QHash m_performedOperationsData; + QList > m_performedOperationsData; QVector m_resourceMappings; QVector > m_metadataResourceSegments; -- cgit v1.2.3