summaryrefslogtreecommitdiffstats
path: root/src/libs/installer/packagemanagercore_p.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/libs/installer/packagemanagercore_p.cpp')
-rw-r--r--src/libs/installer/packagemanagercore_p.cpp18
1 files changed, 17 insertions, 1 deletions
diff --git a/src/libs/installer/packagemanagercore_p.cpp b/src/libs/installer/packagemanagercore_p.cpp
index 4c35b5426..1e2f4923c 100644
--- a/src/libs/installer/packagemanagercore_p.cpp
+++ b/src/libs/installer/packagemanagercore_p.cpp
@@ -1986,7 +1986,23 @@ void PackageManagerCorePrivate::registerMaintenanceTool()
settings.setValue(QLatin1String("UninstallString"), maintenanceTool);
settings.setValue(QLatin1String("ModifyPath"), QString(maintenanceTool
+ QLatin1String(" --manage-packages")));
- settings.setValue(QLatin1String("EstimatedSize"), QFileInfo(installerBinaryPath()).size());
+ // required disk space of the installed components
+ quint64 estimatedSizeKB = m_core->requiredDiskSpace() / 1024;
+ // add required space for the maintenance tool
+ estimatedSizeKB += QFileInfo(maintenanceTool).size() / 1024;
+ if (m_core->createLocalRepositoryFromBinary()) {
+ // add required space for a local repository
+ quint64 result(0);
+ foreach (QInstaller::Component *component,
+ m_core->components(PackageManagerCore::ComponentType::All)) {
+ result += m_core->size(component, scCompressedSize);
+ }
+ estimatedSizeKB += result / 1024;
+ }
+ // Windows can only handle 32bit REG_DWORD (max. recordable installation size is 4TiB)
+ const quint64 limit = std::numeric_limits<quint32>::max(); // maximum 32 bit value
+ if (estimatedSizeKB <= limit)
+ settings.setValue(QLatin1String("EstimatedSize"), static_cast<quint32>(estimatedSizeKB));
settings.setValue(QLatin1String("NoModify"), 0);
settings.setValue(QLatin1String("NoRepair"), 1);
#endif