Merge branch 'smooth-partition-crash'
This commit is contained in:
commit
faa3392cc5
5
CHANGES
5
CHANGES
@ -47,7 +47,7 @@ This release contains contributions from (alphabetically by first name):
|
|||||||
* The currently-selected disk device is remembered between manual partitioning
|
* The currently-selected disk device is remembered between manual partitioning
|
||||||
and the partitioning-overview pages. (Thanks to Arnaud)
|
and the partitioning-overview pages. (Thanks to Arnaud)
|
||||||
* *partition* There is new support for partitioning layout presets.
|
* *partition* There is new support for partitioning layout presets.
|
||||||
See `partitionc.conf` for documentation and details.
|
See `partition.conf` for documentation and details.
|
||||||
* The *keyboard* module now handles the (bogus) Austrian keymap for
|
* The *keyboard* module now handles the (bogus) Austrian keymap for
|
||||||
the system console properly. (Thanks to Kevin)
|
the system console properly. (Thanks to Kevin)
|
||||||
* The *preservefiles* module now has a mechanism for setting the permissions
|
* The *preservefiles* module now has a mechanism for setting the permissions
|
||||||
@ -56,7 +56,8 @@ This release contains contributions from (alphabetically by first name):
|
|||||||
for use in OEM installs where an image of fixed size is created,
|
for use in OEM installs where an image of fixed size is created,
|
||||||
and then sized to the actual SD card the user has used.
|
and then sized to the actual SD card the user has used.
|
||||||
* The *mount* module now handles missing *extraMounts* and *extraMountsEfi*
|
* The *mount* module now handles missing *extraMounts* and *extraMountsEfi*
|
||||||
keys gracefully (this is probably a misconfiguration issue).
|
keys gracefully (this is probably a misconfiguration, though, and gives a
|
||||||
|
warning).
|
||||||
* The *packages* module now supports pre- and post-script options
|
* The *packages* module now supports pre- and post-script options
|
||||||
for all operations, not just during install (keep in mind that
|
for all operations, not just during install (keep in mind that
|
||||||
these run as three separate shells, though).
|
these run as three separate shells, though).
|
||||||
|
@ -880,7 +880,7 @@ PartitionCoreModule::revertAllDevices()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
revertDevice( ( *it )->device.data() );
|
revertDevice( ( *it )->device.data(), false );
|
||||||
++it;
|
++it;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -889,7 +889,7 @@ PartitionCoreModule::revertAllDevices()
|
|||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
PartitionCoreModule::revertDevice( Device* dev )
|
PartitionCoreModule::revertDevice( Device* dev, bool individualRevert )
|
||||||
{
|
{
|
||||||
QMutexLocker locker( &m_revertMutex );
|
QMutexLocker locker( &m_revertMutex );
|
||||||
DeviceInfo* devInfo = infoForDevice( dev );
|
DeviceInfo* devInfo = infoForDevice( dev );
|
||||||
@ -915,7 +915,8 @@ PartitionCoreModule::revertDevice( Device* dev )
|
|||||||
|
|
||||||
m_bootLoaderModel->init( devices );
|
m_bootLoaderModel->init( devices );
|
||||||
|
|
||||||
refreshAfterModelChange();
|
if ( individualRevert )
|
||||||
|
refreshAfterModelChange();
|
||||||
emit deviceReverted( newDev );
|
emit deviceReverted( newDev );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -931,7 +932,7 @@ PartitionCoreModule::asyncRevertDevice( Device* dev, std::function< void() > cal
|
|||||||
watcher->deleteLater();
|
watcher->deleteLater();
|
||||||
} );
|
} );
|
||||||
|
|
||||||
QFuture< void > future = QtConcurrent::run( this, &PartitionCoreModule::revertDevice, dev );
|
QFuture< void > future = QtConcurrent::run( this, &PartitionCoreModule::revertDevice, dev, true );
|
||||||
watcher->setFuture( future );
|
watcher->setFuture( future );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -191,7 +191,12 @@ public:
|
|||||||
|
|
||||||
void revert(); // full revert, thread safe, calls doInit
|
void revert(); // full revert, thread safe, calls doInit
|
||||||
void revertAllDevices(); // convenience function, calls revertDevice
|
void revertAllDevices(); // convenience function, calls revertDevice
|
||||||
void revertDevice( Device* dev ); // rescans a single Device and updates DeviceInfo
|
/** @brief rescans a single Device and updates DeviceInfo
|
||||||
|
*
|
||||||
|
* When @p individualRevert is true, calls refreshAfterModelChange(),
|
||||||
|
* used to reduce number of refreshes when calling revertAllDevices().
|
||||||
|
*/
|
||||||
|
void revertDevice( Device* dev, bool individualRevert=true );
|
||||||
void asyncRevertDevice( Device* dev, std::function< void() > callback ); //like revertDevice, but asynchronous
|
void asyncRevertDevice( Device* dev, std::function< void() > callback ); //like revertDevice, but asynchronous
|
||||||
|
|
||||||
void clearJobs(); // only clear jobs, the Device* states are preserved
|
void clearJobs(); // only clear jobs, the Device* states are preserved
|
||||||
|
@ -53,7 +53,7 @@ PartitionLayout::addEntry( PartitionLayout::PartitionEntry entry )
|
|||||||
}
|
}
|
||||||
|
|
||||||
static double
|
static double
|
||||||
parseSizeString( QString sizeString, PartitionLayout::SizeUnit *unit )
|
parseSizeString( const QString& sizeString, PartitionLayout::SizeUnit* unit )
|
||||||
{
|
{
|
||||||
double value;
|
double value;
|
||||||
bool ok;
|
bool ok;
|
||||||
@ -102,35 +102,32 @@ parseSizeString( QString sizeString, PartitionLayout::SizeUnit *unit )
|
|||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
PartitionLayout::PartitionEntry::PartitionEntry(const QString& size, const QString& min)
|
||||||
PartitionLayout::addEntry( QString mountPoint, QString size, QString min )
|
|
||||||
{
|
{
|
||||||
PartitionLayout::PartitionEntry entry;
|
partSize = parseSizeString( size , &partSizeUnit );
|
||||||
|
if ( !min.isEmpty() )
|
||||||
|
partMinSize = parseSizeString( min , &partMinSizeUnit );
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
PartitionLayout::addEntry( const QString& mountPoint, const QString& size, const QString& min )
|
||||||
|
{
|
||||||
|
PartitionLayout::PartitionEntry entry( size, min );
|
||||||
|
|
||||||
entry.partMountPoint = mountPoint;
|
entry.partMountPoint = mountPoint;
|
||||||
entry.partFileSystem = FileSystem::Ext4;
|
entry.partFileSystem = FileSystem::Ext4;
|
||||||
entry.partSize = parseSizeString( size , &entry.partSizeUnit );
|
|
||||||
if (min.isEmpty())
|
|
||||||
entry.partMinSize = 0;
|
|
||||||
else
|
|
||||||
entry.partMinSize = parseSizeString( min , &entry.partMinSizeUnit );
|
|
||||||
|
|
||||||
partLayout.append( entry );
|
partLayout.append( entry );
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
PartitionLayout::addEntry( QString label, QString mountPoint, QString fs, QString size, QString min )
|
PartitionLayout::addEntry( const QString& label, const QString& mountPoint, const QString& fs, const QString& size, const QString& min )
|
||||||
{
|
{
|
||||||
PartitionLayout::PartitionEntry entry;
|
PartitionLayout::PartitionEntry entry( size, min );
|
||||||
|
|
||||||
entry.partLabel = label;
|
entry.partLabel = label;
|
||||||
entry.partMountPoint = mountPoint;
|
entry.partMountPoint = mountPoint;
|
||||||
entry.partFileSystem = FileSystem::typeForName( fs );
|
entry.partFileSystem = FileSystem::typeForName( fs );
|
||||||
entry.partSize = parseSizeString( size , &entry.partSizeUnit );
|
|
||||||
if (min.isEmpty())
|
|
||||||
entry.partMinSize = 0;
|
|
||||||
else
|
|
||||||
entry.partMinSize = parseSizeString( min , &entry.partMinSizeUnit );
|
|
||||||
|
|
||||||
partLayout.append( entry );
|
partLayout.append( entry );
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
/* === This file is part of Calamares - <https://github.com/calamares> ===
|
/* === This file is part of Calamares - <https://github.com/calamares> ===
|
||||||
*
|
*
|
||||||
* Copyright 2018, Collabora Ltd
|
* Copyright 2018, Collabora Ltd
|
||||||
|
* Copyright 2019, Adriaan de Groot <groot@kde.org>
|
||||||
*
|
*
|
||||||
* Calamares is free software: you can redistribute it and/or modify
|
* Calamares is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -47,11 +48,16 @@ public:
|
|||||||
{
|
{
|
||||||
QString partLabel;
|
QString partLabel;
|
||||||
QString partMountPoint;
|
QString partMountPoint;
|
||||||
int partFileSystem;
|
int partFileSystem = 0;
|
||||||
double partSize;
|
double partSize = 0.0L;
|
||||||
SizeUnit partSizeUnit;
|
SizeUnit partSizeUnit = Percent;
|
||||||
double partMinSize;
|
double partMinSize = 0.0L;
|
||||||
SizeUnit partMinSizeUnit;
|
SizeUnit partMinSizeUnit = Percent;
|
||||||
|
|
||||||
|
/// @brief All-zeroes PartitionEntry
|
||||||
|
PartitionEntry() {};
|
||||||
|
/// @brief Parse @p size and @p min to their respective member variables
|
||||||
|
PartitionEntry( const QString& size, const QString& min );
|
||||||
};
|
};
|
||||||
|
|
||||||
PartitionLayout();
|
PartitionLayout();
|
||||||
@ -60,8 +66,8 @@ public:
|
|||||||
~PartitionLayout();
|
~PartitionLayout();
|
||||||
|
|
||||||
void addEntry( PartitionEntry entry );
|
void addEntry( PartitionEntry entry );
|
||||||
void addEntry( QString mountPoint, QString size, QString min = "" );
|
void addEntry( const QString& mountPoint, const QString& size, const QString& min = QString() );
|
||||||
void addEntry( QString label, QString mountPoint, QString fs, QString size, QString min = "" );
|
void addEntry( const QString& label, const QString& mountPoint, const QString& fs, const QString& size, const QString& min = QString() );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Apply the current partition layout to the selected drive space.
|
* @brief Apply the current partition layout to the selected drive space.
|
||||||
|
@ -107,9 +107,9 @@ ChoicePage::ChoicePage( const SwapChoiceSet& swapChoices, QWidget* parent )
|
|||||||
, m_bootloaderComboBox( nullptr )
|
, m_bootloaderComboBox( nullptr )
|
||||||
, m_lastSelectedDeviceIndex( -1 )
|
, m_lastSelectedDeviceIndex( -1 )
|
||||||
, m_enableEncryptionWidget( true )
|
, m_enableEncryptionWidget( true )
|
||||||
, m_allowManualPartitioning( true )
|
|
||||||
, m_availableSwapChoices( swapChoices )
|
, m_availableSwapChoices( swapChoices )
|
||||||
, m_eraseSwapChoice( pickOne( swapChoices ) )
|
, m_eraseSwapChoice( pickOne( swapChoices ) )
|
||||||
|
, m_allowManualPartitioning( true )
|
||||||
{
|
{
|
||||||
setupUi( this );
|
setupUi( this );
|
||||||
|
|
||||||
@ -1246,6 +1246,7 @@ ChoicePage::setupActions()
|
|||||||
if ( osproberEntriesForCurrentDevice.count() == 0 )
|
if ( osproberEntriesForCurrentDevice.count() == 0 )
|
||||||
{
|
{
|
||||||
CALAMARES_RETRANSLATE(
|
CALAMARES_RETRANSLATE(
|
||||||
|
cDebug() << "Setting texts for 0 osprober entries";
|
||||||
m_messageLabel->setText( tr( "This storage device does not seem to have an operating system on it. "
|
m_messageLabel->setText( tr( "This storage device does not seem to have an operating system on it. "
|
||||||
"What would you like to do?<br/>"
|
"What would you like to do?<br/>"
|
||||||
"You will be able to review and confirm your choices "
|
"You will be able to review and confirm your choices "
|
||||||
@ -1278,6 +1279,7 @@ ChoicePage::setupActions()
|
|||||||
if ( !osName.isEmpty() )
|
if ( !osName.isEmpty() )
|
||||||
{
|
{
|
||||||
CALAMARES_RETRANSLATE(
|
CALAMARES_RETRANSLATE(
|
||||||
|
cDebug() << "Setting texts for 1 non-empty osprober entry";
|
||||||
m_messageLabel->setText( tr( "This storage device has %1 on it. "
|
m_messageLabel->setText( tr( "This storage device has %1 on it. "
|
||||||
"What would you like to do?<br/>"
|
"What would you like to do?<br/>"
|
||||||
"You will be able to review and confirm your choices "
|
"You will be able to review and confirm your choices "
|
||||||
@ -1301,6 +1303,7 @@ ChoicePage::setupActions()
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
CALAMARES_RETRANSLATE(
|
CALAMARES_RETRANSLATE(
|
||||||
|
cDebug() << "Setting texts for 1 empty osprober entry";
|
||||||
m_messageLabel->setText( tr( "This storage device already has an operating system on it. "
|
m_messageLabel->setText( tr( "This storage device already has an operating system on it. "
|
||||||
"What would you like to do?<br/>"
|
"What would you like to do?<br/>"
|
||||||
"You will be able to review and confirm your choices "
|
"You will be able to review and confirm your choices "
|
||||||
@ -1325,6 +1328,8 @@ ChoicePage::setupActions()
|
|||||||
// osproberEntriesForCurrentDevice has at least 2 items.
|
// osproberEntriesForCurrentDevice has at least 2 items.
|
||||||
|
|
||||||
CALAMARES_RETRANSLATE(
|
CALAMARES_RETRANSLATE(
|
||||||
|
cDebug() << "Setting texts for >= 2 osprober entries";
|
||||||
|
|
||||||
m_messageLabel->setText( tr( "This storage device has multiple operating systems on it. "
|
m_messageLabel->setText( tr( "This storage device has multiple operating systems on it. "
|
||||||
"What would you like to do?<br/>"
|
"What would you like to do?<br/>"
|
||||||
"You will be able to review and confirm your choices "
|
"You will be able to review and confirm your choices "
|
||||||
|
@ -165,9 +165,13 @@ PartitionPage::updateButtons()
|
|||||||
|
|
||||||
if ( m_ui->deviceComboBox->currentIndex() >= 0 )
|
if ( m_ui->deviceComboBox->currentIndex() >= 0 )
|
||||||
{
|
{
|
||||||
|
Device* device = nullptr;
|
||||||
QModelIndex deviceIndex = m_core->deviceModel()->index( m_ui->deviceComboBox->currentIndex(), 0 );
|
QModelIndex deviceIndex = m_core->deviceModel()->index( m_ui->deviceComboBox->currentIndex(), 0 );
|
||||||
auto device = m_core->deviceModel()->deviceForIndex( deviceIndex );
|
if ( deviceIndex.isValid() )
|
||||||
if ( device->type() != Device::Type::LVM_Device )
|
device = m_core->deviceModel()->deviceForIndex( deviceIndex );
|
||||||
|
if ( !device )
|
||||||
|
cWarning() << "Device for updateButtons is nullptr";
|
||||||
|
else if ( device->type() != Device::Type::LVM_Device )
|
||||||
{
|
{
|
||||||
createTable = true;
|
createTable = true;
|
||||||
|
|
||||||
@ -577,7 +581,7 @@ void
|
|||||||
PartitionPage::onPartitionModelReset()
|
PartitionPage::onPartitionModelReset()
|
||||||
{
|
{
|
||||||
m_ui->partitionTreeView->expandAll();
|
m_ui->partitionTreeView->expandAll();
|
||||||
updateButtons();
|
// updateButtons();
|
||||||
updateBootLoaderIndex();
|
updateBootLoaderIndex();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -538,7 +538,7 @@ findFS( QString defaultFS )
|
|||||||
// This bit is for distro's debugging their settings, and shows
|
// This bit is for distro's debugging their settings, and shows
|
||||||
// all the strings that KPMCore is matching against for FS type.
|
// all the strings that KPMCore is matching against for FS type.
|
||||||
{
|
{
|
||||||
Logger::CLog d( Logger::LOGDEBUG );
|
Logger::CDebug d;
|
||||||
using TR = Logger::DebugRow< int, QString >;
|
using TR = Logger::DebugRow< int, QString >;
|
||||||
const auto fstypes = FileSystem::types();
|
const auto fstypes = FileSystem::types();
|
||||||
d << "Available types (" << fstypes.count() << ')';
|
d << "Available types (" << fstypes.count() << ')';
|
||||||
@ -612,6 +612,18 @@ PartitionViewStep::setConfigurationMap( const QVariantMap& configurationMap )
|
|||||||
else
|
else
|
||||||
choices.insert( PartitionActions::Choices::SwapChoice::SmallSwap );
|
choices.insert( PartitionActions::Choices::SwapChoice::SmallSwap );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Not all are supported right now // FIXME
|
||||||
|
static const char unsupportedSetting[] = "Partition-module does not support *userSwapChoices* setting";
|
||||||
|
|
||||||
|
#define COMPLAIN_UNSUPPORTED(x) \
|
||||||
|
if ( choices.contains( x ) ) \
|
||||||
|
{ cWarning() << unsupportedSetting << PartitionActions::Choices::choiceToName( x ); choices.remove( x ); }
|
||||||
|
|
||||||
|
COMPLAIN_UNSUPPORTED( PartitionActions::Choices::SwapChoice::SwapFile )
|
||||||
|
COMPLAIN_UNSUPPORTED( PartitionActions::Choices::SwapChoice::ReuseSwap )
|
||||||
|
#undef COMPLAIN_UNSUPPORTED
|
||||||
|
|
||||||
m_swapChoices = choices;
|
m_swapChoices = choices;
|
||||||
|
|
||||||
// These gs settings seem to be unused (in upstream Calamares) outside of
|
// These gs settings seem to be unused (in upstream Calamares) outside of
|
||||||
|
@ -96,7 +96,7 @@ mapForPartition( Partition* partition, const QString& uuid )
|
|||||||
|
|
||||||
// Debugging for inside the loop in createPartitionList(),
|
// Debugging for inside the loop in createPartitionList(),
|
||||||
// so indent a bit
|
// so indent a bit
|
||||||
Logger::CLog deb = cDebug();
|
Logger::CDebug deb;
|
||||||
using TR = Logger::DebugRow<const char *const, const QString&>;
|
using TR = Logger::DebugRow<const char *const, const QString&>;
|
||||||
deb << " .. mapping for" << partition->partitionPath() << partition->deviceNode()
|
deb << " .. mapping for" << partition->partitionPath() << partition->deviceNode()
|
||||||
<< TR( "mtpoint:", PartitionInfo::mountPoint( partition ) )
|
<< TR( "mtpoint:", PartitionInfo::mountPoint( partition ) )
|
||||||
|
Loading…
Reference in New Issue
Block a user