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

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

Signed-off-by: Sam James <sam@gentoo.org>
This commit is contained in:
Sam James 2023-10-15 16:22:01 +01:00
parent adb049350a
commit 2619d290b3
No known key found for this signature in database
GPG Key ID: 738409F520DF9190
5 changed files with 330 additions and 0 deletions

View File

@ -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
}

View File

@ -0,0 +1,44 @@
https://invent.kde.org/utilities/ark/-/commit/785640b090b51e0067dbfc6c7944a478429204a2
From 785640b090b51e0067dbfc6c7944a478429204a2 Mon Sep 17 00:00:00 2001
From: Elvis Angelaccio <elvis.angelaccio@kde.org>
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

View File

@ -0,0 +1,36 @@
https://invent.kde.org/utilities/ark/-/commit/62d94c62f2fd2052be91dfe565e35a6d43c7d381
From 62d94c62f2fd2052be91dfe565e35a6d43c7d381 Mon Sep 17 00:00:00 2001
From: Elvis Angelaccio <elvis.angelaccio@kde.org>
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

View File

@ -0,0 +1,36 @@
https://invent.kde.org/utilities/ark/-/commit/dac14f552fb147bf4c9f759611cdb3b544a500b9
From dac14f552fb147bf4c9f759611cdb3b544a500b9 Mon Sep 17 00:00:00 2001
From: Elvis Angelaccio <elvis.angelaccio@kde.org>
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

View File

@ -0,0 +1,121 @@
https://invent.kde.org/utilities/ark/-/commit/9bcbcb056c43abef88540c54f25bc6c1a78c7c0e
From 9bcbcb056c43abef88540c54f25bc6c1a78c7c0e Mon Sep 17 00:00:00 2001
From: Elvis Angelaccio <elvis.angelaccio@kde.org>
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