diff options
author | Katja Marttila <katja.marttila@qt.io> | 2020-06-10 13:13:47 +0300 |
---|---|---|
committer | Katja Marttila <katja.marttila@qt.io> | 2020-06-11 09:19:15 +0000 |
commit | fb2992faf76ad738687e1e50a2735d4113ff8865 (patch) | |
tree | a1ecc92bb984c4a535cb27c8d6e559d629d9576e | |
parent | f6565bdc455d7b3a10941c29d780b58fc1305ef2 (diff) |
Generate unique metadata name for unified metadata
If the metadata name is the same although the package is updated, it
might cause problems when pushing the data to distribution systems that
requires a filename change in order to replicate content. If the
filename stays the same it may not be refreshed to the cache.
Task-number: QTIFW-1838
Change-Id: I2fc8c1cdf559dab89b57a74ebbe758cdc71da29c
Reviewed-by: Iikka Eklund <iikka.eklund@qt.io>
-rw-r--r-- | src/libs/installer/metadatajob.cpp | 13 | ||||
-rw-r--r-- | tools/common/repositorygen.cpp | 16 |
2 files changed, 24 insertions, 5 deletions
diff --git a/src/libs/installer/metadatajob.cpp b/src/libs/installer/metadatajob.cpp index 4e3edaa05..c500e2ec8 100644 --- a/src/libs/installer/metadatajob.cpp +++ b/src/libs/installer/metadatajob.cpp @@ -627,8 +627,17 @@ MetadataJob::Status MetadataJob::parseUpdatesXml(const QList<FileTaskResult> &re } } else { const QString repoUrl = metadata.repository.url().toString(); - addFileTaskItem(QString::fromLatin1("%1/meta.7z").arg(repoUrl), - metadata.directory + QString::fromLatin1("/meta.7z"), metadata, sha1.toElement().text(), QString()); + QDomElement metadataNameElement = root.firstChildElement(QLatin1String("MetadataName")); + if (!metadataNameElement.isNull()) { + const QString metadataName = metadataNameElement.toElement().text(); + addFileTaskItem(QString::fromLatin1("%1/%2").arg(repoUrl, metadataName), + metadata.directory + QString::fromLatin1("/%1").arg(metadataName), + metadata, sha1.toElement().text(), QString()); + } else { + qCWarning(QInstaller::lcInstallerInstallLog) << + "Unable to find MetadataName element from Updates.xml"; + return XmlDownloadFailure; + } } if (metadata.repository.categoryname().isEmpty()) { diff --git a/tools/common/repositorygen.cpp b/tools/common/repositorygen.cpp index 5341f30a7..4215f127d 100644 --- a/tools/common/repositorygen.cpp +++ b/tools/common/repositorygen.cpp @@ -626,7 +626,7 @@ QHash<QString, QString> QInstallerTools::buildPathToVersionMapping(const Package } static void writeSHA1ToNodeWithName(QDomDocument &doc, QDomNodeList &list, const QByteArray &sha1sum, - const QString &nodename = QString()) + const QString &nodename = QString(), const QString &metadataName = QString()) { if (nodename.isEmpty()) qDebug() << "Searching sha1sum node."; @@ -650,6 +650,13 @@ static void writeSHA1ToNodeWithName(QDomDocument &doc, QDomNodeList &list, const } } else { sha1Node = doc.createElement(scSHA1); + //Create also unique metadata name + if (!metadataName.isEmpty()) { + qDebug() << "Writing the metadata node with name " << metadataName; + QDomNode metaName = doc.createElement(QLatin1String("MetadataName")); + metaName.appendChild(doc.createTextNode(metadataName)); + curNode.appendChild(metaName); + } } qDebug() << "- writing the sha1sum" << sha1Value; sha1Node.appendChild(doc.createTextNode(sha1Value)); @@ -704,14 +711,17 @@ QStringList QInstallerTools::unifyMetadata(const QStringList &entryList, const Q } // Compress all metadata from repository to one single 7z - const QString tmpTarget = repoDir + QLatin1String("/meta.7z"); + const QString metadataFilename = QDateTime::currentDateTime(). + toString(QLatin1String("yyyy-MM-dd-hhmm")) + QLatin1String("_meta.7z"); + QDateTime dateTime = QDateTime::currentDateTime(); + const QString tmpTarget = repoDir + QDir::separator() + metadataFilename; Lib7z::createArchive(tmpTarget, absPaths, Lib7z::TmpFile::No); QFile tmp(tmpTarget); tmp.open(QFile::ReadOnly); const QByteArray sha1Sum = QInstaller::calculateHash(&tmp, QCryptographicHash::Sha1); QDomNodeList elements = doc.elementsByTagName(QLatin1String("Updates")); - writeSHA1ToNodeWithName(doc, elements, sha1Sum, QString()); + writeSHA1ToNodeWithName(doc, elements, sha1Sum, QString(), metadataFilename); return absPaths; } |