diff options
author | bill-auger <mr.j.spam.me@gmail.com> | 2017-10-28 03:03:08 -0400 |
---|---|---|
committer | bill-auger <mr.j.spam.me@gmail.com> | 2017-12-01 21:55:38 -0500 |
commit | 4faab230b7a670c694c8d083a8d6df57105e2b0b (patch) | |
tree | ead4c48cac09f6f73e667dfa13d6095e604df2be | |
parent | 9ba3499211b2092f57020aef0823aa7d7bee0eaa (diff) |
refactor
-rw-r--r-- | src/libcalamares/PacstrapCppJob.cpp | 128 | ||||
-rw-r--r-- | src/libcalamares/PacstrapCppJob.h | 59 |
2 files changed, 117 insertions, 70 deletions
diff --git a/src/libcalamares/PacstrapCppJob.cpp b/src/libcalamares/PacstrapCppJob.cpp index 54bdffd6a..51f854e5d 100644 --- a/src/libcalamares/PacstrapCppJob.cpp +++ b/src/libcalamares/PacstrapCppJob.cpp @@ -33,9 +33,29 @@ const char* PacstrapCppJob::BASE_JOB_NAME = "Pacstrap Base C++ Job" ; const char* PacstrapCppJob::GUI_JOB_NAME = "Pacstrap Desktop C++ Job" ; const char* PacstrapCppJob::BASE_STATUS_MSG = "Installing root filesystem" ; const char* PacstrapCppJob::GUI_STATUS_MSG = "Installing graphical desktop environment" ; - - -/* PacstrapCppJob public instance methods */ +const qreal PacstrapCppJob::BASE_JOB_WEIGHT = 23.0 ; // progress-bar job weight (1.0 normal) +const qreal PacstrapCppJob::GUI_JOB_WEIGHT = 69.0 ; // progress-bar job weight (1.0 normal) +const QString PacstrapCppJob::ONLINE_CONF_FILENAME = "/etc/pacman-online.conf" ; +const QString PacstrapCppJob::OFFLINE_CONF_FILENAME = "/etc/pacman-offline.conf" ; +const QString PacstrapCppJob::IS_ONLINE_KEY = "hasInternet" ; +const QString PacstrapCppJob::TARGET_DEVICE_KEY = "target-device" ; +const QString PacstrapCppJob::SYSTEM_EXEC_FMT = "/bin/sh -c \"%1\"" ; +// const QString PacstrapCppJob::KEYRING_CMD = "pacman -Sy --noconfirm parabola-keyring && \ +// pacman-key --populate parabola && \ +// pacman-key --refresh-keys " ; +// const QString PacstrapCppJob::KEYRING_CMD = "pacman -Sy --noconfirm parabola-keyring" ; +const QString PacstrapCppJob::MKDIR_FMT = "mkdir %1 2> /dev/null" ; +const QString PacstrapCppJob::MOUNT_FMT = "mount %1 %2" ; +const QString PacstrapCppJob::CHROOT_PREP_FMT = "mkdir -m 0755 -p {%1,%2}" ; +const QString PacstrapCppJob::PACKAGES_SYNC_FMT = "pacman --print --config %1 --root %2 -Sy" ; +const QString PacstrapCppJob::LIST_PACKAGES_FMT = "pacman --print --config %1 --root %2 -S %3" ; +const QString PacstrapCppJob::UMOUNT_FMT = "umount %1" ; +const QString PacstrapCppJob::CONFIG_ERROR_MSG = "Invalid configuration map." ; +const QString PacstrapCppJob::TARGET_ERROR_MSG = "Target device for root filesystem is unspecified." ; +const QString PacstrapCppJob::CONFFILE_ERROR_MSG = "Pacman configuration not found: '%1'." ; + + +/* PacstrapCppJob public constructors/destructors */ PacstrapCppJob::PacstrapCppJob(QString job_name , QString status_msg , qreal job_weight , QObject* parent ) : @@ -57,64 +77,72 @@ printf("PacstrapCppJob::~PacstrapCppJob() '%s'\n" , jobName.toStdString().c_str( killTimer(this->guiTimerId) ; } + +/* PacstrapCppJob public getters/setters */ + void PacstrapCppJob::setConfigurationMap(const QVariantMap& config) { this->localStorage = config ; } -qreal PacstrapCppJob::getJobWeight() const { return this->jobWeight ; } +qreal PacstrapCppJob::getJobWeight() const { return this->jobWeight ; } -QString PacstrapCppJob::prettyName() const { return this->jobName ; } +QString PacstrapCppJob::prettyName() const { return this->jobName ; } -QString PacstrapCppJob::prettyStatusMessage() const { return this->statusMsg ; } +QString PacstrapCppJob::prettyStatusMessage() const { return this->statusMsg ; } -Calamares::JobResult PacstrapCppJob::exec() -{ -// Calamares::GlobalStorage *gs = Calamares::JobQueue::instance()->globalStorage(); -// foreach (const QString &key, gs->keys()) -// cDebug() << QString("[PACSTRAPCPP]: globalStorage[%1]=%2\n").arg( key, gs->value( key ).toString() ); -// QProcess::execute( "echo SKIPPING parabola-prepare.desc" ); +/* PacstrapCppJob public instance methods */ +Calamares::JobResult PacstrapCppJob::exec() +{ setTargetDevice() ; loadPackageList() ; - bool has_internet = this->globalStorage->value("hasInternet" ).toBool() ; - QString target_device = this->globalStorage->value("target-device").toString() ; - this->confFile = (has_internet) ? "/etc/pacman-online.conf" : "/etc/pacman-offline.conf" ; - - if (this->localStorage.empty() ) return Calamares::JobResult::error("Invalid configuration map.") ; - if (target_device.isEmpty() ) return Calamares::JobResult::error("Target device for root filesystem is unspecified.") ; - if (!QFile(this->confFile).exists()) return Calamares::JobResult::error(QString("Pacman configuration not found: '%1'.").arg(this->confFile)) ; - -// QString keyring_cmd = "/bin/sh -c \"pacman -Sy --noconfirm parabola-keyring && \ -// pacman-key --populate parabola && \ -// pacman-key --refresh-keys \""; -// QString keyring_cmd = "/bin/sh -c \"pacman -Sy --noconfirm parabola-keyring\""; - QString mkdir_cmd = QString("/bin/sh -c \"mkdir %1 2> /dev/null\"").arg(MOUNTPOINT) ; - QString mount_cmd = QString("/bin/sh -c \"mount %1 %2\"").arg(target_device , MOUNTPOINT) ; - QString chroot_init_cmd = QString("/bin/sh -c \"mkdir -m 0755 -p {%1,%2}\"").arg(PACKAGES_CACHE_DIR.absolutePath() , PACKAGES_METADATA_DIR.absolutePath()) ; - QString pacman_sync_cmd = QString("/bin/sh -c \"pacman --print --config %1 --root %2 -Sy\"").arg(this->confFile , MOUNTPOINT) ; - QString n_packages_cmd = QString("/bin/sh -c \"pacman --print --config %1 --root %2 -S %3\"").arg(this->confFile , MOUNTPOINT , this->packages) ; - QString umount_cmd = QString("/bin/sh -c \"umount %1\"").arg(target_device) ; - -// QProcess::execute(keyring_cmd) ; - QProcess::execute(mkdir_cmd) ; - QProcess::execute(mount_cmd) ; - QProcess::execute(chroot_init_cmd) ; - QProcess::execute(pacman_sync_cmd) ; - if (!this->packages.isEmpty() && setNPackages(n_packages_cmd) > 0) + bool has_internet = this->globalStorage->value(IS_ONLINE_KEY ).toBool() ; + QString target_device = this->globalStorage->value(TARGET_DEVICE_KEY).toString() ; + this->confFile = (has_internet) ? ONLINE_CONF_FILENAME : OFFLINE_CONF_FILENAME ; + + if (this->localStorage.empty() ) return JobErrorRetval(CONFIG_ERROR_MSG) ; + if (target_device.isEmpty() ) return JobErrorRetval(TARGET_ERROR_MSG) ; + if (!QFile(this->confFile).exists()) return JobErrorRetval(CONFFILE_ERROR_MSG.arg(this->confFile)) ; + +// QString keyring_cmd = KEYRING_CMD ; + QString mkdir_cmd = MKDIR_FMT .arg(MOUNTPOINT) ; + QString mount_cmd = MOUNT_FMT .arg(target_device , MOUNTPOINT) ; + QString chroot_init_cmd = CHROOT_PREP_FMT .arg(PACKAGES_CACHE_DIR .absolutePath() , + PACKAGES_METADATA_DIR.absolutePath() ) ; + QString pacman_sync_cmd = PACKAGES_SYNC_FMT.arg(this->confFile , MOUNTPOINT) ; + QString list_packages_cmd = LIST_PACKAGES_FMT.arg(this->confFile , MOUNTPOINT , this->packages) ; + QString umount_cmd = UMOUNT_FMT .arg(target_device) ; + +// ExecWithStatus(keyring_cmd) ; + ExecWithStatus(mkdir_cmd ) ; + ExecWithStatus(mount_cmd ) ; + ExecWithStatus(chroot_init_cmd) ; + ExecWithStatus(pacman_sync_cmd) ; + if (!this->packages.isEmpty() && setNPackages(list_packages_cmd) > 0) { // return Calamares::JobResult::error("just cause") ; QString exec_error_msg = chrootExec() ; - if (!exec_error_msg.isEmpty()) return Calamares::JobResult::error(exec_error_msg) ; + if (!exec_error_msg.isEmpty()) return JobErrorRetval(exec_error_msg) ; } else emit progress(this->jobWeight) ; - QProcess::execute(umount_cmd) ; + ExecWithStatus(umount_cmd) ; - return Calamares::JobResult::ok() ; + return JobSuccessRetval() ; } /* PacstrapCppJob protected class methods */ +Calamares::JobResult PacstrapCppJob::JobErrorRetval(QString error_msg) +{ + return Calamares::JobResult::error(error_msg) ; +} + +Calamares::JobResult PacstrapCppJob::JobSuccessRetval() +{ + return Calamares::JobResult::ok() ; +} + QString PacstrapCppJob::QListToString(const QVariantList& package_list) { QStringList result ; @@ -141,10 +169,10 @@ qint16 PacstrapCppJob::NPackagesInstalled() PACKAGES_METADATA_DIR.entryList(QDir::Dirs | QDir::NoDotAndDotDot).count() ) / 2 ; } -// QStringList PacstrapCppJob::ExecWithStatus(QString command_line) -// { -// return QProcess::execute(QString("/bin/sh -c \"%1\"").arg(command_line)) ; -// } +int PacstrapCppJob::ExecWithStatus(QString command_line) +{ + return QProcess::execute(QString(SYSTEM_EXEC_FMT).arg(command_line)) ; +} QStringList PacstrapCppJob::ExecWithOutput(QString command_line) { @@ -184,14 +212,14 @@ printf("[PACSTRAPCPP]: partition=[%s]\n" , result.join(',').toStdString().c_str( if (mountpoint == "/") printf("[PACSTRAPCPP]: target_device=%s\n" , device.toStdString().c_str()) ; } - this->globalStorage->insert("target-device" , target_device) ; + this->globalStorage->insert(TARGET_DEVICE_KEY , target_device) ; } -qint16 PacstrapCppJob::setNPackages(QString n_packages_cmd) +qint16 PacstrapCppJob::setNPackages(QString list_packages_cmd) { - QString new_packages = ExecWithOutput(n_packages_cmd).first() ; + QString new_packages = ExecWithOutput(list_packages_cmd).first() ; qint16 n_new_packages = new_packages.count(QChar::LineFeed) ; - this->nPackages = nPackagesInstalled() + n_new_packages ; + this->nPackages = NPackagesInstalled() + n_new_packages ; return this->nPackages ; } @@ -205,10 +233,10 @@ void PacstrapCppJob::updateProgress() { if (this->nPackages == 0) return ; - unsigned int progress_percent = (nPackagesInstalled() * 100) / this->nPackages ; + unsigned int progress_percent = (NPackagesInstalled() * 100) / this->nPackages ; // qreal progress_percent = nPackagesInstalled() / this->nPackages ; -printf("\n[PACSTRAPCPP]: n_packages=%d\n" , (int)nPackagesInstalled()) ; +printf("\n[PACSTRAPCPP]: n_packages=%d\n" , (int)NPackagesInstalled()) ; printf("[PACSTRAPCPP]: this->nPackages=%d\n" , (int)this->nPackages) ; printf("[PACSTRAPCPP]: progress_percent=%d\n" , progress_percent) ; diff --git a/src/libcalamares/PacstrapCppJob.h b/src/libcalamares/PacstrapCppJob.h index f3df05e5a..2b9b2adc1 100644 --- a/src/libcalamares/PacstrapCppJob.h +++ b/src/libcalamares/PacstrapCppJob.h @@ -35,8 +35,8 @@ class PacstrapCppJob : public Calamares::CppJob public: - explicit PacstrapCppJob(QString job_name , QString status_msg , - qreal job_weight = 1.0 , QObject* parent = nullptr ) ; + explicit PacstrapCppJob(QString job_name , QString status_msg , + qreal job_weight = 1.0 , QObject* parent = nullptr ) ; virtual ~PacstrapCppJob() ; void setConfigurationMap(const QVariantMap& config) override ; @@ -48,28 +48,47 @@ public: protected: - static QString QListToString (const QVariantList& package_list) ; - static qint16 NPackagesInstalled() ; - static QStringList ExecWithOutput(QString command_line) ; + static Calamares::JobResult JobErrorRetval (QString error_msg) ; + static Calamares::JobResult JobSuccessRetval () ; + static QString QListToString (const QVariantList& package_list) ; + static qint16 NPackagesInstalled() ; + static int ExecWithStatus (QString command_line) ; + static QStringList ExecWithOutput (QString command_line) ; virtual void loadPackageList() = 0 ; virtual QString chrootExec () = 0 ; - void setTargetDevice () ; - qint16 setNPackages (QString packages) ; - void timerEvent (QTimerEvent* event) override ; - void updateProgress () ; - - - static const QString MOUNTPOINT ; - static const QDir PACKAGES_CACHE_DIR ; - static const QDir PACKAGES_METADATA_DIR ; - static const char* BASE_JOB_NAME ; - static const char* GUI_JOB_NAME ; - static const char* BASE_STATUS_MSG ; - static const char* GUI_STATUS_MSG ; - static constexpr qreal BASE_JOB_WEIGHT = 23.0 ; // progress-bar job weight (1.0 normal) - static constexpr qreal GUI_JOB_WEIGHT = 69.0 ; // progress-bar job weight (1.0 normal) + void setTargetDevice() ; + qint16 setNPackages (QString packages) ; + void timerEvent (QTimerEvent* event) override ; + void updateProgress () ; + + + static const QString MOUNTPOINT ; + static const QDir PACKAGES_CACHE_DIR ; + static const QDir PACKAGES_METADATA_DIR ; + static const char* BASE_JOB_NAME ; + static const char* GUI_JOB_NAME ; + static const char* BASE_STATUS_MSG ; + static const char* GUI_STATUS_MSG ; + static const qreal BASE_JOB_WEIGHT ; + static const qreal GUI_JOB_WEIGHT ; + static const QString ONLINE_CONF_FILENAME ; + static const QString OFFLINE_CONF_FILENAME ; + static const QString IS_ONLINE_KEY ; + static const QString TARGET_DEVICE_KEY ; + static const QString SYSTEM_EXEC_FMT ; +// static const QString KEYRING_CMD ; +// static const QString KEYRING_CMD ; + static const QString MKDIR_FMT ; + static const QString MOUNT_FMT ; + static const QString CHROOT_PREP_FMT ; + static const QString PACKAGES_SYNC_FMT ; + static const QString LIST_PACKAGES_FMT ; + static const QString UMOUNT_FMT ; + static const QString CONFIG_ERROR_MSG ; + static const QString TARGET_ERROR_MSG ; + static const QString CONFFILE_ERROR_MSG ; QString jobName ; QString statusMsg ; |