From d08325d3d08bd856b0e5abc742a48a74ff01606b Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Thu, 20 Jun 2019 11:35:46 +0200 Subject: [PATCH] [libcalamares] Move mount to the partition service - Move mount() out of CalamaresUtils::System and into the partitioning service. - Adjust PythonJobApi (only consumer of that service). --- src/libcalamares/CMakeLists.txt | 1 + src/libcalamares/PythonJobApi.cpp | 9 +-- src/libcalamares/partition/Mount.cpp | 77 +++++++++++++++++++ src/libcalamares/partition/Mount.h | 50 ++++++++++++ .../utils/CalamaresUtilsSystem.cpp | 39 ---------- src/libcalamares/utils/CalamaresUtilsSystem.h | 17 ---- 6 files changed, 132 insertions(+), 61 deletions(-) create mode 100644 src/libcalamares/partition/Mount.cpp create mode 100644 src/libcalamares/partition/Mount.h diff --git a/src/libcalamares/CMakeLists.txt b/src/libcalamares/CMakeLists.txt index 174989b35..0ab2d6837 100644 --- a/src/libcalamares/CMakeLists.txt +++ b/src/libcalamares/CMakeLists.txt @@ -36,6 +36,7 @@ set( libSources locale/Lookup.cpp # Partition service + partition/Mount.cpp partition/PartitionSize.cpp partition/Sync.cpp diff --git a/src/libcalamares/PythonJobApi.cpp b/src/libcalamares/PythonJobApi.cpp index 8e8b8b2ab..bb1bee432 100644 --- a/src/libcalamares/PythonJobApi.cpp +++ b/src/libcalamares/PythonJobApi.cpp @@ -19,14 +19,14 @@ #include "PythonJobApi.h" +#include "GlobalStorage.h" +#include "JobQueue.h" #include "PythonHelper.h" +#include "partition/Mount.h" #include "utils/Logger.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/String.h" -#include "GlobalStorage.h" -#include "JobQueue.h" - #include #include #include @@ -63,8 +63,7 @@ mount( const std::string& device_path, const std::string& filesystem_name, const std::string& options ) { - return CalamaresUtils::System::instance()-> - mount( QString::fromStdString( device_path ), + return CalamaresUtils::Partition::mount( QString::fromStdString( device_path ), QString::fromStdString( mount_point ), QString::fromStdString( filesystem_name ), QString::fromStdString( options ) ); diff --git a/src/libcalamares/partition/Mount.cpp b/src/libcalamares/partition/Mount.cpp new file mode 100644 index 000000000..9efbe4182 --- /dev/null +++ b/src/libcalamares/partition/Mount.cpp @@ -0,0 +1,77 @@ +/* === This file is part of Calamares - === + * + * Copyright 2014, Teo Mrnjavac + * Copyright 2017-2019, Adriaan de Groot + * + * 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 . + */ + +#include "Mount.h" + +#include "utils/CalamaresUtilsSystem.h" +#include "utils/Logger.h" + +#include + +namespace CalamaresUtils +{ +namespace Partition +{ + +int +mount( const QString& devicePath, const QString& mountPoint, const QString& filesystemName, const QString& options ) +{ + if ( devicePath.isEmpty() || mountPoint.isEmpty() ) + { + if ( devicePath.isEmpty() ) + { + cWarning() << "Can't mount an empty device."; + } + if ( mountPoint.isEmpty() ) + { + cWarning() << "Can't mount on an empty mountpoint."; + } + + return static_cast< int >( ProcessResult::Code::NoWorkingDirectory ); + } + + QDir mountPointDir( mountPoint ); + if ( !mountPointDir.exists() ) + { + bool ok = mountPointDir.mkpath( mountPoint ); + if ( !ok ) + { + cWarning() << "Could not create mountpoint" << mountPoint; + return static_cast< int >( ProcessResult::Code::NoWorkingDirectory ); + } + } + + QStringList args = { "mount", devicePath, mountPoint }; + + if ( !filesystemName.isEmpty() ) + { + args << "-t" << filesystemName; + } + if ( !options.isEmpty() ) + { + args << "-o" << options; + } + + auto r = CalamaresUtils::System::instance()->runCommand( + CalamaresUtils::System::RunLocation::RunInHost, args, QString(), QString(), 10 ); + return r.getExitCode(); +} + +} // namespace Partition +} // namespace CalamaresUtils diff --git a/src/libcalamares/partition/Mount.h b/src/libcalamares/partition/Mount.h new file mode 100644 index 000000000..18f65ef76 --- /dev/null +++ b/src/libcalamares/partition/Mount.h @@ -0,0 +1,50 @@ +/* === This file is part of Calamares - === + * + * Copyright 2014, Teo Mrnjavac + * Copyright 2017-2019, Adriaan de Groot + * + * 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 . + */ + +#ifndef PARTITION_MOUNT_H +#define PARTITION_MOUNT_H + +#include "DllMacro.h" + +#include + +namespace CalamaresUtils +{ +namespace Partition +{ + +/** + * Runs the mount utility with the specified parameters. + * @param devicePath the path of the partition to mount. + * @param mountPoint the full path of the target mount point. + * @param filesystemName the name of the filesystem (optional). + * @param options any additional options as passed to mount -o (optional). + * @returns the program's exit code, or: + * Crashed = QProcess crash + * FailedToStart = QProcess cannot start + * NoWorkingDirectory = bad arguments + */ +DLLEXPORT int mount( const QString& devicePath, + const QString& mountPoint, + const QString& filesystemName = QString(), + const QString& options = QString() ); +} // namespace Partition +} // namespace CalamaresUtils + +#endif diff --git a/src/libcalamares/utils/CalamaresUtilsSystem.cpp b/src/libcalamares/utils/CalamaresUtilsSystem.cpp index 5990fbc42..540555e8b 100644 --- a/src/libcalamares/utils/CalamaresUtilsSystem.cpp +++ b/src/libcalamares/utils/CalamaresUtilsSystem.cpp @@ -107,45 +107,6 @@ System::instance() } -int -System::mount( const QString& devicePath, - const QString& mountPoint, - const QString& filesystemName, - const QString& options ) -{ - if ( devicePath.isEmpty() || mountPoint.isEmpty() ) - { - if ( devicePath.isEmpty() ) - cWarning() << "Can't mount an empty device."; - if ( mountPoint.isEmpty() ) - cWarning() << "Can't mount on an empty mountpoint."; - - return static_cast(ProcessResult::Code::NoWorkingDirectory); - } - - QDir mountPointDir( mountPoint ); - if ( !mountPointDir.exists() ) - { - bool ok = mountPointDir.mkpath( mountPoint ); - if ( !ok ) - { - cWarning() << "Could not create mountpoint" << mountPoint; - return static_cast(ProcessResult::Code::NoWorkingDirectory); - } - } - - QString program( "mount" ); - QStringList args = { devicePath, mountPoint }; - - if ( !filesystemName.isEmpty() ) - args << "-t" << filesystemName; - - if ( !options.isEmpty() ) - args << "-o" << options; - - return QProcess::execute( program, args ); -} - ProcessResult System::runCommand( System::RunLocation location, diff --git a/src/libcalamares/utils/CalamaresUtilsSystem.h b/src/libcalamares/utils/CalamaresUtilsSystem.h index c17d52e93..8f25e1ed8 100644 --- a/src/libcalamares/utils/CalamaresUtilsSystem.h +++ b/src/libcalamares/utils/CalamaresUtilsSystem.h @@ -94,23 +94,6 @@ public: static System* instance(); - /** - * Runs the mount utility with the specified parameters. - * @param devicePath the path of the partition to mount. - * @param mountPoint the full path of the target mount point. - * @param filesystemName the name of the filesystem (optional). - * @param options any additional options as passed to mount -o (optional). - * @returns the program's exit code, or: - * Crashed = QProcess crash - * FailedToStart = QProcess cannot start - * NoWorkingDirectory = bad arguments - */ - DLLEXPORT int mount( const QString& devicePath, - const QString& mountPoint, - const QString& filesystemName = QString(), - const QString& options = QString() ); - - /** (Typed) Boolean describing where a particular command should be run, * whether in the host (live) system or in the (chroot) target system. */