From 92b00db08fa6b9fb8f818cdef55c7578998c8ecf Mon Sep 17 00:00:00 2001 From: Katja Marttila Date: Wed, 24 Feb 2021 11:31:45 +0200 Subject: Refactor repogen for easier testing Functionality is only moved from repogen.cpp to repositorygen.cpp. This makes the repository testing much easier. Change-Id: I2078e2880955c71b9ffa0ac46501eafbd499c3ba Reviewed-by: Arttu Tarkiainen --- src/libs/ifwtools/repositorygen.cpp | 64 ++++++++++++++++++++++++++++++++++++- src/libs/ifwtools/repositorygen.h | 11 ++++++- 2 files changed, 73 insertions(+), 2 deletions(-) (limited to 'src/libs/ifwtools') diff --git a/src/libs/ifwtools/repositorygen.cpp b/src/libs/ifwtools/repositorygen.cpp index fbcf7b9f3..c269f4931 100644 --- a/src/libs/ifwtools/repositorygen.cpp +++ b/src/libs/ifwtools/repositorygen.cpp @@ -1,6 +1,6 @@ /************************************************************************** ** -** Copyright (C) 2020 The Qt Company Ltd. +** Copyright (C) 2021 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the Qt Installer Framework. @@ -52,6 +52,9 @@ #include +#define QUOTE_(x) #x +#define QUOTE(x) QUOTE_(x) + using namespace QInstaller; using namespace QInstallerTools; @@ -987,3 +990,62 @@ QString QInstallerTools::existingUniteMeta7z(const QString &repositoryDir) } return uniteMeta7z; } + +PackageInfoVector QInstallerTools::collectPackages(RepositoryInfo info, QStringList *filteredPackages, FilterType filterType, bool updateNewComponents) +{ + PackageInfoVector packages; + PackageInfoVector precompressedPackages = QInstallerTools::createListOfRepositoryPackages(info.repositoryPackages, + filteredPackages, filterType); + packages.append(precompressedPackages); + + PackageInfoVector preparedPackages = QInstallerTools::createListOfPackages(info.packages, + filteredPackages, filterType); + packages.append(preparedPackages); + if (updateNewComponents) { + filterNewComponents(info.repositoryDir, packages); + } + + foreach (const QInstallerTools::PackageInfo &package, packages) { + const QFileInfo fi(info.repositoryDir, package.name); + if (fi.exists()) + removeDirectory(fi.absoluteFilePath()); + } + + return packages; +} + +void QInstallerTools::createRepository(RepositoryInfo info, PackageInfoVector *packages, + const QString &tmpMetaDir, bool createComponentMetadata, bool createUnifiedMetadata) +{ + QHash pathToVersionMapping = QInstallerTools::buildPathToVersionMapping(*packages); + + QStringList directories; + directories.append(info.packages); + directories.append(info.repositoryPackages); + QStringList unite7zFiles; + foreach (const QString &repositoryDirectory, info.repositoryPackages) { + QDirIterator it(repositoryDirectory, QStringList(QLatin1String("*_meta.7z")) + , QDir::Files | QDir::CaseSensitive); + while (it.hasNext()) { + it.next(); + unite7zFiles.append(it.fileInfo().absoluteFilePath()); + } + } + QInstallerTools::copyComponentData(directories, info.repositoryDir, packages); + QInstallerTools::copyMetaData(tmpMetaDir, info.repositoryDir, *packages, QLatin1String("{AnyApplication}"), + QLatin1String(QUOTE(IFW_REPOSITORY_FORMAT_VERSION)), unite7zFiles); + + QString existing7z = QInstallerTools::existingUniteMeta7z(info.repositoryDir); + if (!existing7z.isEmpty()) + existing7z = info.repositoryDir + QDir::separator() + existing7z; + QInstallerTools::compressMetaDirectories(tmpMetaDir, existing7z, pathToVersionMapping, + createComponentMetadata, createUnifiedMetadata); + + QDirIterator it(info.repositoryDir, QStringList(QLatin1String("Updates*.xml")) + << QLatin1String("*_meta.7z"), QDir::Files | QDir::CaseSensitive); + while (it.hasNext()) { + it.next(); + QFile::remove(it.fileInfo().absoluteFilePath()); + } + QInstaller::moveDirectoryContents(tmpMetaDir, info.repositoryDir); +} diff --git a/src/libs/ifwtools/repositorygen.h b/src/libs/ifwtools/repositorygen.h index 49d0a51dd..7204a0e13 100644 --- a/src/libs/ifwtools/repositorygen.h +++ b/src/libs/ifwtools/repositorygen.h @@ -1,6 +1,6 @@ /************************************************************************** ** -** Copyright (C) 2020 The Qt Company Ltd. +** Copyright (C) 2021 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the Qt Installer Framework. @@ -56,6 +56,13 @@ enum IFWTOOLS_EXPORT FilterType { Exclude }; +struct IFWTOOLS_EXPORT RepositoryInfo +{ + QStringList packages; + QStringList repositoryPackages; + QString repositoryDir; +}; + void IFWTOOLS_EXPORT printRepositoryGenOptions(); QString IFWTOOLS_EXPORT makePathAbsolute(const QString &path); void IFWTOOLS_EXPORT copyWithException(const QString &source, const QString &target, const QString &kind = QString()); @@ -82,6 +89,8 @@ void IFWTOOLS_EXPORT copyComponentData(const QStringList &packageDir, const QStr void IFWTOOLS_EXPORT filterNewComponents(const QString &repositoryDir, QInstallerTools::PackageInfoVector &packages); QString IFWTOOLS_EXPORT existingUniteMeta7z(const QString &repositoryDir); +PackageInfoVector IFWTOOLS_EXPORT collectPackages(RepositoryInfo info, QStringList *filteredPackages, FilterType filterType, bool updateNewComponents); +void IFWTOOLS_EXPORT createRepository(RepositoryInfo info, PackageInfoVector *packages, const QString &tmpMetaDir, bool createComponentMetadata, bool createUnifiedMetadata); } // namespace QInstallerTools -- cgit v1.2.3