summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorKatja Marttila <katja.marttila@qt.io>2020-11-24 06:20:07 +0200
committerKatja Marttila <katja.marttila@qt.io>2020-11-24 06:20:07 +0200
commit79011733f7a00da988d482dde443418c9df38784 (patch)
treeaae5e8dbdd254cb2538e66e4649b1c86d39191ae /tools
parentd863c8abcf29e971e0adb8dcb2fc12971a4e98f1 (diff)
parent13c9e1111d89d1a2a06954c00bb3d3c33d4ecfa3 (diff)
Merge remote-tracking branch 'origin/4.0' into master
Diffstat (limited to 'tools')
-rw-r--r--tools/common/repositorygen.cpp57
-rw-r--r--tools/common/repositorygen.h7
-rw-r--r--tools/repogen/repogen.cpp6
3 files changed, 59 insertions, 11 deletions
diff --git a/tools/common/repositorygen.cpp b/tools/common/repositorygen.cpp
index 5a6c0bf83..45ea0a541 100644
--- a/tools/common/repositorygen.cpp
+++ b/tools/common/repositorygen.cpp
@@ -47,6 +47,7 @@
#include <QtCore/QRegExp>
#include <QtXml/QDomDocument>
+#include <QTemporaryDir>
#include <iostream>
@@ -678,7 +679,7 @@ static void writeSHA1ToNodeWithName(QDomDocument &doc, QDomNodeList &list, const
}
}
-void QInstallerTools::compressMetaDirectories(const QString &repoDir, const QString &baseDir,
+void QInstallerTools::compressMetaDirectories(const QString &repoDir, const QString &existingUnite7zUrl,
const QHash<QString, QString> &versionMapping, bool createSplitMetadata, bool createUnifiedMetadata)
{
QDomDocument doc;
@@ -694,10 +695,11 @@ void QInstallerTools::compressMetaDirectories(const QString &repoDir, const QStr
QStringList absPaths;
if (createUnifiedMetadata) {
- absPaths = unifyMetadata(entryList, repoDir, doc);
+ absPaths = unifyMetadata(repoDir, existingUnite7zUrl, doc);
}
+
if (createSplitMetadata) {
- splitMetadata(entryList, repoDir, doc, baseDir, versionMapping);
+ splitMetadata(entryList, repoDir, doc, versionMapping);
} else {
// remove the files that got compressed
foreach (const QString path, absPaths)
@@ -709,10 +711,12 @@ void QInstallerTools::compressMetaDirectories(const QString &repoDir, const QStr
existingUpdatesXml.close();
}
-QStringList QInstallerTools::unifyMetadata(const QStringList &entryList, const QString &repoDir, QDomDocument doc)
+QStringList QInstallerTools::unifyMetadata(const QString &repoDir, const QString &existingRepoDir, QDomDocument doc)
{
QStringList absPaths;
QDir dir(repoDir);
+ const QStringList entryList = dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot);
+
foreach (const QString &i, entryList) {
dir.cd(i);
const QString absPath = dir.absolutePath();
@@ -720,6 +724,26 @@ QStringList QInstallerTools::unifyMetadata(const QStringList &entryList, const Q
dir.cdUp();
}
+ QTemporaryDir existingRepoTempDir;
+ QString existingRepoTemp = existingRepoTempDir.path();
+ if (!existingRepoDir.isEmpty()) {
+ existingRepoTempDir.setAutoRemove(false);
+ QFile archiveFile(existingRepoDir);
+ QInstaller::openForRead(&archiveFile);
+ Lib7z::extractArchive(&archiveFile, existingRepoTemp);
+ QDir dir(existingRepoTemp);
+ QStringList existingRepoEntries = dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot);
+ foreach (const QString existingRepoEntry, existingRepoEntries) {
+ if (entryList.contains(existingRepoEntry)) {
+ continue;
+ } else {
+ dir.cd(existingRepoEntry);
+ const QString absPath = dir.absolutePath();
+ absPaths.append(absPath);
+ }
+ }
+ }
+
// Compress all metadata from repository to one single 7z
const QString metadataFilename = QDateTime::currentDateTime().
toString(QLatin1String("yyyy-MM-dd-hhmm")) + QLatin1String("_meta.7z");
@@ -745,12 +769,12 @@ QStringList QInstallerTools::unifyMetadata(const QStringList &entryList, const Q
else
node.replaceChild(newNodeTag, nameTag);
}
+ QInstaller::removeDirectory(existingRepoTemp, true);
return absPaths;
}
void QInstallerTools::splitMetadata(const QStringList &entryList, const QString &repoDir,
- QDomDocument doc, const QString &baseDir,
- const QHash<QString, QString> &versionMapping)
+ QDomDocument doc, const QHash<QString, QString> &versionMapping)
{
QStringList absPaths;
QDomNodeList elements = doc.elementsByTagName(QLatin1String("PackageUpdate"));
@@ -758,7 +782,7 @@ void QInstallerTools::splitMetadata(const QStringList &entryList, const QString
foreach (const QString &i, entryList) {
dir.cd(i);
const QString absPath = dir.absolutePath();
- const QString path = QString(i).remove(baseDir);
+ const QString path = QString(i).remove(repoDir);
if (path.isNull())
continue;
const QString versionPrefix = versionMapping[path];
@@ -920,3 +944,22 @@ void QInstallerTools::filterNewComponents(const QString &repositoryDir, QInstall
}
}
}
+
+QString QInstallerTools::existingUniteMeta7z(const QString &repositoryDir)
+{
+ QString uniteMeta7z = QString();
+ QFile file(repositoryDir + QLatin1String("/Updates.xml"));
+ QDomDocument doc;
+ if (file.open(QFile::ReadOnly) && doc.setContent(&file)) {
+ QDomNodeList elements = doc.elementsByTagName(QLatin1String("MetadataName"));
+ if (elements.count() > 0 && elements.at(0).isElement()) {
+ uniteMeta7z = elements.at(0).toElement().text();
+ QFile metaFile(repositoryDir + QDir::separator() + uniteMeta7z);
+ if (!metaFile.exists()) {
+ throw QInstaller::Error(QString::fromLatin1("Unite meta7z \"%1\" does not exist in repository \"%2\"")
+ .arg(QDir::toNativeSeparators(metaFile.fileName()), repositoryDir));
+ }
+ }
+ }
+ return uniteMeta7z;
+}
diff --git a/tools/common/repositorygen.h b/tools/common/repositorygen.h
index eb2d23275..f5202c1fc 100644
--- a/tools/common/repositorygen.h
+++ b/tools/common/repositorygen.h
@@ -67,11 +67,11 @@ PackageInfoVector createListOfRepositoryPackages(const QStringList &repositoryDi
QHash<QString, QString> buildPathToVersionMapping(const PackageInfoVector &info);
-void compressMetaDirectories(const QString &repoDir, const QString &baseDir,
+void compressMetaDirectories(const QString &repoDir, const QString &existingUnite7zUrl,
const QHash<QString, QString> &versionMapping, bool createSplitMetadata, bool createUnifiedMetadata);
-QStringList unifyMetadata(const QStringList &entryList, const QString &repoDir, QDomDocument doc);
-void splitMetadata(const QStringList &entryList, const QString &repoDir, QDomDocument doc, const QString &baseDir,
+QStringList unifyMetadata(const QString &repoDir, const QString &existingRepoDir, QDomDocument doc);
+void splitMetadata(const QStringList &entryList, const QString &repoDir, QDomDocument doc,
const QHash<QString, QString> &versionMapping);
void copyMetaData(const QString &outDir, const QString &dataDir, const PackageInfoVector &packages,
@@ -80,6 +80,7 @@ void copyComponentData(const QStringList &packageDir, const QString &repoDir, Pa
void filterNewComponents(const QString &repositoryDir, QInstallerTools::PackageInfoVector &packages);
+QString existingUniteMeta7z(const QString &repositoryDir);
} // namespace QInstallerTools
diff --git a/tools/repogen/repogen.cpp b/tools/repogen/repogen.cpp
index 76d4f676a..5c67cbc1c 100644
--- a/tools/repogen/repogen.cpp
+++ b/tools/repogen/repogen.cpp
@@ -279,7 +279,11 @@ int main(int argc, char** argv)
QInstallerTools::copyComponentData(directories, repositoryDir, &packages);
QInstallerTools::copyMetaData(tmpMetaDir, repositoryDir, packages, QLatin1String("{AnyApplication}"),
QLatin1String(QUOTE(IFW_REPOSITORY_FORMAT_VERSION)), unite7zFiles);
- QInstallerTools::compressMetaDirectories(tmpMetaDir, tmpMetaDir, pathToVersionMapping,
+
+ QString existing7z = QInstallerTools::existingUniteMeta7z(repositoryDir);
+ if (!existing7z.isEmpty())
+ existing7z = repositoryDir + QDir::separator() + existing7z;
+ QInstallerTools::compressMetaDirectories(tmpMetaDir, existing7z, pathToVersionMapping,
createComponentMetadata, createUnifiedMetadata);
QDirIterator it(repositoryDir, QStringList(QLatin1String("Updates*.xml"))