[partition] Use default FS for layout items with type Unknown
This commit is contained in:
parent
c3528e4e40
commit
453d533d2c
@ -95,7 +95,7 @@ PartitionLayout::addEntry( const PartitionEntry& entry )
|
||||
void
|
||||
PartitionLayout::init( FileSystem::Type defaultFsType, const QVariantList& config )
|
||||
{
|
||||
bool ok;
|
||||
bool ok = true; // bogus argument to getSubMap()
|
||||
|
||||
m_partLayout.clear();
|
||||
|
||||
@ -130,10 +130,71 @@ PartitionLayout::init( FileSystem::Type defaultFsType, const QVariantList& confi
|
||||
|
||||
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* >
|
||||
PartitionLayout::createPartitions( Device* dev,
|
||||
qint64 firstSector,
|
||||
@ -142,6 +203,9 @@ PartitionLayout::createPartitions( Device* dev,
|
||||
PartitionNode* parent,
|
||||
const PartitionRole& role )
|
||||
{
|
||||
// Make sure the default FS is sensible; warn and use ext4 if not
|
||||
setDefaultFsType( m_defaultFsType );
|
||||
|
||||
QList< Partition* > partList;
|
||||
// Map each partition entry to its requested size (0 when calculated later)
|
||||
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.
|
||||
currentSector = firstSector;
|
||||
availableSectors = totalSectors;
|
||||
@ -229,7 +295,7 @@ PartitionLayout::createPartitions( Device* dev,
|
||||
part = KPMHelpers::createNewPartition( parent,
|
||||
*dev,
|
||||
role,
|
||||
entry.partFileSystem,
|
||||
correctFS( entry.partFileSystem ),
|
||||
entry.partLabel,
|
||||
currentSector,
|
||||
currentSector + sectors - 1,
|
||||
@ -240,7 +306,7 @@ PartitionLayout::createPartitions( Device* dev,
|
||||
part = KPMHelpers::createNewEncryptedPartition( parent,
|
||||
*dev,
|
||||
role,
|
||||
entry.partFileSystem,
|
||||
correctFS( entry.partFileSystem ),
|
||||
entry.partLabel,
|
||||
currentSector,
|
||||
currentSector + sectors - 1,
|
||||
|
@ -87,11 +87,28 @@ public:
|
||||
*
|
||||
* @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
|
||||
* 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 );
|
||||
/** @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 );
|
||||
|
||||
/** @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.
|
||||
* @return A list of Partition objects.
|
||||
@ -105,6 +122,7 @@ public:
|
||||
|
||||
private:
|
||||
QList< PartitionEntry > m_partLayout;
|
||||
FileSystem::Type m_defaultFsType = FileSystem::Type::Unknown;
|
||||
};
|
||||
|
||||
#endif /* PARTITIONLAYOUT_H */
|
||||
|
Loading…
Reference in New Issue
Block a user