From dc7a1e43b73af5ab216df977ed518fd63f252585 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Sat, 11 Dec 2021 16:19:28 +0100 Subject: [PATCH 1/9] [partition] Add helper for running a KPMCore operation Most *partition* module jobs run an operation and turn that into a JobResult -- ok if it succeeds, and with the report text otherwise. Factor it out into a separate method that can be used as shorthand. --- src/modules/partition/core/KPMHelpers.cpp | 15 +++++++++++++++ src/modules/partition/core/KPMHelpers.h | 14 ++++++++++++-- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/src/modules/partition/core/KPMHelpers.cpp b/src/modules/partition/core/KPMHelpers.cpp index ed105e28b..46efeb392 100644 --- a/src/modules/partition/core/KPMHelpers.cpp +++ b/src/modules/partition/core/KPMHelpers.cpp @@ -127,4 +127,19 @@ clonePartition( Device* device, Partition* partition ) partition->activeFlags() ); } +Calamares::JobResult +execute( Operation& operation, const QString& failureMessage ) +{ + operation.setStatus( Operation::StatusRunning ); + + Report report( nullptr ); + if ( operation.execute( report ) ) + { + return Calamares::JobResult::ok(); + } + + return Calamares::JobResult::error( failureMessage, report.toText() ); +} + + } // namespace KPMHelpers diff --git a/src/modules/partition/core/KPMHelpers.h b/src/modules/partition/core/KPMHelpers.h index 89a019f6c..1d40dd363 100644 --- a/src/modules/partition/core/KPMHelpers.h +++ b/src/modules/partition/core/KPMHelpers.h @@ -11,11 +11,13 @@ #ifndef KPMHELPERS_H #define KPMHELPERS_H -// KPMcore +#include "Job.h" + #include #include +#include +#include -// Qt #include #include @@ -72,6 +74,14 @@ Partition* createNewEncryptedPartition( PartitionNode* parent, Partition* clonePartition( Device* device, Partition* partition ); +/** @brief Return a result for an @p operation + * + * Executes the operation, and if successful, returns a success result. + * Otherwise returns an error using @p failureMessage as the primary part + * of the error, and details obtained from the operation. + */ +Calamares::JobResult execute( Operation& operation, const QString& failureMessage ); + } // namespace KPMHelpers #endif /* KPMHELPERS_H */ From 8bb2c5fc6b64af01bbbc7af44ac01b676acbd450 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Sat, 11 Dec 2021 16:28:13 +0100 Subject: [PATCH 2/9] [partition] Use convenience-method for running operation --- .../partition/jobs/CreatePartitionJob.cpp | 14 ++++---------- .../partition/jobs/DeletePartitionJob.cpp | 18 ++++++------------ 2 files changed, 10 insertions(+), 22 deletions(-) diff --git a/src/modules/partition/jobs/CreatePartitionJob.cpp b/src/modules/partition/jobs/CreatePartitionJob.cpp index 3e51ed598..248104226 100644 --- a/src/modules/partition/jobs/CreatePartitionJob.cpp +++ b/src/modules/partition/jobs/CreatePartitionJob.cpp @@ -11,7 +11,9 @@ #include "CreatePartitionJob.h" +#include "core/KPMHelpers.h" #include "core/PartitionInfo.h" + #include "partition/FileSystem.h" #include "partition/PartitionQuery.h" #include "utils/CalamaresUtilsSystem.h" @@ -273,17 +275,9 @@ CreatePartitionJob::exec() return createZfs( m_partition, m_device ); } - Report report( nullptr ); NewOperation op( *m_device, m_partition ); - op.setStatus( Operation::StatusRunning ); - - QString message = tr( "The installer failed to create partition on disk '%1'." ).arg( m_device->name() ); - if ( op.execute( report ) ) - { - return Calamares::JobResult::ok(); - } - - return Calamares::JobResult::error( message, report.toText() ); + return KPMHelpers::execute( + op, tr( "The installer failed to create partition on disk '%1'." ).arg( m_device->name() ) ); } void diff --git a/src/modules/partition/jobs/DeletePartitionJob.cpp b/src/modules/partition/jobs/DeletePartitionJob.cpp index a678b5e90..e573d1d3c 100644 --- a/src/modules/partition/jobs/DeletePartitionJob.cpp +++ b/src/modules/partition/jobs/DeletePartitionJob.cpp @@ -10,9 +10,11 @@ */ #include "DeletePartitionJob.h" + +#include "core/KPMHelpers.h" + #include "utils/CalamaresUtilsSystem.h" -// KPMcore #include #include #include @@ -45,7 +47,7 @@ removePartition( Partition* partition ) auto r = CalamaresUtils::System::instance()->runCommand( { "sfdisk", "--delete", "--force", partition->devicePath(), QString::number( partition->number() ) }, std::chrono::seconds( 5 ) ); - if ( r.getExitCode() !=0 || r.getOutput().contains("failed") ) + if ( r.getExitCode() != 0 || r.getOutput().contains( "failed" ) ) { return Calamares::JobResult::error( QCoreApplication::translate( DeletePartitionJob::staticMetaObject.className(), "Deletion Failed" ), @@ -96,17 +98,9 @@ DeletePartitionJob::exec() return removePartition( m_partition ); } - Report report( nullptr ); DeleteOperation op( *m_device, m_partition ); - op.setStatus( Operation::StatusRunning ); - - QString message = tr( "The installer failed to delete partition %1." ).arg( m_partition->devicePath() ); - if ( op.execute( report ) ) - { - return Calamares::JobResult::ok(); - } - - return Calamares::JobResult::error( message, report.toText() ); + return KPMHelpers::execute( op, + tr( "The installer failed to delete partition %1." ).arg( m_partition->devicePath() ) ); } void From 1356012fb468c46159baf5699aa6537c7c818b08 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Sat, 11 Dec 2021 21:35:09 +0100 Subject: [PATCH 3/9] [partition] With rvalue, code becomes even more compact --- src/modules/partition/core/KPMHelpers.cpp | 2 +- src/modules/partition/core/KPMHelpers.h | 2 +- src/modules/partition/jobs/CreatePartitionJob.cpp | 4 ++-- src/modules/partition/jobs/DeletePartitionJob.cpp | 3 +-- 4 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/modules/partition/core/KPMHelpers.cpp b/src/modules/partition/core/KPMHelpers.cpp index 46efeb392..f836d271d 100644 --- a/src/modules/partition/core/KPMHelpers.cpp +++ b/src/modules/partition/core/KPMHelpers.cpp @@ -128,7 +128,7 @@ clonePartition( Device* device, Partition* partition ) } Calamares::JobResult -execute( Operation& operation, const QString& failureMessage ) +execute( Operation&& operation, const QString& failureMessage ) { operation.setStatus( Operation::StatusRunning ); diff --git a/src/modules/partition/core/KPMHelpers.h b/src/modules/partition/core/KPMHelpers.h index 1d40dd363..fe4d24f14 100644 --- a/src/modules/partition/core/KPMHelpers.h +++ b/src/modules/partition/core/KPMHelpers.h @@ -80,7 +80,7 @@ Partition* clonePartition( Device* device, Partition* partition ); * Otherwise returns an error using @p failureMessage as the primary part * of the error, and details obtained from the operation. */ -Calamares::JobResult execute( Operation& operation, const QString& failureMessage ); +Calamares::JobResult execute( Operation&& operation, const QString& failureMessage ); } // namespace KPMHelpers diff --git a/src/modules/partition/jobs/CreatePartitionJob.cpp b/src/modules/partition/jobs/CreatePartitionJob.cpp index 248104226..fe7c6f350 100644 --- a/src/modules/partition/jobs/CreatePartitionJob.cpp +++ b/src/modules/partition/jobs/CreatePartitionJob.cpp @@ -275,9 +275,9 @@ CreatePartitionJob::exec() return createZfs( m_partition, m_device ); } - NewOperation op( *m_device, m_partition ); return KPMHelpers::execute( - op, tr( "The installer failed to create partition on disk '%1'." ).arg( m_device->name() ) ); + NewOperation( *m_device, m_partition ), + tr( "The installer failed to create partition on disk '%1'." ).arg( m_device->name() ) ); } void diff --git a/src/modules/partition/jobs/DeletePartitionJob.cpp b/src/modules/partition/jobs/DeletePartitionJob.cpp index e573d1d3c..d61bb955e 100644 --- a/src/modules/partition/jobs/DeletePartitionJob.cpp +++ b/src/modules/partition/jobs/DeletePartitionJob.cpp @@ -98,8 +98,7 @@ DeletePartitionJob::exec() return removePartition( m_partition ); } - DeleteOperation op( *m_device, m_partition ); - return KPMHelpers::execute( op, + return KPMHelpers::execute( DeleteOperation( *m_device, m_partition ), tr( "The installer failed to delete partition %1." ).arg( m_partition->devicePath() ) ); } From b8ce21d572f39c0622749c079e7d6125fd7e9ef3 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Sat, 11 Dec 2021 23:03:26 +0100 Subject: [PATCH 4/9] [partition] Use convenience function for running operations --- .../jobs/CreatePartitionTableJob.cpp | 17 +++++------------ .../partition/jobs/CreateVolumeGroupJob.cpp | 18 ++++-------------- .../partition/jobs/FormatPartitionJob.cpp | 18 +++++------------- .../partition/jobs/RemoveVolumeGroupJob.cpp | 18 +++++------------- .../partition/jobs/ResizeVolumeGroupJob.cpp | 19 +++++-------------- 5 files changed, 24 insertions(+), 66 deletions(-) diff --git a/src/modules/partition/jobs/CreatePartitionTableJob.cpp b/src/modules/partition/jobs/CreatePartitionTableJob.cpp index 118ec8823..3908ccc81 100644 --- a/src/modules/partition/jobs/CreatePartitionTableJob.cpp +++ b/src/modules/partition/jobs/CreatePartitionTableJob.cpp @@ -14,7 +14,8 @@ #include "partition/PartitionIterator.h" #include "utils/Logger.h" -// KPMcore +#include "core/KPMHelpers.h" + #include #include #include @@ -63,8 +64,6 @@ CreatePartitionTableJob::prettyStatusMessage() const Calamares::JobResult CreatePartitionTableJob::exec() { - Report report( nullptr ); - QString message = tr( "The installer failed to create a partition table on %1." ).arg( m_device->name() ); PartitionTable* table = m_device->partitionTable(); @@ -91,15 +90,9 @@ CreatePartitionTableJob::exec() cDebug() << Logger::SubEntry << "mount output:\n" << Logger::NoQuote << mount.readAllStandardOutput(); } - CreatePartitionTableOperation op( *m_device, table ); - op.setStatus( Operation::StatusRunning ); - - if ( op.execute( report ) ) - { - return Calamares::JobResult::ok(); - } - - return Calamares::JobResult::error( message, report.toText() ); + return KPMHelpers::execute( + CreatePartitionTableOperation( *m_device, table ), + tr( "The installer failed to create a partition table on %1." ).arg( m_device->name() ) ); } void diff --git a/src/modules/partition/jobs/CreateVolumeGroupJob.cpp b/src/modules/partition/jobs/CreateVolumeGroupJob.cpp index 36d79b7b7..683913b7f 100644 --- a/src/modules/partition/jobs/CreateVolumeGroupJob.cpp +++ b/src/modules/partition/jobs/CreateVolumeGroupJob.cpp @@ -9,7 +9,8 @@ #include "CreateVolumeGroupJob.h" -// KPMcore +#include "core/KPMHelpers.h" + #include #include #include @@ -46,19 +47,8 @@ CreateVolumeGroupJob::prettyStatusMessage() const Calamares::JobResult CreateVolumeGroupJob::exec() { - Report report( nullptr ); - - CreateVolumeGroupOperation op( m_vgName, m_pvList, m_peSize ); - - op.setStatus( Operation::StatusRunning ); - - QString message = tr( "The installer failed to create a volume group named '%1'." ).arg( m_vgName ); - if ( op.execute( report ) ) - { - return Calamares::JobResult::ok(); - } - - return Calamares::JobResult::error( message, report.toText() ); + return KPMHelpers::execute( CreateVolumeGroupOperation( m_vgName, m_pvList, m_peSize ), + tr( "The installer failed to create a volume group named '%1'." ).arg( m_vgName ) ); } void diff --git a/src/modules/partition/jobs/FormatPartitionJob.cpp b/src/modules/partition/jobs/FormatPartitionJob.cpp index 4dadacf9c..1ccc6e617 100644 --- a/src/modules/partition/jobs/FormatPartitionJob.cpp +++ b/src/modules/partition/jobs/FormatPartitionJob.cpp @@ -11,6 +11,8 @@ #include "FormatPartitionJob.h" +#include "core/KPMHelpers.h" + #include "partition/FileSystem.h" #include "utils/Logger.h" @@ -65,17 +67,7 @@ FormatPartitionJob::prettyStatusMessage() const Calamares::JobResult FormatPartitionJob::exec() { - Report report( nullptr ); // Root of the report tree, no parent - CreateFileSystemOperation op( *m_device, *m_partition, m_partition->fileSystem().type() ); - op.setStatus( Operation::StatusRunning ); - - QString message = tr( "The installer failed to format partition %1 on disk '%2'." ) - .arg( m_partition->partitionPath(), m_device->name() ); - - if ( op.execute( report ) ) - { - return Calamares::JobResult::ok(); - } - - return Calamares::JobResult::error( message, report.toText() ); + return KPMHelpers::execute( CreateFileSystemOperation( *m_device, *m_partition, m_partition->fileSystem().type() ), + tr( "The installer failed to format partition %1 on disk '%2'." ) + .arg( m_partition->partitionPath(), m_device->name() ) ); } diff --git a/src/modules/partition/jobs/RemoveVolumeGroupJob.cpp b/src/modules/partition/jobs/RemoveVolumeGroupJob.cpp index 3c4e7b036..227351064 100644 --- a/src/modules/partition/jobs/RemoveVolumeGroupJob.cpp +++ b/src/modules/partition/jobs/RemoveVolumeGroupJob.cpp @@ -9,6 +9,8 @@ #include "RemoveVolumeGroupJob.h" +#include "core/KPMHelpers.h" + #include #include #include @@ -39,17 +41,7 @@ RemoveVolumeGroupJob::prettyStatusMessage() const Calamares::JobResult RemoveVolumeGroupJob::exec() { - Report report( nullptr ); - - RemoveVolumeGroupOperation op( *m_device ); - - op.setStatus( Operation::OperationStatus::StatusRunning ); - - QString message = tr( "The installer failed to remove a volume group named '%1'." ).arg( m_device->name() ); - if ( op.execute( report ) ) - { - return Calamares::JobResult::ok(); - } - - return Calamares::JobResult::error( message, report.toText() ); + return KPMHelpers::execute( + RemoveVolumeGroupOperation( *m_device ), + tr( "The installer failed to remove a volume group named '%1'." ).arg( m_device->name() ) ); } diff --git a/src/modules/partition/jobs/ResizeVolumeGroupJob.cpp b/src/modules/partition/jobs/ResizeVolumeGroupJob.cpp index 1aa4541b8..f7a21d80d 100644 --- a/src/modules/partition/jobs/ResizeVolumeGroupJob.cpp +++ b/src/modules/partition/jobs/ResizeVolumeGroupJob.cpp @@ -9,7 +9,8 @@ #include "ResizeVolumeGroupJob.h" -// KPMcore +#include "core/KPMHelpers.h" + #include #include #include @@ -51,19 +52,9 @@ ResizeVolumeGroupJob::prettyStatusMessage() const Calamares::JobResult ResizeVolumeGroupJob::exec() { - Report report( nullptr ); - - ResizeVolumeGroupOperation op( *m_device, m_partitionList ); - - op.setStatus( Operation::OperationStatus::StatusRunning ); - - QString message = tr( "The installer failed to resize a volume group named '%1'." ).arg( m_device->name() ); - if ( op.execute( report ) ) - { - return Calamares::JobResult::ok(); - } - - return Calamares::JobResult::error( message, report.toText() ); + return KPMHelpers::execute( + ResizeVolumeGroupOperation( *m_device, m_partitionList ), + tr( "The installer failed to resize a volume group named '%1'." ).arg( m_device->name() ) ); } QString From c5573a1997a2cb92f2bfccbe8fdf7ddc568d1ee5 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Sat, 11 Dec 2021 23:19:01 +0100 Subject: [PATCH 5/9] [partition] Add non-const lvalue overload for execute() --- src/modules/partition/core/KPMHelpers.cpp | 2 +- src/modules/partition/core/KPMHelpers.h | 12 +++++++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/modules/partition/core/KPMHelpers.cpp b/src/modules/partition/core/KPMHelpers.cpp index f836d271d..46efeb392 100644 --- a/src/modules/partition/core/KPMHelpers.cpp +++ b/src/modules/partition/core/KPMHelpers.cpp @@ -128,7 +128,7 @@ clonePartition( Device* device, Partition* partition ) } Calamares::JobResult -execute( Operation&& operation, const QString& failureMessage ) +execute( Operation& operation, const QString& failureMessage ) { operation.setStatus( Operation::StatusRunning ); diff --git a/src/modules/partition/core/KPMHelpers.h b/src/modules/partition/core/KPMHelpers.h index fe4d24f14..2f867bc25 100644 --- a/src/modules/partition/core/KPMHelpers.h +++ b/src/modules/partition/core/KPMHelpers.h @@ -80,7 +80,17 @@ Partition* clonePartition( Device* device, Partition* partition ); * Otherwise returns an error using @p failureMessage as the primary part * of the error, and details obtained from the operation. */ -Calamares::JobResult execute( Operation&& operation, const QString& failureMessage ); +Calamares::JobResult execute( Operation& operation, const QString& failureMessage ); +/** @brief Return a result for an @p operation + * + * It's acceptable to use an rvalue: the operation-running is the effect + * you're interested in, rather than keeping the temporary around. + */ +static inline Calamares::JobResult +execute( Operation&& operation, const QString& failureMessage ) +{ + return execute( operation, failureMessage ); +} } // namespace KPMHelpers From 668058472404a183eb535f83a2724a5f9c369377 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Sat, 11 Dec 2021 23:25:21 +0100 Subject: [PATCH 6/9] [partition] Use convenience function execute() This job needs the lvalue-overload of execute() because it needs to call a method on the operation after execute() finishes successfully. --- .../partition/jobs/DeactivateVolumeGroupJob.cpp | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/src/modules/partition/jobs/DeactivateVolumeGroupJob.cpp b/src/modules/partition/jobs/DeactivateVolumeGroupJob.cpp index 92086015d..65920a84e 100644 --- a/src/modules/partition/jobs/DeactivateVolumeGroupJob.cpp +++ b/src/modules/partition/jobs/DeactivateVolumeGroupJob.cpp @@ -9,6 +9,8 @@ #include "DeactivateVolumeGroupJob.h" +#include "core/KPMHelpers.h" + #include #include #include @@ -39,18 +41,12 @@ DeactivateVolumeGroupJob::prettyStatusMessage() const Calamares::JobResult DeactivateVolumeGroupJob::exec() { - Report report( nullptr ); - DeactivateVolumeGroupOperation op( *m_device ); - - op.setStatus( Operation::OperationStatus::StatusRunning ); - - QString message = tr( "The installer failed to deactivate a volume group named %1." ).arg( m_device->name() ); - if ( op.execute( report ) ) + auto r = KPMHelpers::execute( + op, tr( "The installer failed to deactivate a volume group named %1." ).arg( m_device->name() ) ); + if ( r ) { op.preview(); - return Calamares::JobResult::ok(); } - - return Calamares::JobResult::error( message, report.toText() ); + return r; } From fdf0f208f08de8d39c7f24ca7b406006bb5c686a Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Sat, 11 Dec 2021 23:26:12 +0100 Subject: [PATCH 7/9] [partition] Use lvalue-overload of execute() convenience - These jobs may take a long time, and report progress; we need the operation around to be able to connect the signals and slots --- .../partition/jobs/ResizePartitionJob.cpp | 20 +++++++------------ .../partition/jobs/SetPartitionFlagsJob.cpp | 15 ++++---------- 2 files changed, 11 insertions(+), 24 deletions(-) diff --git a/src/modules/partition/jobs/ResizePartitionJob.cpp b/src/modules/partition/jobs/ResizePartitionJob.cpp index 87b87c1c0..fe1ceca4c 100644 --- a/src/modules/partition/jobs/ResizePartitionJob.cpp +++ b/src/modules/partition/jobs/ResizePartitionJob.cpp @@ -11,9 +11,10 @@ #include "ResizePartitionJob.h" +#include "core/KPMHelpers.h" + #include "utils/Units.h" -// KPMcore #include #include #include @@ -66,23 +67,16 @@ ResizePartitionJob::prettyStatusMessage() const Calamares::JobResult ResizePartitionJob::exec() { - Report report( nullptr ); // Restore partition sectors that were modified for preview m_partition->setFirstSector( m_oldFirstSector ); m_partition->setLastSector( m_oldLastSector ); + ResizeOperation op( *m_device, *m_partition, m_newFirstSector, m_newLastSector ); - op.setStatus( Operation::StatusRunning ); connect( &op, &Operation::progress, this, &ResizePartitionJob::iprogress ); - - QString errorMessage = tr( "The installer failed to resize partition %1 on disk '%2'." ) - .arg( m_partition->partitionPath() ) - .arg( m_device->name() ); - if ( op.execute( report ) ) - { - return Calamares::JobResult::ok(); - } - - return Calamares::JobResult::error( errorMessage, report.toText() ); + return KPMHelpers::execute( op, + tr( "The installer failed to resize partition %1 on disk '%2'." ) + .arg( m_partition->partitionPath() ) + .arg( m_device->name() ) ); } void diff --git a/src/modules/partition/jobs/SetPartitionFlagsJob.cpp b/src/modules/partition/jobs/SetPartitionFlagsJob.cpp index de77d86f8..507773288 100644 --- a/src/modules/partition/jobs/SetPartitionFlagsJob.cpp +++ b/src/modules/partition/jobs/SetPartitionFlagsJob.cpp @@ -13,6 +13,8 @@ #include "SetPartitionFlagsJob.h" +#include "core/KPMHelpers.h" + #include "partition/FileSystem.h" #include "utils/Logger.h" #include "utils/Units.h" @@ -148,17 +150,8 @@ SetPartFlagsJob::exec() cDebug() << "Setting flags on" << m_device->deviceNode() << "partition" << partition()->deviceNode() << Logger::DebugList( flagsList ); - Report report( nullptr ); SetPartFlagsOperation op( *m_device, *partition(), m_flags ); - op.setStatus( Operation::StatusRunning ); connect( &op, &Operation::progress, this, &SetPartFlagsJob::iprogress ); - - QString errorMessage - = tr( "The installer failed to set flags on partition %1." ).arg( m_partition->partitionPath() ); - if ( op.execute( report ) ) - { - return Calamares::JobResult::ok(); - } - - return Calamares::JobResult::error( errorMessage, report.toText() ); + return KPMHelpers::execute( + op, tr( "The installer failed to set flags on partition %1." ).arg( m_partition->partitionPath() ) ); } From 07354a26a99b73f8c5ce542992361928b9adc158 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Sat, 11 Dec 2021 23:35:34 +0100 Subject: [PATCH 8/9] [partition] Simplify debug calls to executables - Use the Calamares support-functions for running lsblk and mount (these might need to have privilege support if Cala is not running as root, so this is future-proofing) --- .../partition/jobs/CreatePartitionTableJob.cpp | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/src/modules/partition/jobs/CreatePartitionTableJob.cpp b/src/modules/partition/jobs/CreatePartitionTableJob.cpp index 3908ccc81..3b9415d1a 100644 --- a/src/modules/partition/jobs/CreatePartitionTableJob.cpp +++ b/src/modules/partition/jobs/CreatePartitionTableJob.cpp @@ -12,6 +12,7 @@ #include "CreatePartitionTableJob.h" #include "partition/PartitionIterator.h" +#include "utils/CalamaresUtilsSystem.h" #include "utils/Logger.h" #include "core/KPMHelpers.h" @@ -75,19 +76,11 @@ CreatePartitionTableJob::exec() cDebug() << Logger::SubEntry << ( ( *it ) ? ( *it )->deviceNode() : QString( "" ) ); } - QProcess lsblk; - lsblk.setProgram( "lsblk" ); - lsblk.setProcessChannelMode( QProcess::MergedChannels ); - lsblk.start(); - lsblk.waitForFinished(); - cDebug() << Logger::SubEntry << "lsblk output:\n" << Logger::NoQuote << lsblk.readAllStandardOutput(); + auto lsblkResult = CalamaresUtils::System::runCommand( { "lsblk" }, std::chrono::seconds( 30 ) ); + cDebug() << Logger::SubEntry << "lsblk output:\n" << Logger::NoQuote << lsblkResult.getOutput(); - QProcess mount; - mount.setProgram( "mount" ); // Debug output only, not mounting something - mount.setProcessChannelMode( QProcess::MergedChannels ); - mount.start(); - mount.waitForFinished(); - cDebug() << Logger::SubEntry << "mount output:\n" << Logger::NoQuote << mount.readAllStandardOutput(); + auto mountResult = CalamaresUtils::System::runCommand( { "mount" }, std::chrono::seconds( 30 ) ); + cDebug() << Logger::SubEntry << "mount output:\n" << Logger::NoQuote << mountResult.getOutput(); } return KPMHelpers::execute( From f04394d0147fab83b92923bb490723eba82625ab Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Sat, 11 Dec 2021 23:44:23 +0100 Subject: [PATCH 9/9] [partition] Improve rendering of KPMCore errors --- src/modules/partition/core/KPMHelpers.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/modules/partition/core/KPMHelpers.cpp b/src/modules/partition/core/KPMHelpers.cpp index 46efeb392..d5086ef21 100644 --- a/src/modules/partition/core/KPMHelpers.cpp +++ b/src/modules/partition/core/KPMHelpers.cpp @@ -15,8 +15,8 @@ #include "partition/PartitionIterator.h" #include "utils/Logger.h" +#include "utils/String.h" -// KPMcore #include #include #include @@ -138,7 +138,11 @@ execute( Operation& operation, const QString& failureMessage ) return Calamares::JobResult::ok(); } - return Calamares::JobResult::error( failureMessage, report.toText() ); + // Remove the === lines from the report by trimming them to empty + QStringList l = report.toText().split( '\n' ); + std::for_each( l.begin(), l.end(), []( QString& s ) { CalamaresUtils::removeLeading( s, '=' ); } ); + + return Calamares::JobResult::error( failureMessage, l.join( '\n' ) ); }