diff --git a/0009-Fix-KIO-mkpath-with-qtbase-5.10-beta-4.patch b/0009-Fix-KIO-mkpath-with-qtbase-5.10-beta-4.patch new file mode 100644 index 0000000..c540213 --- /dev/null +++ b/0009-Fix-KIO-mkpath-with-qtbase-5.10-beta-4.patch @@ -0,0 +1,65 @@ +From 2353119aae8f03565bc7779ed1d597d266f5afda Mon Sep 17 00:00:00 2001 +From: Elvis Angelaccio +Date: Thu, 16 Nov 2017 10:41:19 +0100 +Subject: [PATCH 09/24] Fix KIO::mkpath with qtbase 5.10 beta 4 + +Summary: +The latest Qt 5.10 beta includes [1] which breaks a bunch of unit tests, +since `url.setPath("//foo")` will now result in an invalid (empty) QUrl. + +This patch fixes the KIO::mkpath() case. + +[1]: http://code.qt.io/cgit/qt/qtbase.git/commit/?id=f62768d046528636789f901ac79e2cfa1843a7b7 + +Test Plan: + +* I can now create folders from dolphin and plasma. +* fileundomanagertest and mkpathjobtest no longer fail + +Reviewers: #frameworks, dfaure + +Tags: #frameworks + +Differential Revision: https://phabricator.kde.org/D8836 +--- + src/core/mkpathjob.cpp | 17 ++++++++++++++--- + 1 file changed, 14 insertions(+), 3 deletions(-) + +diff --git a/src/core/mkpathjob.cpp b/src/core/mkpathjob.cpp +index bff46cad..a1778056 100644 +--- a/src/core/mkpathjob.cpp ++++ b/src/core/mkpathjob.cpp +@@ -43,8 +43,13 @@ public: + m_url.setPath(QStringLiteral("/")); + int i = 0; + for (; i < basePathComponents.count() && i < m_pathComponents.count(); ++i) { +- if (m_pathComponents.at(i) == basePathComponents.at(i)) { +- m_url.setPath(m_url.path() + '/' + m_pathComponents.at(i)); ++ const QString pathComponent = m_pathComponents.at(i); ++ if (pathComponent == basePathComponents.at(i)) { ++ if (m_url.path() == QLatin1Char('/')) { ++ m_url.setPath(m_url.path() + pathComponent); ++ } else { ++ m_url.setPath(m_url.path() + '/' + pathComponent); ++ } + } else { + break; + } +@@ -57,7 +62,13 @@ public: + if (m_url.isLocalFile()) { + i = 0; + for (; i < m_pathComponents.count(); ++i) { +- QString testDir = m_url.toLocalFile() + '/' + m_pathComponents.at(i); ++ const QString localFile = m_url.toLocalFile(); ++ QString testDir; ++ if (localFile == QLatin1Char('/')) { ++ testDir = localFile + m_pathComponents.at(i); ++ } else { ++ testDir = localFile + '/' + m_pathComponents.at(i); ++ } + if (QFileInfo(testDir).isDir()) { + m_url.setPath(testDir); + } else { +-- +2.14.3 + diff --git a/0010-Fix-testtrash-with-qtbase-5.10-beta-4.patch b/0010-Fix-testtrash-with-qtbase-5.10-beta-4.patch new file mode 100644 index 0000000..71a91ae --- /dev/null +++ b/0010-Fix-testtrash-with-qtbase-5.10-beta-4.patch @@ -0,0 +1,38 @@ +From 05938a167dd4190014d800bb02446e2779a9b3b2 Mon Sep 17 00:00:00 2001 +From: Elvis Angelaccio +Date: Thu, 16 Nov 2017 12:06:41 +0100 +Subject: [PATCH 10/24] Fix testtrash with qtbase 5.10 beta 4 + +Summary: +Same fix as in D8836, this time for testtrash. + +Test Plan: +Run testtrash. + +Reviewed By: dfaure + +Differential Revision: https://phabricator.kde.org/D8837 +--- + src/core/listjob.cpp | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +diff --git a/src/core/listjob.cpp b/src/core/listjob.cpp +index 4b7b5102..54a422a2 100644 +--- a/src/core/listjob.cpp ++++ b/src/core/listjob.cpp +@@ -117,7 +117,11 @@ void ListJobPrivate::slotListEntries(const KIO::UDSEntryList &list) + itemURL = q->url(); + filename = entry.stringValue(KIO::UDSEntry::UDS_NAME); + Q_ASSERT(!filename.isEmpty()); // we'll recurse forever otherwise :) +- itemURL.setPath(itemURL.path() + '/' + filename); ++ if (itemURL.path() == QLatin1Char('/')) { ++ itemURL.setPath(itemURL.path() + filename); ++ } else { ++ itemURL.setPath(itemURL.path() + '/' + filename); ++ } + } + + if (entry.isDir() && !entry.isLink()) { +-- +2.14.3 + diff --git a/0011-Fix-build-on-FreeBSD.patch b/0011-Fix-build-on-FreeBSD.patch new file mode 100644 index 0000000..c2fc20a --- /dev/null +++ b/0011-Fix-build-on-FreeBSD.patch @@ -0,0 +1,57 @@ +From a208dc70c9a5abdd9d2682b4f3453708d4d6cdf3 Mon Sep 17 00:00:00 2001 +From: Elvis Angelaccio +Date: Thu, 16 Nov 2017 12:46:17 +0100 +Subject: [PATCH 11/24] Fix build on FreeBSD + +Summary: I broke the build on FreeBSD, this patch should fix it. + +Reviewers: adridg, dfaure + +Subscribers: #frameworks + +Tags: #frameworks + +Differential Revision: https://phabricator.kde.org/D8841 +--- + src/core/listjob.cpp | 2 +- + src/core/mkpathjob.cpp | 4 ++-- + 2 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/src/core/listjob.cpp b/src/core/listjob.cpp +index 54a422a2..d91ea4c1 100644 +--- a/src/core/listjob.cpp ++++ b/src/core/listjob.cpp +@@ -117,7 +117,7 @@ void ListJobPrivate::slotListEntries(const KIO::UDSEntryList &list) + itemURL = q->url(); + filename = entry.stringValue(KIO::UDSEntry::UDS_NAME); + Q_ASSERT(!filename.isEmpty()); // we'll recurse forever otherwise :) +- if (itemURL.path() == QLatin1Char('/')) { ++ if (itemURL.path() == QLatin1String("/")) { + itemURL.setPath(itemURL.path() + filename); + } else { + itemURL.setPath(itemURL.path() + '/' + filename); +diff --git a/src/core/mkpathjob.cpp b/src/core/mkpathjob.cpp +index a1778056..c77a9fe9 100644 +--- a/src/core/mkpathjob.cpp ++++ b/src/core/mkpathjob.cpp +@@ -45,7 +45,7 @@ public: + for (; i < basePathComponents.count() && i < m_pathComponents.count(); ++i) { + const QString pathComponent = m_pathComponents.at(i); + if (pathComponent == basePathComponents.at(i)) { +- if (m_url.path() == QLatin1Char('/')) { ++ if (m_url.path() == QLatin1String("/")) { + m_url.setPath(m_url.path() + pathComponent); + } else { + m_url.setPath(m_url.path() + '/' + pathComponent); +@@ -64,7 +64,7 @@ public: + for (; i < m_pathComponents.count(); ++i) { + const QString localFile = m_url.toLocalFile(); + QString testDir; +- if (localFile == QLatin1Char('/')) { ++ if (localFile == QLatin1String("/")) { + testDir = localFile + m_pathComponents.at(i); + } else { + testDir = localFile + '/' + m_pathComponents.at(i); +-- +2.14.3 + diff --git a/0024-Fix-creating-a-directory-via-KNewFileMenu-KIO-mkpath.patch b/0024-Fix-creating-a-directory-via-KNewFileMenu-KIO-mkpath.patch new file mode 100644 index 0000000..6b1a558 --- /dev/null +++ b/0024-Fix-creating-a-directory-via-KNewFileMenu-KIO-mkpath.patch @@ -0,0 +1,81 @@ +From 298c0e734efdd8a7b66a531959e3fb5357a6495d Mon Sep 17 00:00:00 2001 +From: Eike Hein +Date: Tue, 28 Nov 2017 19:42:46 +0900 +Subject: [PATCH 24/24] Fix creating a directory via KNewFileMenu+KIO::mkpath + on Qt 5.9.3+ + +Summary: +f62768d04652 in qtbase.git introduced a behavior change in QUrl +causing it to reject URLs with a path of "//foo" (note the double +slash) as invalid. + +Both KNewFileMenu and KIO::mkpath contained code following this +pattern: + + url.path() + '/' + name + +This is a bad mix with forwarding slaves like kio_desktop, which +translate a top-level path of / to some other URL: + + (desktop:)/ + / + foo = //foo + +This patch addresses the two instances of this by wrapping the +string building in QDir::cleanPath, which I think is the shortest +and most readable way to go. + +2353119aae8f in kio.git (D8836) was another commit fixing fallout +from this Qt change. Is unlikely this patch will be the last one. +I suspect many other variations of this problem lurk about the +codebase. + +BUG:387073 + +Reviewers: dfaure, thiago, elvisangelaccio + +Subscribers: #frameworks + +Tags: #frameworks + +Differential Revision: https://phabricator.kde.org/D9029 +--- + src/core/mkpathjob.cpp | 3 ++- + src/filewidgets/knewfilemenu.cpp | 2 +- + 2 files changed, 3 insertions(+), 2 deletions(-) + +diff --git a/src/core/mkpathjob.cpp b/src/core/mkpathjob.cpp +index c77a9fe9..f67a489d 100644 +--- a/src/core/mkpathjob.cpp ++++ b/src/core/mkpathjob.cpp +@@ -25,6 +25,7 @@ + #include "mkdirjob.h" + #include + #include ++#include + #include + + using namespace KIO; +@@ -123,7 +124,7 @@ void MkpathJobPrivate::slotStart() + } + + if (m_pathIterator != m_pathComponents.constEnd()) { +- m_url.setPath(m_url.path() + '/' + *m_pathIterator); ++ m_url.setPath(QDir::cleanPath(m_url.path() + '/' + *m_pathIterator)); + KIO::Job* job = KIO::mkdir(m_url); + q->addSubjob(job); + q->setProcessedAmount(KJob::Directories, q->processedAmount(KJob::Directories) + 1); +diff --git a/src/filewidgets/knewfilemenu.cpp b/src/filewidgets/knewfilemenu.cpp +index 023eebd4..98c98526 100644 +--- a/src/filewidgets/knewfilemenu.cpp ++++ b/src/filewidgets/knewfilemenu.cpp +@@ -855,7 +855,7 @@ void KNewFileMenuPrivate::_k_slotCreateDirectory(bool writeHiddenDir) + } + } + url = baseUrl; +- url.setPath(url.path() + '/' + name); ++ url.setPath(QDir::cleanPath(url.path() + '/' + name)); + } + } + +-- +2.14.3 + diff --git a/kf5-kio.spec b/kf5-kio.spec index aaa4519..95718bd 100644 --- a/kf5-kio.spec +++ b/kf5-kio.spec @@ -2,7 +2,7 @@ Name: kf5-%{framework} Version: 5.40.0 -Release: 2%{?dist} +Release: 3%{?dist} Summary: KDE Frameworks 5 Tier 3 solution for filesystem abstraction License: GPLv2+ and MIT and BSD @@ -17,7 +17,11 @@ URL: https://cgit.kde.org/%{framework}.git %endif Source0: http://download.kde.org/%{stable}/frameworks/%{versiondir}/%{framework}-%{version}.tar.xz -## upstream patches (lookaside cache) +## upstream patches +Patch9: 0009-Fix-KIO-mkpath-with-qtbase-5.10-beta-4.patch +Patch10: 0010-Fix-testtrash-with-qtbase-5.10-beta-4.patch +Patch11: 0011-Fix-build-on-FreeBSD.patch +Patch24: 0024-Fix-creating-a-directory-via-KNewFileMenu-KIO-mkpath.patch ## upstreamable patches # revert part of https://cgit.kde.org/kio.git/commit/src/core/slave.cpp?id=e2a4517f099d809bd53c6a10769ebfddc0f28a8b @@ -271,6 +275,9 @@ fi %changelog +* Tue Nov 28 2017 Rex Dieter - 5.40.0-3 +- pull in upstream fixes for Qt 5.9.3/5.10-beta changes + * Mon Nov 13 2017 Rex Dieter - 5.40.0-2 - kf5-kio runs wrong kioslave binary (#1512418)