summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKatja Marttila <katja.marttila@qt.io>2020-12-28 12:55:47 +0200
committerKatja Marttila <katja.marttila@qt.io>2020-12-30 11:10:10 +0200
commit9065a5f46a7d94e0a8a91e0bdb52834851609006 (patch)
tree0ec9ef786bbaab7c6c296ba58e40e6bbc805608a
parent7be83635627ca1384862a8826de2d85979cdfc8e (diff)
Allow disabling undo in CopyDirectory during uninstall
Task-number: QTIFW-2088 Change-Id: Ic5e781b89b1c74fc8f65575bd46c073610545523 Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io>
-rw-r--r--doc/operations.qdoc3
-rw-r--r--src/libs/installer/copydirectoryoperation.cpp8
-rw-r--r--tests/auto/installer/copydirectoryoperation/tst_copydirectoryoperation.cpp43
3 files changed, 43 insertions, 11 deletions
diff --git a/doc/operations.qdoc b/doc/operations.qdoc
index 4186f8e99..02f393ad1 100644
--- a/doc/operations.qdoc
+++ b/doc/operations.qdoc
@@ -90,6 +90,9 @@
\li CopyDirectory
\li "CopyDirectory" \c sourcePath \c targetPath
\li Copies a directory from \c sourcePath to \c targetPath.
+ \note Directories will be reset during uninstallation. If you want to copy the
+ directory persistently, you can overwrite the \e UNDO by passing \e UNDOOPERATION
+ and \e "", to the end of the argument list.
\row
\li AppendFile
\li "AppendFile" \c filename \c text
diff --git a/src/libs/installer/copydirectoryoperation.cpp b/src/libs/installer/copydirectoryoperation.cpp
index 4cef3facf..a2ef2cf5a 100644
--- a/src/libs/installer/copydirectoryoperation.cpp
+++ b/src/libs/installer/copydirectoryoperation.cpp
@@ -67,7 +67,7 @@ bool CopyDirectoryOperation::performOperation()
if (!checkArgumentCount(2, 3, tr("<source> <target> [\"forceOverwrite\"]")))
return false;
- const QStringList args = arguments();
+ const QStringList args = parsePerformOperationArguments();
const QString sourcePath = args.at(0);
const QString targetPath = args.at(1);
bool overwrite = false;
@@ -153,7 +153,11 @@ bool CopyDirectoryOperation::performOperation()
bool CopyDirectoryOperation::undoOperation()
{
- Q_ASSERT(arguments().count() == 2);
+ if (parseUndoOperationArguments().count() > 0)
+ return true;
+
+ if (!checkArgumentCount(2))
+ return false;
QDir dir;
const QStringList files = value(QLatin1String("files")).toStringList();
diff --git a/tests/auto/installer/copydirectoryoperation/tst_copydirectoryoperation.cpp b/tests/auto/installer/copydirectoryoperation/tst_copydirectoryoperation.cpp
index bf95f635d..a1692095d 100644
--- a/tests/auto/installer/copydirectoryoperation/tst_copydirectoryoperation.cpp
+++ b/tests/auto/installer/copydirectoryoperation/tst_copydirectoryoperation.cpp
@@ -75,6 +75,20 @@ private:
core->deleteLater();
}
+ QStringList populateSourceDirectory()
+ {
+ QStringList fileEntries;
+ fileEntries << "file1" << "file2" << ".hidden1" << ".hidden2";
+
+ // Populate source directory
+ foreach (const QString &entry, fileEntries) {
+ QFile file(m_sourcePath + entry);
+ file.open(QFileDevice::ReadWrite);
+ file.close();
+ }
+ return fileEntries;
+ }
+
private slots:
void initTestCase()
{
@@ -129,17 +143,9 @@ private slots:
void testCopyDirectoryWithUndo()
{
- QStringList fileEntries;
- fileEntries << "file1" << "file2" << ".hidden1" << ".hidden2";
+ const QStringList fileEntries = populateSourceDirectory();
- // Populate source directory
- foreach (const QString &entry, fileEntries) {
- QFile file(m_sourcePath + entry);
- QVERIFY(file.open(QFileDevice::ReadWrite));
- file.close();
- }
CopyDirectoryOperation op(nullptr);
-
op.setArguments(QStringList() << m_sourcePath << m_destinationPath);
QVERIFY2(op.performOperation(), op.errorString().toLatin1());
@@ -151,6 +157,25 @@ private slots:
QVERIFY(!QFileInfo(m_destinationPath).exists());
}
+
+ void testCopyDirectoryNoUndo()
+ {
+ const QStringList fileEntries = populateSourceDirectory();
+
+ CopyDirectoryOperation op(nullptr);
+ op.setArguments(QStringList() << m_sourcePath << m_destinationPath << "UNDOOPERATION" << "");
+
+ QVERIFY2(op.performOperation(), op.errorString().toLatin1());
+
+ foreach (const QString &entry, fileEntries)
+ QVERIFY(QFile(m_destinationPath + entry).exists());
+
+ QVERIFY2(op.undoOperation(), op.errorString().toLatin1());
+ // Undo will NOT delete the empty destination directory here
+ foreach (const QString &entry, fileEntries)
+ QVERIFY(QFile(m_destinationPath + entry).exists());
+ }
+
void testCopyDirectoryOverwrite()
{
QFile file(m_sourcePath + "file");