From 34adba4642ed75ada0468c278e81b868f7c375f2 Mon Sep 17 00:00:00 2001 From: Arttu Tarkiainen Date: Mon, 22 Mar 2021 16:54:36 +0200 Subject: CLI: Fix offline installer creation with empty component meta-archive Task-number: QTIFW-2189 Change-Id: Ic6f56156194039cca7bebf095fad8c1fc66fc275 Reviewed-by: Qt CI Bot Reviewed-by: Katja Marttila --- src/libs/installer/metadatajob.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'src/libs') diff --git a/src/libs/installer/metadatajob.cpp b/src/libs/installer/metadatajob.cpp index a8405a0e8..2a9cb5ae7 100644 --- a/src/libs/installer/metadatajob.cpp +++ b/src/libs/installer/metadatajob.cpp @@ -654,8 +654,11 @@ MetadataJob::Status MetadataJob::parseUpdatesXml(const QList &re metaFound = parsePackageUpdate(c2, packageName, packageVersion, packageHash, online, testCheckSum); - //If meta element (script, licenses, etc.) is not found, no need to fetch metadata - if (metaFound) { + // If meta element (script, licenses, etc.) is not found, no need to fetch metadata. + // The offline-generator instance is an exception to this - if the Updates.xml contains + // checksum element for the meta-archive, we will fetch it, so that the temporary + // location contents match the remote repository. + if (metaFound || (m_core->isOfflineGenerator() && !packageHash.isEmpty())) { const QString repoUrl = metadata.repository.url().toString(); addFileTaskItem(QString::fromLatin1("%1/%2/%3meta.7z").arg(repoUrl, packageName, packageVersion), metadata.directory + QString::fromLatin1("/%1-%2-meta.7z").arg(packageName, packageVersion), -- cgit v1.2.3 From 6122f6e2e5efa17967a8004c368290afc2fa27f1 Mon Sep 17 00:00:00 2001 From: Arttu Tarkiainen Date: Fri, 26 Mar 2021 15:45:35 +0200 Subject: CLI: Calculate required temporary and installation disk space Task-number: QTIFW-2197 Change-Id: I63a0bb265105f5a722ab8c645fa3511328bbcb33 Reviewed-by: Qt CI Bot Reviewed-by: Katja Marttila --- src/libs/installer/packagemanagercore.cpp | 5 ++++- src/libs/installer/packagemanagercore_p.cpp | 7 ++++++- 2 files changed, 10 insertions(+), 2 deletions(-) (limited to 'src/libs') diff --git a/src/libs/installer/packagemanagercore.cpp b/src/libs/installer/packagemanagercore.cpp index ddfc0f832..5b36f8bc6 100644 --- a/src/libs/installer/packagemanagercore.cpp +++ b/src/libs/installer/packagemanagercore.cpp @@ -733,7 +733,7 @@ quint64 PackageManagerCore::requiredDiskSpace() const quint64 result = 0; foreach (QInstaller::Component *component, orderedComponentsToInstall()) - result += size(component, scUncompressedSize); + result += size(component, isOfflineGenerator() ? scCompressedSize : scUncompressedSize); return result; } @@ -2653,6 +2653,9 @@ bool PackageManagerCore::checkAvailableSpace(QString &message) const // if we create a local repository, take that space into account as well required += repositorySize; } + // if we create offline installer, take current executable size into account + if (isOfflineGenerator()) + required += QFile(QCoreApplication::applicationFilePath()).size(); qDebug() << "Installation space required:" << humanReadableSize(required) << "Temporary space " "required:" << humanReadableSize(tempRequired) << "Local repository size:" diff --git a/src/libs/installer/packagemanagercore_p.cpp b/src/libs/installer/packagemanagercore_p.cpp index f4670c738..fbc3f473d 100644 --- a/src/libs/installer/packagemanagercore_p.cpp +++ b/src/libs/installer/packagemanagercore_p.cpp @@ -2806,7 +2806,12 @@ bool PackageManagerCorePrivate::calculateComponentsAndRun() qCDebug(QInstaller::lcInstallerInstallLog) << "Installation canceled."; } else if (componentsOk && acceptLicenseAgreements()) { qCDebug(QInstaller::lcInstallerInstallLog).noquote() << htmlToString(htmlOutput); - if (!(m_autoConfirmCommand || askUserConfirmCommand())) { + + QString spaceInfo; + const bool spaceOk = m_core->checkAvailableSpace(spaceInfo); + qCDebug(QInstaller::lcInstallerInstallLog) << spaceInfo; + + if (!spaceOk || !(m_autoConfirmCommand || askUserConfirmCommand())) { qCDebug(QInstaller::lcInstallerInstallLog) << "Installation aborted."; } else if (m_core->run()) { // Write maintenance tool if required -- cgit v1.2.3 From 12b44ee5198165df1933576e0c6df14b6ed27010 Mon Sep 17 00:00:00 2001 From: Arttu Tarkiainen Date: Fri, 26 Mar 2021 12:55:47 +0200 Subject: Fix segfault when selecting non-existing component from script Task-number: QTIFW-2195 Change-Id: Iaf75d4a4ff20f20a36c0b2d21abb3969b86b5a84 Reviewed-by: Katja Marttila --- src/libs/installer/packagemanagercore_p.cpp | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'src/libs') diff --git a/src/libs/installer/packagemanagercore_p.cpp b/src/libs/installer/packagemanagercore_p.cpp index fbc3f473d..d1e482912 100644 --- a/src/libs/installer/packagemanagercore_p.cpp +++ b/src/libs/installer/packagemanagercore_p.cpp @@ -2279,6 +2279,11 @@ void PackageManagerCorePrivate::setComponentSelection(const QString &id, Qt::Che { ComponentModel *model = m_core->isUpdater() ? m_core->updaterComponentModel() : m_core->defaultComponentModel(); Component *component = m_core->componentByName(id); + if (!component) { + qCWarning(QInstaller::lcInstallerInstallLog).nospace() + << "Unable to set selection for: " << id << ". Component not found."; + return; + } const QModelIndex &idx = model->indexFromComponentName(component->treeName()); if (idx.isValid()) model->setData(idx, state, Qt::CheckStateRole); -- cgit v1.2.3