From 49afe4bc8e73209721fa9860088552c638241137 Mon Sep 17 00:00:00 2001 From: Teo Mrnjavac Date: Mon, 5 Dec 2016 17:59:47 +0100 Subject: [PATCH 01/24] Document settings for services module. --- src/modules/services/services.conf | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/modules/services/services.conf b/src/modules/services/services.conf index 2351b38a9..ebc8f9bd9 100644 --- a/src/modules/services/services.conf +++ b/src/modules/services/services.conf @@ -15,3 +15,6 @@ targets: disable: - name: "pacman-init" mandatory: false + +# Example to express an empty list: +# disable: [] From 04a2681ba9acdf3d9aa2f28deb1e99206e8e8ec1 Mon Sep 17 00:00:00 2001 From: Teo Mrnjavac Date: Wed, 7 Dec 2016 16:36:31 +0100 Subject: [PATCH 02/24] Add LINK_PRIVATE_LIBRARIES to calamares_add_plugin. --- CalamaresAddPlugin.cmake | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/CalamaresAddPlugin.cmake b/CalamaresAddPlugin.cmake index fb9d0086b..c945133aa 100644 --- a/CalamaresAddPlugin.cmake +++ b/CalamaresAddPlugin.cmake @@ -6,7 +6,7 @@ function( calamares_add_plugin ) set( NAME ${ARGV0} ) set( options NO_INSTALL SHARED_LIB ) set( oneValueArgs NAME TYPE EXPORT_MACRO RESOURCES ) - set( multiValueArgs SOURCES UI LINK_LIBRARIES COMPILE_DEFINITIONS ) + set( multiValueArgs SOURCES UI LINK_LIBRARIES LINK_PRIVATE_LIBRARIES COMPILE_DEFINITIONS ) cmake_parse_arguments( PLUGIN "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} ) set( PLUGIN_NAME ${NAME} ) set( PLUGIN_DESTINATION ${CMAKE_INSTALL_LIBDIR}/calamares/modules/${PLUGIN_NAME} ) @@ -22,6 +22,7 @@ function( calamares_add_plugin ) if( NOT CMAKE_BUILD_TYPE STREQUAL "Release" ) message( " ${Green}TYPE:${ColorReset} ${PLUGIN_TYPE}" ) message( " ${Green}LINK_LIBRARIES:${ColorReset} ${PLUGIN_LINK_LIBRARIES}" ) + message( " ${Green}LINK_PRIVATE_LIBRARIES:${ColorReset} ${PLUGIN_LINK_PRIVATE_LIBRARIES}" ) # message( " ${Green}SOURCES:${ColorReset} ${PLUGIN_SOURCES}" ) # message( " ${Green}UI:${ColorReset} ${PLUGIN_UI}" ) # message( " ${Green}EXPORT_MACRO:${ColorReset} ${PLUGIN_EXPORT_MACRO}" ) @@ -60,6 +61,10 @@ function( calamares_add_plugin ) list( APPEND calamares_add_library_args "LINK_LIBRARIES" "${PLUGIN_LINK_LIBRARIES}" ) endif() + if( PLUGIN_LINK_PRIVATE_LIBRARIES ) + list( APPEND calamares_add_library_args "LINK_PRIVATE_LIBRARIES" "${PLUGIN_LINK_PRIVATE_LIBRARIES}" ) + endif() + if( PLUGIN_COMPILE_DEFINITIONS ) list( APPEND calamares_add_library_args "COMPILE_DEFINITIONS" ${PLUGIN_COMPILE_DEFINITIONS} ) endif() From 32039bd388e23052d4dc1e34ab4d6d224f142db4 Mon Sep 17 00:00:00 2001 From: Teo Mrnjavac Date: Wed, 7 Dec 2016 16:37:29 +0100 Subject: [PATCH 03/24] Do not LINK_PUBLIC by default. --- src/calamares/CMakeLists.txt | 12 ++++++------ src/libcalamaresui/CMakeLists.txt | 4 ++-- src/modules/dracutlukscfg/CMakeLists.txt | 2 +- src/modules/dummycpp/CMakeLists.txt | 2 +- src/modules/finished/CMakeLists.txt | 2 +- src/modules/interactiveterminal/CMakeLists.txt | 2 +- src/modules/keyboard/CMakeLists.txt | 2 +- src/modules/license/CMakeLists.txt | 2 +- src/modules/locale/CMakeLists.txt | 4 +++- src/modules/netinstall/CMakeLists.txt | 4 +++- src/modules/partition/CMakeLists.txt | 2 +- src/modules/summary/CMakeLists.txt | 2 +- src/modules/users/CMakeLists.txt | 2 +- src/modules/webview/CMakeLists.txt | 2 +- src/modules/welcome/CMakeLists.txt | 2 +- 15 files changed, 25 insertions(+), 21 deletions(-) diff --git a/src/calamares/CMakeLists.txt b/src/calamares/CMakeLists.txt index 8e032d4e5..8248de6fb 100644 --- a/src/calamares/CMakeLists.txt +++ b/src/calamares/CMakeLists.txt @@ -59,12 +59,12 @@ endif() qt5_use_modules( calamares_bin Core Widgets ) target_link_libraries( calamares_bin - ${CALAMARES_LIBRARIES} - calamaresui - Qt5::Core - Qt5::Widgets - yaml-cpp - ${LINK_LIBRARIES} + PRIVATE + ${CALAMARES_LIBRARIES} + calamaresui + Qt5::Core + Qt5::Widgets + ${LINK_LIBRARIES} ) install( TARGETS calamares_bin diff --git a/src/libcalamaresui/CMakeLists.txt b/src/libcalamaresui/CMakeLists.txt index cdde19789..ee039b46d 100644 --- a/src/libcalamaresui/CMakeLists.txt +++ b/src/libcalamaresui/CMakeLists.txt @@ -62,10 +62,10 @@ calamares_add_library( ${CALAMARESUI_LIBRARY_TARGET} SOURCES ${${CALAMARESUI_LIBRARY_TARGET}_SOURCES} UI ${${CALAMARESUI_LIBRARY_TARGET}_UI} EXPORT_MACRO UIDLLEXPORT_PRO - LINK_LIBRARIES + LINK_PRIVATE_LIBRARIES yaml-cpp Qt5::Svg - Qt5::QuickWidgets + Qt5::QuickWidgets ${OPTIONAL_PRIVATE_LIBRARIES} RESOURCES libcalamaresui.qrc EXPORT CalamaresLibraryDepends diff --git a/src/modules/dracutlukscfg/CMakeLists.txt b/src/modules/dracutlukscfg/CMakeLists.txt index a239521dd..5504136c3 100644 --- a/src/modules/dracutlukscfg/CMakeLists.txt +++ b/src/modules/dracutlukscfg/CMakeLists.txt @@ -3,7 +3,7 @@ calamares_add_plugin( dracutlukscfg EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES DracutLuksCfgJob.cpp - LINK_LIBRARIES + LINK_PRIVATE_LIBRARIES calamares SHARED_LIB ) diff --git a/src/modules/dummycpp/CMakeLists.txt b/src/modules/dummycpp/CMakeLists.txt index 5b865b59d..0841eaa2b 100644 --- a/src/modules/dummycpp/CMakeLists.txt +++ b/src/modules/dummycpp/CMakeLists.txt @@ -3,7 +3,7 @@ calamares_add_plugin( dummycpp EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES DummyCppJob.cpp - LINK_LIBRARIES + LINK_PRIVATE_LIBRARIES calamares SHARED_LIB ) diff --git a/src/modules/finished/CMakeLists.txt b/src/modules/finished/CMakeLists.txt index ce6cfd1d8..6549c364e 100644 --- a/src/modules/finished/CMakeLists.txt +++ b/src/modules/finished/CMakeLists.txt @@ -7,7 +7,7 @@ calamares_add_plugin( finished FinishedPage.cpp UI FinishedPage.ui - LINK_LIBRARIES + LINK_PRIVATE_LIBRARIES calamaresui SHARED_LIB ) diff --git a/src/modules/interactiveterminal/CMakeLists.txt b/src/modules/interactiveterminal/CMakeLists.txt index 4d2fb5fcb..dc0e90de0 100644 --- a/src/modules/interactiveterminal/CMakeLists.txt +++ b/src/modules/interactiveterminal/CMakeLists.txt @@ -19,7 +19,7 @@ calamares_add_plugin( interactiveterminal SOURCES InteractiveTerminalViewStep.cpp InteractiveTerminalPage.cpp - LINK_LIBRARIES + LINK_PRIVATE_LIBRARIES calamaresui KF5::Service KF5::Parts diff --git a/src/modules/keyboard/CMakeLists.txt b/src/modules/keyboard/CMakeLists.txt index fb0a546d4..c0d8575c6 100644 --- a/src/modules/keyboard/CMakeLists.txt +++ b/src/modules/keyboard/CMakeLists.txt @@ -14,7 +14,7 @@ calamares_add_plugin( keyboard KeyboardPage.ui RESOURCES keyboard.qrc - LINK_LIBRARIES + LINK_PRIVATE_LIBRARIES calamaresui SHARED_LIB ) diff --git a/src/modules/license/CMakeLists.txt b/src/modules/license/CMakeLists.txt index dbafe983e..54774dede 100644 --- a/src/modules/license/CMakeLists.txt +++ b/src/modules/license/CMakeLists.txt @@ -15,7 +15,7 @@ set( CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} LicensePage.cpp UI LicensePage.ui - LINK_LIBRARIES + LINK_PRIVATE_LIBRARIES calamaresui SHARED_LIB ) diff --git a/src/modules/locale/CMakeLists.txt b/src/modules/locale/CMakeLists.txt index e40b6e15b..61bdfc707 100644 --- a/src/modules/locale/CMakeLists.txt +++ b/src/modules/locale/CMakeLists.txt @@ -14,7 +14,9 @@ calamares_add_plugin( locale UI RESOURCES locale.qrc - LINK_LIBRARIES + LINK_PRIVATE_LIBRARIES calamaresui + Qt5::Network + yaml-cpp SHARED_LIB ) diff --git a/src/modules/netinstall/CMakeLists.txt b/src/modules/netinstall/CMakeLists.txt index 363c1dab3..2038a2658 100644 --- a/src/modules/netinstall/CMakeLists.txt +++ b/src/modules/netinstall/CMakeLists.txt @@ -12,7 +12,9 @@ calamares_add_plugin( netinstall widgets/groupselectionwidget.ui RESOURCES netinstall.qrc - LINK_LIBRARIES + LINK_PRIVATE_LIBRARIES calamaresui + Qt5::Network + yaml-cpp SHARED_LIB ) diff --git a/src/modules/partition/CMakeLists.txt b/src/modules/partition/CMakeLists.txt index 54214987e..b8e23bf63 100644 --- a/src/modules/partition/CMakeLists.txt +++ b/src/modules/partition/CMakeLists.txt @@ -66,7 +66,7 @@ calamares_add_plugin( partition gui/EncryptWidget.ui gui/PartitionPage.ui gui/ReplaceWidget.ui - LINK_LIBRARIES + LINK_PRIVATE_LIBRARIES kpmcore calamaresui KF5::CoreAddons diff --git a/src/modules/summary/CMakeLists.txt b/src/modules/summary/CMakeLists.txt index c1b208aec..64b8d3c36 100644 --- a/src/modules/summary/CMakeLists.txt +++ b/src/modules/summary/CMakeLists.txt @@ -6,7 +6,7 @@ calamares_add_plugin( summary SummaryViewStep.cpp SummaryPage.cpp UI - LINK_LIBRARIES + LINK_PRIVATE_LIBRARIES calamaresui SHARED_LIB ) diff --git a/src/modules/users/CMakeLists.txt b/src/modules/users/CMakeLists.txt index 367f6161e..e29eea55e 100644 --- a/src/modules/users/CMakeLists.txt +++ b/src/modules/users/CMakeLists.txt @@ -19,7 +19,7 @@ calamares_add_plugin( users gui/adduserdialog.ui RESOURCES users.qrc - LINK_LIBRARIES + LINK_PRIVATE_LIBRARIES calamaresui ${CRYPT_LIBRARIES} SHARED_LIB diff --git a/src/modules/webview/CMakeLists.txt b/src/modules/webview/CMakeLists.txt index ce4e75f38..4cc7278ff 100644 --- a/src/modules/webview/CMakeLists.txt +++ b/src/modules/webview/CMakeLists.txt @@ -44,7 +44,7 @@ calamares_add_plugin( webview EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES WebViewStep.cpp - LINK_LIBRARIES + LINK_PRIVATE_LIBRARIES ${CALA_WEBVIEW_LINK_LIBRARIES} SHARED_LIB ) diff --git a/src/modules/welcome/CMakeLists.txt b/src/modules/welcome/CMakeLists.txt index 5e3a6f084..552ed39a8 100644 --- a/src/modules/welcome/CMakeLists.txt +++ b/src/modules/welcome/CMakeLists.txt @@ -26,7 +26,7 @@ calamares_add_plugin( welcome WelcomePage.cpp UI WelcomePage.ui - LINK_LIBRARIES + LINK_PRIVATE_LIBRARIES calamaresui ${CHECKER_LINK_LIBRARIES} SHARED_LIB From 66c578fa8d692e38c5d6412b9709e113dff5ccac Mon Sep 17 00:00:00 2001 From: Teo Mrnjavac Date: Mon, 12 Dec 2016 13:37:18 +0100 Subject: [PATCH 04/24] Write hasInternet to GlobalStorage. CAL-431 #close --- src/modules/welcome/checker/RequirementsChecker.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/modules/welcome/checker/RequirementsChecker.cpp b/src/modules/welcome/checker/RequirementsChecker.cpp index 12f681720..3d7eb7da7 100644 --- a/src/modules/welcome/checker/RequirementsChecker.cpp +++ b/src/modules/welcome/checker/RequirementsChecker.cpp @@ -338,7 +338,9 @@ bool RequirementsChecker::checkHasInternet() { // default to true in the QNetworkAccessManager::UnknownAccessibility case - return QNetworkAccessManager(this).networkAccessible() != QNetworkAccessManager::NotAccessible; + bool hasInternet = QNetworkAccessManager(this).networkAccessible() != QNetworkAccessManager::NotAccessible; + Calamares::JobQueue::instance()->globalStorage()->insert( "hasInternet", hasInternet ); + return hasInternet; } From 9bff57a60d89173f53fad8428359d13f594b46dd Mon Sep 17 00:00:00 2001 From: Teo Mrnjavac Date: Tue, 13 Dec 2016 12:09:36 +0100 Subject: [PATCH 05/24] Provide default for m_writeEtcDefaultKeyboard in KeyboardViewStep. --- src/modules/keyboard/KeyboardViewStep.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/modules/keyboard/KeyboardViewStep.cpp b/src/modules/keyboard/KeyboardViewStep.cpp index e6521e1ab..cdb2657dc 100644 --- a/src/modules/keyboard/KeyboardViewStep.cpp +++ b/src/modules/keyboard/KeyboardViewStep.cpp @@ -29,6 +29,7 @@ KeyboardViewStep::KeyboardViewStep( QObject* parent ) : Calamares::ViewStep( parent ) , m_widget( new KeyboardPage() ) , m_nextEnabled( false ) + , m_writeEtcDefaultKeyboard( true ) { m_widget->init(); m_nextEnabled = true; From 8882a477be0fc8b1350cb19e22bb33232195e386 Mon Sep 17 00:00:00 2001 From: Teo Mrnjavac Date: Tue, 13 Dec 2016 12:16:12 +0100 Subject: [PATCH 06/24] Do not dereference nullptr. --- src/modules/partition/core/KPMHelpers.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/modules/partition/core/KPMHelpers.cpp b/src/modules/partition/core/KPMHelpers.cpp index 52187d305..b0038213c 100644 --- a/src/modules/partition/core/KPMHelpers.cpp +++ b/src/modules/partition/core/KPMHelpers.cpp @@ -151,6 +151,12 @@ createNewEncryptedPartition( PartitionNode* parent, FileSystemFactory::create( FileSystem::Luks, firstSector, lastSector ) ); + if ( !fs ) + { + qDebug() << "ERROR: cannot create LUKS filesystem. Giving up."; + return nullptr; + } + fs->createInnerFileSystem( fsType ); fs->setPassphrase( passphrase ); Partition* p = new Partition( parent, From ff86874d66f974a5cde5c1da91fb8805b82f02a3 Mon Sep 17 00:00:00 2001 From: Chantara Tith Date: Wed, 31 Aug 2016 10:30:45 +0700 Subject: [PATCH 07/24] API Changes, logicalSectorSize -> logicalSize, totalSectors -> totalLogical. --- src/modules/partition/core/PartitionActions.cpp | 14 +++++++------- src/modules/partition/core/PartitionModel.cpp | 6 +++--- src/modules/partition/gui/ChoicePage.cpp | 2 +- src/modules/partition/gui/PartitionLabelsView.cpp | 2 +- .../partition/gui/PartitionSizeController.cpp | 4 ++-- src/modules/partition/jobs/ResizePartitionJob.cpp | 2 +- 6 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/modules/partition/core/PartitionActions.cpp b/src/modules/partition/core/PartitionActions.cpp index aa9c0af36..90779b7fa 100644 --- a/src/modules/partition/core/PartitionActions.cpp +++ b/src/modules/partition/core/PartitionActions.cpp @@ -128,11 +128,11 @@ doAutopartition( PartitionCoreModule* core, Device* dev, const QString& luksPass empty_space_size = 1; } - qint64 firstFreeSector = empty_space_size MiB / dev->logicalSectorSize() + 1; + qint64 firstFreeSector = empty_space_size MiB / dev->logicalSize() + 1; if ( isEfi ) { - qint64 lastSector = firstFreeSector + ( uefisys_part_size MiB / dev->logicalSectorSize() ); + qint64 lastSector = firstFreeSector + ( uefisys_part_size MiB / dev->logicalSize() ); core->createPartitionTable( dev, PartitionTable::gpt ); Partition* efiPartition = KPMHelpers::createNewPartition( dev->partitionTable(), @@ -157,7 +157,7 @@ doAutopartition( PartitionCoreModule* core, Device* dev, const QString& luksPass } bool shouldCreateSwap = false; - qint64 availableSpaceB = ( dev->totalSectors() - firstFreeSector ) * dev->logicalSectorSize(); + qint64 availableSpaceB = ( dev->totalLogical() - firstFreeSector ) * dev->logicalSize(); qint64 suggestedSwapSizeB = swapSuggestion( availableSpaceB ); qint64 requiredSpaceB = ( Calamares::JobQueue::instance()-> @@ -168,10 +168,10 @@ doAutopartition( PartitionCoreModule* core, Device* dev, const QString& luksPass // If there is enough room for ESP + root + swap, create swap, otherwise don't. shouldCreateSwap = availableSpaceB > requiredSpaceB; - qint64 lastSectorForRoot = dev->totalSectors() - 1; //last sector of the device + qint64 lastSectorForRoot = dev->totalLogical() - 1; //last sector of the device if ( shouldCreateSwap ) { - lastSectorForRoot -= suggestedSwapSizeB / dev->logicalSectorSize() + 1; + lastSectorForRoot -= suggestedSwapSizeB / dev->logicalSize() + 1; } Partition* rootPartition = nullptr; @@ -213,7 +213,7 @@ doAutopartition( PartitionCoreModule* core, Device* dev, const QString& luksPass PartitionRole( PartitionRole::Primary ), FileSystem::LinuxSwap, lastSectorForRoot + 1, - dev->totalSectors() - 1 + dev->totalLogical() - 1 ); } else @@ -224,7 +224,7 @@ doAutopartition( PartitionCoreModule* core, Device* dev, const QString& luksPass PartitionRole( PartitionRole::Primary ), FileSystem::LinuxSwap, lastSectorForRoot + 1, - dev->totalSectors() - 1, + dev->totalLogical() - 1, luksPassphrase ); } diff --git a/src/modules/partition/core/PartitionModel.cpp b/src/modules/partition/core/PartitionModel.cpp index ae15b5c91..648c57932 100644 --- a/src/modules/partition/core/PartitionModel.cpp +++ b/src/modules/partition/core/PartitionModel.cpp @@ -148,7 +148,7 @@ PartitionModel::data( const QModelIndex& index, int role ) const return PartitionInfo::mountPoint( partition ); if ( col == SizeColumn ) { - qint64 size = ( partition->lastSector() - partition->firstSector() + 1 ) * m_device->logicalSectorSize(); + qint64 size = ( partition->lastSector() - partition->firstSector() + 1 ) * m_device->logicalSize(); return KFormat().formatByteSize( size ); } cDebug() << "Unknown column" << col; @@ -175,12 +175,12 @@ PartitionModel::data( const QModelIndex& index, int role ) const } } QString prettyFileSystem = KPMHelpers::prettyNameForFileSystemType( partition->fileSystem().type() ); - qint64 size = ( partition->lastSector() - partition->firstSector() + 1 ) * m_device->logicalSectorSize(); + qint64 size = ( partition->lastSector() - partition->firstSector() + 1 ) * m_device->logicalSize(); QString prettySize = KFormat().formatByteSize( size ); return QVariant(name + " " + prettyFileSystem + " " + prettySize); } case SizeRole: - return ( partition->lastSector() - partition->firstSector() + 1 ) * m_device->logicalSectorSize(); + return ( partition->lastSector() - partition->firstSector() + 1 ) * m_device->logicalSize(); case IsFreeSpaceRole: return KPMHelpers::isPartitionFreeSpace( partition ); diff --git a/src/modules/partition/gui/ChoicePage.cpp b/src/modules/partition/gui/ChoicePage.cpp index ec1ae5c55..2f4b9410a 100644 --- a/src/modules/partition/gui/ChoicePage.cpp +++ b/src/modules/partition/gui/ChoicePage.cpp @@ -594,7 +594,7 @@ ChoicePage::doAlongsideApply() qint64 oldLastSector = candidate->lastSector(); qint64 newLastSector = firstSector + m_afterPartitionSplitterWidget->splitPartitionSize() / - dev->logicalSectorSize(); + dev->logicalSize(); m_core->resizePartition( dev, candidate, firstSector, newLastSector ); Partition* newPartition = nullptr; diff --git a/src/modules/partition/gui/PartitionLabelsView.cpp b/src/modules/partition/gui/PartitionLabelsView.cpp index d2629a6e2..a43b6b88b 100644 --- a/src/modules/partition/gui/PartitionLabelsView.cpp +++ b/src/modules/partition/gui/PartitionLabelsView.cpp @@ -47,7 +47,7 @@ QStringList buildUnknownDisklabelTexts( Device* dev ) { QStringList texts = { QObject::tr( "Unpartitioned space or unknown partition table" ), - KFormat().formatByteSize( dev->totalSectors() * dev->logicalSectorSize() ) }; + KFormat().formatByteSize( dev->totalLogical() * dev->logicalSize() ) }; return texts; } diff --git a/src/modules/partition/gui/PartitionSizeController.cpp b/src/modules/partition/gui/PartitionSizeController.cpp index c602501db..d01924e8b 100644 --- a/src/modules/partition/gui/PartitionSizeController.cpp +++ b/src/modules/partition/gui/PartitionSizeController.cpp @@ -135,7 +135,7 @@ PartitionSizeController::updatePartResizerWidget() return; m_updating = true; - qint64 sectorSize = qint64( m_spinBox->value() ) * 1024 * 1024 / m_device->logicalSectorSize(); + qint64 sectorSize = qint64( m_spinBox->value() ) * 1024 * 1024 / m_device->logicalSize(); qint64 firstSector = m_partition->firstSector(); qint64 lastSector = firstSector + sectorSize - 1; @@ -185,7 +185,7 @@ PartitionSizeController::doUpdateSpinBox() { if ( !m_spinBox ) return; - qint64 mbSize = m_partition->length() * m_device->logicalSectorSize() / 1024 / 1024; + qint64 mbSize = m_partition->length() * m_device->logicalSize() / 1024 / 1024; m_spinBox->setValue( mbSize ); if ( m_currentSpinBoxValue != -1 && //if it's not the first time we're setting it m_currentSpinBoxValue != mbSize ) //and the operation changes the SB value diff --git a/src/modules/partition/jobs/ResizePartitionJob.cpp b/src/modules/partition/jobs/ResizePartitionJob.cpp index 65ee13f72..d3fcb75b4 100644 --- a/src/modules/partition/jobs/ResizePartitionJob.cpp +++ b/src/modules/partition/jobs/ResizePartitionJob.cpp @@ -93,7 +93,7 @@ public: break; case FileSystem::cmdSupportFileSystem: { - qint64 byteLength = m_device->logicalSectorSize() * m_length; + qint64 byteLength = m_device->logicalSize() * m_length; bool ok = fs.resize( report, m_partition->partitionPath(), byteLength ); if ( !ok ) return Calamares::JobResult::error( From 2914b3ea1ba6f597a5cbca7dd370d208ea38f584 Mon Sep 17 00:00:00 2001 From: Chantara Tith Date: Mon, 5 Sep 2016 13:20:02 +0700 Subject: [PATCH 08/24] Update to KPMcore LUKS' API changes --- src/modules/partition/jobs/FillGlobalStorageJob.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/partition/jobs/FillGlobalStorageJob.cpp b/src/modules/partition/jobs/FillGlobalStorageJob.cpp index 516d04b2f..da02a551f 100644 --- a/src/modules/partition/jobs/FillGlobalStorageJob.cpp +++ b/src/modules/partition/jobs/FillGlobalStorageJob.cpp @@ -98,7 +98,7 @@ mapForPartition( Partition* partition, const QString& uuid ) const FS::luks* luksFs = dynamic_cast< const FS::luks* >( &fsRef ); if ( luksFs ) { - map[ "luksMapperName" ] = luksFs->mapperName( partition->partitionPath() ).split( "/" ).last(); + map[ "luksMapperName" ] = luksFs->mapperName().split( "/" ).last(); map[ "luksUuid" ] = getLuksUuid( partition->partitionPath() ); map[ "luksPassphrase" ] = luksFs->passphrase(); cDebug() << "luksMapperName:" << map[ "luksMapperName" ]; From 0053721896bde5e3ac3beccd7cb45bcee3475cac Mon Sep 17 00:00:00 2001 From: Teo Mrnjavac Date: Fri, 9 Sep 2016 11:00:05 +0200 Subject: [PATCH 09/24] Assert on nullptr Device*. --- src/modules/partition/core/PartitionIterator.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/modules/partition/core/PartitionIterator.cpp b/src/modules/partition/core/PartitionIterator.cpp index 097e8d4aa..df1a2e4d7 100644 --- a/src/modules/partition/core/PartitionIterator.cpp +++ b/src/modules/partition/core/PartitionIterator.cpp @@ -83,6 +83,7 @@ PartitionIterator::operator!=( const PartitionIterator& other ) const PartitionIterator PartitionIterator::begin( Device* device ) { + Q_ASSERT(device); PartitionTable* table = device->partitionTable(); if ( !table ) return PartitionIterator( nullptr ); From 6093042863cb7ebfa9260093456f3ddeb159a912 Mon Sep 17 00:00:00 2001 From: Teo Mrnjavac Date: Fri, 9 Sep 2016 11:25:04 +0200 Subject: [PATCH 10/24] Keep an immutable copy for every scanned Device* to avoid rescans. --- .../partition/core/PartitionCoreModule.cpp | 26 +++++++++++-------- .../partition/core/PartitionCoreModule.h | 7 ++--- src/modules/partition/gui/ChoicePage.cpp | 2 +- 3 files changed, 20 insertions(+), 15 deletions(-) diff --git a/src/modules/partition/core/PartitionCoreModule.cpp b/src/modules/partition/core/PartitionCoreModule.cpp index 4e8da4f56..bba2fedc5 100644 --- a/src/modules/partition/core/PartitionCoreModule.cpp +++ b/src/modules/partition/core/PartitionCoreModule.cpp @@ -97,6 +97,7 @@ isIso9660( const Device* device ) PartitionCoreModule::DeviceInfo::DeviceInfo( Device* _device ) : device( _device ) , partitionModel( new PartitionModel ) + , immutableDevice( new Device( *_device ) ) {} PartitionCoreModule::DeviceInfo::~DeviceInfo() @@ -235,7 +236,7 @@ PartitionCoreModule::bootLoaderModel() const } PartitionModel* -PartitionCoreModule::partitionModelForDevice( Device* device ) const +PartitionCoreModule::partitionModelForDevice( const Device* device ) const { DeviceInfo* info = infoForDevice( device ); Q_ASSERT( info ); @@ -244,14 +245,14 @@ PartitionCoreModule::partitionModelForDevice( Device* device ) const Device* -PartitionCoreModule::createImmutableDeviceCopy( Device* device ) +PartitionCoreModule::immutableDeviceCopy( const Device* device ) { - CoreBackend* backend = CoreBackendManager::self()->backend(); + Q_ASSERT( device ); + DeviceInfo* info = infoForDevice( device ); + if ( !info ) + return nullptr; - QString node = device->deviceNode(); - cDebug() << "Creating immutable copy for node:" << node; - Device* deviceBefore = backend->scanDevice( node ); - return deviceBefore; + return info->immutableDevice.data(); } @@ -566,12 +567,15 @@ PartitionCoreModule::scanForEfiSystemPartitions() } PartitionCoreModule::DeviceInfo* -PartitionCoreModule::infoForDevice( Device* device ) const +PartitionCoreModule::infoForDevice( const Device* device ) const { - for ( auto deviceInfo : m_deviceInfos ) + for ( auto it = m_deviceInfos.constBegin(); + it != m_deviceInfos.constEnd(); ++it ) { - if ( deviceInfo->device.data() == device ) - return deviceInfo; + if ( ( *it )->device.data() == device ) + return *it; + if ( ( *it )->immutableDevice.data() == device ) + return *it; } return nullptr; } diff --git a/src/modules/partition/core/PartitionCoreModule.h b/src/modules/partition/core/PartitionCoreModule.h index 3051f99b4..4a0d89afc 100644 --- a/src/modules/partition/core/PartitionCoreModule.h +++ b/src/modules/partition/core/PartitionCoreModule.h @@ -68,7 +68,7 @@ public: DeviceModel* deviceModel() const; - PartitionModel* partitionModelForDevice( Device* device ) const; + PartitionModel* partitionModelForDevice( const Device* device ) const; //HACK: all devices change over time, and together make up the state of the CoreModule. // However this makes it hard to show the *original* state of a device. @@ -77,7 +77,7 @@ public: // This should probably be redone some other way. // -- Teo 4/2015 //FIXME: make this horrible method private. -- Teo 12/2015 - static Device* createImmutableDeviceCopy( Device* device ); + Device* immutableDeviceCopy( const Device* device ); QAbstractItemModel* bootLoaderModel() const; @@ -147,6 +147,7 @@ private: ~DeviceInfo(); QScopedPointer< Device > device; QScopedPointer< PartitionModel > partitionModel; + const QScopedPointer< Device > immutableDevice; QList< Calamares::job_ptr > jobs; void forgetChanges(); @@ -166,7 +167,7 @@ private: void updateIsDirty(); void scanForEfiSystemPartitions(); - DeviceInfo* infoForDevice( Device* ) const; + DeviceInfo* infoForDevice( const Device* ) const; OsproberEntryList m_osproberLines; diff --git a/src/modules/partition/gui/ChoicePage.cpp b/src/modules/partition/gui/ChoicePage.cpp index 2f4b9410a..daa64ce11 100644 --- a/src/modules/partition/gui/ChoicePage.cpp +++ b/src/modules/partition/gui/ChoicePage.cpp @@ -817,7 +817,7 @@ ChoicePage::updateDeviceStatePreview() m_beforePartitionLabelsView = new PartitionLabelsView( m_previewBeforeFrame ); m_beforePartitionLabelsView->setExtendedPartitionHidden( mode == PartitionBarsView::NoNestedPartitions ); - Device* deviceBefore = m_core->createImmutableDeviceCopy( currentDevice ); + Device* deviceBefore = m_core->immutableDeviceCopy( currentDevice ); PartitionModel* model = new PartitionModel( m_beforePartitionBarsView ); model->init( deviceBefore, m_core->osproberEntries() ); From 8b0d27bd1825a9b8cc5711f67bdbe9cffde9f78e Mon Sep 17 00:00:00 2001 From: Teo Mrnjavac Date: Fri, 28 Oct 2016 09:23:33 +0200 Subject: [PATCH 11/24] Improve user-visible strings in SetPartFlagsJob. --- .../partition/jobs/SetPartitionFlagsJob.cpp | 76 +++++++++++++++---- 1 file changed, 63 insertions(+), 13 deletions(-) diff --git a/src/modules/partition/jobs/SetPartitionFlagsJob.cpp b/src/modules/partition/jobs/SetPartitionFlagsJob.cpp index c2304d16f..8c562450f 100644 --- a/src/modules/partition/jobs/SetPartitionFlagsJob.cpp +++ b/src/modules/partition/jobs/SetPartitionFlagsJob.cpp @@ -44,7 +44,15 @@ SetPartFlagsJob::SetPartFlagsJob( Device* device, QString SetPartFlagsJob::prettyName() const { - return tr( "Set flags on partition %1." ).arg( partition()->partitionPath() ); + if ( !partition()->partitionPath().isEmpty() ) + return tr( "Set flags on partition %1." ).arg( partition()->partitionPath() ); + + if ( !partition()->fileSystem().name().isEmpty() ) + return tr( "Set flags on %1MB %2 partition." ) + .arg( partition()->capacity() /1024 /1024) + .arg( partition()->fileSystem().name() ); + + return tr( "Set flags on new partition." ); } @@ -53,13 +61,34 @@ SetPartFlagsJob::prettyDescription() const { QStringList flagsList = PartitionTable::flagNames( m_flags ); if ( flagsList.count() == 0 ) - return tr( "Clear flags on partition %1." ) - .arg( partition()->partitionPath() ); + { + if ( !partition()->partitionPath().isEmpty() ) + return tr( "Clear flags on partition %1." ) + .arg( partition()->partitionPath() ); - return tr( "Flag partition %1 as " - "%2." ) - .arg( partition()->partitionPath() ) - .arg( flagsList.join( ", " ) ); + if ( !partition()->fileSystem().name().isEmpty() ) + return tr( "Clear flags on %1MB %2 partition." ) + .arg( partition()->capacity() /1024 /1024) + .arg( partition()->fileSystem().name() ); + + return tr( "Clear flags on new partition." ); + } + + if ( !partition()->partitionPath().isEmpty() ) + return tr( "Flag partition %1 as " + "%2." ) + .arg( partition()->partitionPath() ) + .arg( flagsList.join( ", " ) ); + + if ( !partition()->fileSystem().name().isEmpty() ) + return tr( "Flag %1MB %2 partition as " + "%3." ) + .arg( partition()->capacity() /1024 /1024) + .arg( partition()->fileSystem().name() ) + .arg( flagsList.join( ", " ) ); + + return tr( "Flag new partition as %1." ) + .arg( flagsList.join( ", " ) ); } @@ -68,13 +97,34 @@ SetPartFlagsJob::prettyStatusMessage() const { QStringList flagsList = PartitionTable::flagNames( m_flags ); if ( flagsList.count() == 0 ) - return tr( "Clearing flags on partition %1." ) - .arg( partition()->partitionPath() ); + { + if ( !partition()->partitionPath().isEmpty() ) + return tr( "Clearing flags on partition %1." ) + .arg( partition()->partitionPath() ); - return tr( "Setting flags %2 on partition " - "%1." ) - .arg( partition()->partitionPath() ) - .arg( flagsList.join( ", " ) ); + if ( !partition()->fileSystem().name().isEmpty() ) + return tr( "Clearing flags on %1MB %2 partition." ) + .arg( partition()->capacity() /1024 /1024) + .arg( partition()->fileSystem().name() ); + + return tr( "Clearing flags on new partition." ); + } + + if ( !partition()->partitionPath().isEmpty() ) + return tr( "Setting flags %2 on partition " + "%1." ) + .arg( partition()->partitionPath() ) + .arg( flagsList.join( ", " ) ); + + if ( !partition()->fileSystem().name().isEmpty() ) + return tr( "Setting flags %3 on " + "%1MB %2 partition." ) + .arg( partition()->capacity() /1024 /1024) + .arg( partition()->fileSystem().name() ) + .arg( flagsList.join( ", " ) ); + + return tr( "Setting flags %1 on new partition." ) + .arg( flagsList.join( ", " ) ); } From dae0f1078dd8d8041d4387420f0ba3fbeeb11352 Mon Sep 17 00:00:00 2001 From: Philip Date: Wed, 9 Nov 2016 08:47:27 +0100 Subject: [PATCH 12/24] [partition] Bump kpmcore requirements --- src/modules/partition/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/partition/CMakeLists.txt b/src/modules/partition/CMakeLists.txt index b8e23bf63..66d0a7c1a 100644 --- a/src/modules/partition/CMakeLists.txt +++ b/src/modules/partition/CMakeLists.txt @@ -10,7 +10,7 @@ find_package( KF5 REQUIRED CoreAddons ) # These are needed because KPMcore links publicly against ConfigCore, I18n, IconThemes, KIOCore and Service find_package( KF5 REQUIRED Config I18n IconThemes KIO Service ) -find_package( KPMcore 2.2 REQUIRED ) +find_package( KPMcore 2.9.90 REQUIRED ) add_subdirectory( tests ) From a0b76fa59482c82f6f9d32e98b90205ad9e0d804 Mon Sep 17 00:00:00 2001 From: Teo Mrnjavac Date: Fri, 25 Nov 2016 16:21:25 +0100 Subject: [PATCH 13/24] Make sure we write the inner fs type to globalstorage. --- src/modules/partition/jobs/FillGlobalStorageJob.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/modules/partition/jobs/FillGlobalStorageJob.cpp b/src/modules/partition/jobs/FillGlobalStorageJob.cpp index da02a551f..553b56b52 100644 --- a/src/modules/partition/jobs/FillGlobalStorageJob.cpp +++ b/src/modules/partition/jobs/FillGlobalStorageJob.cpp @@ -1,7 +1,7 @@ /* === This file is part of Calamares - === * * Copyright 2014, Aurélien Gâteau - * Copyright 2015, Teo Mrnjavac + * Copyright 2015-2016, Teo Mrnjavac * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -86,10 +86,13 @@ mapForPartition( Partition* partition, const QString& uuid ) map[ "device" ] = partition->partitionPath(); map[ "mountPoint" ] = PartitionInfo::mountPoint( partition ); map[ "fs" ] = partition->fileSystem().name(); + if ( partition->fileSystem().type() == FileSystem::Luks && + dynamic_cast< FS::luks& >( partition->fileSystem() ).innerFS() ) + map[ "fs" ] = dynamic_cast< FS::luks& >( partition->fileSystem() ).innerFS()->name(); map[ "uuid" ] = uuid; cDebug() << partition->partitionPath() << "mtpoint:" << PartitionInfo::mountPoint( partition ) - << "fs:" << partition->fileSystem().name() + << "fs:" << map[ "fs" ] << uuid; if ( partition->roles().has( PartitionRole::Luks ) ) From 2d980c2af69cc2add777858a7c9deafbbe844a45 Mon Sep 17 00:00:00 2001 From: Teo Mrnjavac Date: Thu, 1 Dec 2016 19:15:11 +0100 Subject: [PATCH 14/24] Bump KPMcore requirement. --- README.md | 2 +- src/modules/partition/CMakeLists.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 2f125b1cb..4bb62e382 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ Modules: * partition: * extra-cmake-modules * KF5: KCoreAddons, KConfig, KI18n, KIconThemes, KIO, KService - * KPMcore >= 2.2 + * KPMcore >= 3.0 * bootloader: * systemd-boot or GRUB * unpackfs: diff --git a/src/modules/partition/CMakeLists.txt b/src/modules/partition/CMakeLists.txt index 66d0a7c1a..b14165512 100644 --- a/src/modules/partition/CMakeLists.txt +++ b/src/modules/partition/CMakeLists.txt @@ -10,7 +10,7 @@ find_package( KF5 REQUIRED CoreAddons ) # These are needed because KPMcore links publicly against ConfigCore, I18n, IconThemes, KIOCore and Service find_package( KF5 REQUIRED Config I18n IconThemes KIO Service ) -find_package( KPMcore 2.9.90 REQUIRED ) +find_package( KPMcore 3.0.0 REQUIRED ) add_subdirectory( tests ) From 32402eeafad8a6a67f9155aa110aa66d8c75314b Mon Sep 17 00:00:00 2001 From: Chantara Tith Date: Sun, 11 Sep 2016 15:56:06 +0700 Subject: [PATCH 15/24] Use device's immutable copy instead of rescanning. --- src/modules/partition/core/PartitionCoreModule.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/modules/partition/core/PartitionCoreModule.cpp b/src/modules/partition/core/PartitionCoreModule.cpp index bba2fedc5..87393a424 100644 --- a/src/modules/partition/core/PartitionCoreModule.cpp +++ b/src/modules/partition/core/PartitionCoreModule.cpp @@ -685,7 +685,6 @@ QList< PartitionCoreModule::SummaryInfo > PartitionCoreModule::createSummaryInfo() const { QList< SummaryInfo > lst; - CoreBackend* backend = CoreBackendManager::self()->backend(); for ( auto deviceInfo : m_deviceInfos ) { if ( !deviceInfo->isDirty() ) @@ -694,7 +693,7 @@ PartitionCoreModule::createSummaryInfo() const summaryInfo.deviceName = deviceInfo->device->name(); summaryInfo.deviceNode = deviceInfo->device->deviceNode(); - Device* deviceBefore = backend->scanDevice( deviceInfo->device->deviceNode() ); + Device* deviceBefore = deviceInfo->immutableDevice.data(); summaryInfo.partitionModelBefore = new PartitionModel; summaryInfo.partitionModelBefore->init( deviceBefore, m_osproberLines ); // Make deviceBefore a child of partitionModelBefore so that it is not From 2082fff1d2a425a33d8e7effc2b644a28c1679b1 Mon Sep 17 00:00:00 2001 From: Teo Mrnjavac Date: Fri, 2 Dec 2016 18:36:02 +0100 Subject: [PATCH 16/24] Improve debug output for bootloader code path. --- src/modules/partition/core/PartitionCoreModule.cpp | 2 ++ src/modules/partition/gui/PartitionPage.cpp | 1 + src/modules/partition/jobs/FillGlobalStorageJob.cpp | 2 ++ 3 files changed, 5 insertions(+) diff --git a/src/modules/partition/core/PartitionCoreModule.cpp b/src/modules/partition/core/PartitionCoreModule.cpp index 87393a424..7ce67be16 100644 --- a/src/modules/partition/core/PartitionCoreModule.cpp +++ b/src/modules/partition/core/PartitionCoreModule.cpp @@ -441,6 +441,7 @@ PartitionCoreModule::jobs() const lst << info->jobs; devices << info->device.data(); } + cDebug() << "Creating FillGlobalStorageJob with bootLoader path" << m_bootLoaderInstallPath; lst << Calamares::job_ptr( new FillGlobalStorageJob( devices, m_bootLoaderInstallPath ) ); @@ -596,6 +597,7 @@ PartitionCoreModule::findPartitionByMountPoint( const QString& mountPoint ) cons void PartitionCoreModule::setBootLoaderInstallPath( const QString& path ) { + cDebug() << "PCM::setBootLoaderInstallPath" << path; m_bootLoaderInstallPath = path; } diff --git a/src/modules/partition/gui/PartitionPage.cpp b/src/modules/partition/gui/PartitionPage.cpp index 2ba07606d..17867a644 100644 --- a/src/modules/partition/gui/PartitionPage.cpp +++ b/src/modules/partition/gui/PartitionPage.cpp @@ -291,6 +291,7 @@ PartitionPage::updateBootLoaderInstallPath() QVariant var = m_ui->bootLoaderComboBox->currentData( BootLoaderModel::BootLoaderPathRole ); if ( !var.isValid() ) return; + qDebug() << "PartitionPage::updateBootLoaderInstallPath" << var.toString(); m_core->setBootLoaderInstallPath( var.toString() ); } diff --git a/src/modules/partition/jobs/FillGlobalStorageJob.cpp b/src/modules/partition/jobs/FillGlobalStorageJob.cpp index 553b56b52..db59528a4 100644 --- a/src/modules/partition/jobs/FillGlobalStorageJob.cpp +++ b/src/modules/partition/jobs/FillGlobalStorageJob.cpp @@ -198,10 +198,12 @@ FillGlobalStorageJob::exec() QVariant var = createBootLoaderMap(); if ( !var.isValid() ) cDebug() << "Failed to find path for boot loader"; + cDebug() << "FillGlobalStorageJob writing bootLoader path:" << var; storage->insert( "bootLoader", var ); } else { + cDebug() << "FillGlobalStorageJob writing empty bootLoader value"; storage->insert( "bootLoader", QVariant() ); } return Calamares::JobResult::ok(); From 742deb12038a924f29da2aa31751149ab5a1d83e Mon Sep 17 00:00:00 2001 From: Philip Date: Fri, 23 Dec 2016 09:44:45 +0100 Subject: [PATCH 17/24] [users] Set tab order to more logical one for the flow. --- src/modules/users/gui/adduserdialog.ui | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/modules/users/gui/adduserdialog.ui b/src/modules/users/gui/adduserdialog.ui index 6dd8f85f1..bf5825624 100644 --- a/src/modules/users/gui/adduserdialog.ui +++ b/src/modules/users/gui/adduserdialog.ui @@ -7,7 +7,7 @@ 0 0 712 - 383 + 388 @@ -376,6 +376,12 @@ as the Administrator password userNameLine passLine confirmPassLine + nameLine + autoLoginCheckBox + rootUsesUserPwCheckBox + loginShellSelection + selectImageButton + avatarFileLine From edade9423f05ee3bcd8d13c13a637f13a93ed9fb Mon Sep 17 00:00:00 2001 From: Philip Date: Fri, 23 Dec 2016 09:45:39 +0100 Subject: [PATCH 18/24] [users] Fix reading shells from the config file. --- src/modules/users/UsersViewStep.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/modules/users/UsersViewStep.cpp b/src/modules/users/UsersViewStep.cpp index 782a6a846..609e9d8d4 100644 --- a/src/modules/users/UsersViewStep.cpp +++ b/src/modules/users/UsersViewStep.cpp @@ -22,6 +22,7 @@ #include "JobQueue.h" #include "GlobalStorage.h" +#include "utils/Logger.h" CALAMARES_PLUGIN_FACTORY_DEFINITION( UsersViewStepFactory, registerPlugin(); ) @@ -161,9 +162,14 @@ UsersViewStep::setConfigurationMap( const QVariantMap& configurationMap ) } if ( configurationMap.contains( "availableShells" ) && - configurationMap.value( "availableShells" ).type() == QVariant::List ) + configurationMap.value( "availableShells" ).type() == QVariant::String ) { - m_widget->setAvailableShells( configurationMap.value( "availableShells" ).toStringList() ); + QStringList shells; + for (QString& shell : configurationMap.value( "availableShells" ).toString().split(",")) { + shells.append( shell.trimmed() ); + } + + m_widget->setAvailableShells(shells); } if ( configurationMap.contains( "avatarFilePath" ) && From 47600ea6d19b323425aa8ed0f9859c04ca366c6c Mon Sep 17 00:00:00 2001 From: Philip Date: Fri, 23 Dec 2016 09:50:44 +0100 Subject: [PATCH 19/24] [webview] fix crash on loading webview page with QtWebengine --- src/modules/webview/WebViewStep.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/modules/webview/WebViewStep.cpp b/src/modules/webview/WebViewStep.cpp index b1d50bf7c..069b52d5a 100644 --- a/src/modules/webview/WebViewStep.cpp +++ b/src/modules/webview/WebViewStep.cpp @@ -25,6 +25,7 @@ #include #else #include +#include #endif CALAMARES_PLUGIN_FACTORY_DEFINITION( WebViewStepFactory, registerPlugin(); ) @@ -33,6 +34,9 @@ WebViewStep::WebViewStep( QObject* parent ) : Calamares::ViewStep( parent ) { emit nextStatusChanged( true ); +#ifdef WEBVIEW_WITH_WEBENGINE + QtWebEngine::initialize(); +#endif m_view = new C_QWEBVIEW(); #ifdef WEBVIEW_WITH_WEBKIT m_view->settings()->setFontFamily( QWebSettings::StandardFont, From a65f57cfc9031e6d010acbc2cf471cea1611b31f Mon Sep 17 00:00:00 2001 From: Philip Date: Sat, 24 Dec 2016 08:54:43 +0100 Subject: [PATCH 20/24] [partition] Improve debug output --- src/modules/partition/core/PartUtils.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/modules/partition/core/PartUtils.cpp b/src/modules/partition/core/PartUtils.cpp index 11931347f..0f9b4203a 100644 --- a/src/modules/partition/core/PartUtils.cpp +++ b/src/modules/partition/core/PartUtils.cpp @@ -51,8 +51,9 @@ canBeReplaced( Partition* candidate ) qint64 requiredStorageB = ( requiredStorageGB + 0.5 ) * 1024 * 1024 * 1024; cDebug() << "Required storage B:" << requiredStorageB << QString( "(%1GB)" ).arg( requiredStorageB / 1024 / 1024 / 1024 ); - cDebug() << "Available storage B:" << availableStorageB - << QString( "(%1GB)" ).arg( availableStorageB / 1024 / 1024 / 1024 ); + cDebug() << "Storage capacity B:" << availableStorageB + << QString( "(%1GB)" ).arg( availableStorageB / 1024 / 1024 / 1024 ) + << "for" << candidate->partitionPath() << " length:" << candidate->length(); if ( ok && availableStorageB > requiredStorageB ) @@ -102,7 +103,9 @@ canBeResized( Partition* candidate ) cDebug() << "Required storage B:" << requiredStorageB << QString( "(%1GB)" ).arg( requiredStorageB / 1024 / 1024 / 1024 ); cDebug() << "Available storage B:" << availableStorageB - << QString( "(%1GB)" ).arg( availableStorageB / 1024 / 1024 / 1024 ); + << QString( "(%1GB)" ).arg( availableStorageB / 1024 / 1024 / 1024 ) + << "for" << candidate->partitionPath() << " length:" << candidate->length() + << " sectorsUsed:" << candidate->sectorsUsed() << " fsType:" << candidate->fileSystem().name(); if ( ok && availableStorageB > requiredStorageB ) From c29bca3fe0ba8efad2d1fd0302d8e1c1b91f4ebd Mon Sep 17 00:00:00 2001 From: Philip Date: Sat, 24 Dec 2016 08:56:55 +0100 Subject: [PATCH 21/24] [branding] prepare for 'Gellivara' --- src/branding/manjaro-kde/branding.desc | 8 ++++---- src/branding/manjaro-xfce/branding.desc | 8 ++++---- src/branding/manjaro/branding.desc | 8 ++++---- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/branding/manjaro-kde/branding.desc b/src/branding/manjaro-kde/branding.desc index 0786f9397..5fac3cd3d 100644 --- a/src/branding/manjaro-kde/branding.desc +++ b/src/branding/manjaro-kde/branding.desc @@ -4,10 +4,10 @@ componentName: manjaro-kde strings: productName: Manjaro Linux shortProductName: Manjaro - version: 16.10 - shortVersion: 16.10 - versionedName: Manjaro Linux 16.10 "Fringilla" - shortVersionedName: Manjaro 16.10 + version: 17.0 + shortVersion: 17.0 + versionedName: Manjaro Linux 17.0 "Gellivara" + shortVersionedName: Manjaro 17.0 bootloaderEntryName: Manjaro images: diff --git a/src/branding/manjaro-xfce/branding.desc b/src/branding/manjaro-xfce/branding.desc index 7054fec1d..a0f2e6de1 100644 --- a/src/branding/manjaro-xfce/branding.desc +++ b/src/branding/manjaro-xfce/branding.desc @@ -4,10 +4,10 @@ componentName: manjaro-xfce strings: productName: Manjaro Linux shortProductName: Manjaro - version: 16.10 - shortVersion: 16.10 - versionedName: Manjaro Linux 16.10 "Fringilla" - shortVersionedName: Manjaro 16.10 + version: 17.0 + shortVersion: 17.0 + versionedName: Manjaro Linux 17.0 "Gellivara" + shortVersionedName: Manjaro 17.0 bootloaderEntryName: Manjaro images: diff --git a/src/branding/manjaro/branding.desc b/src/branding/manjaro/branding.desc index 82b8939a8..2aaa01105 100644 --- a/src/branding/manjaro/branding.desc +++ b/src/branding/manjaro/branding.desc @@ -4,10 +4,10 @@ componentName: manjaro strings: productName: Manjaro Linux shortProductName: Manjaro - version: 16.10 - shortVersion: 16.10 - versionedName: Manjaro Linux 16.10 "Fringilla" - shortVersionedName: Manjaro 16.10 + version: 17.0 + shortVersion: 17.0 + versionedName: Manjaro Linux 17.0 "Gellivara" + shortVersionedName: Manjaro 17.0 bootloaderEntryName: Manjaro images: From 1727d2f267a95558b0e2eb02cc66d6db8fcce5f0 Mon Sep 17 00:00:00 2001 From: Philip Date: Sun, 1 Jan 2017 02:43:41 +0100 Subject: [PATCH 22/24] [partition] Disallow assigning the same mountpoint to two partitions --- .../partition/gui/CreatePartitionDialog.cpp | 24 +++++++++++-- .../partition/gui/CreatePartitionDialog.h | 4 ++- .../partition/gui/CreatePartitionDialog.ui | 26 ++++++++++---- .../gui/EditExistingPartitionDialog.cpp | 19 ++++++++++- .../gui/EditExistingPartitionDialog.h | 6 +++- .../gui/EditExistingPartitionDialog.ui | 16 +++++++-- src/modules/partition/gui/PartitionPage.cpp | 34 +++++++++++++++++-- src/modules/partition/gui/PartitionPage.h | 2 ++ 8 files changed, 114 insertions(+), 17 deletions(-) diff --git a/src/modules/partition/gui/CreatePartitionDialog.cpp b/src/modules/partition/gui/CreatePartitionDialog.cpp index 994e60010..90545fe80 100644 --- a/src/modules/partition/gui/CreatePartitionDialog.cpp +++ b/src/modules/partition/gui/CreatePartitionDialog.cpp @@ -40,8 +40,9 @@ // Qt #include #include -#include #include +#include +#include static QSet< FileSystem::Type > s_unmountableFS( { @@ -52,12 +53,13 @@ static QSet< FileSystem::Type > s_unmountableFS( FileSystem::Lvm2_PV } ); -CreatePartitionDialog::CreatePartitionDialog( Device* device, PartitionNode* parentPartition, QWidget* parentWidget ) +CreatePartitionDialog::CreatePartitionDialog( Device* device, PartitionNode* parentPartition, const QStringList& usedMountPoints, QWidget* parentWidget ) : QDialog( parentWidget ) , m_ui( new Ui_CreatePartitionDialog ) , m_partitionSizeController( new PartitionSizeController( this ) ) , m_device( device ) , m_parent( parentPartition ) + , m_usedMountPoints( usedMountPoints ) { m_ui->setupUi( this ); m_ui->encryptWidget->setText( tr( "En&crypt" ) ); @@ -101,11 +103,15 @@ CreatePartitionDialog::CreatePartitionDialog( Device* device, PartitionNode* par connect( m_ui->fsComboBox, SIGNAL( activated( int ) ), SLOT( updateMountPointUi() ) ); connect( m_ui->extendedRadioButton, SIGNAL( toggled( bool ) ), SLOT( updateMountPointUi() ) ); + connect( m_ui->mountPointComboBox, &QComboBox::currentTextChanged, this, &CreatePartitionDialog::checkMountPointSelection ); + // Select a default m_ui->fsComboBox->setCurrentIndex( defaultFsIndex ); updateMountPointUi(); setupFlagsList(); + // Checks the initial selection. + checkMountPointSelection(); } CreatePartitionDialog::~CreatePartitionDialog() @@ -252,6 +258,20 @@ CreatePartitionDialog::updateMountPointUi() m_ui->mountPointComboBox->setCurrentText( QString() ); } +void +CreatePartitionDialog::checkMountPointSelection() +{ + const QString& selection = m_ui->mountPointComboBox->currentText(); + + if (m_usedMountPoints.contains(selection)) { + m_ui->labelMountPoint->setText("Mountpoint already in use. Please select another one."); + m_ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false); + } else { + m_ui->labelMountPoint->setText( QString() ); + m_ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(true); + } +} + void CreatePartitionDialog::initPartResizerWidget( Partition* partition ) { diff --git a/src/modules/partition/gui/CreatePartitionDialog.h b/src/modules/partition/gui/CreatePartitionDialog.h index aca7ed6a0..641616e3f 100644 --- a/src/modules/partition/gui/CreatePartitionDialog.h +++ b/src/modules/partition/gui/CreatePartitionDialog.h @@ -42,7 +42,7 @@ class CreatePartitionDialog : public QDialog { Q_OBJECT public: - CreatePartitionDialog( Device* device, PartitionNode* parentPartition, QWidget* parentWidget = nullptr ); + CreatePartitionDialog( Device* device, PartitionNode* parentPartition, const QStringList& usedMountPoints, QWidget* parentWidget = nullptr ); ~CreatePartitionDialog(); /** @@ -61,6 +61,7 @@ public: private Q_SLOTS: void updateMountPointUi(); + void checkMountPointSelection(); private: void setupFlagsList(); @@ -69,6 +70,7 @@ private: Device* m_device; PartitionNode* m_parent; PartitionRole m_role = PartitionRole( PartitionRole::None ); + QStringList m_usedMountPoints; void initGptPartitionTypeUi(); void initMbrPartitionTypeUi(); diff --git a/src/modules/partition/gui/CreatePartitionDialog.ui b/src/modules/partition/gui/CreatePartitionDialog.ui index 28961c543..bad15a4cf 100644 --- a/src/modules/partition/gui/CreatePartitionDialog.ui +++ b/src/modules/partition/gui/CreatePartitionDialog.ui @@ -108,7 +108,7 @@ 20 - 12 + 13 @@ -126,6 +126,9 @@ + + + @@ -162,14 +165,26 @@ - + + + + + true + + + + + + + + Flags: - + true @@ -182,7 +197,7 @@ - + Qt::Vertical @@ -195,9 +210,6 @@ - - - diff --git a/src/modules/partition/gui/EditExistingPartitionDialog.cpp b/src/modules/partition/gui/EditExistingPartitionDialog.cpp index 2652567d2..5aa1e21f6 100644 --- a/src/modules/partition/gui/EditExistingPartitionDialog.cpp +++ b/src/modules/partition/gui/EditExistingPartitionDialog.cpp @@ -43,13 +43,15 @@ // Qt #include #include +#include -EditExistingPartitionDialog::EditExistingPartitionDialog( Device* device, Partition* partition, QWidget* parentWidget ) +EditExistingPartitionDialog::EditExistingPartitionDialog( Device* device, Partition* partition, const QStringList& usedMountPoints, QWidget* parentWidget ) : QDialog( parentWidget ) , m_ui( new Ui_EditExistingPartitionDialog ) , m_device( device ) , m_partition( partition ) , m_partitionSizeController( new PartitionSizeController( this ) ) + , m_usedMountPoints( usedMountPoints ) { m_ui->setupUi( this ); @@ -65,6 +67,7 @@ EditExistingPartitionDialog::EditExistingPartitionDialog( Device* device, Partit m_partitionSizeController->setSpinBox( m_ui->sizeSpinBox ); m_ui->mountPointComboBox->setCurrentText( PartitionInfo::mountPoint( partition ) ); + connect( m_ui->mountPointComboBox, &QComboBox::currentTextChanged, this, &EditExistingPartitionDialog::checkMountPointSelection ); replacePartResizerWidget(); @@ -291,3 +294,17 @@ EditExistingPartitionDialog::updateMountPointPicker() if ( !canMount ) m_ui->mountPointComboBox->setCurrentText( QString() ); } + +void +EditExistingPartitionDialog::checkMountPointSelection() +{ + const QString& selection = m_ui->mountPointComboBox->currentText(); + + if (m_usedMountPoints.contains(selection)) { + m_ui->labelMountPoint->setText("Mountpoint already in use. Please select another one."); + m_ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false); + } else { + m_ui->labelMountPoint->setText( QString() ); + m_ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(true); + } +} diff --git a/src/modules/partition/gui/EditExistingPartitionDialog.h b/src/modules/partition/gui/EditExistingPartitionDialog.h index 0aa89bb98..83552fe55 100644 --- a/src/modules/partition/gui/EditExistingPartitionDialog.h +++ b/src/modules/partition/gui/EditExistingPartitionDialog.h @@ -40,16 +40,20 @@ class EditExistingPartitionDialog : public QDialog { Q_OBJECT public: - EditExistingPartitionDialog( Device* device, Partition* partition, QWidget* parentWidget = nullptr ); + EditExistingPartitionDialog( Device* device, Partition* partition, const QStringList& usedMountPoints, QWidget* parentWidget = nullptr ); ~EditExistingPartitionDialog(); void applyChanges( PartitionCoreModule* module ); +private slots: + void checkMountPointSelection(); + private: QScopedPointer< Ui_EditExistingPartitionDialog > m_ui; Device* m_device; Partition* m_partition; PartitionSizeController* m_partitionSizeController; + QStringList m_usedMountPoints; PartitionTable::Flags newFlags() const; void setupFlagsList(); diff --git a/src/modules/partition/gui/EditExistingPartitionDialog.ui b/src/modules/partition/gui/EditExistingPartitionDialog.ui index 9ed7e1bb4..27e930fda 100644 --- a/src/modules/partition/gui/EditExistingPartitionDialog.ui +++ b/src/modules/partition/gui/EditExistingPartitionDialog.ui @@ -139,14 +139,14 @@ - + Flags: - + true @@ -159,6 +159,18 @@ + + + + + true + + + + + + + diff --git a/src/modules/partition/gui/PartitionPage.cpp b/src/modules/partition/gui/PartitionPage.cpp index 17867a644..6306c7a67 100644 --- a/src/modules/partition/gui/PartitionPage.cpp +++ b/src/modules/partition/gui/PartitionPage.cpp @@ -23,6 +23,7 @@ #include "core/BootLoaderModel.h" #include "core/DeviceModel.h" #include "core/PartitionCoreModule.h" +#include "core/PartitionInfo.h" #include "core/PartitionModel.h" #include "core/KPMHelpers.h" #include "gui/CreatePartitionDialog.h" @@ -176,7 +177,7 @@ PartitionPage::onCreateClicked() Partition* partition = model->partitionForIndex( index ); Q_ASSERT( partition ); - QPointer dlg = new CreatePartitionDialog( model->device(), partition->parent(), this ); + QPointer dlg = new CreatePartitionDialog( model->device(), partition->parent(), getCurrentUsedMountpoints(), this ); dlg->initFromFreeSpace( partition ); if ( dlg->exec() == QDialog::Accepted ) { @@ -265,7 +266,10 @@ PartitionPage::onPartitionViewActivated() void PartitionPage::updatePartitionToCreate( Device* device, Partition* partition ) { - QPointer dlg = new CreatePartitionDialog( device, partition->parent(), this ); + QStringList mountPoints = getCurrentUsedMountpoints(); + mountPoints.removeOne( PartitionInfo::mountPoint( partition ) ); + + QPointer dlg = new CreatePartitionDialog( device, partition->parent(), mountPoints, this ); dlg->initFromPartitionToCreate( partition ); if ( dlg->exec() == QDialog::Accepted ) { @@ -279,7 +283,10 @@ PartitionPage::updatePartitionToCreate( Device* device, Partition* partition ) void PartitionPage::editExistingPartition( Device* device, Partition* partition ) { - QPointer dlg = new EditExistingPartitionDialog( device, partition, this ); + QStringList mountPoints = getCurrentUsedMountpoints(); + mountPoints.removeOne( PartitionInfo::mountPoint( partition ) ); + + QPointer dlg = new EditExistingPartitionDialog( device, partition, mountPoints, this ); if ( dlg->exec() == QDialog::Accepted ) dlg->applyChanges( m_core ); delete dlg; @@ -376,3 +383,24 @@ PartitionPage::updateBootLoaderIndex() m_ui->bootLoaderComboBox->setCurrentIndex( m_lastSelectedBootLoaderIndex ); } } + +QStringList +PartitionPage::getCurrentUsedMountpoints() +{ + QModelIndex index = m_core->deviceModel()->index( m_ui->deviceComboBox->currentIndex(), 0 ); + if ( !index.isValid() ) + return QStringList(); + + Device* device = m_core->deviceModel()->deviceForIndex( index ); + QStringList mountPoints; + + for (Partition* partition : device->partitionTable()->children()) { + const QString& mountPoint = PartitionInfo::mountPoint( partition ); + + if (!mountPoint.isEmpty()) { + mountPoints << mountPoint; + } + } + + return mountPoints; +} diff --git a/src/modules/partition/gui/PartitionPage.h b/src/modules/partition/gui/PartitionPage.h index 2dc02159d..59453ce18 100644 --- a/src/modules/partition/gui/PartitionPage.h +++ b/src/modules/partition/gui/PartitionPage.h @@ -62,6 +62,8 @@ private: void updateFromCurrentDevice(); void updateBootLoaderIndex(); + QStringList getCurrentUsedMountpoints(); + QMutex m_revertMutex; int m_lastSelectedBootLoaderIndex; }; From fbe90c22af1bc1d7edfda1fcf2678cb1faf948c9 Mon Sep 17 00:00:00 2001 From: Philip Date: Sun, 1 Jan 2017 02:44:37 +0100 Subject: [PATCH 23/24] [users] Clarify semantics of avatarFilePath config setting. --- src/modules/users/README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/modules/users/README.md b/src/modules/users/README.md index cd0991078..9a0d5d3d1 100644 --- a/src/modules/users/README.md +++ b/src/modules/users/README.md @@ -12,5 +12,4 @@ The following settings are available in **users.conf**: - ```sudoersGroup```: group for sudoers usage. - ```setRootPassword```: allow to set the root password in the installed system. Defaults to false. - ```availableShells```: comma-separated list of available shells for new users. If not present, new users will not have any explicit shell in /etc/passwd, therefore the system default (usually, /bin/bash) will be used. - - ```avatarFilePath```: path where to copy user avatars to; ~ can be used to represent the user's home directory. If not present or empty, we won't allow users to set avatars. - + - ```avatarFilePath```: path where to copy the user avatar to, including the target file name; ~ can be used to represent the user's home directory; $HOME or other environment variables are not currently supported. If a path is not present or empty, we won't allow users to set avatars. From 3e6001f09856b8695b4332b3fd8524ecbd3141ff Mon Sep 17 00:00:00 2001 From: Philip Date: Wed, 11 Jan 2017 14:00:47 +0100 Subject: [PATCH 24/24] [partition] The sender QObject should be in scope so the bootloader path is written --- src/modules/partition/gui/ChoicePage.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/partition/gui/ChoicePage.cpp b/src/modules/partition/gui/ChoicePage.cpp index daa64ce11..b700a24aa 100644 --- a/src/modules/partition/gui/ChoicePage.cpp +++ b/src/modules/partition/gui/ChoicePage.cpp @@ -1106,7 +1106,7 @@ ChoicePage::createBootloaderComboBox( QWidget* parent ) // When the chosen bootloader device changes, we update the choice in the PCM connect( bcb, static_cast< void (QComboBox::*)(int) >( &QComboBox::currentIndexChanged ), - [this]( int newIndex ) + this, [this]( int newIndex ) { QComboBox* bcb = qobject_cast< QComboBox* >( sender() ); if ( bcb )