Use KPMcore NewOperation to create partitions.

main
Andrius Štikonas 7 years ago
parent 4912d8a6c2
commit 70573543f2

@ -34,6 +34,7 @@
#include <kpmcore/core/partition.h>
#include <kpmcore/core/partitiontable.h>
#include <kpmcore/fs/filesystem.h>
#include <kpmcore/ops/newoperation.h>
#include <kpmcore/util/report.h>
// Qt
@ -79,89 +80,15 @@ CreatePartitionJob::prettyStatusMessage() const
Calamares::JobResult
CreatePartitionJob::exec()
{
QString partitionPath;
FileSystem *fs;
Report report( nullptr );
NewOperation op(*m_device, m_partition);
op.setStatus(Operation::StatusRunning);
if (m_device->type() == Device::Disk_Device) {
int step = 0;
const qreal stepCount = 4;
QString message = tr( "The installer failed to create partition on disk '%1'." ).arg( m_device->name() );
QString message = tr( "The installer failed to create partition on disk '%1'." ).arg( m_device->name() );
if (op.execute(report))
return Calamares::JobResult::ok();
progress( step++ / stepCount );
CoreBackend* backend = CoreBackendManager::self()->backend();
QScopedPointer<CoreBackendDevice> backendDevice( backend->openDevice( m_device->deviceNode() ) );
if ( !backendDevice.data() )
{
return Calamares::JobResult::error(
message,
tr( "Could not open device '%1'." ).arg( m_device->deviceNode() )
);
}
progress( step++ / stepCount );
QScopedPointer<CoreBackendPartitionTable> backendPartitionTable( backendDevice->openPartitionTable() );
if ( !backendPartitionTable.data() )
{
return Calamares::JobResult::error(
message,
tr( "Could not open partition table." )
);
}
progress( step++ / stepCount );
partitionPath = backendPartitionTable->createPartition( report, *m_partition );
if ( partitionPath.isEmpty() )
{
return Calamares::JobResult::error(
message,
report.toText()
);
}
m_partition->setPartitionPath( partitionPath );
backendPartitionTable->commit();
progress( step++ / stepCount );
fs = &m_partition->fileSystem();
if ( fs->type() == FileSystem::Unformatted || fs->type() == FileSystem::Extended )
return Calamares::JobResult::ok();
if ( !backendPartitionTable->setPartitionSystemType( report, *m_partition ) )
{
return Calamares::JobResult::error(
tr( "The installer failed to update partition table on disk '%1'." ).arg( m_device->name() ),
report.toText()
);
}
backendPartitionTable->commit();
}
else
{
LvmDevice *dev = dynamic_cast<LvmDevice*>(m_device);
m_partition->setState(Partition::StateNone);
partitionPath = m_partition->partitionPath();
QString lvname = partitionPath.right(partitionPath.length() - partitionPath.lastIndexOf(QStringLiteral("/")) - 1);
if ( !LvmDevice::createLV(report, *dev, *m_partition, lvname))
{
return Calamares::JobResult::error(
tr( "The installer failed to create LVM logical volume %1." ).arg( lvname ),
report.toText()
);
}
fs = &m_partition->fileSystem();
}
if ( !fs->create( report, partitionPath ) )
{
return Calamares::JobResult::error(
tr( "The installer failed to create file system on partition %1." ).arg( partitionPath ),
report.toText()
);
}
return Calamares::JobResult::ok();
return Calamares::JobResult::error(message, report.toText());
}
void

Loading…
Cancel
Save