Merge remote-tracking branch 'upstream/calamares' into development
This commit is contained in:
commit
538e7561b0
3
CHANGES
3
CHANGES
@ -47,6 +47,9 @@ results -- are sent to Matrix only.
|
||||
- A long-neglected pull request from Lisa Vitolo for the *partition*
|
||||
module -- allowing to set filesystem labels during manual partitioning --
|
||||
has been revived and merged.
|
||||
- The *partition* manager has had a long-standing bug with partition-flags
|
||||
and manual partitioning resolved. This may help resolve some installation
|
||||
issues on UEFI systems. #1724
|
||||
|
||||
|
||||
# 3.2.39.3 (2021-04-14) #
|
||||
|
@ -18,18 +18,25 @@
|
||||
#include "GlobalStorage.h"
|
||||
#include "Job.h"
|
||||
#include "JobQueue.h"
|
||||
#include "PythonJob.h"
|
||||
#include "Settings.h"
|
||||
#include "ViewManager.h"
|
||||
#include "modulesystem/Module.h"
|
||||
#include "modulesystem/ModuleManager.h"
|
||||
#include "modulesystem/ViewModule.h"
|
||||
#include "utils/Logger.h"
|
||||
#include "utils/Yaml.h"
|
||||
#include "viewpages/ExecutionViewStep.h"
|
||||
|
||||
// Optional features of Calamares
|
||||
// - Python support
|
||||
// - QML support
|
||||
#ifdef WITH_PYTHON
|
||||
#include "PythonJob.h"
|
||||
#endif
|
||||
#ifdef WITH_QML
|
||||
#include "utils/Qml.h"
|
||||
#endif
|
||||
#include "utils/Yaml.h"
|
||||
#include "viewpages/ExecutionViewStep.h"
|
||||
|
||||
|
||||
#include <QApplication>
|
||||
#include <QCommandLineOption>
|
||||
@ -366,10 +373,15 @@ createApplication( int& argc, char* argv[] )
|
||||
return new QCoreApplication( argc, argv );
|
||||
}
|
||||
|
||||
#ifdef WITH_PYTHON
|
||||
static const char pythonPreScript[] = R"(
|
||||
# This is Python code executed by Python modules *before* the
|
||||
# script file (e.g. main.py) is executed. Beware " before )
|
||||
# because it's a C++ raw-string.
|
||||
#
|
||||
# Calls to suprocess methods that execute something are
|
||||
# suppressed and logged -- scripts should really be using libcalamares
|
||||
# methods instead.
|
||||
_calamares_subprocess = __import__("subprocess", globals(), locals(), [], 0)
|
||||
import sys
|
||||
import libcalamares
|
||||
@ -386,6 +398,7 @@ sys.modules["subprocess"] = fake_subprocess
|
||||
libcalamares.utils.debug('pre-script for testing purposes injected')
|
||||
|
||||
)";
|
||||
#endif
|
||||
|
||||
int
|
||||
main( int argc, char* argv[] )
|
||||
@ -416,10 +429,12 @@ main( int argc, char* argv[] )
|
||||
gs->insert( "localeConf", vm );
|
||||
}
|
||||
|
||||
#ifdef WITH_PYTHON
|
||||
Calamares::PythonJob::setInjectedPreScript(pythonPreScript);
|
||||
#endif
|
||||
#ifdef WITH_QML
|
||||
CalamaresUtils::initQmlModulesDir(); // don't care if failed
|
||||
#endif
|
||||
Calamares::PythonJob::setInjectedPreScript(pythonPreScript);
|
||||
|
||||
cDebug() << "Calamares module-loader testing" << module.moduleName();
|
||||
Calamares::Module* m = load_module( module );
|
||||
|
@ -60,6 +60,8 @@ public:
|
||||
friend CDebug& operator<<( CDebug&&, const FuncSuppressor& );
|
||||
friend CDebug& operator<<( CDebug&&, const Once& );
|
||||
|
||||
inline unsigned int level() const { return m_debugLevel; }
|
||||
|
||||
private:
|
||||
QString m_msg;
|
||||
unsigned int m_debugLevel;
|
||||
@ -315,6 +317,12 @@ private:
|
||||
inline CDebug&
|
||||
operator<<( CDebug&& s, const Once& o )
|
||||
{
|
||||
if ( !logLevelEnabled( s.level() ) )
|
||||
{
|
||||
// This won't print, so it's not using the "onceness"
|
||||
return s;
|
||||
}
|
||||
|
||||
if ( o.m )
|
||||
{
|
||||
o.m = false;
|
||||
@ -327,6 +335,7 @@ operator<<( CDebug&& s, const Once& o )
|
||||
|
||||
} // namespace Logger
|
||||
|
||||
#define cVerbose() Logger::CDebug( Logger::LOGVERBOSE, Q_FUNC_INFO )
|
||||
#define cDebug() Logger::CDebug( Logger::LOGDEBUG, Q_FUNC_INFO )
|
||||
#define cWarning() Logger::CDebug( Logger::LOGWARNING, Q_FUNC_INFO )
|
||||
#define cError() Logger::CDebug( Logger::LOGERROR, Q_FUNC_INFO )
|
||||
|
@ -613,4 +613,10 @@ ViewManager::isSetupMode() const
|
||||
return s ? s->isSetupMode() : false;
|
||||
}
|
||||
|
||||
QString
|
||||
ViewManager::logFilePath() const
|
||||
{
|
||||
return Logger::logFile();
|
||||
}
|
||||
|
||||
} // namespace Calamares
|
||||
|
@ -54,6 +54,7 @@ class UIDLLEXPORT ViewManager : public QAbstractListModel
|
||||
Q_PROPERTY( bool isDebugMode READ isDebugMode CONSTANT FINAL )
|
||||
Q_PROPERTY( bool isChrootMode READ isChrootMode CONSTANT FINAL )
|
||||
Q_PROPERTY( bool isSetupMode READ isSetupMode CONSTANT FINAL )
|
||||
Q_PROPERTY( QString logFilePath READ logFilePath CONSTANT FINAL )
|
||||
|
||||
public:
|
||||
/**
|
||||
@ -208,6 +209,8 @@ public Q_SLOTS:
|
||||
bool isChrootMode() const;
|
||||
/// @brief Proxy to Settings::isSetupMode() default @c false
|
||||
bool isSetupMode() const;
|
||||
/// @brief Proxy to Logger::logFile(), default empty
|
||||
QString logFilePath() const;
|
||||
|
||||
signals:
|
||||
void currentStepChanged();
|
||||
|
@ -10,8 +10,8 @@
|
||||
|
||||
#include "DeviceList.h"
|
||||
|
||||
#include "utils/Logger.h"
|
||||
#include "partition/PartitionIterator.h"
|
||||
#include "utils/Logger.h"
|
||||
|
||||
#include <kpmcore/backend/corebackend.h>
|
||||
#include <kpmcore/backend/corebackendmanager.h>
|
||||
@ -133,11 +133,11 @@ getDevices( DeviceType which )
|
||||
#endif
|
||||
|
||||
// Unsafe partitioning
|
||||
auto removeInAllModes = []( DeviceList& l, DeviceList::iterator& it) { return erase(l, it); };
|
||||
auto removeInSafeMode = []( DeviceList&, DeviceList::iterator& it) { return ++it; };
|
||||
auto removeInAllModes = []( DeviceList& l, DeviceList::iterator& it ) { return erase( l, it ); };
|
||||
auto removeInSafeMode = []( DeviceList&, DeviceList::iterator& it ) { return ++it; };
|
||||
#else
|
||||
// Safe partitioning
|
||||
auto removeInAllModes = []( DeviceList& l, DeviceList::iterator& it) { return erase(l, it); };
|
||||
auto removeInAllModes = []( DeviceList& l, DeviceList::iterator& it ) { return erase( l, it ); };
|
||||
auto& removeInSafeMode = removeInAllModes;
|
||||
#endif
|
||||
|
||||
|
@ -177,7 +177,8 @@ canBeResized( Partition* candidate, const Logger::Once& o )
|
||||
|
||||
if ( availableStorageB > advisedStorageB )
|
||||
{
|
||||
cDebug() << o << "Partition" << convenienceName( candidate ) << "authorized for resize + autopartition install.";
|
||||
cDebug() << o << "Partition" << convenienceName( candidate )
|
||||
<< "authorized for resize + autopartition install.";
|
||||
return true;
|
||||
}
|
||||
else
|
||||
@ -412,8 +413,14 @@ runOsprober( DeviceModel* dm )
|
||||
FstabEntryList fstabEntries = lookForFstabEntries( path );
|
||||
QString homePath = findPartitionPathForMountPoint( fstabEntries, "/home" );
|
||||
|
||||
osproberEntries.append(
|
||||
{ prettyName, path, file, QString(), canBeResized( dm, path, o ), lineColumns, fstabEntries, homePath } );
|
||||
osproberEntries.append( { prettyName,
|
||||
path,
|
||||
file,
|
||||
QString(),
|
||||
canBeResized( dm, path, o ),
|
||||
lineColumns,
|
||||
fstabEntries,
|
||||
homePath } );
|
||||
osproberCleanLines.append( line );
|
||||
}
|
||||
}
|
||||
|
@ -26,7 +26,7 @@ class DeviceModel;
|
||||
class Partition;
|
||||
namespace Logger
|
||||
{
|
||||
class Once;
|
||||
class Once;
|
||||
}
|
||||
|
||||
namespace PartUtils
|
||||
|
@ -258,7 +258,7 @@ PartitionCoreModule::doInit()
|
||||
cDebug() << Logger::SubEntry << "node\tcapacity\tname\tprettyName";
|
||||
for ( auto device : devices )
|
||||
{
|
||||
cDebug() << Logger::SubEntry << Logger::Pointer(device);
|
||||
cDebug() << Logger::SubEntry << Logger::Pointer( device );
|
||||
if ( device )
|
||||
{
|
||||
// Gives ownership of the Device* to the DeviceInfo object
|
||||
|
@ -144,14 +144,15 @@ ChoicePage::~ChoicePage() {}
|
||||
* this avoids cases where the popup would truncate data being drawn
|
||||
* because the overall box is sized too narrow.
|
||||
*/
|
||||
void setModelToComboBox( QComboBox* box, QAbstractItemModel* model )
|
||||
void
|
||||
setModelToComboBox( QComboBox* box, QAbstractItemModel* model )
|
||||
{
|
||||
box->setModel( model );
|
||||
if ( model->rowCount() > 0 )
|
||||
{
|
||||
QStyleOptionViewItem options;
|
||||
options.initFrom( box );
|
||||
auto delegateSize = box->itemDelegate()->sizeHint(options, model->index(0, 0) );
|
||||
auto delegateSize = box->itemDelegate()->sizeHint( options, model->index( 0, 0 ) );
|
||||
box->setMinimumWidth( delegateSize.width() );
|
||||
}
|
||||
}
|
||||
@ -1005,7 +1006,8 @@ ChoicePage::updateActionChoicePreview( InstallChoice choice )
|
||||
|
||||
SelectionFilter filter = []( const QModelIndex& index ) {
|
||||
return PartUtils::canBeResized(
|
||||
static_cast< Partition* >( index.data( PartitionModel::PartitionPtrRole ).value< void* >() ), Logger::Once() );
|
||||
static_cast< Partition* >( index.data( PartitionModel::PartitionPtrRole ).value< void* >() ),
|
||||
Logger::Once() );
|
||||
};
|
||||
m_beforePartitionBarsView->setSelectionFilter( filter );
|
||||
m_beforePartitionLabelsView->setSelectionFilter( filter );
|
||||
@ -1094,7 +1096,8 @@ ChoicePage::updateActionChoicePreview( InstallChoice choice )
|
||||
{
|
||||
SelectionFilter filter = []( const QModelIndex& index ) {
|
||||
return PartUtils::canBeReplaced(
|
||||
static_cast< Partition* >( index.data( PartitionModel::PartitionPtrRole ).value< void* >() ), Logger::Once() );
|
||||
static_cast< Partition* >( index.data( PartitionModel::PartitionPtrRole ).value< void* >() ),
|
||||
Logger::Once() );
|
||||
};
|
||||
m_beforePartitionBarsView->setSelectionFilter( filter );
|
||||
m_beforePartitionLabelsView->setSelectionFilter( filter );
|
||||
|
@ -52,7 +52,6 @@ static QSet< FileSystem::Type > s_unmountableFS( { FileSystem::Unformatted,
|
||||
|
||||
CreatePartitionDialog::CreatePartitionDialog( Device* device,
|
||||
PartitionNode* parentPartition,
|
||||
Partition* partition,
|
||||
const QStringList& usedMountPoints,
|
||||
QWidget* parentWidget )
|
||||
: QDialog( parentWidget )
|
||||
@ -81,9 +80,6 @@ CreatePartitionDialog::CreatePartitionDialog( Device* device,
|
||||
m_ui->lvNameLineEdit->setValidator( validator );
|
||||
}
|
||||
|
||||
standardMountPoints( *( m_ui->mountPointComboBox ),
|
||||
partition ? PartitionInfo::mountPoint( partition ) : QString() );
|
||||
|
||||
if ( device->partitionTable()->type() == PartitionTable::msdos
|
||||
|| device->partitionTable()->type() == PartitionTable::msdos_sectorbased )
|
||||
{
|
||||
@ -132,13 +128,47 @@ CreatePartitionDialog::CreatePartitionDialog( Device* device,
|
||||
// Select a default
|
||||
m_ui->fsComboBox->setCurrentIndex( defaultFsIndex );
|
||||
updateMountPointUi();
|
||||
checkMountPointSelection();
|
||||
}
|
||||
|
||||
CreatePartitionDialog::CreatePartitionDialog( Device* device,
|
||||
const FreeSpace& freeSpacePartition,
|
||||
const QStringList& usedMountPoints,
|
||||
QWidget* parentWidget )
|
||||
: CreatePartitionDialog( device, freeSpacePartition.p->parent(), usedMountPoints, parentWidget )
|
||||
{
|
||||
standardMountPoints( *( m_ui->mountPointComboBox ), QString() );
|
||||
setFlagList( *( m_ui->m_listFlags ),
|
||||
static_cast< PartitionTable::Flags >( ~PartitionTable::Flags::Int( 0 ) ),
|
||||
partition ? PartitionInfo::flags( partition ) : PartitionTable::Flags() );
|
||||
PartitionTable::Flags() );
|
||||
initPartResizerWidget( freeSpacePartition.p );
|
||||
}
|
||||
|
||||
// Checks the initial selection.
|
||||
checkMountPointSelection();
|
||||
CreatePartitionDialog::CreatePartitionDialog( Device* device,
|
||||
const FreshPartition& existingNewPartition,
|
||||
const QStringList& usedMountPoints,
|
||||
QWidget* parentWidget )
|
||||
: CreatePartitionDialog( device, existingNewPartition.p->parent(), usedMountPoints, parentWidget )
|
||||
{
|
||||
standardMountPoints( *( m_ui->mountPointComboBox ), PartitionInfo::mountPoint( existingNewPartition.p ) );
|
||||
setFlagList( *( m_ui->m_listFlags ),
|
||||
static_cast< PartitionTable::Flags >( ~PartitionTable::Flags::Int( 0 ) ),
|
||||
PartitionInfo::flags( existingNewPartition.p ) );
|
||||
|
||||
const bool isExtended = existingNewPartition.p->roles().has( PartitionRole::Extended );
|
||||
if ( isExtended )
|
||||
{
|
||||
cDebug() << "Editing extended partitions is not supported.";
|
||||
return;
|
||||
}
|
||||
|
||||
initPartResizerWidget( existingNewPartition.p );
|
||||
|
||||
FileSystem::Type fsType = existingNewPartition.p->fileSystem().type();
|
||||
m_ui->fsComboBox->setCurrentText( FileSystem::nameForType( fsType ) );
|
||||
|
||||
setSelectedMountPoint( m_ui->mountPointComboBox, PartitionInfo::mountPoint( existingNewPartition.p ) );
|
||||
updateMountPointUi();
|
||||
}
|
||||
|
||||
CreatePartitionDialog::~CreatePartitionDialog() {}
|
||||
@ -188,7 +218,7 @@ CreatePartitionDialog::initGptPartitionTypeUi()
|
||||
}
|
||||
|
||||
Partition*
|
||||
CreatePartitionDialog::createPartition()
|
||||
CreatePartitionDialog::getNewlyCreatedPartition()
|
||||
{
|
||||
if ( m_role.roles() == PartitionRole::None )
|
||||
{
|
||||
@ -204,17 +234,21 @@ CreatePartitionDialog::createPartition()
|
||||
: FileSystem::typeForName( m_ui->fsComboBox->currentText() );
|
||||
const QString fsLabel = m_ui->filesystemLabelEdit->text();
|
||||
|
||||
// The newly-created partitions have no flags set (no **active** flags),
|
||||
// because they're new. The desired flags can be retrieved from
|
||||
// newFlags() and the consumer (see PartitionPage::onCreateClicked)
|
||||
// does so, to set up the partition for create-and-then-set-flags.
|
||||
Partition* partition = nullptr;
|
||||
QString luksPassphrase = m_ui->encryptWidget->passphrase();
|
||||
if ( m_ui->encryptWidget->state() == EncryptWidget::Encryption::Confirmed && !luksPassphrase.isEmpty() )
|
||||
{
|
||||
partition = KPMHelpers::createNewEncryptedPartition(
|
||||
m_parent, *m_device, m_role, fsType, fsLabel, first, last, luksPassphrase, newFlags() );
|
||||
m_parent, *m_device, m_role, fsType, fsLabel, first, last, luksPassphrase, PartitionTable::Flags() );
|
||||
}
|
||||
else
|
||||
{
|
||||
partition
|
||||
= KPMHelpers::createNewPartition( m_parent, *m_device, m_role, fsType, fsLabel, first, last, newFlags() );
|
||||
partition = KPMHelpers::createNewPartition(
|
||||
m_parent, *m_device, m_role, fsType, fsLabel, first, last, PartitionTable::Flags() );
|
||||
}
|
||||
|
||||
if ( m_device->type() == Device::Type::LVM_Device )
|
||||
@ -284,34 +318,3 @@ CreatePartitionDialog::initPartResizerWidget( Partition* partition )
|
||||
m_partitionSizeController->setPartResizerWidget( m_ui->partResizerWidget );
|
||||
m_partitionSizeController->setSpinBox( m_ui->sizeSpinBox );
|
||||
}
|
||||
|
||||
void
|
||||
CreatePartitionDialog::initFromFreeSpace( Partition* freeSpacePartition )
|
||||
{
|
||||
initPartResizerWidget( freeSpacePartition );
|
||||
}
|
||||
|
||||
void
|
||||
CreatePartitionDialog::initFromPartitionToCreate( Partition* partition )
|
||||
{
|
||||
Q_ASSERT( partition );
|
||||
|
||||
bool isExtended = partition->roles().has( PartitionRole::Extended );
|
||||
Q_ASSERT( !isExtended );
|
||||
if ( isExtended )
|
||||
{
|
||||
cDebug() << "Editing extended partitions is not supported for now";
|
||||
return;
|
||||
}
|
||||
|
||||
initPartResizerWidget( partition );
|
||||
|
||||
// File System
|
||||
FileSystem::Type fsType = partition->fileSystem().type();
|
||||
m_ui->fsComboBox->setCurrentText( FileSystem::nameForType( fsType ) );
|
||||
|
||||
// Mount point
|
||||
setSelectedMountPoint( m_ui->mountPointComboBox, PartitionInfo::mountPoint( partition ) );
|
||||
|
||||
updateMountPointUi();
|
||||
}
|
||||
|
@ -33,31 +33,48 @@ class Ui_CreatePartitionDialog;
|
||||
class CreatePartitionDialog : public QDialog
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
/**
|
||||
* @brief Dialog for editing a new partition.
|
||||
|
||||
private:
|
||||
/** @brief Delegated constructor
|
||||
*
|
||||
* For the (unlikely) case that a newly created partition is being re-edited,
|
||||
* pass a pointer to that @p partition, otherwise pass nullptr.
|
||||
* This does all the shared UI setup.
|
||||
*/
|
||||
CreatePartitionDialog( Device* device,
|
||||
PartitionNode* parentPartition,
|
||||
Partition* partition,
|
||||
const QStringList& usedMountPoints,
|
||||
QWidget* parentWidget );
|
||||
|
||||
public:
|
||||
struct FreeSpace
|
||||
{
|
||||
Partition* p;
|
||||
};
|
||||
struct FreshPartition
|
||||
{
|
||||
Partition* p;
|
||||
};
|
||||
|
||||
/** @brief Dialog for editing a new partition based on free space.
|
||||
*
|
||||
* Creating from free space makes a wholly new partition with
|
||||
* no flags set at all.
|
||||
*/
|
||||
CreatePartitionDialog( Device* device,
|
||||
const FreeSpace& freeSpacePartition,
|
||||
const QStringList& usedMountPoints,
|
||||
QWidget* parentWidget = nullptr );
|
||||
/** @brief Dialog for editing a newly-created partition.
|
||||
*
|
||||
* A partition previously newly created (e.g. via this dialog
|
||||
* and the constructor above) can be re-edited.
|
||||
*/
|
||||
CreatePartitionDialog( Device* device,
|
||||
const FreshPartition& existingNewPartition,
|
||||
const QStringList& usedMountPoints,
|
||||
QWidget* parentWidget = nullptr );
|
||||
~CreatePartitionDialog() override;
|
||||
|
||||
/**
|
||||
* Must be called when user wants to create a partition in
|
||||
* freeSpacePartition.
|
||||
*/
|
||||
void initFromFreeSpace( Partition* freeSpacePartition );
|
||||
|
||||
/**
|
||||
* Must be called when user wants to edit a to-be-created partition.
|
||||
*/
|
||||
void initFromPartitionToCreate( Partition* partition );
|
||||
Partition* createPartition();
|
||||
Partition* getNewlyCreatedPartition();
|
||||
|
||||
PartitionTable::Flags newFlags() const;
|
||||
|
||||
|
@ -23,11 +23,15 @@
|
||||
QStringList
|
||||
standardMountPoints()
|
||||
{
|
||||
QStringList mountPoints { "/", "/boot", "/home", "/opt", "/srv", "/usr", "/var" };
|
||||
QStringList mountPoints { "/", "/home", "/opt", "/srv", "/usr", "/var" };
|
||||
if ( PartUtils::isEfiSystem() )
|
||||
{
|
||||
mountPoints << Calamares::JobQueue::instance()->globalStorage()->value( "efiSystemPartition" ).toString();
|
||||
}
|
||||
else
|
||||
{
|
||||
mountPoints << QStringLiteral( "/boot" );
|
||||
}
|
||||
mountPoints.removeDuplicates();
|
||||
mountPoints.sort();
|
||||
return mountPoints;
|
||||
@ -68,11 +72,13 @@ setSelectedMountPoint( QComboBox& combo, const QString& selected )
|
||||
else
|
||||
{
|
||||
for ( int i = 0; i < combo.count(); ++i )
|
||||
{
|
||||
if ( selected == combo.itemText( i ) )
|
||||
{
|
||||
combo.setCurrentIndex( i );
|
||||
return;
|
||||
}
|
||||
}
|
||||
combo.addItem( selected );
|
||||
combo.setCurrentIndex( combo.count() - 1 );
|
||||
}
|
||||
@ -85,10 +91,12 @@ flagsFromList( const QListWidget& list )
|
||||
PartitionTable::Flags flags;
|
||||
|
||||
for ( int i = 0; i < list.count(); i++ )
|
||||
{
|
||||
if ( list.item( i )->checkState() == Qt::Checked )
|
||||
{
|
||||
flags |= static_cast< PartitionTable::Flag >( list.item( i )->data( Qt::UserRole ).toInt() );
|
||||
}
|
||||
}
|
||||
|
||||
return flags;
|
||||
}
|
||||
|
@ -391,13 +391,14 @@ PartitionPage::onCreateClicked()
|
||||
return;
|
||||
}
|
||||
|
||||
CreatePartitionDialog dlg( model->device(), partition->parent(), nullptr, getCurrentUsedMountpoints(), this );
|
||||
dlg.initFromFreeSpace( partition );
|
||||
if ( dlg.exec() == QDialog::Accepted )
|
||||
QPointer< CreatePartitionDialog > dlg = new CreatePartitionDialog(
|
||||
model->device(), CreatePartitionDialog::FreeSpace { partition }, getCurrentUsedMountpoints(), this );
|
||||
if ( dlg->exec() == QDialog::Accepted )
|
||||
{
|
||||
Partition* newPart = dlg.createPartition();
|
||||
m_core->createPartition( model->device(), newPart, dlg.newFlags() );
|
||||
Partition* newPart = dlg->getNewlyCreatedPartition();
|
||||
m_core->createPartition( model->device(), newPart, dlg->newFlags() );
|
||||
}
|
||||
delete dlg;
|
||||
}
|
||||
|
||||
void
|
||||
@ -492,11 +493,10 @@ PartitionPage::updatePartitionToCreate( Device* device, Partition* partition )
|
||||
mountPoints.removeOne( PartitionInfo::mountPoint( partition ) );
|
||||
|
||||
QPointer< CreatePartitionDialog > dlg
|
||||
= new CreatePartitionDialog( device, partition->parent(), partition, mountPoints, this );
|
||||
dlg->initFromPartitionToCreate( partition );
|
||||
= new CreatePartitionDialog( device, CreatePartitionDialog::FreshPartition { partition }, mountPoints, this );
|
||||
if ( dlg->exec() == QDialog::Accepted )
|
||||
{
|
||||
Partition* newPartition = dlg->createPartition();
|
||||
Partition* newPartition = dlg->getNewlyCreatedPartition();
|
||||
m_core->deletePartition( device, partition );
|
||||
m_core->createPartition( device, newPartition, dlg->newFlags() );
|
||||
}
|
||||
|
@ -388,7 +388,7 @@ shouldWarnForGPTOnBIOS( const PartitionCoreModule* core )
|
||||
}
|
||||
|
||||
auto [ r, device ] = core->bootLoaderModel()->findBootLoader( core->bootLoaderInstallPath() );
|
||||
Q_UNUSED(r);
|
||||
Q_UNUSED( r );
|
||||
if ( device )
|
||||
{
|
||||
auto* table = device->partitionTable();
|
||||
@ -403,8 +403,7 @@ shouldWarnForGPTOnBIOS( const PartitionCoreModule* core )
|
||||
&& ( partition->fileSystem().type() == FileSystem::Unformatted )
|
||||
&& ( partition->capacity() >= 8_MiB ) )
|
||||
{
|
||||
cDebug() << Logger::SubEntry << "Partition" << partition->devicePath()
|
||||
<< partition->partitionPath()
|
||||
cDebug() << Logger::SubEntry << "Partition" << partition->devicePath() << partition->partitionPath()
|
||||
<< "is a suitable bios_grub partition";
|
||||
return false;
|
||||
}
|
||||
@ -619,7 +618,7 @@ PartitionViewStep::setConfigurationMap( const QVariantMap& configurationMap )
|
||||
// because it could take a while. Then when it's done, we can set up the widgets
|
||||
// and remove the spinner.
|
||||
m_future = new QFutureWatcher< void >();
|
||||
connect( m_future, &QFutureWatcher< void >::finished, this, [ this ] {
|
||||
connect( m_future, &QFutureWatcher< void >::finished, this, [this] {
|
||||
continueLoading();
|
||||
this->m_future->deleteLater();
|
||||
this->m_future = nullptr;
|
||||
|
@ -25,8 +25,8 @@ AutoMountManagementJob::prettyName() const
|
||||
Calamares::JobResult
|
||||
AutoMountManagementJob::exec()
|
||||
{
|
||||
Logger::CDebug( Logger::LOGVERBOSE ) << "this" << Logger::Pointer( this ) << "value" << Logger::Pointer( m_stored )
|
||||
<< ( m_stored ? "restore" : m_disable ? "disable" : "enable" );
|
||||
cVerbose() << "this" << Logger::Pointer( this ) << "value" << Logger::Pointer( m_stored )
|
||||
<< ( m_stored ? "restore" : m_disable ? "disable" : "enable" );
|
||||
if ( m_stored )
|
||||
{
|
||||
CalamaresUtils::Partition::automountRestore( m_stored );
|
||||
|
@ -43,6 +43,7 @@ ClearTempMountsJob::prettyStatusMessage() const
|
||||
Calamares::JobResult
|
||||
ClearTempMountsJob::exec()
|
||||
{
|
||||
Logger::Once o;
|
||||
// Fetch a list of current mounts to Calamares temporary directories.
|
||||
QList< QPair< QString, QString > > lst;
|
||||
QFile mtab( "/etc/mtab" );
|
||||
@ -51,23 +52,27 @@ ClearTempMountsJob::exec()
|
||||
return Calamares::JobResult::error( tr( "Cannot get list of temporary mounts." ) );
|
||||
}
|
||||
|
||||
cDebug() << "Opened mtab. Lines:";
|
||||
cVerbose() << o << "Opened mtab. Lines:";
|
||||
QTextStream in( &mtab );
|
||||
QString lineIn = in.readLine();
|
||||
while ( !lineIn.isNull() )
|
||||
{
|
||||
QStringList line = lineIn.split( ' ', SplitSkipEmptyParts );
|
||||
cDebug() << line.join( ' ' );
|
||||
cVerbose() << o << line.join( ' ' );
|
||||
QString device = line.at( 0 );
|
||||
QString mountPoint = line.at( 1 );
|
||||
if ( mountPoint.startsWith( "/tmp/calamares-" ) )
|
||||
{
|
||||
cDebug() << "INSERTING pair (device, mountPoint)" << device << mountPoint;
|
||||
lst.append( qMakePair( device, mountPoint ) );
|
||||
}
|
||||
lineIn = in.readLine();
|
||||
}
|
||||
|
||||
if ( lst.empty() )
|
||||
{
|
||||
return Calamares::JobResult::ok();
|
||||
}
|
||||
|
||||
std::sort(
|
||||
lst.begin(), lst.end(), []( const QPair< QString, QString >& a, const QPair< QString, QString >& b ) -> bool {
|
||||
return a.first > b.first;
|
||||
@ -76,10 +81,10 @@ ClearTempMountsJob::exec()
|
||||
QStringList goodNews;
|
||||
QProcess process;
|
||||
|
||||
foreach ( auto line, lst )
|
||||
for ( const auto& line : qAsConst( lst ) )
|
||||
{
|
||||
QString partPath = line.second;
|
||||
cDebug() << "Will try to umount path" << partPath;
|
||||
cDebug() << o << "Will try to umount path" << partPath;
|
||||
process.start( "umount", { "-lv", partPath } );
|
||||
process.waitForFinished();
|
||||
if ( process.exitCode() == 0 )
|
||||
@ -92,7 +97,7 @@ ClearTempMountsJob::exec()
|
||||
ok.setMessage( tr( "Cleared all temporary mounts." ) );
|
||||
ok.setDetails( goodNews.join( "\n" ) );
|
||||
|
||||
cDebug() << "ClearTempMountsJob finished. Here's what was done:\n" << goodNews.join( "\n" );
|
||||
cDebug() << o << "ClearTempMountsJob finished. Here's what was done:\n" << Logger::DebugList( goodNews );
|
||||
|
||||
return ok;
|
||||
}
|
||||
|
@ -60,14 +60,6 @@ CreatePartitionTableJob::prettyStatusMessage() const
|
||||
}
|
||||
|
||||
|
||||
static inline QDebug&
|
||||
operator<<( QDebug&& s, PartitionIterator& it )
|
||||
{
|
||||
s << ( ( *it ) ? ( *it )->deviceNode() : QString( "<null device>" ) );
|
||||
return s;
|
||||
}
|
||||
|
||||
|
||||
Calamares::JobResult
|
||||
CreatePartitionTableJob::exec()
|
||||
{
|
||||
@ -75,13 +67,13 @@ CreatePartitionTableJob::exec()
|
||||
QString message = tr( "The installer failed to create a partition table on %1." ).arg( m_device->name() );
|
||||
|
||||
PartitionTable* table = m_device->partitionTable();
|
||||
cDebug() << "Creating new partition table of type" << table->typeName() << ", uncommitted yet:";
|
||||
|
||||
if ( Logger::logLevelEnabled( Logger::LOGDEBUG ) )
|
||||
{
|
||||
cDebug() << "Creating new partition table of type" << table->typeName() << ", uncommitted partitions:";
|
||||
for ( auto it = PartitionIterator::begin( table ); it != PartitionIterator::end( table ); ++it )
|
||||
{
|
||||
cDebug() << it;
|
||||
cDebug() << Logger::SubEntry << ( ( *it ) ? ( *it )->deviceNode() : QString( "<null device>" ) );
|
||||
}
|
||||
|
||||
QProcess lsblk;
|
||||
@ -89,14 +81,14 @@ CreatePartitionTableJob::exec()
|
||||
lsblk.setProcessChannelMode( QProcess::MergedChannels );
|
||||
lsblk.start();
|
||||
lsblk.waitForFinished();
|
||||
cDebug() << "lsblk:\n" << lsblk.readAllStandardOutput();
|
||||
cDebug() << Logger::SubEntry << "lsblk output:\n" << Logger::NoQuote << lsblk.readAllStandardOutput();
|
||||
|
||||
QProcess mount;
|
||||
mount.setProgram( "mount" ); // Debug output only, not mounting something
|
||||
mount.setProcessChannelMode( QProcess::MergedChannels );
|
||||
mount.start();
|
||||
mount.waitForFinished();
|
||||
cDebug() << "mount:\n" << mount.readAllStandardOutput();
|
||||
cDebug() << Logger::SubEntry << "mount output:\n" << Logger::NoQuote << mount.readAllStandardOutput();
|
||||
}
|
||||
|
||||
CreatePartitionTableOperation op( *m_device, table );
|
||||
|
@ -144,8 +144,9 @@ SetPartFlagsJob::prettyStatusMessage() const
|
||||
Calamares::JobResult
|
||||
SetPartFlagsJob::exec()
|
||||
{
|
||||
cDebug() << "Setting flags on" << m_device->deviceNode() << "partition" << partition()->deviceNode() << "to"
|
||||
<< m_flags;
|
||||
QStringList flagsList = PartitionTable::flagNames( m_flags );
|
||||
cDebug() << "Setting flags on" << m_device->deviceNode() << "partition" << partition()->deviceNode()
|
||||
<< Logger::DebugList( flagsList );
|
||||
|
||||
Report report( nullptr );
|
||||
SetPartFlagsOperation op( *m_device, *partition(), m_flags );
|
||||
|
Loading…
Reference in New Issue
Block a user