From d3db2ba7b3d6efdfee74ffa7dd86cf11ab4b118e Mon Sep 17 00:00:00 2001
From: Adriaan de Groot <groot@kde.org>
Date: Thu, 13 Feb 2025 21:46:05 +0100
Subject: [PATCH] [partition] Add a doNotClose setting to the configuration

---
 src/modules/partition/Config.cpp                   |  4 +++-
 src/modules/partition/Config.h                     | 11 +++++++++++
 src/modules/partition/core/PartitionCoreModule.cpp |  2 +-
 3 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/src/modules/partition/Config.cpp b/src/modules/partition/Config.cpp
index 085c451791..d90111555d 100644
--- a/src/modules/partition/Config.cpp
+++ b/src/modules/partition/Config.cpp
@@ -451,9 +451,11 @@ Config::setConfigurationMap( const QVariantMap& configurationMap )
     {
         bool bogus = true;
         const auto lvmConfiguration = Calamares::getSubMap( configurationMap, "lvm", bogus );
-        m_isLVMEnabled = Calamares::getBool( lvmConfiguration, "enable", true);
+        m_isLVMEnabled = Calamares::getBool( lvmConfiguration, "enable", true );
     }
 
+    m_doNotClose = Calamares::getStringList( configurationMap, "doNotClose" );
+
     Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage();
     gs->insert( "armInstall", Calamares::getBool( configurationMap, "armInstall", false ) );
     fillGSConfigurationEFI( gs, configurationMap );
diff --git a/src/modules/partition/Config.h b/src/modules/partition/Config.h
index 13da58ac44..ebbe196131 100644
--- a/src/modules/partition/Config.h
+++ b/src/modules/partition/Config.h
@@ -40,6 +40,8 @@ class Config : public QObject
 
     Q_PROPERTY( bool lvmEnabled READ isLVMEnabled CONSTANT FINAL )
 
+    Q_PROPERTY( QStringList doNotClose READ doNotClose CONSTANT FINAL )
+
 public:
     Config( QObject* parent );
     ~Config() override = default;
@@ -178,6 +180,14 @@ public:
 
     bool isLVMEnabled() const { return m_isLVMEnabled; }
 
+    /** @brief A list of names that can follow /dev/mapper/ that must not be closed
+     *
+     * These names (if any) are skipped by the ClearMountsJob.
+     * The names may contain a trailing '*' which acts as a wildcard.
+     * In any other position, '*' is interpreted literally.
+     */
+    QStringList doNotClose() const { return m_doNotClose; }
+
 public Q_SLOTS:
     void setInstallChoice( int );  ///< Translates a button ID or so to InstallChoice
     void setInstallChoice( InstallChoice );
@@ -213,6 +223,7 @@ private:
     bool m_preCheckEncryption = false;
     bool m_showNotEncryptedBootMessage = true;
     bool m_isLVMEnabled = true;
+    QStringList m_doNotClose;
 };
 
 /** @brief Given a set of swap choices, return a sensible value from it.
diff --git a/src/modules/partition/core/PartitionCoreModule.cpp b/src/modules/partition/core/PartitionCoreModule.cpp
index c2fd61db9a..8666f0099e 100644
--- a/src/modules/partition/core/PartitionCoreModule.cpp
+++ b/src/modules/partition/core/PartitionCoreModule.cpp
@@ -670,7 +670,7 @@ PartitionCoreModule::jobs( const Config* config ) const
 #ifdef DEBUG_PARTITION_SKIP
     cWarning() << "Partitioning actions are skipped.";
 #else
-    const QStringList doNotClose = findEssentialLVs( m_deviceInfos );
+    const QStringList doNotClose = findEssentialLVs( m_deviceInfos ) + config->doNotClose();
 
     for ( const auto* info : m_deviceInfos )
     {
-- 
GitLab