diff options
author | Katja Marttila <katja.marttila@qt.io> | 2020-06-16 08:52:50 +0300 |
---|---|---|
committer | Katja Marttila <katja.marttila@qt.io> | 2020-06-16 09:18:59 +0300 |
commit | 1359ff4de3d86601dd988fab0c35619f5a842488 (patch) | |
tree | dbf2fe75592afb652a886af606ae2e8ab0a817d8 | |
parent | fb2992faf76ad738687e1e50a2735d4113ff8865 (diff) |
Require both SHA1 and MetadataName elements for united metadata
Installer can fetch either meta per component or meta per repository.
Fetch meta per repository only when both MetadataName and SHA1 elements
are found, otherwise fetch meta per component.
Change-Id: Ic6d687525c74d5870cec991dea9dedf765b2df03
Reviewed-by: Iikka Eklund <iikka.eklund@qt.io>
-rw-r--r-- | src/libs/installer/metadatajob.cpp | 28 |
1 files changed, 11 insertions, 17 deletions
diff --git a/src/libs/installer/metadatajob.cpp b/src/libs/installer/metadatajob.cpp index c500e2ec8..4c84dfae8 100644 --- a/src/libs/installer/metadatajob.cpp +++ b/src/libs/installer/metadatajob.cpp @@ -595,12 +595,19 @@ MetadataJob::Status MetadataJob::parseUpdatesXml(const QList<FileTaskResult> &re if (!checksum.isNull()) testCheckSum = (checksum.toElement().text().toLower() == scTrue); - // If we have top level sha1 element, we have compressed all metadata inside - // one repository to a single 7z file. Fetch that instead of component specific - // meta 7z files. + // If we have top level sha1 and MetadataName elements, we have compressed + // all metadata inside one repository to a single 7z file. Fetch that + // instead of component specific meta 7z files. const QDomNode sha1 = root.firstChildElement(scSHA1); + QDomElement metadataNameElement = root.firstChildElement(QLatin1String("MetadataName")); QDomNodeList children = root.childNodes(); - if (sha1.isNull()) { + if (!sha1.isNull() && !metadataNameElement.isNull()) { + const QString repoUrl = metadata.repository.url().toString(); + 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 { bool metaFound = false; for (int i = 0; i < children.count(); ++i) { const QDomElement el = children.at(i).toElement(); @@ -625,19 +632,6 @@ MetadataJob::Status MetadataJob::parseUpdatesXml(const QList<FileTaskResult> &re } } } - } else { - const QString repoUrl = metadata.repository.url().toString(); - 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()) { |