commit:     2619d290b3aa3e985982f47cdeaf9c9f064a7e1f
Author:     Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Sun Oct 15 15:22:01 2023 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Sun Oct 15 15:22:41 2023 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=2619d290

kde-apps/ark: backport shared-mime-info-2.3 fixes

Upstream commits:
* 785640b090b51e0067dbfc6c7944a478429204a2
* 62d94c62f2fd2052be91dfe565e35a6d43c7d381
* dac14f552fb147bf4c9f759611cdb3b544a500b9
* 9bcbcb056c43abef88540c54f25bc6c1a78c7c0e

Signed-off-by: Sam James <sam <AT> gentoo.org>

 kde-apps/ark/ark-23.08.2-r1.ebuild                 |  93 ++++++++++++++++
 ...8.2-dont-hardcode-bzip2-mimetype-in-tests.patch |  44 ++++++++
 ...itly-support-application-vnd-efi-iso-mime.patch |  36 ++++++
 ...23.08.2-fix-checks-using-old-ISO-mimetype.patch |  36 ++++++
 .../ark-23.08.2-fix-support-for-bzip2-format.patch | 121 +++++++++++++++++++++
 5 files changed, 330 insertions(+)

diff --git a/kde-apps/ark/ark-23.08.2-r1.ebuild 
b/kde-apps/ark/ark-23.08.2-r1.ebuild
new file mode 100644
index 000000000000..d4ee2c6a5a57
--- /dev/null
+++ b/kde-apps/ark/ark-23.08.2-r1.ebuild
@@ -0,0 +1,93 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+ECM_HANDBOOK="forceoptional"
+ECM_TEST="optional"
+KFMIN=5.106.0
+QTMIN=5.15.9
+inherit ecm gear.kde.org optfeature
+
+DESCRIPTION="File archiver by KDE"
+HOMEPAGE="https://apps.kde.org/ark/";
+
+LICENSE="GPL-2" # TODO: CHECK
+SLOT="5"
+KEYWORDS="~amd64 ~arm64 ~loong ~ppc64 ~riscv ~x86"
+IUSE="zip"
+
+RDEPEND="
+       >=app-arch/libarchive-3.5.3:=[bzip2,lzma]
+       >=dev-qt/qtdbus-${QTMIN}:5
+       >=dev-qt/qtgui-${QTMIN}:5
+       >=dev-qt/qtwidgets-${QTMIN}:5
+       >=kde-frameworks/kcompletion-${KFMIN}:5
+       >=kde-frameworks/kconfig-${KFMIN}:5
+       >=kde-frameworks/kconfigwidgets-${KFMIN}:5
+       >=kde-frameworks/kcoreaddons-${KFMIN}:5
+       >=kde-frameworks/kcrash-${KFMIN}:5
+       >=kde-frameworks/kdbusaddons-${KFMIN}:5
+       >=kde-frameworks/ki18n-${KFMIN}:5
+       >=kde-frameworks/kio-${KFMIN}:5
+       >=kde-frameworks/kjobwidgets-${KFMIN}:5
+       >=kde-frameworks/kparts-${KFMIN}:5
+       >=kde-frameworks/kpty-${KFMIN}:5
+       >=kde-frameworks/kservice-${KFMIN}:5
+       >=kde-frameworks/kwidgetsaddons-${KFMIN}:5
+       >=kde-frameworks/kwindowsystem-${KFMIN}:5
+       >=kde-frameworks/kxmlgui-${KFMIN}:5
+       sys-libs/zlib
+       zip? ( >=dev-libs/libzip-1.6.0:= )
+"
+DEPEND="${RDEPEND}
+       >=dev-qt/qtconcurrent-${QTMIN}:5
+       >=kde-frameworks/kiconthemes-${KFMIN}:5
+       test? ( >=dev-libs/libzip-1.6.0:= )
+"
+# app-arch/rar is binary only
+BDEPEND="
+       sys-devel/gettext
+       elibc_glibc? ( test? ( amd64? ( app-arch/rar ) x86? ( app-arch/rar ) ) )
+"
+
+PATCHES=(
+       
"${FILESDIR}"/${PN}-23.08.2-explicitly-support-application-vnd-efi-iso-mime.patch
+       "${FILESDIR}"/${PN}-23.08.2-fix-support-for-bzip2-format.patch
+       "${FILESDIR}"/${PN}-23.08.2-dont-hardcode-bzip2-mimetype-in-tests.patch
+       "${FILESDIR}"/${PN}-23.08.2-fix-checks-using-old-ISO-mimetype.patch
+)
+
+src_configure() {
+       local mycmakeargs=(
+               $(cmake_use_find_package zip LibZip)
+       )
+
+       ecm_src_configure
+}
+
+src_test() {
+       local CMAKE_SKIP_TESTS=(
+               # bug 822177: kerfuffle-addtoarchivetest: may segfault or hang 
indefinitely
+               kerfuffle-addtoarchivetest
+               # bug 827840: plugins-clirartest: continuously broken with 
translations installed
+               plugins-clirartest
+
+               # kerfuffle-extracttest, kerfuffle-mimetypetest: broken with 
x11-misc/shared-mime-info-2.3
+               kerfuffle-extracttest
+               kerfuffle-mimetypetest
+       )
+
+       ecm_src_test
+}
+
+pkg_postinst() {
+       if [[ -z "${REPLACING_VERSIONS}" ]]; then
+               optfeature "rar archive creation/extraction" "app-arch/rar"
+               optfeature "rar archive extraction only" "app-arch/unar" 
"app-arch/unrar"
+               optfeature "7-Zip archive support" "app-arch/p7zip"
+               optfeature "lrz archive support" "app-arch/lrzip"
+               optfeature "Markdown support in text previews" 
"kde-misc/markdownpart:${SLOT}"
+       fi
+       ecm_pkg_postinst
+}

diff --git 
a/kde-apps/ark/files/ark-23.08.2-dont-hardcode-bzip2-mimetype-in-tests.patch 
b/kde-apps/ark/files/ark-23.08.2-dont-hardcode-bzip2-mimetype-in-tests.patch
new file mode 100644
index 000000000000..fad87b4114ef
--- /dev/null
+++ b/kde-apps/ark/files/ark-23.08.2-dont-hardcode-bzip2-mimetype-in-tests.patch
@@ -0,0 +1,44 @@
+https://invent.kde.org/utilities/ark/-/commit/785640b090b51e0067dbfc6c7944a478429204a2
+
+From 785640b090b51e0067dbfc6c7944a478429204a2 Mon Sep 17 00:00:00 2001
+From: Elvis Angelaccio <[email protected]>
+Date: Sat, 14 Oct 2023 17:34:10 +0200
+Subject: [PATCH] Don't hardcode bzip2 mimetype in tests
+
+Just take the name from QMimeDatabase, since it changes depending on
+whether we are using a shared-mime-info >= 2.3
+--- a/autotests/kerfuffle/adddialogtest.cpp
++++ b/autotests/kerfuffle/adddialogtest.cpp
+@@ -37,7 +37,7 @@ void AddDialogTest::testBasicWidgets_data()
+ 
+     QTest::newRow("tar") << QStringLiteral("application/x-tar") << false << 
-1 << -1;
+     QTest::newRow("targzip") << 
QStringLiteral("application/x-compressed-tar") << true << 3 << 7;
+-    QTest::newRow("tarbzip") << 
QStringLiteral("application/x-bzip-compressed-tar") << true << 3 << 7;
++    QTest::newRow("tarbzip") << 
QMimeDatabase().mimeTypeForFile(QStringLiteral("dummy.tar.bz2"), 
QMimeDatabase::MatchExtension).name() << true << 3 << 7;
+     QTest::newRow("tarZ") << QStringLiteral("application/x-tarz") << false << 
-1 << -1;
+     QTest::newRow("tarxz") << 
QStringLiteral("application/x-xz-compressed-tar") << true << 3 << 7;
+     QTest::newRow("tarlzma") << 
QStringLiteral("application/x-lzma-compressed-tar") << true << 3 << 7;
+--- a/autotests/kerfuffle/createdialogtest.cpp
++++ b/autotests/kerfuffle/createdialogtest.cpp
+@@ -38,7 +38,7 @@ void CreateDialogTest::testBasicWidgets_data()
+ 
+     QTest::newRow("tar") << QStringLiteral("application/x-tar");
+     QTest::newRow("targzip") << 
QStringLiteral("application/x-compressed-tar");
+-    QTest::newRow("tarbzip") << 
QStringLiteral("application/x-bzip-compressed-tar");
++    QTest::newRow("tarbzip") << 
QMimeDatabase().mimeTypeForFile(QStringLiteral("dummy.tar.bz2"), 
QMimeDatabase::MatchExtension).name();
+     QTest::newRow("tarZ") << QStringLiteral("application/x-tarz");
+     QTest::newRow("tarxz") << 
QStringLiteral("application/x-xz-compressed-tar");
+     QTest::newRow("tarlzma") << 
QStringLiteral("application/x-lzma-compressed-tar");
+--- a/autotests/kerfuffle/mimetypetest.cpp
++++ b/autotests/kerfuffle/mimetypetest.cpp
+@@ -30,7 +30,7 @@ void MimeTypeTest::testMimeTypeDetection_data()
+     QTest::addColumn<QString>("expectedMimeType");
+ 
+     const QString compressedGzipTarMime = 
QStringLiteral("application/x-compressed-tar");
+-    const QString compressedBzip2TarMime = 
QStringLiteral("application/x-bzip-compressed-tar");
++    const QString compressedBzip2TarMime = 
QMimeDatabase().mimeTypeForFile(QStringLiteral("dummy.tar.bz2"), 
QMimeDatabase::MatchExtension).name();
+     const QString compressedXzTarMime = 
QStringLiteral("application/x-xz-compressed-tar");
+     const QString compressedLzmaTarMime = 
QStringLiteral("application/x-lzma-compressed-tar");
+     const QString compressedZTarMime = QStringLiteral("application/x-tarz");
+-- 
+GitLab

diff --git 
a/kde-apps/ark/files/ark-23.08.2-explicitly-support-application-vnd-efi-iso-mime.patch
 
b/kde-apps/ark/files/ark-23.08.2-explicitly-support-application-vnd-efi-iso-mime.patch
new file mode 100644
index 000000000000..21181a51dbd8
--- /dev/null
+++ 
b/kde-apps/ark/files/ark-23.08.2-explicitly-support-application-vnd-efi-iso-mime.patch
@@ -0,0 +1,36 @@
+https://invent.kde.org/utilities/ark/-/commit/62d94c62f2fd2052be91dfe565e35a6d43c7d381
+
+From 62d94c62f2fd2052be91dfe565e35a6d43c7d381 Mon Sep 17 00:00:00 2001
+From: Elvis Angelaccio <[email protected]>
+Date: Sat, 14 Oct 2023 15:21:53 +0200
+Subject: [PATCH] Explicitly support new application/vnd.efi.iso mimetype
+
+It has been introduced by the new shared-mime-info 2.3 release. The old
+application/x-cd-image is kept as alias (so ark could still open ISO
+files just fine), but it broke our mimetype unit test.
+
+While at it, we explicitly add the new entry to the list of supported
+mimetypes.
+--- a/autotests/kerfuffle/mimetypetest.cpp
++++ b/autotests/kerfuffle/mimetypetest.cpp
+@@ -38,7 +38,7 @@ void MimeTypeTest::testMimeTypeDetection_data()
+     const QString compressedLzopTarMime = QStringLiteral("application/x-tzo");
+     const QString compressedLrzipTarMime = 
QStringLiteral("application/x-lrzip-compressed-tar");
+     const QString compressedLz4TarMime = 
QStringLiteral("application/x-lz4-compressed-tar");
+-    const QString isoMimeType = QStringLiteral("application/x-cd-image");
++    const QString isoMimeType = 
QMimeDatabase().mimeTypeForFile(QStringLiteral("dummy.iso"), 
QMimeDatabase::MatchExtension).name();
+     const QString debMimeType = 
QMimeDatabase().mimeTypeForFile(QStringLiteral("dummy.deb"), 
QMimeDatabase::MatchExtension).name();
+     const QString xarMimeType = QStringLiteral("application/x-xar");
+     const QString appImageMimeType = 
QStringLiteral("application/x-iso9660-appimage");
+--- a/plugins/libarchive/kerfuffle_libarchive_readonly.json.cmake
++++ b/plugins/libarchive/kerfuffle_libarchive_readonly.json.cmake
+@@ -71,6 +71,7 @@
+             "application/x-lzop",
+             "application/x-source-rpm",
+             "application/vnd.debian.binary-package",
++            "application/vnd.efi.iso",
+             "application/vnd.ms-cab-compressed",
+             "application/x-xar",
+             "application/x-iso9660-appimage",
+-- 
+GitLab

diff --git 
a/kde-apps/ark/files/ark-23.08.2-fix-checks-using-old-ISO-mimetype.patch 
b/kde-apps/ark/files/ark-23.08.2-fix-checks-using-old-ISO-mimetype.patch
new file mode 100644
index 000000000000..134eb2f8a6a3
--- /dev/null
+++ b/kde-apps/ark/files/ark-23.08.2-fix-checks-using-old-ISO-mimetype.patch
@@ -0,0 +1,36 @@
+https://invent.kde.org/utilities/ark/-/commit/dac14f552fb147bf4c9f759611cdb3b544a500b9
+
+From dac14f552fb147bf4c9f759611cdb3b544a500b9 Mon Sep 17 00:00:00 2001
+From: Elvis Angelaccio <[email protected]>
+Date: Sat, 14 Oct 2023 18:58:22 +0200
+Subject: [PATCH] Fix checks using old ISO mimetype
+
+The inherits() method doesn't work with mimetype aliases, and since 
shared-mime-info 2.3
+application/x-cd-image is an alias of application/vnd.efi.img
+--- a/kerfuffle/mimetypes.cpp
++++ b/kerfuffle/mimetypes.cpp
+@@ -104,7 +104,8 @@ QMimeType determineMimeType(const QString& filename, 
MimePreference mp)
+         }
+ 
+         // #354344: ISO files are currently wrongly detected-by-content.
+-        if 
(mimeFromExtension.inherits(QStringLiteral("application/x-cd-image"))) {
++        // TODO: drop application/x-cd-image once all distributions ship 
shared-mime-info >= 2.3
++        if 
(mimeFromExtension.inherits(QStringLiteral("application/vnd.efi.img")) || 
mimeFromExtension.inherits(QStringLiteral("application/x-cd-image"))) {
+             return mimeFromExtension;
+         }
+ 
+--- a/part/part.cpp
++++ b/part/part.cpp
+@@ -926,7 +926,9 @@ void Part::slotCompleted()
+         qCWarning(ARK) << "No entry listed by the plugin";
+         displayMsgWidget(KMessageWidget::Warning, xi18nc("@info", "The 
archive is empty or Ark could not open its content."));
+     } else if (m_model->rowCount() == 1 &&
+-               
m_model->archive()->mimeType().inherits(QStringLiteral("application/x-cd-image"))
 &&
++               // TODO: drop application/x-cd-image once all distributions 
ship shared-mime-info >= 2.3
++               
(m_model->archive()->mimeType().inherits(QStringLiteral("application/x-cd-image"))
 ||
++                
m_model->archive()->mimeType().inherits(QStringLiteral("application/vnd.efi.img")))
 &&
+                m_model->entryForIndex(m_model->index(0, 0))->fullPath() == 
QLatin1String("README.TXT")) {
+         qCWarning(ARK) << "Detected ISO image with UDF filesystem";
+         displayMsgWidget(KMessageWidget::Warning, xi18nc("@info", "Ark does 
not currently support ISO files with UDF filesystem."));
+-- 
+GitLab

diff --git a/kde-apps/ark/files/ark-23.08.2-fix-support-for-bzip2-format.patch 
b/kde-apps/ark/files/ark-23.08.2-fix-support-for-bzip2-format.patch
new file mode 100644
index 000000000000..6909f2eee3ca
--- /dev/null
+++ b/kde-apps/ark/files/ark-23.08.2-fix-support-for-bzip2-format.patch
@@ -0,0 +1,121 @@
+https://invent.kde.org/utilities/ark/-/commit/9bcbcb056c43abef88540c54f25bc6c1a78c7c0e
+
+From 9bcbcb056c43abef88540c54f25bc6c1a78c7c0e Mon Sep 17 00:00:00 2001
+From: Elvis Angelaccio <[email protected]>
+Date: Sat, 14 Oct 2023 17:07:16 +0200
+Subject: [PATCH] Fix support for bzip2 format with shared-mime-info 2.3
+
+shared-mime-info 2.3 explicitly separated the mimetypes for bzip2 archives
+from the mimetypes for the (old and deprecated) bzip archives.
+
+libarchive doesn't support the old bzip format, however we can't just
+drop it from ark since we still need it on systems that use an old
+shared-mime-info package.
+
+So for now we drop it only when we are sure that we are using a
+shared-mime-info >= 2.3
+--- a/kerfuffle/mimetypes.cpp
++++ b/kerfuffle/mimetypes.cpp
+@@ -76,6 +76,8 @@ QMimeType determineMimeType(const QString& filename, 
MimePreference mp)
+          mimeFromContent == 
db.mimeTypeForName(QStringLiteral("application/gzip"))) ||
+         
(mimeFromExtension.inherits(QStringLiteral("application/x-bzip-compressed-tar"))
 &&
+          mimeFromContent == 
db.mimeTypeForName(QStringLiteral("application/x-bzip"))) ||
++        
(mimeFromExtension.inherits(QStringLiteral("application/x-bzip2-compressed-tar"))
 &&
++         mimeFromContent == 
db.mimeTypeForName(QStringLiteral("application/x-bzip2"))) ||
+         
(mimeFromExtension.inherits(QStringLiteral("application/x-xz-compressed-tar")) 
&&
+          mimeFromContent == 
db.mimeTypeForName(QStringLiteral("application/x-xz"))) ||
+         (mimeFromExtension.inherits(QStringLiteral("application/x-tarz")) &&
+--- a/kerfuffle/pluginmanager.cpp
++++ b/kerfuffle/pluginmanager.cpp
+@@ -165,6 +165,18 @@ QStringList 
PluginManager::supportedWriteMimeTypes(MimeSortingMode mode) const
+         supported.remove(QStringLiteral("application/x-tzo"));
+     }
+ 
++    // shared-mime-info 2.3 explicitly separated 
application/x-bzip2-compressed-tar from application/x-bzip-compressed-tar
++    // since bzip2 is not compatible with the old (and deprecated) bzip 
format.
++    // See 
https://gitlab.freedesktop.org/xdg/shared-mime-info/-/merge_requests/239
++    // With shared-mime-info 2.3 (or newer) we can't have both mimetypes at 
the same time, since libarchive does not support
++    // the old deprecated bzip format. Also we can't know which version of 
shared-mime-info the system is actually using.
++    // For these reasons, just take the mimetype from QMimeDatabase to keep 
the compatibility with any shared-mime-info version.
++    if 
(supported.contains(QLatin1String("application/x-bzip-compressed-tar")) && 
supported.contains(QLatin1String("application/x-bzip2-compressed-tar"))) {
++        supported.remove(QLatin1String("application/x-bzip-compressed-tar"));
++        supported.remove(QLatin1String("application/x-bzip2-compressed-tar"));
++        
supported.insert(QMimeDatabase().mimeTypeForFile(QStringLiteral("dummy.tar.bz2"),
 QMimeDatabase::MatchExtension).name());
++    }
++
+     if (mode == SortByComment) {
+         return sortByComment(supported);
+     }
+--- a/plugins/libarchive/CMakeLists.txt
++++ b/plugins/libarchive/CMakeLists.txt
+@@ -4,7 +4,7 @@ include_directories(${LibArchive_INCLUDE_DIRS})
+ 
+ # NOTE: These are the mimetypes for "single-file" archives. They must be 
defined in the JSON metadata together with the "normal" mimetypes.
+ # However they need to be duplicated here because we need to pass them as C++ 
define to the plugin (see LIBARCHIVE_RAW_MIMETYPES define below).
+-set(SUPPORTED_LIBARCHIVE_RAW_MIMETYPES 
"application/x-compress;application/gzip;application/x-bzip;application/zlib;application/zstd;application/x-lzma;application/x-xz;application/x-lz4;application/x-lzip;application/x-lrzip;application/x-lzop;")
++set(SUPPORTED_LIBARCHIVE_RAW_MIMETYPES 
"application/x-compress;application/gzip;application/x-bzip;application/x-bzip2;application/zlib;application/zstd;application/x-lzma;application/x-xz;application/x-lz4;application/x-lzip;application/x-lrzip;application/x-lzop;")
+ 
+ set(INSTALLED_LIBARCHIVE_PLUGINS "")
+ 
+--- a/plugins/libarchive/kerfuffle_libarchive.json.cmake
++++ b/plugins/libarchive/kerfuffle_libarchive.json.cmake
+@@ -53,6 +53,7 @@
+             "application/x-tar",
+             "application/x-compressed-tar",
+             "application/x-bzip-compressed-tar",
++            "application/x-bzip2-compressed-tar",
+             "application/x-tarz",
+             "application/x-xz-compressed-tar",
+             "application/x-lzma-compressed-tar",
+@@ -119,6 +120,11 @@
+         "CompressionLevelMax": 9,
+         "CompressionLevelMin": 1
+     },
++    "application/x-bzip2-compressed-tar": {
++        "CompressionLevelDefault": 9,
++        "CompressionLevelMax": 9,
++        "CompressionLevelMin": 1
++    },
+     "application/x-compressed-tar": {
+         "CompressionLevelDefault": 6,
+         "CompressionLevelMax": 9,
+--- a/plugins/libarchive/kerfuffle_libarchive_readonly.json.cmake
++++ b/plugins/libarchive/kerfuffle_libarchive_readonly.json.cmake
+@@ -61,6 +61,7 @@
+             "application/x-compress",
+             "application/gzip",
+             "application/x-bzip",
++            "application/x-bzip2",
+             "application/x-lzma",
+             "application/x-xz",
+             "application/zlib",
+--- a/plugins/libarchive/libarchiveplugin.cpp
++++ b/plugins/libarchive/libarchiveplugin.cpp
+@@ -13,6 +13,7 @@
+ 
+ #include <KLocalizedString>
+ 
++#include <QMimeDatabase>
+ #include <QThread>
+ #include <QFileInfo>
+ #include <QDir>
+@@ -34,6 +35,17 @@ LibarchivePlugin::LibarchivePlugin(QObject *parent, const 
QVariantList &args)
+ 
+ #ifdef LIBARCHIVE_RAW_MIMETYPES
+     m_rawMimetypes = 
QStringLiteral(LIBARCHIVE_RAW_MIMETYPES).split(QLatin1Char(':'), 
Qt::SkipEmptyParts);
++    // shared-mime-info 2.3 explicitly separated application/x-bzip2 from 
application/x-bzip
++    // since bzip2 is not compatible with the old (and deprecated) bzip 
format.
++    // See 
https://gitlab.freedesktop.org/xdg/shared-mime-info/-/merge_requests/239
++    // With shared-mime-info 2.3 (or newer) we can't have both mimetypes at 
the same time, since libarchive does not support
++    // the old deprecated bzip format. Also we can't know which version of 
shared-mime-info the system is actually using.
++    // For these reasons, just take the mimetype from QMimeDatabase to keep 
the compatibility with any shared-mime-info version.
++    if (m_rawMimetypes.contains(QLatin1String("application/x-bzip")) && 
m_rawMimetypes.contains(QLatin1String("application/x-bzip2"))) {
++        m_rawMimetypes.removeAll(QLatin1String("application/x-bzip"));
++        m_rawMimetypes.removeAll(QLatin1String("application/x-bzip2"));
++        
m_rawMimetypes.append(QMimeDatabase().mimeTypeForFile(QStringLiteral("dummy.bz2"),
 QMimeDatabase::MatchExtension).name());
++    }
+     qCDebug(ARK) << "# available raw mimetypes:" << m_rawMimetypes.count();
+ #endif
+ }
+-- 
+GitLab

Reply via email to