Hello community, here is the log from the commit of package ark for openSUSE:Factory checked in at 2015-10-19 22:30:50 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/ark (Old) and /work/SRC/openSUSE:Factory/.ark.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Package is "ark" Changes: -------- --- /work/SRC/openSUSE:Factory/ark/ark.changes 2015-10-03 20:16:57.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.ark.new/ark.changes 2015-10-19 22:30:51.000000000 +0200 @@ -1,0 +2,8 @@ +Sun Oct 11 13:14:59 UTC 2015 - tittiatcoke@gmail.com + +- Update to KDE Applications 15.08.2 + * KDE Applications 15.08.2 + * https://www.kde.org/announcements/announce-applications-15.08.2.php + + +------------------------------------------------------------------- Old: ---- ark-15.08.1.tar.xz New: ---- ark-15.08.2.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ ark.spec ++++++ --- /var/tmp/diff_new_pack.uxa7g4/_old 2015-10-19 22:30:52.000000000 +0200 +++ /var/tmp/diff_new_pack.uxa7g4/_new 2015-10-19 22:30:52.000000000 +0200 @@ -17,7 +17,7 @@ Name: ark -Version: 15.08.1 +Version: 15.08.2 Release: 0 Summary: KDE Archiver Tool License: GPL-2.0+ ++++++ ark-15.08.1.tar.xz -> ark-15.08.2.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ark-15.08.1/CMakeLists.txt new/ark-15.08.2/CMakeLists.txt --- old/ark-15.08.1/CMakeLists.txt 2015-09-10 13:55:01.000000000 +0200 +++ new/ark-15.08.2/CMakeLists.txt 2015-10-09 01:19:21.000000000 +0200 @@ -7,7 +7,7 @@ # KDE Application Version, managed by release script set (KDE_APPLICATIONS_VERSION_MAJOR "15") set (KDE_APPLICATIONS_VERSION_MINOR "08") -set (KDE_APPLICATIONS_VERSION_MICRO "1") +set (KDE_APPLICATIONS_VERSION_MICRO "2") set (KDE_APPLICATIONS_VERSION "${KDE_APPLICATIONS_VERSION_MAJOR}.${KDE_APPLICATIONS_VERSION_MINOR}.${KDE_APPLICATIONS_VERSION_MICRO}") configure_file(${CMAKE_CURRENT_SOURCE_DIR}/CTestCustom.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/CTestCustom.cmake) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ark-15.08.1/app/ark.appdata.xml new/ark-15.08.2/app/ark.appdata.xml --- old/ark-15.08.1/app/ark.appdata.xml 2015-09-10 13:55:01.000000000 +0200 +++ new/ark-15.08.2/app/ark.appdata.xml 2015-10-09 01:19:21.000000000 +0200 @@ -219,7 +219,7 @@ <li xml:lang="es">Vista previa del contenido de archivos sin extraerlos</li> <li xml:lang="et">Failide sisu näitamine ilma neid lahti pakkimata.</li> <li xml:lang="fi">Tiedoston sisällön esikatselu purkamatta tiedostoa</li> - <li xml:lang="fr">Prévisualiser le contenu des fichiers sans les extraire</li> + <li xml:lang="fr">Affichage du contenu des fichiers sans les extraire</li> <li xml:lang="gl">Obteña unha vista previa dos ficheiros comprimidos sen extraelos.</li> <li xml:lang="hu">Fájltartalom előnézete a fájlok kibontása nélkül</li> <li xml:lang="it">Anteprima dei file senza estrarre i file</li> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ark-15.08.1/app/ark_addtoservicemenu.desktop new/ark-15.08.2/app/ark_addtoservicemenu.desktop --- old/ark-15.08.1/app/ark_addtoservicemenu.desktop 2015-09-10 13:55:01.000000000 +0200 +++ new/ark-15.08.2/app/ark_addtoservicemenu.desktop 2015-10-09 01:19:21.000000000 +0200 @@ -73,7 +73,9 @@ Name[en_GB]=Here (as TAR.GZ) Name[es]=Aquí (como TAR.GZ) Name[fi]=Tähän (TAR.GZ-paketiksi) +Name[fr]=Ici (en tar.gz) Name[gl]=Aquí (como TAR.GZ) +Name[it]=Qui (come TAR.GZ) Name[ko]=여기(TAR.GZ로) Name[nl]=Hier (als TAR.GZ) Name[pl]=Tutaj (jako TAR.GZ) @@ -101,7 +103,9 @@ Name[en_GB]=Here (as ZIP) Name[es]=Aquí (como ZIP) Name[fi]=Tähän (ZIP-paketiksi) +Name[fr]=Ici (en zip) Name[gl]=Aquí (como ZIP) +Name[it]=Qui (come ZIP) Name[ko]=여기(ZIP으로) Name[nl]=Hier (als ZIP) Name[pl]=Tutaj (jako ZIP) @@ -129,7 +133,9 @@ Name[en_GB]=Here (as RAR) Name[es]=Aquí (como RAR) Name[fi]=Tähän (RAR-paketiksi) +Name[fr]=Ici (en rar) Name[gl]=Aquí (como RAR) +Name[it]=Qui (come RAR) Name[ko]=여기(RAR로) Name[nl]=Hier (als RAR) Name[pl]=Tutaj (jako RAR) @@ -157,7 +163,9 @@ Name[en_GB]=Compress to... Name[es]=Comprimir en... Name[fi]=Pakkaa… +Name[fr]=Compresser vers... Name[gl]=Comprimir en… +Name[it]=Comprimi in... Name[ko]=다음으로 압축하기... Name[nl]=Comprimeren naar... Name[pl]=Spakuj do... diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ark-15.08.1/kerfuffle/archiveinterface.cpp new/ark-15.08.2/kerfuffle/archiveinterface.cpp --- old/ark-15.08.1/kerfuffle/archiveinterface.cpp 2015-09-10 13:55:01.000000000 +0200 +++ new/ark-15.08.2/kerfuffle/archiveinterface.cpp 2015-10-09 01:19:21.000000000 +0200 @@ -36,7 +36,9 @@ namespace Kerfuffle { ReadOnlyArchiveInterface::ReadOnlyArchiveInterface(QObject *parent, const QVariantList & args) - : QObject(parent), m_waitForFinishedSignal(false) + : QObject(parent), + m_waitForFinishedSignal(false), + m_isHeaderEncryptionEnabled(false) { qCDebug(KERFUFFLE) << "Created read-only interface for" << args.first().toString(); m_filename = args.first().toString(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ark-15.08.1/kerfuffle/cliinterface.cpp new/ark-15.08.2/kerfuffle/cliinterface.cpp --- old/ark-15.08.1/kerfuffle/cliinterface.cpp 2015-09-10 13:55:01.000000000 +0200 +++ new/ark-15.08.2/kerfuffle/cliinterface.cpp 2015-10-09 01:19:21.000000000 +0200 @@ -46,11 +46,12 @@ #include <QEventLoop> #include <QFile> #include <QProcess> +#include <QRegularExpression> +#include <QStandardPaths> +#include <QTemporaryDir> #include <QThread> #include <QTimer> -#include <QStandardPaths> #include <QUrl> -#include <QRegularExpression> namespace Kerfuffle { @@ -101,10 +102,11 @@ return false; } + emit finished(true); return true; } -bool CliInterface::copyFiles(const QList<QVariant> & files, const QString & destinationDirectory, ExtractionOptions options) +bool CliInterface::copyFiles(const QVariantList &files, const QString &destinationDirectory, ExtractionOptions options) { qCDebug(KERFUFFLE) << Q_FUNC_INFO << "to" << destinationDirectory; @@ -236,15 +238,33 @@ } } - QUrl destDir(destinationDirectory); + bool useTmpExtractDir = !files.isEmpty(); + QUrl destDir; + QTemporaryDir tmpExtractDir; + + if (useTmpExtractDir) { + qCDebug(KERFUFFLE) << "Using temporary extraction dir:" << tmpExtractDir.path(); + if (!tmpExtractDir.isValid()) { + qCDebug(KERFUFFLE) << "Creation of temporary directory failed."; + failOperation(); + return false; + } + destDir = QUrl(tmpExtractDir.path()); + } else { + destDir = QUrl(destinationDirectory); + } QDir::setCurrent(destDir.adjusted(QUrl::RemoveScheme).url()); - qCDebug(KERFUFFLE) << "Setting current dir to " << destinationDirectory; if (!runProcess(m_param.value(ExtractProgram).toStringList(), args)) { failOperation(); return false; } + if (useTmpExtractDir) { + moveToFinalDest(files, destinationDirectory, tmpExtractDir); + } + + emit finished(true); return true; } @@ -353,7 +373,7 @@ failOperation(); return false; } - + emit finished(true); return true; } @@ -388,7 +408,7 @@ failOperation(); return false; } - + emit finished(true); return true; } @@ -474,9 +494,88 @@ list(); return; } +} - //and we're finished - emit finished(true); +bool CliInterface::moveToFinalDest(const QVariantList &files, const QString &finalDest, const QTemporaryDir &tmpDir) +{ + // Move extracted files from a QTemporaryDir to the final destination. + + QDir finalDestDir(finalDest); + qCDebug(KERFUFFLE) << "Setting final dir to" << finalDest; + + bool overwriteAll = false; + bool skipAll = false; + + foreach (const QVariant& file, files) { + + QFileInfo relEntry(file.value<fileRootNodePair>().file.remove(file.value<fileRootNodePair>().rootNode)); + QFileInfo absSourceEntry(tmpDir.path() + QLatin1Char('/') + file.value<fileRootNodePair>().file); + QFileInfo absDestEntry(finalDestDir.path() + QLatin1Char('/') + relEntry.filePath()); + + if (absSourceEntry.isDir()) { + + // For directories, just create the path. + if (!finalDestDir.mkpath(relEntry.filePath())) { + qCWarning(KERFUFFLE) << "Failed to create directory" << relEntry.filePath() << "in final destination."; + } + + } else { + + // If destination file exists, prompt the user. + if (absDestEntry.exists()) { + qCWarning(KERFUFFLE) << "File" << absDestEntry.absoluteFilePath() << "exists."; + + if (!skipAll && !overwriteAll) { + + Kerfuffle::OverwriteQuery query(absDestEntry.absoluteFilePath()); + query.setNoRenameMode(true); + emit userQuery(&query); + query.waitForResponse(); + + if (query.responseOverwrite() || query.responseOverwriteAll()) { + if (query.responseOverwriteAll()) { + overwriteAll = true; + } + if (!QFile::remove(absDestEntry.absoluteFilePath())) { + qCWarning(KERFUFFLE) << "Failed to remove" << absDestEntry.absoluteFilePath(); + } + + } else if (query.responseSkip() || query.responseAutoSkip()) { + if (query.responseAutoSkip()) { + skipAll = true; + } + continue; + + } else if (query.responseCancelled()) { + qCDebug(KERFUFFLE) << "Copy action cancelled."; + return false; + } + + } else if (skipAll) { + continue; + + } else if (overwriteAll) { + + if (!QFile::remove(absDestEntry.absoluteFilePath())) { + qCWarning(KERFUFFLE) << "Failed to remove" << absDestEntry.absoluteFilePath(); + } + } + + } + + // Create any parent directories. + if (!finalDestDir.mkpath(relEntry.path())) { + qCWarning(KERFUFFLE) << "Failed to create parent dirctory for file:" << absDestEntry.filePath(); + } + + // Move files to the final destination. + if (!QFile(absSourceEntry.absoluteFilePath()).rename(absDestEntry.absoluteFilePath())) { + qCWarning(KERFUFFLE) << "Failed to move file" << absSourceEntry.filePath() << "to final destination."; + return false; + } + } + } + return true; } void CliInterface::failOperation() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ark-15.08.1/kerfuffle/cliinterface.h new/ark-15.08.2/kerfuffle/cliinterface.h --- old/ark-15.08.1/kerfuffle/cliinterface.h 2015-09-10 13:55:01.000000000 +0200 +++ new/ark-15.08.2/kerfuffle/cliinterface.h 2015-10-09 01:19:21.000000000 +0200 @@ -35,6 +35,7 @@ class KProcess; class KPtyProcess; +class QTemporaryDir; namespace Kerfuffle { @@ -351,6 +352,8 @@ */ void writeToProcess(const QByteArray& data); + bool moveToFinalDest(const QVariantList &files, const QString &finalDest, const QTemporaryDir &tmpDir); + QByteArray m_stdOutData; QRegExp m_existsPattern; QRegExp m_passwordPromptPattern; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ark-15.08.1/part/part.cpp new/ark-15.08.2/part/part.cpp --- old/ark-15.08.1/part/part.cpp 2015-09-10 13:55:01.000000000 +0200 +++ new/ark-15.08.2/part/part.cpp 2015-10-09 01:19:21.000000000 +0200 @@ -771,9 +771,14 @@ foreach (const QModelIndex& index, list) { - // Find the topmost unselected parent. + // Find the topmost unselected parent. This is done by iterating up + // through the directory hierarchy and see if each parent is included + // in the selection OR if the parent is already part of list. + // The latter is needed for unselected folders which are subfolders of + // a selected parent folder. QModelIndex selectionRoot = index.parent(); - while (m_view->selectionModel()->isSelected(selectionRoot)) { + while (m_view->selectionModel()->isSelected(selectionRoot) || + list.contains(selectionRoot)) { selectionRoot = selectionRoot.parent(); } @@ -781,6 +786,7 @@ const QString rootInternalID = m_model->entryForIndex(selectionRoot).value(InternalID).toString(); + // Append index with root node to fileList. QModelIndexList alist = QModelIndexList() << index; foreach (const QVariant &file, filesForIndexes(alist)) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ark-15.08.1/plugins/libsinglefileplugin/singlefileplugin.cpp new/ark-15.08.2/plugins/libsinglefileplugin/singlefileplugin.cpp --- old/ark-15.08.1/plugins/libsinglefileplugin/singlefileplugin.cpp 2015-09-10 13:55:01.000000000 +0200 +++ new/ark-15.08.2/plugins/libsinglefileplugin/singlefileplugin.cpp 2015-10-09 01:19:21.000000000 +0200 @@ -149,6 +149,12 @@ { QString uncompressedName(QFileInfo(filename()).fileName()); + // Bug 252701: For .svgz just remove the terminal "z". + if (uncompressedName.endsWith(QLatin1String(".svgz"), Qt::CaseInsensitive)) { + uncompressedName.chop(1); + return uncompressedName; + } + foreach(const QString & extension, m_possibleExtensions) { qCDebug(KERFUFFLE_PLUGIN) << extension;