From 811261258bfc5a3ec4693e27866b749dcf9ee519 Mon Sep 17 00:00:00 2001 From: Teo Mrnjavac Date: Thu, 28 Jul 2016 17:41:44 +0200 Subject: [PATCH] Try to load filesystem UUIDs into the OsproberEntryList structure. --- src/modules/partition/core/PartUtils.cpp | 1 + .../partition/core/PartitionCoreModule.cpp | 29 +++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/src/modules/partition/core/PartUtils.cpp b/src/modules/partition/core/PartUtils.cpp index f0f2b998c..020b79b45 100644 --- a/src/modules/partition/core/PartUtils.cpp +++ b/src/modules/partition/core/PartUtils.cpp @@ -303,6 +303,7 @@ runOsprober( PartitionCoreModule* core ) osproberEntries.append( { prettyName, path, + QString(), canBeResized( core, path ), lineColumns, fstabEntries, diff --git a/src/modules/partition/core/PartitionCoreModule.cpp b/src/modules/partition/core/PartitionCoreModule.cpp index 205addf71..7888960a1 100644 --- a/src/modules/partition/core/PartitionCoreModule.cpp +++ b/src/modules/partition/core/PartitionCoreModule.cpp @@ -145,6 +145,35 @@ PartitionCoreModule::doInit() // which relies on a working DeviceModel. m_osproberLines = PartUtils::runOsprober( this ); + // We perform a best effort of filling out filesystem UUIDs in m_osproberLines + // because we will need them later on in PartitionModel if partition paths + // change. + // It is a known fact that /dev/sda1-style device paths aren't persistent + // across reboots (and this doesn't affect us), but partition numbers can also + // change at runtime against our will just for shits and giggles. + // But why would that ever happen? What system could possibly be so poorly + // designed that it requires a partition path rearrangement at runtime? + // Logical partitions on an MSDOS disklabel of course. + // See DeletePartitionJob::updatePreview. + for ( auto deviceInfo : m_deviceInfos ) + { + for ( auto it = PartitionIterator::begin( deviceInfo->device.data() ); + it != PartitionIterator::end( deviceInfo->device.data() ); ++it ) + { + Partition* partition = *it; + for ( auto jt = m_osproberLines.begin(); + jt != m_osproberLines.end(); ++jt ) + { + if ( jt->path == partition->partitionPath() && + partition->fileSystem().supportGetUUID() != FileSystem::cmdSupportNone && + !partition->fileSystem().uuid().isEmpty() ) + { + jt->uuid = partition->fileSystem().uuid(); + } + } + } + } + for ( auto deviceInfo : m_deviceInfos ) { deviceInfo->partitionModel->init( deviceInfo->device.data(), m_osproberLines );