Skip to content
Snippets Groups Projects
Select Git revision
  • aa35224ab18e5f7eea2bd4dd9df71a049dead139
  • development default protected
  • 3.2.x-stable
  • prepare
  • 6b369dc5
  • 3.1.x-stable
  • 3.0.x-stable
  • 2.4.x-stable
  • v3.2.61
  • v3.2.60
  • v3.2.59
  • v3.2.54
  • v3.2.53
  • v3.2.52
  • v3.2.51
  • v3.2.48
  • v3.2.45
  • v3.2.44.3
  • v3.2.44
  • v3.2.40
  • v3.2.13
  • v3.2.9
  • v3.2.8
  • v3.2.7
  • v3.2.6
  • v3.2.5
  • v3.2.4
  • v3.2.3
28 results

PartitionCoreModule.cpp

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    CreatePartitionJob.cpp 4.03 KiB
    /* === This file is part of Calamares - <http://github.com/calamares> ===
     *
     *   Copyright 2014, Aurélien Gâteau <agateau@kde.org>
     *
     *   Calamares is free software: you can redistribute it and/or modify
     *   it under the terms of the GNU General Public License as published by
     *   the Free Software Foundation, either version 3 of the License, or
     *   (at your option) any later version.
     *
     *   Calamares is distributed in the hope that it will be useful,
     *   but WITHOUT ANY WARRANTY; without even the implied warranty of
     *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
     *   GNU General Public License for more details.
     *
     *   You should have received a copy of the GNU General Public License
     *   along with Calamares. If not, see <http://www.gnu.org/licenses/>.
     */
    
    #include <CreatePartitionJob.h>
    
    #include <utils/Logger.h>
    
    // CalaPM
    #include <backend/corebackend.h>
    #include <backend/corebackendmanager.h>
    #include <backend/corebackenddevice.h>
    #include <backend/corebackendpartition.h>
    #include <backend/corebackendpartitiontable.h>
    #include <core/device.h>
    #include <core/partition.h>
    #include <core/partitiontable.h>
    #include <fs/filesystem.h>
    #include <util/report.h>
    
    // Qt
    #include <QScopedPointer>
    
    CreatePartitionJob::CreatePartitionJob( Device* device, Partition* partition )
        : PartitionJob( partition )
        , m_device( device )
    {
    }
    
    QString
    CreatePartitionJob::prettyName() const
    {
        return tr( "Create partition (file system: %1, size: %2 MB) on %3." )
               .arg( m_partition->fileSystem().name() )
               .arg( m_partition->capacity() / 1024 / 1024 )
               .arg( m_device->name() );
    }
    
    Calamares::JobResult
    CreatePartitionJob::exec()
    {
        int step = 0;
        const qreal stepCount = 4;
    
        Report report( 0 );
        QString message = tr( "The installer failed to create partition on disk '%1'." ).arg( m_device->name() );
    
        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 );
        QString 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 );
        FileSystem& fs = m_partition->fileSystem();
        if ( fs.type() == FileSystem::Unformatted || fs.type() == FileSystem::Extended )
            return Calamares::JobResult::ok();
    
        if ( !fs.create( report, partitionPath ) )
        {
            return Calamares::JobResult::error(
                       tr( "The installer failed to create file system on partition %1." ).arg( partitionPath ),
                       report.toText()
                   );
        }
    
        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();
        return Calamares::JobResult::ok();
    }
    
    void
    CreatePartitionJob::updatePreview()
    {
        m_device->partitionTable()->removeUnallocated();
        m_partition->parent()->insert( m_partition );
        m_device->partitionTable()->updateUnallocated( *m_device );
    }