mirror of
https://github.com/parchlinux/calamares.git
synced 2025-06-28 01:45:36 -04:00
[partition] Use default FS for layout items with type Unknown
This commit is contained in:
parent
c3528e4e40
commit
453d533d2c
2 changed files with 89 additions and 5 deletions
|
@ -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…
Add table
Add a link
Reference in a new issue