Merge branch 'master' into partition-type

This commit is contained in:
Adriaan de Groot 2020-03-23 17:09:44 +01:00 committed by GitHub
commit 1718f7a8a8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 54 additions and 25 deletions

View File

@ -89,7 +89,7 @@ yamlScalarToVariant( const YAML::Node& scalarNode )
} }
QVariant QVariantList
yamlSequenceToVariant( const YAML::Node& sequenceNode ) yamlSequenceToVariant( const YAML::Node& sequenceNode )
{ {
QVariantList vl; QVariantList vl;
@ -101,7 +101,7 @@ yamlSequenceToVariant( const YAML::Node& sequenceNode )
} }
QVariant QVariantMap
yamlMapToVariant( const YAML::Node& mapNode ) yamlMapToVariant( const YAML::Node& mapNode )
{ {
QVariantMap vm; QVariantMap vm;

View File

@ -22,6 +22,8 @@
#include <QStringList> #include <QStringList>
#include <QVariant> #include <QVariant>
#include <QVariantList>
#include <QVariantMap>
class QByteArray; class QByteArray;
class QFileInfo; class QFileInfo;
@ -60,8 +62,8 @@ QVariantMap loadYaml( const QFileInfo&, bool* ok = nullptr );
QVariant yamlToVariant( const YAML::Node& node ); QVariant yamlToVariant( const YAML::Node& node );
QVariant yamlScalarToVariant( const YAML::Node& scalarNode ); QVariant yamlScalarToVariant( const YAML::Node& scalarNode );
QVariant yamlSequenceToVariant( const YAML::Node& sequenceNode ); QVariantList yamlSequenceToVariant( const YAML::Node& sequenceNode );
QVariant yamlMapToVariant( const YAML::Node& mapNode ); QVariantMap yamlMapToVariant( const YAML::Node& mapNode );
/// @brief Returns all the elements of @p listNode in a StringList /// @brief Returns all the elements of @p listNode in a StringList
QStringList yamlToStringList( const YAML::Node& listNode ); QStringList yamlToStringList( const YAML::Node& listNode );

View File

@ -123,7 +123,7 @@ loadStrings( QMap< QString, QString >& map,
throw YAML::Exception( YAML::Mark(), std::string( "Branding configuration is not a map: " ) + key ); throw YAML::Exception( YAML::Mark(), std::string( "Branding configuration is not a map: " ) + key );
} }
const auto& config = CalamaresUtils::yamlMapToVariant( doc[ key ] ).toMap(); const auto& config = CalamaresUtils::yamlMapToVariant( doc[ key ] );
map.clear(); map.clear();
for ( auto it = config.constBegin(); it != config.constEnd(); ++it ) for ( auto it = config.constBegin(); it != config.constEnd(); ++it )

View File

@ -237,7 +237,7 @@ void Module::loadConfigurationFile( const QString& configFileName ) //throws YA
} }
cDebug() << "Loaded module configuration" << path; cDebug() << "Loaded module configuration" << path;
m_configurationMap = CalamaresUtils::yamlMapToVariant( doc ).toMap(); m_configurationMap = CalamaresUtils::yamlMapToVariant( doc );
m_emergency = m_maybe_emergency && m_configurationMap.contains( EMERGENCY ) m_emergency = m_maybe_emergency && m_configurationMap.contains( EMERGENCY )
&& m_configurationMap[ EMERGENCY ].toBool(); && m_configurationMap[ EMERGENCY ].toBool();
return; return;

View File

@ -79,14 +79,15 @@ ContextualProcessTests::testProcessListSampleConfig()
} }
ContextualProcessJob job; ContextualProcessJob job;
job.setConfigurationMap( CalamaresUtils::yamlMapToVariant( doc ).toMap() ); job.setConfigurationMap( CalamaresUtils::yamlMapToVariant( doc ) );
QCOMPARE( job.count(), 2 ); // Only "firmwareType" and "branding.shortVersion" QCOMPARE( job.count(), 2 ); // Only "firmwareType" and "branding.shortVersion"
QCOMPARE( job.count( "firmwareType" ), 4 ); QCOMPARE( job.count( "firmwareType" ), 4 );
QCOMPARE( job.count( "branding.shortVersion" ), 2 ); // in the example config QCOMPARE( job.count( "branding.shortVersion" ), 2 ); // in the example config
} }
void ContextualProcessTests::testFetch() void
ContextualProcessTests::testFetch()
{ {
Logger::setupLogLevel( Logger::LOGVERBOSE ); Logger::setupLogLevel( Logger::LOGVERBOSE );
@ -187,5 +188,4 @@ void ContextualProcessTests::testFetch()
QCOMPARE( s, QString() ); QCOMPARE( s, QString() );
QVERIFY( s.isEmpty() ); QVERIFY( s.isEmpty() );
} }
} }

View File

@ -64,7 +64,7 @@ void FSResizerTests::testConfigurationRobust()
size: 100% size: 100%
atleast: 600MiB atleast: 600MiB
)" ); )" );
j.setConfigurationMap( CalamaresUtils::yamlMapToVariant( doc0 ).toMap() ); j.setConfigurationMap( CalamaresUtils::yamlMapToVariant( doc0 ) );
QVERIFY( j.name().isEmpty() ); QVERIFY( j.name().isEmpty() );
QCOMPARE( j.size().unit(), SizeUnit::None ); QCOMPARE( j.size().unit(), SizeUnit::None );
QCOMPARE( j.minimumSize().unit(), SizeUnit::None ); QCOMPARE( j.minimumSize().unit(), SizeUnit::None );
@ -82,7 +82,7 @@ fs: /
size: 100% size: 100%
atleast: 600MiB atleast: 600MiB
)" ); )" );
j.setConfigurationMap( CalamaresUtils::yamlMapToVariant( doc0 ).toMap() ); j.setConfigurationMap( CalamaresUtils::yamlMapToVariant( doc0 ) );
QVERIFY( !j.name().isEmpty() ); QVERIFY( !j.name().isEmpty() );
QCOMPARE( j.name(), QString("/") ); QCOMPARE( j.name(), QString("/") );
QCOMPARE( j.size().unit(), SizeUnit::Percent ); QCOMPARE( j.size().unit(), SizeUnit::Percent );
@ -97,7 +97,7 @@ dev: /dev/m00
size: 72 MiB size: 72 MiB
atleast: 127 % atleast: 127 %
)" ); )" );
j.setConfigurationMap( CalamaresUtils::yamlMapToVariant( doc0 ).toMap() ); j.setConfigurationMap( CalamaresUtils::yamlMapToVariant( doc0 ) );
QVERIFY( !j.name().isEmpty() ); QVERIFY( !j.name().isEmpty() );
QCOMPARE( j.name(), QString("/") ); QCOMPARE( j.name(), QString("/") );
QCOMPARE( j.size().unit(), SizeUnit::MiB ); QCOMPARE( j.size().unit(), SizeUnit::MiB );
@ -111,7 +111,7 @@ dev: /dev/m00
size: 72 MiB size: 72 MiB
atleast: 127 % atleast: 127 %
)" ); )" );
j.setConfigurationMap( CalamaresUtils::yamlMapToVariant( doc0 ).toMap() ); j.setConfigurationMap( CalamaresUtils::yamlMapToVariant( doc0 ) );
QVERIFY( !j.name().isEmpty() ); QVERIFY( !j.name().isEmpty() );
QCOMPARE( j.name(), QString("/dev/m00") ); QCOMPARE( j.name(), QString("/dev/m00") );
QCOMPARE( j.size().unit(), SizeUnit::MiB ); QCOMPARE( j.size().unit(), SizeUnit::MiB );
@ -126,7 +126,7 @@ fs: /
size: 71MiB size: 71MiB
# atleast: 127% # atleast: 127%
)" ); )" );
j.setConfigurationMap( CalamaresUtils::yamlMapToVariant( doc0 ).toMap() ); j.setConfigurationMap( CalamaresUtils::yamlMapToVariant( doc0 ) );
QVERIFY( !j.name().isEmpty() ); QVERIFY( !j.name().isEmpty() );
QCOMPARE( j.name(), QString("/") ); QCOMPARE( j.name(), QString("/") );
QCOMPARE( j.size().unit(), SizeUnit::MiB ); QCOMPARE( j.size().unit(), SizeUnit::MiB );

View File

@ -834,6 +834,7 @@ PartitionCoreModule::initLayout()
void void
PartitionCoreModule::initLayout( const QVariantList& config ) PartitionCoreModule::initLayout( const QVariantList& config )
{ {
bool ok;
QString sizeString; QString sizeString;
QString minSizeString; QString minSizeString;
QString maxSizeString; QString maxSizeString;
@ -885,6 +886,7 @@ PartitionCoreModule::initLayout( const QVariantList& config )
CalamaresUtils::getString( pentry, "type" ), CalamaresUtils::getString( pentry, "type" ),
CalamaresUtils::getString( pentry, "mountPoint" ), CalamaresUtils::getString( pentry, "mountPoint" ),
CalamaresUtils::getString( pentry, "filesystem" ), CalamaresUtils::getString( pentry, "filesystem" ),
CalamaresUtils::getSubMap( pentry, "features", ok ),
sizeString, sizeString,
minSizeString, minSizeString,
maxSizeString ) ) maxSizeString ) )

View File

@ -121,6 +121,7 @@ PartitionLayout::addEntry( const QString& label,
const QString& type, const QString& type,
const QString& mountPoint, const QString& mountPoint,
const QString& fs, const QString& fs,
const QVariantMap& features,
const QString& size, const QString& size,
const QString& min, const QString& min,
const QString& max ) const QString& max )
@ -146,6 +147,7 @@ PartitionLayout::addEntry( const QString& label,
{ {
entry.partFileSystem = m_defaultFsType; entry.partFileSystem = m_defaultFsType;
} }
entry.partFeatures = features;
m_partLayout.append( entry ); m_partLayout.append( entry );
@ -239,6 +241,7 @@ PartitionLayout::execute( Device* dev,
PartitionInfo::setMountPoint( currentPartition, part.partMountPoint ); PartitionInfo::setMountPoint( currentPartition, part.partMountPoint );
if ( !part.partLabel.isEmpty() ) if ( !part.partLabel.isEmpty() )
{ {
currentPartition->setLabel( part.partLabel );
currentPartition->fileSystem().setLabel( part.partLabel ); currentPartition->fileSystem().setLabel( part.partLabel );
} }
if ( !part.partType.isEmpty() ) if ( !part.partType.isEmpty() )
@ -247,6 +250,17 @@ PartitionLayout::execute( Device* dev,
currentPartition->setType( part.partType ); currentPartition->setType( part.partType );
#else #else
cWarning() << "Ignoring type; requires KPMcore >= 4.2.0."; cWarning() << "Ignoring type; requires KPMcore >= 4.2.0.";
#endif
}
if ( !part.partFeatures.isEmpty() )
{
#if defined( WITH_KPMCORE42API )
for ( const auto& k : part.partFeatures.keys() )
{
currentPartition->fileSystem().addFeature( k, part.partFeatures.value(k) );
}
#else
cWarning() << "Ignoring features; requires KPMcore >= 4.2.0.";
#endif #endif
} }
// Some buggy (legacy) BIOSes test if the bootflag of at least one partition is set. // Some buggy (legacy) BIOSes test if the bootflag of at least one partition is set.

View File

@ -31,6 +31,7 @@
// Qt // Qt
#include <QList> #include <QList>
#include <QObject> #include <QObject>
#include <QVariantMap>
class Partition; class Partition;
@ -43,6 +44,7 @@ public:
QString partType; QString partType;
QString partMountPoint; QString partMountPoint;
FileSystem::Type partFileSystem = FileSystem::Unknown; FileSystem::Type partFileSystem = FileSystem::Unknown;
QVariantMap partFeatures;
CalamaresUtils::Partition::PartitionSize partSize; CalamaresUtils::Partition::PartitionSize partSize;
CalamaresUtils::Partition::PartitionSize partMinSize; CalamaresUtils::Partition::PartitionSize partMinSize;
CalamaresUtils::Partition::PartitionSize partMaxSize; CalamaresUtils::Partition::PartitionSize partMaxSize;
@ -77,6 +79,7 @@ public:
const QString& type, const QString& type,
const QString& mountPoint, const QString& mountPoint,
const QString& fs, const QString& fs,
const QVariantMap& features,
const QString& size, const QString& size,
const QString& min = QString(), const QString& min = QString(),
const QString& max = QString() ); const QString& max = QString() );

View File

@ -108,13 +108,21 @@ defaultFileSystemType: "ext4"
# mountPoint: "/home" # mountPoint: "/home"
# size: 3G # size: 3G
# minSize: 1.5G # minSize: 1.5G
# features:
# 64bit: false
# casefold: true
# - name: "data" # - name: "data"
# filesystem: "fat32" # filesystem: "fat32"
# mountPoint: "/data" # mountPoint: "/data"
# features:
# sector-size: 4096
# sectors-per-cluster: 128
# size: 100% # size: 100%
# #
# There can be any number of partitions, each entry having the following attributes: # There can be any number of partitions, each entry having the following attributes:
# - name: partition label # - name: filesystem label
# and
# partition name (gpt only; since KPMCore 4.2.0)
# - type: partition type (optional parameter; gpt only; requires KPMCore >= 4.2.0) # - type: partition type (optional parameter; gpt only; requires KPMCore >= 4.2.0)
# - filesystem: filesystem type # - filesystem: filesystem type
# - mountPoint: partition mount point # - mountPoint: partition mount point
@ -123,6 +131,8 @@ defaultFileSystemType: "ext4"
# % of the available drive space if a '%' is appended to the value # % of the available drive space if a '%' is appended to the value
# - minSize: minimum partition size (optional parameter) # - minSize: minimum partition size (optional parameter)
# - maxSize: maximum partition size (optional parameter) # - maxSize: maximum partition size (optional parameter)
# - features: filesystem features (optional parameter; requires KPMCore >= 4.2.0)
# name: boolean or integer or string
# Checking for available storage # Checking for available storage
# #

View File

@ -62,7 +62,7 @@ ShellProcessTests::testProcessListSampleConfig()
} }
} }
CommandList cl( CalamaresUtils::yamlMapToVariant( doc ).toMap().value( "script" ) ); CommandList cl( CalamaresUtils::yamlMapToVariant( doc ).value( "script" ) );
QVERIFY( !cl.isEmpty() ); QVERIFY( !cl.isEmpty() );
QCOMPARE( cl.count(), 3 ); QCOMPARE( cl.count(), 3 );
@ -79,7 +79,7 @@ script:
- "ls /nonexistent" - "ls /nonexistent"
- "/bin/false" - "/bin/false"
)" ); )" );
CommandList cl( CalamaresUtils::yamlMapToVariant( doc ).toMap().value( "script" ) ); CommandList cl( CalamaresUtils::yamlMapToVariant( doc ).value( "script" ) );
QVERIFY( !cl.isEmpty() ); QVERIFY( !cl.isEmpty() );
QCOMPARE( cl.count(), 3 ); QCOMPARE( cl.count(), 3 );
@ -90,7 +90,7 @@ script:
- false - false
- "ls /nonexistent" - "ls /nonexistent"
)" ); )" );
CommandList cl1( CalamaresUtils::yamlMapToVariant( doc ).toMap().value( "script" ) ); CommandList cl1( CalamaresUtils::yamlMapToVariant( doc ).value( "script" ) );
QVERIFY( !cl1.isEmpty() ); QVERIFY( !cl1.isEmpty() );
QCOMPARE( cl1.count(), 2 ); // One element ignored QCOMPARE( cl1.count(), 2 ); // One element ignored
} }
@ -101,7 +101,7 @@ ShellProcessTests::testProcessListFromString()
YAML::Node doc = YAML::Load( R"(--- YAML::Node doc = YAML::Load( R"(---
script: "ls /tmp" script: "ls /tmp"
)" ); )" );
CommandList cl( CalamaresUtils::yamlMapToVariant( doc ).toMap().value( "script" ) ); CommandList cl( CalamaresUtils::yamlMapToVariant( doc ).value( "script" ) );
QVERIFY( !cl.isEmpty() ); QVERIFY( !cl.isEmpty() );
QCOMPARE( cl.count(), 1 ); QCOMPARE( cl.count(), 1 );
@ -112,7 +112,7 @@ script: "ls /tmp"
doc = YAML::Load( R"(--- doc = YAML::Load( R"(---
script: false script: false
)" ); )" );
CommandList cl1( CalamaresUtils::yamlMapToVariant( doc ).toMap().value( "script" ) ); CommandList cl1( CalamaresUtils::yamlMapToVariant( doc ).value( "script" ) );
QVERIFY( cl1.isEmpty() ); QVERIFY( cl1.isEmpty() );
QCOMPARE( cl1.count(), 0 ); QCOMPARE( cl1.count(), 0 );
} }
@ -125,7 +125,7 @@ script:
command: "ls /tmp" command: "ls /tmp"
timeout: 20 timeout: 20
)" ); )" );
CommandList cl( CalamaresUtils::yamlMapToVariant( doc ).toMap().value( "script" ) ); CommandList cl( CalamaresUtils::yamlMapToVariant( doc ).value( "script" ) );
QVERIFY( !cl.isEmpty() ); QVERIFY( !cl.isEmpty() );
QCOMPARE( cl.count(), 1 ); QCOMPARE( cl.count(), 1 );
@ -142,7 +142,7 @@ script:
timeout: 12 timeout: 12
- "-/bin/false" - "-/bin/false"
)" ); )" );
CommandList cl( CalamaresUtils::yamlMapToVariant( doc ).toMap().value( "script" ) ); CommandList cl( CalamaresUtils::yamlMapToVariant( doc ).value( "script" ) );
QVERIFY( !cl.isEmpty() ); QVERIFY( !cl.isEmpty() );
QCOMPARE( cl.count(), 2 ); QCOMPARE( cl.count(), 2 );
QCOMPARE( cl.at( 0 ).timeout(), 12s ); QCOMPARE( cl.at( 0 ).timeout(), 12s );
@ -157,12 +157,11 @@ ShellProcessTests::testRootSubstitution()
script: script:
- "ls /tmp" - "ls /tmp"
)" ); )" );
QVariant plainScript = CalamaresUtils::yamlMapToVariant( doc ).toMap().value( "script" ); QVariant plainScript = CalamaresUtils::yamlMapToVariant( doc ).value( "script" );
QVariant rootScript = CalamaresUtils::yamlMapToVariant( YAML::Load( R"(--- QVariant rootScript = CalamaresUtils::yamlMapToVariant( YAML::Load( R"(---
script: script:
- "ls @@ROOT@@" - "ls @@ROOT@@"
)" ) ) )" ) )
.toMap()
.value( "script" ); .value( "script" );
QVariant userScript = CalamaresUtils::yamlMapToVariant( YAML::Load( R"(--- QVariant userScript = CalamaresUtils::yamlMapToVariant( YAML::Load( R"(---
script: script:
@ -170,7 +169,6 @@ script:
- "chown @@USER@@ @@ROOT@@/calatest*" - "chown @@USER@@ @@ROOT@@/calatest*"
- rm -rf @@ROOT@@/calatest* - rm -rf @@ROOT@@/calatest*
)" ) ) )" ) )
.toMap()
.value( "script" ); .value( "script" );
if ( !Calamares::JobQueue::instance() ) if ( !Calamares::JobQueue::instance() )