summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/libs/installer/genericdatacache.h2
-rw-r--r--src/libs/installer/installer.pro2
-rw-r--r--src/libs/installer/metadatacache.cpp67
-rw-r--r--src/libs/installer/metadatacache.h46
-rw-r--r--src/libs/installer/metadatajob.cpp5
-rw-r--r--src/libs/installer/metadatajob.h4
-rw-r--r--src/libs/installer/metadatajob_p.h6
-rw-r--r--tests/auto/installer/metadatacache/tst_metadatacache.cpp31
8 files changed, 139 insertions, 24 deletions
diff --git a/src/libs/installer/genericdatacache.h b/src/libs/installer/genericdatacache.h
index 5c1732334..94085502c 100644
--- a/src/libs/installer/genericdatacache.h
+++ b/src/libs/installer/genericdatacache.h
@@ -71,7 +71,7 @@ public:
GenericDataCache();
explicit GenericDataCache(const QString &path, const QString &type, const QString &version);
- ~GenericDataCache();
+ virtual ~GenericDataCache();
void setType(const QString &type);
void setVersion(const QString &version);
diff --git a/src/libs/installer/installer.pro b/src/libs/installer/installer.pro
index 5a58968ee..30d15c695 100644
--- a/src/libs/installer/installer.pro
+++ b/src/libs/installer/installer.pro
@@ -52,6 +52,7 @@ HEADERS += packagemanagercore.h \
genericdatacache.h \
loggingutils.h \
metadata.h \
+ metadatacache.h \
packagemanagercore_p.h \
packagemanagergui.h \
binaryformat.h \
@@ -158,6 +159,7 @@ SOURCES += packagemanagercore.cpp \
genericdatacache.cpp \
loggingutils.cpp \
metadata.cpp \
+ metadatacache.cpp \
operationtracer.cpp \
packagemanagercore_p.cpp \
packagemanagergui.cpp \
diff --git a/src/libs/installer/metadatacache.cpp b/src/libs/installer/metadatacache.cpp
new file mode 100644
index 000000000..744e455f4
--- /dev/null
+++ b/src/libs/installer/metadatacache.cpp
@@ -0,0 +1,67 @@
+/**************************************************************************
+**
+** Copyright (C) 2023 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the Qt Installer Framework.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+**************************************************************************/
+
+#include "metadatacache.h"
+
+#define QUOTE_(x) #x
+#define QUOTE(x) QUOTE_(x)
+
+namespace QInstaller {
+
+/*!
+ \inmodule QtInstallerFramework
+ \class QInstaller::MetadataCache
+ \brief The MetadataCache is a class for a checksum based storage of \c Metadata objects on disk.
+
+ MetadataCache manages a cache storage for a set \l{path()}, which contains
+ a subdirectory for each registered \c Metadata item. The cache has a manifest file in
+ its root directory, which lists the version and type of the cache, and all its items.
+ The file is updated automatically when the metadata cache object is destructed, or
+ it can be updated periodically by calling \l{sync()}.
+*/
+
+/*!
+ Constructs a new empty cache. The cache is invalid until set with a
+ path and initialized.
+*/
+MetadataCache::MetadataCache()
+ : GenericDataCache<Metadata>()
+{
+ setType(QLatin1String("Metadata"));
+ setVersion(QLatin1String(QUOTE(IFW_CACHE_FORMAT_VERSION)));
+}
+
+/*!
+ Constructs a cache to \a path. The cache is initialized automatically.
+*/
+MetadataCache::MetadataCache(const QString &path)
+ : GenericDataCache(path, QLatin1String("Metadata"), QLatin1String(QUOTE(IFW_CACHE_FORMAT_VERSION)))
+{
+}
+
+} // namespace QInstaller
diff --git a/src/libs/installer/metadatacache.h b/src/libs/installer/metadatacache.h
new file mode 100644
index 000000000..804d1b6db
--- /dev/null
+++ b/src/libs/installer/metadatacache.h
@@ -0,0 +1,46 @@
+/**************************************************************************
+**
+** Copyright (C) 2023 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the Qt Installer Framework.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+**************************************************************************/
+
+#ifndef METADATACACHE_H
+#define METADATACACHE_H
+
+#include "genericdatacache.h"
+#include "metadata.h"
+
+namespace QInstaller {
+
+class MetadataCache : public GenericDataCache<Metadata>
+{
+public:
+ MetadataCache();
+ explicit MetadataCache(const QString &path);
+};
+
+} // namespace QInstaller
+
+#endif // METADATACACHE_H
diff --git a/src/libs/installer/metadatajob.cpp b/src/libs/installer/metadatajob.cpp
index 663b209f7..b5883c66c 100644
--- a/src/libs/installer/metadatajob.cpp
+++ b/src/libs/installer/metadatajob.cpp
@@ -42,9 +42,6 @@
#include <QtMath>
#include <QRandomGenerator>
-#define QUOTE_(x) #x
-#define QUOTE(x) QUOTE_(x)
-
namespace QInstaller {
/*!
@@ -192,8 +189,6 @@ bool MetadataJob::resetCache(bool init)
m_metaFromCache.clear();
m_metaFromCache.setPath(m_core->settings().localCachePath());
- m_metaFromCache.setType(QLatin1String("Metadata"));
- m_metaFromCache.setVersion(QLatin1String(QUOTE(IFW_CACHE_FORMAT_VERSION)));
if (!init)
return true;
diff --git a/src/libs/installer/metadatajob.h b/src/libs/installer/metadatajob.h
index 37d9367e5..1dbb28773 100644
--- a/src/libs/installer/metadatajob.h
+++ b/src/libs/installer/metadatajob.h
@@ -33,7 +33,7 @@
#include "fileutils.h"
#include "job.h"
#include "metadata.h"
-#include "genericdatacache.h"
+#include "metadatacache.h"
#include "repository.h"
#include <QFutureWatcher>
@@ -133,7 +133,7 @@ private:
QSet<Repository> m_fetchedCategorizedRepositories;
QHash<QString, Metadata *> m_fetchedMetadata;
- GenericDataCache<Metadata> m_metaFromCache;
+ MetadataCache m_metaFromCache;
};
} // namespace QInstaller
diff --git a/src/libs/installer/metadatajob_p.h b/src/libs/installer/metadatajob_p.h
index 8ab2d9e7d..0bd47b324 100644
--- a/src/libs/installer/metadatajob_p.h
+++ b/src/libs/installer/metadatajob_p.h
@@ -163,7 +163,7 @@ class UpdateCacheTask : public AbstractTask<void>
Q_DISABLE_COPY(UpdateCacheTask)
public:
- UpdateCacheTask(GenericDataCache<Metadata> &cache, QHash<QString, Metadata *> &updates)
+ UpdateCacheTask(MetadataCache &cache, QHash<QString, Metadata *> &updates)
: m_cache(&cache)
, m_updates(&updates)
{}
@@ -177,7 +177,7 @@ public:
QStringList registeredKeys;
bool success = true;
for (auto *meta : qAsConst(*m_updates)) {
- if (!m_cache->registerItem(meta, true, GenericDataCache<Metadata>::Move)) {
+ if (!m_cache->registerItem(meta, true, MetadataCache::Move)) {
success = false;
break;
}
@@ -211,7 +211,7 @@ public:
}
private:
- GenericDataCache<Metadata> *const m_cache;
+ MetadataCache *const m_cache;
QHash<QString, Metadata *> *const m_updates;
};
diff --git a/tests/auto/installer/metadatacache/tst_metadatacache.cpp b/tests/auto/installer/metadatacache/tst_metadatacache.cpp
index 58c7970fb..ce97de9da 100644
--- a/tests/auto/installer/metadatacache/tst_metadatacache.cpp
+++ b/tests/auto/installer/metadatacache/tst_metadatacache.cpp
@@ -30,7 +30,7 @@
#include <errors.h>
#include <fileutils.h>
-#include <genericdatacache.h>
+#include <metadatacache.h>
#include <metadata.h>
#include <repository.h>
@@ -144,7 +144,7 @@ private slots:
void testRegisterItemToEmptyCache()
{
- GenericDataCache<Metadata> cache(m_cachePath, "Metadata", QUOTE(IFW_CACHE_FORMAT_VERSION));
+ MetadataCache cache(m_cachePath);
Metadata *metadata = new Metadata(":/data/local-temp-repository/");
QVERIFY(cache.registerItem(metadata));
@@ -163,7 +163,7 @@ private slots:
{
copyExistingCacheFromResourceTree();
- GenericDataCache<Metadata> cache(m_cachePath, "Metadata", QUOTE(IFW_CACHE_FORMAT_VERSION));
+ MetadataCache cache(m_cachePath);
Metadata *metadata = new Metadata(":/data/local-temp-repository/");
QVERIFY(itemsFromManifest(m_cachePath + "/manifest.json").contains(QLatin1String(m_oldMetadataItemChecksum)));
@@ -183,7 +183,7 @@ private slots:
void testRegisterItemFails()
{
// 1. Test fail due to invalidated cache
- GenericDataCache<Metadata> cache;
+ MetadataCache cache;
Metadata *metadata = new Metadata(":/data/local-temp-repository/");
QVERIFY(!cache.registerItem(metadata));
@@ -223,7 +223,7 @@ private slots:
{
copyExistingCacheFromResourceTree();
- GenericDataCache<Metadata> cache(m_cachePath, "Metadata", QUOTE(IFW_CACHE_FORMAT_VERSION));
+ MetadataCache cache(m_cachePath);
Metadata *metadata = cache.itemByChecksum(m_oldMetadataItemChecksum);
QVERIFY(metadata);
QVERIFY(metadata->isValid());
@@ -248,7 +248,12 @@ private slots:
copyExistingCacheFromResourceTree();
- GenericDataCache<Metadata> cache(m_cachePath, type, version);
+ MetadataCache cache;
+ cache.setType(type);
+ cache.setVersion(version);
+ cache.setPath(m_cachePath);
+ QVERIFY(cache.initialize());
+
QVERIFY(cache.isValid());
QVERIFY(!cache.itemByChecksum(m_oldMetadataItemChecksum));
@@ -259,7 +264,7 @@ private slots:
void testInitializeCacheFails()
{
- GenericDataCache<Metadata> cache;
+ MetadataCache cache;
QVERIFY(!cache.initialize());
QCOMPARE(cache.errorString(), "Cannot initialize cache with empty path.");
}
@@ -268,7 +273,7 @@ private slots:
{
copyExistingCacheFromResourceTree();
- GenericDataCache<Metadata> cache(m_cachePath, "Metadata", QUOTE(IFW_CACHE_FORMAT_VERSION));
+ MetadataCache cache(m_cachePath);
Metadata *metadata = cache.itemByChecksum(m_oldMetadataItemChecksum);
QVERIFY(metadata);
QVERIFY(metadata->isValid());
@@ -282,7 +287,7 @@ private slots:
{
copyExistingCacheFromResourceTree();
- GenericDataCache<Metadata> cache(m_cachePath, "Metadata", QUOTE(IFW_CACHE_FORMAT_VERSION));
+ MetadataCache cache(m_cachePath);
QVERIFY(!cache.removeItem("12345"));
QCOMPARE(cache.errorString(), "Cannot remove item specified by checksum 12345: no such item exists.");
@@ -292,7 +297,7 @@ private slots:
void testRetrieveItemFromCache()
{
- GenericDataCache<Metadata> cache(m_cachePath, "Metadata", QUOTE(IFW_CACHE_FORMAT_VERSION));
+ MetadataCache cache(m_cachePath);
Metadata *metadata = new Metadata(":/data/local-temp-repository/");
QVERIFY(cache.registerItem(metadata));
@@ -310,7 +315,7 @@ private slots:
void testRetrieveItemFails()
{
- GenericDataCache<Metadata> cache(m_cachePath, "Metadata", QUOTE(IFW_CACHE_FORMAT_VERSION));
+ MetadataCache cache(m_cachePath);
Metadata *metadata = new Metadata(":/data/local-temp-repository/");
const QString metadataPath = metadata->path();
@@ -328,7 +333,7 @@ private slots:
{
copyExistingCacheFromResourceTree();
- GenericDataCache<Metadata> cache(m_cachePath, "Metadata", QUOTE(IFW_CACHE_FORMAT_VERSION));
+ MetadataCache cache(m_cachePath);
Metadata *metadata = new Metadata(":/data/local-temp-repository/");
QVERIFY(cache.registerItem(metadata));
@@ -354,7 +359,7 @@ private slots:
void testClearCacheFails()
{
- GenericDataCache<Metadata> cache(m_cachePath, "Metadata", QUOTE(IFW_CACHE_FORMAT_VERSION));
+ MetadataCache cache(m_cachePath);
Metadata *metadata = new Metadata(":/data/local-temp-repository/");
QVERIFY(cache.registerItem(metadata));