From 73b5a0898d0102abd469104fbcdab56ce8d7c8fc Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Mon, 2 Nov 2020 21:35:43 +0100 Subject: [PATCH 1/2] [partition] Migrate the defaultFS type - remove the m_defaultFSType from PartitionLayout, because it is set on construction -- which is too early, before the configuration has been read. - make the default FS explicit in the init() calls which pass in a configuration; this needs support in the intermediate PartitionCoreModule. --- .../partition/core/PartitionCoreModule.cpp | 7 ++- .../partition/core/PartitionCoreModule.h | 6 +- .../partition/core/PartitionLayout.cpp | 59 ++++++++----------- src/modules/partition/core/PartitionLayout.h | 9 ++- .../partition/gui/PartitionViewStep.cpp | 3 +- 5 files changed, 44 insertions(+), 40 deletions(-) diff --git a/src/modules/partition/core/PartitionCoreModule.cpp b/src/modules/partition/core/PartitionCoreModule.cpp index 706f99017..14ce48b88 100644 --- a/src/modules/partition/core/PartitionCoreModule.cpp +++ b/src/modules/partition/core/PartitionCoreModule.cpp @@ -861,9 +861,9 @@ PartitionCoreModule::setBootLoaderInstallPath( const QString& path ) } void -PartitionCoreModule::initLayout( const QVariantList& config ) +PartitionCoreModule::initLayout( FileSystem::Type defaultFsType, const QVariantList& config ) { - m_partLayout.init( config ); + m_partLayout.init( defaultFsType, config ); } void @@ -875,7 +875,8 @@ PartitionCoreModule::layoutApply( Device* dev, const PartitionRole& role ) { bool isEfi = PartUtils::isEfiSystem(); - QList< Partition* > partList = m_partLayout.createPartitions( dev, firstSector, lastSector, luksPassphrase, parent, role ); + QList< Partition* > partList + = m_partLayout.createPartitions( dev, firstSector, lastSector, luksPassphrase, parent, role ); // Partition::mountPoint() tells us where it is mounted **now**, while // PartitionInfo::mountPoint() says where it will be mounted in the target system. diff --git a/src/modules/partition/core/PartitionCoreModule.h b/src/modules/partition/core/PartitionCoreModule.h index 46feb5f94..46604b97c 100644 --- a/src/modules/partition/core/PartitionCoreModule.h +++ b/src/modules/partition/core/PartitionCoreModule.h @@ -156,7 +156,11 @@ public: /// @brief Set the path where the bootloader will be installed void setBootLoaderInstallPath( const QString& path ); - void initLayout( const QVariantList& config = QVariantList() ); + /** @brief Initialize the default layout that will be applied + * + * See PartitionLayout::init() + */ + void initLayout( FileSystem::Type defaultFsType, const QVariantList& config = QVariantList() ); void layoutApply( Device* dev, qint64 firstSector, qint64 lastSector, QString luksPassphrase ); void layoutApply( Device* dev, diff --git a/src/modules/partition/core/PartitionLayout.cpp b/src/modules/partition/core/PartitionLayout.cpp index b71512685..6c5b69b98 100644 --- a/src/modules/partition/core/PartitionLayout.cpp +++ b/src/modules/partition/core/PartitionLayout.cpp @@ -27,32 +27,10 @@ #include #include -static FileSystem::Type -getDefaultFileSystemType() -{ - Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); - FileSystem::Type defaultFS = FileSystem::Ext4; - - if ( gs->contains( "defaultFileSystemType" ) ) - { - PartUtils::findFS( gs->value( "defaultFileSystemType" ).toString(), &defaultFS ); - if ( defaultFS == FileSystem::Unknown ) - { - defaultFS = FileSystem::Ext4; - } - } - - return defaultFS; -} - -PartitionLayout::PartitionLayout() - : m_defaultFsType( getDefaultFileSystemType() ) -{ -} +PartitionLayout::PartitionLayout() {} PartitionLayout::PartitionLayout( const PartitionLayout& layout ) - : m_defaultFsType( layout.m_defaultFsType ) - , m_partLayout( layout.m_partLayout ) + : m_partLayout( layout.m_partLayout ) { } @@ -63,7 +41,11 @@ PartitionLayout::PartitionEntry::PartitionEntry() { } -PartitionLayout::PartitionEntry::PartitionEntry( FileSystem::Type type, const QString& mountPoint, const QString& size, const QString& minSize, const QString& maxSize ) +PartitionLayout::PartitionEntry::PartitionEntry( FileSystem::Type type, + const QString& mountPoint, + const QString& size, + const QString& minSize, + const QString& maxSize ) : partType( type ) , partAttributes( 0 ) , partMountPoint( mountPoint ) @@ -111,7 +93,7 @@ PartitionLayout::addEntry( const PartitionEntry& entry ) } void -PartitionLayout::init( const QVariantList& config ) +PartitionLayout::init( FileSystem::Type defaultFsType, const QVariantList& config ) { bool ok; @@ -149,7 +131,7 @@ PartitionLayout::init( const QVariantList& config ) if ( !m_partLayout.count() ) { - addEntry( { m_defaultFsType, QString( "/" ), QString( "100%" ) } ); + addEntry( { defaultFsType, QString( "/" ), QString( "100%" ) } ); } } @@ -215,8 +197,8 @@ PartitionLayout::createPartitions( Device* dev, { if ( entry.partSize.unit() == CalamaresUtils::Partition::SizeUnit::Percent ) { - qint64 sectors = entry.partSize.toSectors( availableSectors + partSectorsMap.value( &entry ), - dev->logicalSize() ); + qint64 sectors + = entry.partSize.toSectors( availableSectors + partSectorsMap.value( &entry ), dev->logicalSize() ); if ( entry.partMinSize.isValid() ) { sectors = std::max( sectors, entry.partMinSize.toSectors( totalSectors, dev->logicalSize() ) ); @@ -245,13 +227,24 @@ PartitionLayout::createPartitions( Device* dev, Partition* part = nullptr; if ( luksPassphrase.isEmpty() ) { - part = KPMHelpers::createNewPartition( - parent, *dev, role, entry.partFileSystem, currentSector, currentSector + sectors - 1, KPM_PARTITION_FLAG( None ) ); + part = KPMHelpers::createNewPartition( parent, + *dev, + role, + entry.partFileSystem, + currentSector, + currentSector + sectors - 1, + KPM_PARTITION_FLAG( None ) ); } else { - part = KPMHelpers::createNewEncryptedPartition( - parent, *dev, role, entry.partFileSystem, currentSector, currentSector + sectors - 1, luksPassphrase, KPM_PARTITION_FLAG( None ) ); + part = KPMHelpers::createNewEncryptedPartition( parent, + *dev, + role, + entry.partFileSystem, + currentSector, + currentSector + sectors - 1, + luksPassphrase, + KPM_PARTITION_FLAG( None ) ); } PartitionInfo::setFormat( part, true ); PartitionInfo::setMountPoint( part, entry.partMountPoint ); diff --git a/src/modules/partition/core/PartitionLayout.h b/src/modules/partition/core/PartitionLayout.h index 8c02a8a41..24858aef8 100644 --- a/src/modules/partition/core/PartitionLayout.h +++ b/src/modules/partition/core/PartitionLayout.h @@ -83,7 +83,13 @@ public: PartitionLayout( const PartitionLayout& layout ); ~PartitionLayout(); - void init( const QVariantList& config ); + /** @brief create the configuration from @p config + * + * @p config is a list of partition entries (in QVariant form, + * read from YAML). If no entries are given, then a single + * partition is created with the given @p defaultFsType + */ + void init( FileSystem::Type defaultFsType, const QVariantList& config ); bool addEntry( const PartitionEntry& entry ); /** @@ -98,7 +104,6 @@ public: const PartitionRole& role ); private: - FileSystem::Type m_defaultFsType; QList< PartitionEntry > m_partLayout; }; diff --git a/src/modules/partition/gui/PartitionViewStep.cpp b/src/modules/partition/gui/PartitionViewStep.cpp index 13f5e77cc..561fdaba7 100644 --- a/src/modules/partition/gui/PartitionViewStep.cpp +++ b/src/modules/partition/gui/PartitionViewStep.cpp @@ -602,7 +602,8 @@ PartitionViewStep::setConfigurationMap( const QVariantMap& configurationMap ) QFuture< void > future = QtConcurrent::run( this, &PartitionViewStep::initPartitionCoreModule ); m_future->setFuture( future ); - m_core->initLayout( configurationMap.value( "partitionLayout" ).toList() ); + m_core->initLayout( fsType == FileSystem::Unknown ? FileSystem::Ext4 : fsType, + configurationMap.value( "partitionLayout" ).toList() ); } From ffce79e30ea44f10e9a876c73c2f715a394511b5 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Mon, 2 Nov 2020 22:32:44 +0100 Subject: [PATCH 2/2] [partition] Initialize the filesystem type, not the partition type - Passing FileSystem::Type to the QString constructor for partition type is not what I intended. --- src/modules/partition/core/PartitionLayout.cpp | 6 +++--- src/modules/partition/core/PartitionLayout.h | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/modules/partition/core/PartitionLayout.cpp b/src/modules/partition/core/PartitionLayout.cpp index 6c5b69b98..b460d8bb4 100644 --- a/src/modules/partition/core/PartitionLayout.cpp +++ b/src/modules/partition/core/PartitionLayout.cpp @@ -41,14 +41,14 @@ PartitionLayout::PartitionEntry::PartitionEntry() { } -PartitionLayout::PartitionEntry::PartitionEntry( FileSystem::Type type, +PartitionLayout::PartitionEntry::PartitionEntry( FileSystem::Type fs, const QString& mountPoint, const QString& size, const QString& minSize, const QString& maxSize ) - : partType( type ) - , partAttributes( 0 ) + : partAttributes( 0 ) , partMountPoint( mountPoint ) + , partFileSystem( fs ) , partSize( size ) , partMinSize( minSize ) , partMaxSize( maxSize ) diff --git a/src/modules/partition/core/PartitionLayout.h b/src/modules/partition/core/PartitionLayout.h index 24858aef8..6e0c73f8f 100644 --- a/src/modules/partition/core/PartitionLayout.h +++ b/src/modules/partition/core/PartitionLayout.h @@ -49,7 +49,7 @@ public: * Sets a specific FS type (not parsed from string like the other * constructor). */ - PartitionEntry( FileSystem::Type type, + PartitionEntry( FileSystem::Type fs, const QString& mountPoint, const QString& size, const QString& minSize = QString(),