summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArttu Tarkiainen <arttu.tarkiainen@qt.io>2022-11-16 11:31:00 +0200
committerArttu Tarkiainen <arttu.tarkiainen@qt.io>2022-11-17 12:51:06 +0200
commite58f99f35d7d50b1efa4c4bc68fc578a65666bf1 (patch)
tree6b971ceff61c9641c2e0d83fc91d63145919977f
parentbe44c86b01401ffe3865ac44efc8657d1f0f3287 (diff)
MetadataJob: fix removing compressed repositories after extracting
In addition to extracting meta.7z archives, the UnzipArchiveTask is used to extract compressed repositories (QBSP). At the end of the task, it removed the archive file uncoditionally, which we don't want to do for the compressed repositories, because the user should be able to use them multiple times at their will. Fix by making the removing conditional, and enable it only for the metadata archives. Task-number: QTIFW-2876 Change-Id: I10d2fd3872bdcd7eb4bbfeddfd1bda3bdaffeb3f Reviewed-by: Katja Marttila <katja.marttila@qt.io>
-rw-r--r--src/libs/installer/metadatajob.cpp1
-rw-r--r--src/libs/installer/metadatajob_p.h10
2 files changed, 8 insertions, 3 deletions
diff --git a/src/libs/installer/metadatajob.cpp b/src/libs/installer/metadatajob.cpp
index 659648e1a..4bb2b99de 100644
--- a/src/libs/installer/metadatajob.cpp
+++ b/src/libs/installer/metadatajob.cpp
@@ -620,6 +620,7 @@ void MetadataJob::metadataTaskFinished()
}
UnzipArchiveTask *task = new UnzipArchiveTask(result.target(),
item.value(TaskRole::UserRole).toString());
+ task->setRemoveArchive(true);
QFutureWatcher<void> *watcher = new QFutureWatcher<void>();
m_unzipTasks.insert(watcher, qobject_cast<QObject*> (task));
diff --git a/src/libs/installer/metadatajob_p.h b/src/libs/installer/metadatajob_p.h
index 2456a971e..ef18b2982 100644
--- a/src/libs/installer/metadatajob_p.h
+++ b/src/libs/installer/metadatajob_p.h
@@ -62,10 +62,12 @@ class UnzipArchiveTask : public AbstractTask<void>
public:
UnzipArchiveTask(const QString &arcive, const QString &target)
- : m_archive(arcive), m_targetDir(target)
+ : m_archive(arcive), m_targetDir(target), m_removeArchive(false)
{}
QString target() { return m_targetDir; }
QString archive() { return m_archive; }
+ void setRemoveArchive(bool remove) { m_removeArchive = remove; }
+
void doTask(QFutureInterface<void> &fi) override
{
fi.reportStarted();
@@ -87,9 +89,10 @@ public:
fi.reportException(UnzipArchiveException(MetadataJob::tr("Error while extracting "
"archive \"%1\": %2").arg(QDir::toNativeSeparators(m_archive), archive->errorString())));
}
- // Don't need the archive anymore
+
archive->close();
- QFile::remove(m_archive);
+ if (m_removeArchive)
+ QFile::remove(m_archive);
fi.reportFinished();
}
@@ -97,6 +100,7 @@ public:
private:
QString m_archive;
QString m_targetDir;
+ bool m_removeArchive;
};
} // namespace QInstaller