summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKatja Marttila <katja.marttila@qt.io>2018-12-18 07:44:20 +0000
committerThe Qt Project <gerrit-noreply@qt-project.org>2018-12-18 07:44:20 +0000
commit72d55882da62de7f10b8cbca19281824fff9ebe4 (patch)
tree4817a8e7e9766e877cb54be216359c0b9509d056
parent9215e91d7a0701d63e28e04d5f0984bfebd81dc0 (diff)
parentb4772841a90f8d9cf48416552703ba2b6a7c577b (diff)
Merge "Merge remote-tracking branch 'origin/3.0' into master"
-rw-r--r--Changelog12
-rw-r--r--doc/installerfw-online.qdocconf2
-rw-r--r--examples/registervirtualcomponentforuninstall/README6
-rw-r--r--examples/registervirtualcomponentforuninstall/config/config.xml10
-rw-r--r--examples/registervirtualcomponentforuninstall/config/controller.qs9
-rw-r--r--examples/registervirtualcomponentforuninstall/packages/component/data/selectedcomponent0
-rw-r--r--examples/registervirtualcomponentforuninstall/packages/component/meta/package.xml8
-rw-r--r--examples/registervirtualcomponentforuninstall/packages/org.qtproject.ifw.example.registercomponent/data/registercomponent0
-rw-r--r--examples/registervirtualcomponentforuninstall/packages/org.qtproject.ifw.example.registercomponent/meta/package.xml9
-rw-r--r--examples/registervirtualcomponentforuninstall/registercomponentforinstall.pro13
-rw-r--r--src/libs/installer/extractarchiveoperation.cpp13
-rw-r--r--src/libs/installer/extractarchiveoperation.h1
-rw-r--r--src/libs/installer/packagemanagercore.cpp21
-rw-r--r--src/libs/installer/packagemanagercore.h2
-rw-r--r--src/libs/installer/packagemanagercore_p.cpp9
-rw-r--r--src/libs/installer/packagemanagergui.cpp15
-rw-r--r--src/libs/installer/packagemanagergui.h1
-rw-r--r--src/sdk/installerbase.cpp12
-rw-r--r--src/sdk/tabcontroller.cpp12
-rw-r--r--src/sdk/tabcontroller.h2
-rw-r--r--src/sdk/translations/ifw_da.ts4
-rw-r--r--src/sdk/translations/ifw_de.ts4
-rw-r--r--src/sdk/translations/ifw_es.ts4
-rw-r--r--src/sdk/translations/ifw_fr.ts4
-rw-r--r--src/sdk/translations/ifw_it.ts4
-rw-r--r--src/sdk/translations/ifw_ja.ts4
-rw-r--r--src/sdk/translations/ifw_pl.ts4
-rw-r--r--src/sdk/translations/ifw_ru.ts4
-rw-r--r--src/sdk/translations/ifw_zh_CN.ts4
-rw-r--r--tools/binarycreator/binarycreator.cpp7
30 files changed, 138 insertions, 62 deletions
diff --git a/Changelog b/Changelog
index e533861e3..1f3600c11 100644
--- a/Changelog
+++ b/Changelog
@@ -1,3 +1,15 @@
+3.0.6
+- Remove 'Your install seems to be corrupted' messagebox (QTIFW-1003)
+- Register virtual component for uninstall (QTIFW-1102)
+- Optimize ExctractArchiveOperation::fileFinished() (QTBUG-51337)
+- Do not reset core data values in restart (QTIFW-504)
+- Fix maintenancetool writing in Windows (QTIFW-1096)
+- Fix environment variables for XDG paths not being recognized (QTIFW-1043)
+- Update german translation file (QTIFW-1084)
+- Fix admin query retry (QTIFW-988, QTIFW-1173)
+- Fix install fail if there is no metadata (QTIFW-1150)
+- Reset meta information download result (QTIFW-1137)
+
3.0.5
- Decrease metadata dowload amount (QTIFW-975)
- Print component warnings only in verbose mode (QTIFW-975)
diff --git a/doc/installerfw-online.qdocconf b/doc/installerfw-online.qdocconf
index a13ad9df2..b93b52ef2 100644
--- a/doc/installerfw-online.qdocconf
+++ b/doc/installerfw-online.qdocconf
@@ -4,7 +4,7 @@ include(config/ifw.qdocconf)
HTML.footer = \
" </div>\n" \
" <p class=\"copy-notice\">\n" \
- " <acronym title=\"Copyright\">&copy;</acronym> 2017 The Qt Company Ltd.\n" \
+ " <acronym title=\"Copyright\">&copy;</acronym> 2018 The Qt Company Ltd.\n" \
" Documentation contributions included herein are the copyrights of\n" \
" their respective owners. " \
" The documentation provided herein is licensed under the terms of the" \
diff --git a/examples/registervirtualcomponentforuninstall/README b/examples/registervirtualcomponentforuninstall/README
new file mode 100644
index 000000000..930efa5ed
--- /dev/null
+++ b/examples/registervirtualcomponentforuninstall/README
@@ -0,0 +1,6 @@
+Shows how to register virtual component to uninstall in component script.
+
+Generate installer with
+
+binarycreator --offline-only -c config/config.xml -p packages installer
+
diff --git a/examples/registervirtualcomponentforuninstall/config/config.xml b/examples/registervirtualcomponentforuninstall/config/config.xml
new file mode 100644
index 000000000..48b5c7438
--- /dev/null
+++ b/examples/registervirtualcomponentforuninstall/config/config.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Installer>
+ <Name>Register Component to Uninstall Example</Name>
+ <Version>1.0.0</Version>
+ <Title>Register Component to Uninstall Example</Title>
+ <Publisher>Qt-Project</Publisher>
+ <StartMenuDir>Qt IFW Examples</StartMenuDir>
+ <TargetDir>@HomeDir@/IfwExamples/registercomponenttouninstall</TargetDir>
+ <ControlScript>controller.qs</ControlScript>
+</Installer>
diff --git a/examples/registervirtualcomponentforuninstall/config/controller.qs b/examples/registervirtualcomponentforuninstall/config/controller.qs
new file mode 100644
index 000000000..ba1e74651
--- /dev/null
+++ b/examples/registervirtualcomponentforuninstall/config/controller.qs
@@ -0,0 +1,9 @@
+function Controller() {
+
+}
+
+Controller.prototype.ComponentSelectionPageCallback = function() {
+
+ var page = gui.pageWidgetByObjectName("ComponentSelectionPage");
+ page.addVirtualComponentToUninstall("component")
+}
diff --git a/examples/registervirtualcomponentforuninstall/packages/component/data/selectedcomponent b/examples/registervirtualcomponentforuninstall/packages/component/data/selectedcomponent
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/examples/registervirtualcomponentforuninstall/packages/component/data/selectedcomponent
diff --git a/examples/registervirtualcomponentforuninstall/packages/component/meta/package.xml b/examples/registervirtualcomponentforuninstall/packages/component/meta/package.xml
new file mode 100644
index 000000000..9e02c2885
--- /dev/null
+++ b/examples/registervirtualcomponentforuninstall/packages/component/meta/package.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Package>
+ <DisplayName>Component selected from script</DisplayName>
+ <Description>This component is selected to uninstall in script</Description>
+ <Version>1.0.0-1</Version>
+ <ReleaseDate>2018-02-02</ReleaseDate>
+ <Virtual>true</Virtual>
+</Package>
diff --git a/examples/registervirtualcomponentforuninstall/packages/org.qtproject.ifw.example.registercomponent/data/registercomponent b/examples/registervirtualcomponentforuninstall/packages/org.qtproject.ifw.example.registercomponent/data/registercomponent
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/examples/registervirtualcomponentforuninstall/packages/org.qtproject.ifw.example.registercomponent/data/registercomponent
diff --git a/examples/registervirtualcomponentforuninstall/packages/org.qtproject.ifw.example.registercomponent/meta/package.xml b/examples/registervirtualcomponentforuninstall/packages/org.qtproject.ifw.example.registercomponent/meta/package.xml
new file mode 100644
index 000000000..431ff2441
--- /dev/null
+++ b/examples/registervirtualcomponentforuninstall/packages/org.qtproject.ifw.example.registercomponent/meta/package.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Package>
+ <DisplayName>Registers component for install</DisplayName>
+ <Description>Register a component for installation</Description>
+ <Version>1.0.0-1</Version>
+ <ReleaseDate>2013-01-01</ReleaseDate>
+ <Default>true</Default>
+ <Dependencies>component</Dependencies>
+</Package>
diff --git a/examples/registervirtualcomponentforuninstall/registercomponentforinstall.pro b/examples/registervirtualcomponentforuninstall/registercomponentforinstall.pro
new file mode 100644
index 000000000..415df49d5
--- /dev/null
+++ b/examples/registervirtualcomponentforuninstall/registercomponentforinstall.pro
@@ -0,0 +1,13 @@
+TEMPLATE = aux
+
+INSTALLER = installer
+
+INPUT = $$PWD/config/config.xml $$PWD/packages
+example.input = INPUT
+example.output = $$INSTALLER
+example.commands = ../../bin/binarycreator -c $$PWD/config/config.xml -p $$PWD/packages ${QMAKE_FILE_OUT}
+example.CONFIG += target_predeps no_link combine
+
+QMAKE_EXTRA_COMPILERS += example
+
+OTHER_FILES = README
diff --git a/src/libs/installer/extractarchiveoperation.cpp b/src/libs/installer/extractarchiveoperation.cpp
index c41f029e3..12608a0d1 100644
--- a/src/libs/installer/extractarchiveoperation.cpp
+++ b/src/libs/installer/extractarchiveoperation.cpp
@@ -30,6 +30,7 @@
#include <QEventLoop>
#include <QThreadPool>
+#include <QFileInfo>
namespace QInstaller {
@@ -67,6 +68,11 @@ bool ExtractArchiveOperation::performOperation()
connect(runnable, &Runnable::finished, &receiver, &Receiver::runnableFinished,
Qt::QueuedConnection);
+ m_files.clear();
+
+ QFileInfo fileInfo(archivePath);
+ emit outputTextChanged(tr("Extracting \"%1\"").arg(fileInfo.fileName()));
+
QEventLoop loop;
connect(&receiver, &Receiver::finished, &loop, &QEventLoop::quit);
if (QThreadPool::globalInstance()->tryStart(runnable)) {
@@ -77,6 +83,8 @@ bool ExtractArchiveOperation::performOperation()
receiver.runnableFinished(true, QString());
}
+ setValue(QLatin1String("files"), m_files);
+
// TODO: Use backups for rollback, too? Doesn't work for uninstallation though.
// delete all backups we can delete right now, remember the rest
@@ -121,10 +129,7 @@ bool ExtractArchiveOperation::testOperation()
*/
void ExtractArchiveOperation::fileFinished(const QString &filename)
{
- QStringList files = value(QLatin1String("files")).toStringList();
- files.prepend(filename);
- setValue(QLatin1String("files"), files);
- emit outputTextChanged(QDir::toNativeSeparators(filename));
+ m_files.prepend(filename);
}
} // namespace QInstaller
diff --git a/src/libs/installer/extractarchiveoperation.h b/src/libs/installer/extractarchiveoperation.h
index 45c67a9cb..3e75a9bb9 100644
--- a/src/libs/installer/extractarchiveoperation.h
+++ b/src/libs/installer/extractarchiveoperation.h
@@ -56,6 +56,7 @@ private Q_SLOTS:
void fileFinished(const QString &progress);
private:
+ QStringList m_files;
class Callback;
class Runnable;
class Receiver;
diff --git a/src/libs/installer/packagemanagercore.cpp b/src/libs/installer/packagemanagercore.cpp
index 0e20ff8e9..0c814288e 100644
--- a/src/libs/installer/packagemanagercore.cpp
+++ b/src/libs/installer/packagemanagercore.cpp
@@ -433,6 +433,7 @@ void PackageManagerCore::writeMaintenanceTool()
dropAdminRights();
d->m_needToWriteMaintenanceTool = false;
} catch (const Error &error) {
+ qCritical() << "Error writing Maintenance Tool: " << error.message();
MessageBoxHandler::critical(MessageBoxHandler::currentBestSuitParent(),
QLatin1String("WriteError"), tr("Error writing Maintenance Tool"), error.message(),
QMessageBox::Ok, QMessageBox::Ok);
@@ -449,17 +450,16 @@ void PackageManagerCore::writeMaintenanceConfigFiles()
}
/*!
- Resets the class to its initial state and applies the values of the
- parameters specified by \a params.
+ Resets the class to its initial state.
*/
-void PackageManagerCore::reset(const QHash<QString, QString> &params)
+void PackageManagerCore::reset()
{
d->m_completeUninstall = false;
d->m_needsHardRestart = false;
d->m_status = PackageManagerCore::Unfinished;
d->m_installerBaseBinaryUnreplaced.clear();
-
- d->initialize(params);
+ d->m_coreCheckedHash.clear();
+ d->m_componentsToInstallCalculated = false;
}
/*!
@@ -868,14 +868,9 @@ PackageManagerCore::PackageManagerCore(qint64 magicmaker, const QList<OperationB
if (!packagesWithoutOperation.isEmpty() || !orphanedOperations.isEmpty()) {
qCritical() << "Operations missing for installed packages" << packagesWithoutOperation.toList();
qCritical() << "Orphaned operations" << orphanedOperations.toList();
- MessageBoxHandler::critical(
- MessageBoxHandler::currentBestSuitParent(),
- QLatin1String("Corrupt_Installation_Error"),
- QCoreApplication::translate("QInstaller", "Corrupt installation"),
- QCoreApplication::translate("QInstaller",
- "Your installation seems to be corrupted. "
- "Please consider re-installing from scratch."
- ));
+ qCritical() << "Your installation seems to be corrupted. Please consider re-installing from scratch, "
+ "remove the packages from components.xml which operations are missing, "
+ "or reinstall the packages.";
} else {
qDebug() << "Operations sanity check succeeded.";
}
diff --git a/src/libs/installer/packagemanagercore.h b/src/libs/installer/packagemanagercore.h
index c05374ce9..9f8d1a304 100644
--- a/src/libs/installer/packagemanagercore.h
+++ b/src/libs/installer/packagemanagercore.h
@@ -133,7 +133,7 @@ public:
bool fetchCompressedPackagesTree();
bool run();
- void reset(const QHash<QString, QString> &params);
+ void reset();
void setGuiObject(QObject *gui);
QObject *guiObject() const;
diff --git a/src/libs/installer/packagemanagercore_p.cpp b/src/libs/installer/packagemanagercore_p.cpp
index 3869711af..ccb80306e 100644
--- a/src/libs/installer/packagemanagercore_p.cpp
+++ b/src/libs/installer/packagemanagercore_p.cpp
@@ -1854,9 +1854,11 @@ void PackageManagerCorePrivate::installComponent(Component *component, double pr
const int opCount = operations.count();
// show only components which do something, MinimumProgress is only for progress calculation safeness
+ bool showDetailsLog = false;
if (opCount > 1 || (opCount == 1 && operations.at(0)->name() != QLatin1String("MinimumProgress"))) {
- ProgressCoordinator::instance()->emitLabelAndDetailTextChanged(tr("\nInstalling component %1")
- .arg(component->displayName()));
+ ProgressCoordinator::instance()->emitLabelAndDetailTextChanged(tr("\nInstalling component %1...")
+ .arg(component->displayName()));
+ showDetailsLog = true;
}
foreach (Operation *operation, operations) {
@@ -1941,6 +1943,9 @@ void PackageManagerCorePrivate::installComponent(Component *component, double pr
component->setInstalled();
component->markAsPerformedInstallation();
+
+ if (showDetailsLog)
+ ProgressCoordinator::instance()->emitDetailTextChanged(tr("Done"));
}
// -- private
diff --git a/src/libs/installer/packagemanagergui.cpp b/src/libs/installer/packagemanagergui.cpp
index 39235317d..0e2577850 100644
--- a/src/libs/installer/packagemanagergui.cpp
+++ b/src/libs/installer/packagemanagergui.cpp
@@ -1988,6 +1988,21 @@ void ComponentSelectionPage::allowCompressedRepositoryInstall()
d->allowCompressedRepositoryInstall();
}
+bool ComponentSelectionPage::addVirtualComponentToUninstall(const QString &name)
+{
+ PackageManagerCore *core = packageManagerCore();
+ const QList<Component *> allComponents = core->components(PackageManagerCore::ComponentType::All);
+ Component *component = PackageManagerCore::componentByName(
+ name, allComponents);
+ if (component && component->isInstalled() && component->isVirtual()) {
+ component->setCheckState(Qt::Unchecked);
+ core->componentsToInstallNeedsRecalculation();
+ qDebug() << "Virtual component " << name << " was selected for uninstall by script.";
+ return true;
+ }
+ return false;
+}
+
void ComponentSelectionPage::setModified(bool modified)
{
setComplete(modified);
diff --git a/src/libs/installer/packagemanagergui.h b/src/libs/installer/packagemanagergui.h
index 48f5089c0..b233086c3 100644
--- a/src/libs/installer/packagemanagergui.h
+++ b/src/libs/installer/packagemanagergui.h
@@ -312,6 +312,7 @@ public:
Q_INVOKABLE void selectComponent(const QString &id);
Q_INVOKABLE void deselectComponent(const QString &id);
Q_INVOKABLE void allowCompressedRepositoryInstall();
+ Q_INVOKABLE bool addVirtualComponentToUninstall(const QString &name);
protected:
void entering();
diff --git a/src/sdk/installerbase.cpp b/src/sdk/installerbase.cpp
index 5d5028be1..872600f19 100644
--- a/src/sdk/installerbase.cpp
+++ b/src/sdk/installerbase.cpp
@@ -243,13 +243,11 @@ int InstallerBase::run()
.isSet(QLatin1String(CommandLineOptions::CreateLocalRepository))
|| m_core->settings().createLocalRepository());
- QHash<QString, QString> params;
const QStringList positionalArguments = parser.positionalArguments();
foreach (const QString &argument, positionalArguments) {
if (argument.contains(QLatin1Char('='))) {
const QString name = argument.section(QLatin1Char('='), 0, 0);
const QString value = argument.section(QLatin1Char('='), 1, 1);
- params.insert(name, value);
m_core->setValue(name, value);
}
}
@@ -308,17 +306,11 @@ int InstallerBase::run()
//create the wizard GUI
TabController controller(0);
controller.setManager(m_core);
- controller.setManagerParams(params);
controller.setControlScript(controlScript);
- if (m_core->isInstaller()) {
+ if (m_core->isInstaller())
controller.setGui(new InstallerGui(m_core));
- }
- else {
+ else
controller.setGui(new MaintenanceGui(m_core));
- //Start listening to setValue changes that newly installed components might have
- connect(m_core, &QInstaller::PackageManagerCore::valueChanged, &controller,
- &TabController::updateManagerParams);
- }
QInstaller::PackageManagerCore::Status status =
QInstaller::PackageManagerCore::Status(controller.init());
diff --git a/src/sdk/tabcontroller.cpp b/src/sdk/tabcontroller.cpp
index 760e7dc38..dc4549d50 100644
--- a/src/sdk/tabcontroller.cpp
+++ b/src/sdk/tabcontroller.cpp
@@ -102,11 +102,6 @@ void TabController::setManager(QInstaller::PackageManagerCore *core)
d->m_core = core;
}
-void TabController::setManagerParams(const QHash<QString, QString> &params)
-{
- d->m_params = params;
-}
-
// -- public slots
int TabController::init()
@@ -143,8 +138,8 @@ int TabController::init()
void TabController::restartWizard()
{
+ d->m_core->reset();
if (d->m_networkSettingsChanged) {
- d->m_core->reset(d->m_params);
d->m_networkSettingsChanged = false;
d->m_core->settings().setFtpProxy(d->m_settings.ftpProxy());
@@ -199,8 +194,3 @@ void TabController::onNetworkSettingsChanged(const QInstaller::Settings &setting
d->m_settings = settings;
d->m_networkSettingsChanged = true;
}
-
-void TabController::updateManagerParams(const QString &key, const QString &value)
-{
- d->m_params.insert(key, value);
-}
diff --git a/src/sdk/tabcontroller.h b/src/sdk/tabcontroller.h
index a314cb15b..5fc63aff3 100644
--- a/src/sdk/tabcontroller.h
+++ b/src/sdk/tabcontroller.h
@@ -51,13 +51,11 @@ public:
void setGui(QInstaller::PackageManagerGui *gui);
void setManager(QInstaller::PackageManagerCore *core);
- void setManagerParams(const QHash<QString, QString> &params);
void setControlScript(const QString &script);
public Q_SLOTS:
int init();
- void updateManagerParams(const QString &key, const QString &value);
private Q_SLOTS:
void restartWizard();
diff --git a/src/sdk/translations/ifw_da.ts b/src/sdk/translations/ifw_da.ts
index b78bb380c..57540b788 100644
--- a/src/sdk/translations/ifw_da.ts
+++ b/src/sdk/translations/ifw_da.ts
@@ -1715,9 +1715,9 @@ Opdatering afbrudt!</translation>
</message>
<message>
<source>
-Installing component %1</source>
+Installing component %1...</source>
<translation>
-Installerer komponenten %1</translation>
+Installerer komponenten %1...</translation>
</message>
<message>
<source>Installer Error</source>
diff --git a/src/sdk/translations/ifw_de.ts b/src/sdk/translations/ifw_de.ts
index 1b0fdf8d5..347b17cec 100644
--- a/src/sdk/translations/ifw_de.ts
+++ b/src/sdk/translations/ifw_de.ts
@@ -1739,9 +1739,9 @@ Aktualisierung abgebrochen!</translation>
</message>
<message>
<source>
-Installing component %1</source>
+Installing component %1...</source>
<translation>
-Komponente %1 wird installiert</translation>
+Komponente %1 wird installiert...</translation>
</message>
<message>
<source>Installer Error</source>
diff --git a/src/sdk/translations/ifw_es.ts b/src/sdk/translations/ifw_es.ts
index 1ce64b86e..5ad785ade 100644
--- a/src/sdk/translations/ifw_es.ts
+++ b/src/sdk/translations/ifw_es.ts
@@ -1422,9 +1422,9 @@ Uninstallation aborted!</source>
</message>
<message>
<source>
-Installing component %1</source>
+Installing component %1...</source>
<translation>
-Instalando componente %1</translation>
+Instalando componente %1...</translation>
</message>
<message>
<source>Installer Error</source>
diff --git a/src/sdk/translations/ifw_fr.ts b/src/sdk/translations/ifw_fr.ts
index 905f090cf..c79aa1308 100644
--- a/src/sdk/translations/ifw_fr.ts
+++ b/src/sdk/translations/ifw_fr.ts
@@ -1892,9 +1892,9 @@ Mise à jour annulée !</translation>
</message>
<message>
<source>
-Installing component %1</source>
+Installing component %1...</source>
<translation>
-Installation du composant %1</translation>
+Installation du composant %1...</translation>
</message>
<message>
<source>Installer Error</source>
diff --git a/src/sdk/translations/ifw_it.ts b/src/sdk/translations/ifw_it.ts
index 514013f57..7deb5f548 100644
--- a/src/sdk/translations/ifw_it.ts
+++ b/src/sdk/translations/ifw_it.ts
@@ -1885,9 +1885,9 @@ Update aborted!</source>
</message>
<message>
<source>
-Installing component %1</source>
+Installing component %1...</source>
<translation>
-Installazione componenti %1</translation>
+Installazione componenti %1...</translation>
</message>
<message>
<source>Installer Error</source>
diff --git a/src/sdk/translations/ifw_ja.ts b/src/sdk/translations/ifw_ja.ts
index 321e445c2..f8c04e97e 100644
--- a/src/sdk/translations/ifw_ja.ts
+++ b/src/sdk/translations/ifw_ja.ts
@@ -1902,9 +1902,9 @@ Update aborted!</source>
</message>
<message>
<source>
-Installing component %1</source>
+Installing component %1...</source>
<translation>
-コンポーネントのインストール中: %1</translation>
+コンポーネントのインストール中: %1...</translation>
</message>
<message>
<source>Installer Error</source>
diff --git a/src/sdk/translations/ifw_pl.ts b/src/sdk/translations/ifw_pl.ts
index 98af6f62d..64cd6ac7f 100644
--- a/src/sdk/translations/ifw_pl.ts
+++ b/src/sdk/translations/ifw_pl.ts
@@ -1895,9 +1895,9 @@ Przerwano uaktualnianie.</translation>
</message>
<message>
<source>
-Installing component %1</source>
+Installing component %1...</source>
<translation>
-Instalacja komponentu %1</translation>
+Instalacja komponentu %1...</translation>
</message>
<message>
<source>Installer Error</source>
diff --git a/src/sdk/translations/ifw_ru.ts b/src/sdk/translations/ifw_ru.ts
index 2783f3eef..f22b82dca 100644
--- a/src/sdk/translations/ifw_ru.ts
+++ b/src/sdk/translations/ifw_ru.ts
@@ -1708,9 +1708,9 @@ Update aborted!</source>
</message>
<message>
<source>
-Installing component %1</source>
+Installing component %1...</source>
<translation>
-Установка компонента %1</translation>
+Установка компонента %1...</translation>
</message>
<message>
<source>Installer Error</source>
diff --git a/src/sdk/translations/ifw_zh_CN.ts b/src/sdk/translations/ifw_zh_CN.ts
index a826448d9..c2b55f9ec 100644
--- a/src/sdk/translations/ifw_zh_CN.ts
+++ b/src/sdk/translations/ifw_zh_CN.ts
@@ -1834,9 +1834,9 @@ Update aborted!</source>
</message>
<message>
<source>
-Installing component %1</source>
+Installing component %1...</source>
<translation>
-正在安装组件 %1</translation>
+正在安装组件 %1...</translation>
</message>
<message>
<source>Installer Error</source>
diff --git a/tools/binarycreator/binarycreator.cpp b/tools/binarycreator/binarycreator.cpp
index 6492b59a1..3ce7db3f2 100644
--- a/tools/binarycreator/binarycreator.cpp
+++ b/tools/binarycreator/binarycreator.cpp
@@ -754,6 +754,13 @@ static int printErrorAndUsageAndExit(const QString &err)
int main(int argc, char **argv)
{
+// increase maximum numbers of file descriptors
+#if defined (Q_OS_MACOS)
+ struct rlimit rl;
+ getrlimit(RLIMIT_NOFILE, &rl);
+ rl.rlim_cur = qMin(static_cast<rlim_t>(OPEN_MAX), rl.rlim_max);
+ setrlimit(RLIMIT_NOFILE, &rl);
+#endif
QCoreApplication app(argc, argv);
QInstaller::init();