summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKatja Marttila <katja.marttila@qt.io>2020-12-28 14:14:22 +0200
committerKatja Marttila <katja.marttila@qt.io>2020-12-30 09:10:16 +0000
commitca664d6e9f7b53c5b61237da2fceb8248124ad40 (patch)
treec6dbc7c7df17550667941b1c2af47e1abd78cf19
parent9065a5f46a7d94e0a8a91e0bdb52834851609006 (diff)
Allow disabling undo in SimpleMoveFile operation during uninstall
Task-number: QTIFW-2090 Change-Id: If0c2d4901ee1fb634e1e436ab14a507d06dd99ab Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io>
-rw-r--r--doc/operations.qdoc4
-rw-r--r--src/libs/installer/simplemovefileoperation.cpp2
-rw-r--r--tests/auto/installer/simplemovefileoperation/tst_simplemovefileoperation.cpp60
3 files changed, 50 insertions, 16 deletions
diff --git a/doc/operations.qdoc b/doc/operations.qdoc
index 02f393ad1..fdfe1764d 100644
--- a/doc/operations.qdoc
+++ b/doc/operations.qdoc
@@ -74,6 +74,10 @@
\li SimpleMoveFile
\li "SimpleMoveFile" \c source \c target
\li Moves a file from \c source to \c target.
+
+ \note Files will be moved from \c target to \c source during uninstallation.
+ If you want to move the files persistently, you can overwrite the \e UNDO
+ by passing \e UNDOOPERATION and \e "", to the end of the argument list.
\row
\li Delete
\li "Delete" \c filename
diff --git a/src/libs/installer/simplemovefileoperation.cpp b/src/libs/installer/simplemovefileoperation.cpp
index 80654b367..5f3000be0 100644
--- a/src/libs/installer/simplemovefileoperation.cpp
+++ b/src/libs/installer/simplemovefileoperation.cpp
@@ -93,6 +93,8 @@ bool SimpleMoveFileOperation::performOperation()
bool SimpleMoveFileOperation::undoOperation()
{
+ if (parseUndoOperationArguments().count() > 0)
+ return true;
const QString source = arguments().at(0);
const QString target = arguments().at(1);
diff --git a/tests/auto/installer/simplemovefileoperation/tst_simplemovefileoperation.cpp b/tests/auto/installer/simplemovefileoperation/tst_simplemovefileoperation.cpp
index 3ac7eae9f..9caf7aacf 100644
--- a/tests/auto/installer/simplemovefileoperation/tst_simplemovefileoperation.cpp
+++ b/tests/auto/installer/simplemovefileoperation/tst_simplemovefileoperation.cpp
@@ -44,6 +44,23 @@ class tst_simplemovefileoperation : public QObject
{
Q_OBJECT
+private:
+ void createDummyFile(const QString &source, const QString &destination)
+ {
+ // Create dummy original file for move destination
+ QFile destFile(destination);
+ QVERIFY(destFile.open(QIODevice::WriteOnly));
+ destFile.close();
+
+ QByteArray testString("Generated by QTest\n");
+ QFile testFile(source);
+ QVERIFY(testFile.open(QIODevice::WriteOnly | QIODevice::Text));
+ QTextStream out(&testFile);
+ out << testString;
+ testFile.close();
+ QVERIFY(QFileInfo(source).exists());
+ }
+
private slots:
void testMissingArguments()
{
@@ -65,7 +82,7 @@ private slots:
"source \"\", target \"\"."));
}
- void testMoveFileWithOverwrite_data()
+ void initTestCase_data()
{
QTest::addColumn<QString>("source");
QTest::addColumn<QString>("destination");
@@ -77,22 +94,10 @@ private slots:
void testMoveFileWithOverwrite()
{
- QFETCH(QString, source);
- QFETCH(QString, destination);
-
- // Create dummy original file for move destination
- QFile destFile(destination);
- QVERIFY(destFile.open(QIODevice::WriteOnly));
- destFile.close();
-
- QByteArray testString("Generated by QTest\n");
- QFile testFile(source);
- QVERIFY(testFile.open(QIODevice::WriteOnly | QIODevice::Text));
- QTextStream out(&testFile);
- out << testString;
- testFile.close();
+ QFETCH_GLOBAL(QString, source);
+ QFETCH_GLOBAL(QString, destination);
- QVERIFY(QFileInfo(source).exists());
+ createDummyFile(source, destination);
QByteArray testFileHash = QInstaller::calculateHash(source, QCryptographicHash::Sha1);
SimpleMoveFileOperation op(nullptr);
@@ -113,6 +118,29 @@ private slots:
QVERIFY(QFile(source).remove());
}
+ void testMoveFileNoUndo()
+ {
+ QFETCH_GLOBAL(QString, source);
+ QFETCH_GLOBAL(QString, destination);
+
+ createDummyFile(source, destination);
+
+ QByteArray testFileHash = QInstaller::calculateHash(source, QCryptographicHash::Sha1);
+
+ SimpleMoveFileOperation op(nullptr);
+ op.setArguments(QStringList() << source << destination << "UNDOOPERATION" << "");
+
+ QVERIFY2(op.performOperation(), op.errorString().toLatin1());
+ QVERIFY(!QFileInfo(source).exists());
+ QByteArray destinationFileHash = QInstaller::calculateHash(destination, QCryptographicHash::Sha1);
+ QVERIFY(testFileHash == destinationFileHash);
+
+ QVERIFY2(op.undoOperation(), op.errorString().toLatin1());
+ QVERIFY(QFileInfo(destination).exists());
+ QVERIFY(testFileHash == destinationFileHash);
+ QVERIFY(QFile(destination).remove());
+ }
+
void testPerformingFromCLI()
{
QString installDir = QInstaller::generateTemporaryFileName();