diff options
author | Katja Marttila <katja.marttila@qt.io> | 2020-12-28 12:55:47 +0200 |
---|---|---|
committer | Katja Marttila <katja.marttila@qt.io> | 2020-12-30 11:10:10 +0200 |
commit | 9065a5f46a7d94e0a8a91e0bdb52834851609006 (patch) | |
tree | 0ec9ef786bbaab7c6c296ba58e40e6bbc805608a | |
parent | 7be83635627ca1384862a8826de2d85979cdfc8e (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.qdoc | 3 | ||||
-rw-r--r-- | src/libs/installer/copydirectoryoperation.cpp | 8 | ||||
-rw-r--r-- | tests/auto/installer/copydirectoryoperation/tst_copydirectoryoperation.cpp | 43 |
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"); |