summaryrefslogtreecommitdiffstats
path: root/src/libs/installer
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 /src/libs/installer
parent9215e91d7a0701d63e28e04d5f0984bfebd81dc0 (diff)
parentb4772841a90f8d9cf48416552703ba2b6a7c577b (diff)
Merge "Merge remote-tracking branch 'origin/3.0' into master"
Diffstat (limited to 'src/libs/installer')
-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
7 files changed, 42 insertions, 20 deletions
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();