summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbill-auger <mr.j.spam.me@gmail.com>2017-10-28 03:03:08 -0400
committerbill-auger <mr.j.spam.me@gmail.com>2017-12-01 21:55:38 -0500
commit4faab230b7a670c694c8d083a8d6df57105e2b0b (patch)
treeead4c48cac09f6f73e667dfa13d6095e604df2be
parent9ba3499211b2092f57020aef0823aa7d7bee0eaa (diff)
refactor
-rw-r--r--src/libcalamares/PacstrapCppJob.cpp128
-rw-r--r--src/libcalamares/PacstrapCppJob.h59
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 ;