[partition] Use default FS for layout items with type Unknown

main
Adriaan de Groot 4 years ago
parent c3528e4e40
commit 453d533d2c

@ -95,7 +95,7 @@ PartitionLayout::addEntry( const PartitionEntry& entry )
void void
PartitionLayout::init( FileSystem::Type defaultFsType, const QVariantList& config ) PartitionLayout::init( FileSystem::Type defaultFsType, const QVariantList& config )
{ {
bool ok; bool ok = true; // bogus argument to getSubMap()
m_partLayout.clear(); m_partLayout.clear();
@ -130,10 +130,71 @@ PartitionLayout::init( FileSystem::Type defaultFsType, const QVariantList& confi
if ( !m_partLayout.count() ) if ( !m_partLayout.count() )
{ {
addEntry( { defaultFsType, QString( "/" ), QString( "100%" ) } ); // Unknown will be translated to defaultFsType at apply-time
addEntry( { FileSystem::Type::Unknown, QString( "/" ), QString( "100%" ) } );
} }
setDefaultFsType( defaultFsType );
}
void
PartitionLayout::setDefaultFsType(FileSystem::Type defaultFsType)
{
using T = FileSystem::Type;
switch ( defaultFsType )
{
case T::Unknown:
case T::Unformatted:
case T::Extended:
case T::LinuxSwap:
case T::Luks:
case T::Ocfs2:
case T::Lvm2_PV:
case T::Udf:
case T::Iso9660:
case T::Luks2:
case T::LinuxRaidMember:
case T::BitLocker:
// bad bad
cWarning() << "The selected default FS" << defaultFsType << "is not suitable." << "Using ext4 instead.";
defaultFsType = T::Ext4;
break;
case T::Ext2:
case T::Ext3:
case T::Ext4:
case T::Fat32:
case T::Ntfs:
case T::Reiser4:
case T::ReiserFS:
case T::Xfs:
case T::Jfs:
case T::Btrfs:
case T::Exfat:
case T::F2fs:
// ok
break;
case T::Fat12:
case T::Fat16:
case T::Hfs:
case T::HfsPlus:
case T::Ufs:
case T::Hpfs:
case T::Zfs:
case T::Nilfs2:
case T::Apfs:
case T::Minix:
// weird
cWarning() << "The selected default FS" << defaultFsType << "is unusual, but not wrong.";
break;
default:
cWarning() << "The selected default FS" << defaultFsType << "is not known to Calamares." << "Using ext4 instead.";
defaultFsType = T::Ext4;
}
m_defaultFsType = defaultFsType;
} }
QList< Partition* > QList< Partition* >
PartitionLayout::createPartitions( Device* dev, PartitionLayout::createPartitions( Device* dev,
qint64 firstSector, qint64 firstSector,
@ -142,6 +203,9 @@ PartitionLayout::createPartitions( Device* dev,
PartitionNode* parent, PartitionNode* parent,
const PartitionRole& role ) const PartitionRole& role )
{ {
// Make sure the default FS is sensible; warn and use ext4 if not
setDefaultFsType( m_defaultFsType );
QList< Partition* > partList; QList< Partition* > partList;
// Map each partition entry to its requested size (0 when calculated later) // Map each partition entry to its requested size (0 when calculated later)
QMap< const PartitionLayout::PartitionEntry*, qint64 > partSectorsMap; QMap< const PartitionLayout::PartitionEntry*, qint64 > partSectorsMap;
@ -210,6 +274,8 @@ PartitionLayout::createPartitions( Device* dev,
} }
} }
auto correctFS = [d=m_defaultFsType]( FileSystem::Type t ) { return t == FileSystem::Type::Unknown ? d : t; };
// Create the partitions. // Create the partitions.
currentSector = firstSector; currentSector = firstSector;
availableSectors = totalSectors; availableSectors = totalSectors;
@ -229,7 +295,7 @@ PartitionLayout::createPartitions( Device* dev,
part = KPMHelpers::createNewPartition( parent, part = KPMHelpers::createNewPartition( parent,
*dev, *dev,
role, role,
entry.partFileSystem, correctFS( entry.partFileSystem ),
entry.partLabel, entry.partLabel,
currentSector, currentSector,
currentSector + sectors - 1, currentSector + sectors - 1,
@ -240,7 +306,7 @@ PartitionLayout::createPartitions( Device* dev,
part = KPMHelpers::createNewEncryptedPartition( parent, part = KPMHelpers::createNewEncryptedPartition( parent,
*dev, *dev,
role, role,
entry.partFileSystem, correctFS( entry.partFileSystem ),
entry.partLabel, entry.partLabel,
currentSector, currentSector,
currentSector + sectors - 1, currentSector + sectors - 1,

@ -87,11 +87,28 @@ public:
* *
* @p config is a list of partition entries (in QVariant form, * @p config is a list of partition entries (in QVariant form,
* read from YAML). If no entries are given, then a single * read from YAML). If no entries are given, then a single
* partition is created with the given @p defaultFsType * partition is created with type Unkown.
*
* Any partitions with FS type Unknown will get the default filesystem
* that is set at **apply** time (e.g. when createPartitions() is
* called as well.
*
* @see setDefaultFsType()
*/ */
void init( FileSystem::Type defaultFsType, const QVariantList& config ); void init( FileSystem::Type defaultFsType, const QVariantList& config );
/** @brief add an entry as if it had been listed in the config
*
* The same comments about filesystem type apply.
*/
bool addEntry( const PartitionEntry& entry ); bool addEntry( const PartitionEntry& entry );
/** @brief set the default filesystem type
*
* Any partitions in the layout with type Unknown will get
* the default type when createPartitions() is called.
*/
void setDefaultFsType( FileSystem::Type defaultFsType );
/** /**
* @brief Apply the current partition layout to the selected drive space. * @brief Apply the current partition layout to the selected drive space.
* @return A list of Partition objects. * @return A list of Partition objects.
@ -105,6 +122,7 @@ public:
private: private:
QList< PartitionEntry > m_partLayout; QList< PartitionEntry > m_partLayout;
FileSystem::Type m_defaultFsType = FileSystem::Type::Unknown;
}; };
#endif /* PARTITIONLAYOUT_H */ #endif /* PARTITIONLAYOUT_H */

Loading…
Cancel
Save