diff options
-rw-r--r-- | src/libs/installer/lib7z_facade.cpp | 27 | ||||
-rw-r--r-- | tests/auto/installer/lib7zfacade/tst_lib7zfacade.cpp | 26 |
2 files changed, 38 insertions, 15 deletions
diff --git a/src/libs/installer/lib7z_facade.cpp b/src/libs/installer/lib7z_facade.cpp index 458bf5770..a5a038d91 100644 --- a/src/libs/installer/lib7z_facade.cpp +++ b/src/libs/installer/lib7z_facade.cpp @@ -46,8 +46,6 @@ # include "StdAfx.h" #endif -#include <Common/CommandLineParser.h> - #include <7zCrc.h> #include <7zip/Archive/IArchive.h> @@ -930,21 +928,22 @@ void createArchive(const QString &archive, const QStringList &sources, QTmpFile if (mode == QTmpFile::Yes) target = createTmp7z(); - const UString command = QString2UString( - // (mode: add) (type: 7z) (time: modified|creation|access) (threads: multi-threaded) - QLatin1String("a -t7z -mtm=on -mtc=on -mta=on -mmt=on ") -#ifdef Q_OS_WIN - + QLatin1String("-sccUTF-8 ") // (files: case-sensitive|UTF8) -#endif - + QString::fromLatin1("-mx=%1 ").arg(int(level)) // (compression: level) - + QDir::toNativeSeparators(target) + QLatin1Char(' ') - + QDir::toNativeSeparators(sources.join(QLatin1Char(' '))) - ); - CArcCmdLineOptions options; try { UStringVector commandStrings; - NCommandLineParser::SplitCommandLine(command, commandStrings); + commandStrings.Add(L"a"); // mode: add + commandStrings.Add(L"-t7z"); // type: 7z + commandStrings.Add(L"-mtm=on"); // time: modeifier|creation|access + commandStrings.Add(L"-mtc=on"); + commandStrings.Add(L"-mta=on"); + commandStrings.Add(L"-mmt=on"); // threads: multi-threaded +#ifdef Q_OS_WIN + commandStrings.Add(L"-sccUTF-8"); // files: case-sensitive|UTF8 +#endif + commandStrings.Add(QString2UString(QString::fromLatin1("-mx=%1").arg(int(level)))); // compression: level + commandStrings.Add(QString2UString(QDir::toNativeSeparators(target))); + foreach (const QString &source, sources) + commandStrings.Add(QString2UString(source)); CArcCmdLineParser parser; parser.Parse1(commandStrings, options); diff --git a/tests/auto/installer/lib7zfacade/tst_lib7zfacade.cpp b/tests/auto/installer/lib7zfacade/tst_lib7zfacade.cpp index 7dde7e555..514df2a2e 100644 --- a/tests/auto/installer/lib7zfacade/tst_lib7zfacade.cpp +++ b/tests/auto/installer/lib7zfacade/tst_lib7zfacade.cpp @@ -121,6 +121,27 @@ private slots: } catch (...) { QFAIL("Unexpected error during create archive."); } + + try { + const QString path1 = tempSourceFile( + "Source File 1.", + QDir::tempPath() + "/temp file with spaces.XXXXXX" + ); + const QString path2 = tempSourceFile( + "Source File 2.", + QDir::tempPath() + "/temp file with spaces.XXXXXX" + ); + + QTemporaryFile target(QDir::tempPath() + "/target file with spaces.XXXXXX"); + QVERIFY(target.open()); + Lib7z::createArchive(&target, QStringList() << path1 << path2); + QCOMPARE(Lib7z::listArchive(&target).count(), 2); + } catch (const Lib7z::SevenZipException& e) { + QFAIL(e.message().toUtf8()); + } catch (...) { + QFAIL("Unexpected error during create archive."); + } + } void testExtractArchive() @@ -139,9 +160,12 @@ private slots: } private: - QString tempSourceFile(const QByteArray &data) + QString tempSourceFile(const QByteArray &data, const QString &templateName = QString()) { QTemporaryFile source; + if (!templateName.isEmpty()) { + source.setFileTemplate(templateName); + } source.open(); source.write(data); source.setAutoRemove(false); |