Commit d00a84ec authored by Daniele Cocca's avatar Daniele Cocca

Completing the Akabei::Error::List transition; it now compiles.

parent 7c55b5fe
......@@ -33,6 +33,12 @@ class Error::Private
Package::List packages;
};
Error::Error()
: d( 0 )
{
}
Error::Error(Error::Type type, const QString& description, Operation* operation)
: d( new Private(type, description, operation) )
{
......
......@@ -11,6 +11,7 @@
#ifndef AKABEI_AKABEIERROR_H
#define AKABEI_AKABEIERROR_H
#include <QtCore/QMetaType>
#include <QtCore/QString>
#include <QtCore/QList>
#include "akabeipackage.h"
......@@ -25,6 +26,9 @@ class Operation;
*/
class Error
{
// needed by Qt to create nodes with default values
Error();
public:
/**
* \enum Type
......@@ -99,9 +103,11 @@ class Error
private:
class Private;
Private* const d;
Private* d;
};
}
Q_DECLARE_METATYPE(Akabei::Error::List)
#endif // AKABEI_AKABEIERROR_H
......@@ -25,7 +25,7 @@ bool priorityLessThan(Operation *o1, Operation *o2)
return o1->priority() < o2->priority();
}
void OperationRunnerPrivate::__k__errorsOccurred(const ErrorList &errs)
void OperationRunnerPrivate::__k__errorsOccurred(Error::List const& errs)
{
Q_Q(OperationRunner);
errors = errs;
......@@ -82,7 +82,7 @@ OperationRunner::OperationRunner(QObject *parent)
, d_ptr(new OperationRunnerPrivate(this))
{
qRegisterMetaType<OpsHash>();
qRegisterMetaType<ErrorList>();
qRegisterMetaType<Akabei::Error::List>();
qRegisterMetaType<Akabei::Operation::Phase>();
// Start the antiflicker
......@@ -151,7 +151,7 @@ void OperationRunner::clear()
d->operations.clear();
}
QList< Error* > OperationRunner::errors() const
Error::List OperationRunner::errors() const
{
Q_D(const OperationRunner);
return d->errors;
......@@ -189,7 +189,7 @@ void OperationRunner::validate()
this, SLOT(__k__errorsOccurred(ErrorList)));
connect(d->valThread.data(), SIGNAL(validationFinished(bool,OpsHash)),
this, SLOT(__k__validationFinished(bool,OpsHash)));
//d->valThread.data()->run();
QThreadPool::globalInstance()->start(d->valThread.data());
......
......@@ -23,7 +23,7 @@ class OperationRunnerPrivate;
* \class OperationRunner akabeioperationrunner.h "akabeioperationrunner.h"
*
* \brief This class is used to process operations.
*
*
* Use Backend::instance()->operationRunner() to access the global OperationRunner object.
* Then add all \link Akabei::Operation Operations \endlink you constructed, set processing options and validate it.
* If validated() returns sucessfully, use run() to process the queue of operations.
......@@ -61,7 +61,7 @@ public:
* @param operation the operation which gets removed
*/
void remove(Operation *operation);
/**
* Removes all operations from the queue
*/
......@@ -70,8 +70,8 @@ public:
/**
* @returns a list of errors which occurred during processing or validating
*/
QList<Akabei::Error*> errors() const;
Error::List errors() const;
/**
* Sets the processing options to be used by the operations
* @param options the processing options to be used, by default none
......@@ -81,14 +81,14 @@ public:
* @returns the processing options used by the operation runner
*/
ProcessingOptions processingOptions() const;
public slots:
/**
* Validates the queue.
* This does not only mean calling Operation::validate() on all operations,
* but also checking if there are conflicts on disk, dependency conflicts etc.
* When the validation finished \c validated gets emitted.
*
*
* @see phaseValidationStarted
* @see phaseValidationFinished
* @see validated
......@@ -97,7 +97,7 @@ public slots:
/**
* Runs Operation::run() on every operation in the queue, when possible concurrent.
* When the processing finished \c finished gets emitted.
*
*
* @see phaseStarted
* @see phaseFinished
* @see operationStarted
......@@ -168,7 +168,7 @@ Q_SIGNALS:
* There were errors during the execution.
* @param errors the errors which occurred
*/
void errorsOccurred(QList<Akabei::Error *> &errors);
void errorsOccurred(Error::List& errors);
/**
* The validation finished
......@@ -186,7 +186,7 @@ private:
OperationRunnerPrivate * const d_ptr;
Q_PRIVATE_SLOT(d_func(), void __k__errorsOccurred(ErrorList))
Q_PRIVATE_SLOT(d_func(), void __k__errorsOccurred(Error::List))
Q_PRIVATE_SLOT(d_func(), void __k__validationFinished(bool,OpsHash))
friend class BackendPrivate;
......
......@@ -18,7 +18,6 @@
#include <QtCore/QMetaType>
#include <QTime>
typedef QList< Akabei::Error* > ErrorList;
typedef QHash<Akabei::Operation::Phase, QList< Akabei::Operation* > > OpsHash;
namespace Akabei
......@@ -41,8 +40,8 @@ public:
QWeakPointer<ValidatorRunnable> valThread;
QWeakPointer<RunnerRunnable> runThread;
QList<Error*> errors;
Error::List errors;
ProcessingOptions processingOptions;
QTime antiFlicker;
......@@ -52,13 +51,12 @@ public:
void emitMessage(Akabei::Operation* op, const QString &message);
void emitStatus(Akabei::Operation* op, Operation::Status status);
void __k__errorsOccurred(const ErrorList&);
void __k__errorsOccurred(Error::List const&);
void __k__validationFinished(bool, const OpsHash&);
};
}
Q_DECLARE_METATYPE(ErrorList)
Q_DECLARE_METATYPE(OpsHash)
Q_DECLARE_METATYPE(Akabei::Operation::Phase)
......
......@@ -50,7 +50,7 @@ bool RunnerRunnable::runSingle(Operation* op)
}
opPr->concurrentRun();
// How did it go?
if (op->status() == Operation::StatusPerformed) {
// It's ok!
......@@ -97,9 +97,8 @@ void RunnerRunnable::processNextPhase()
bool canBeConcurrent = true;
foreach (Operation *op, m_operations[m_currentPhase]) {
if (op->status() != Operation::StatusReady) {
Error *error = new Error(Akabei::Error::AkabeiInternalError,
tr("One of the operations is not ready to perform yet!"));
manageErrors(QList<Error*>() << error);
manageErrors(Error::List() << Error(Error::AkabeiInternalError,
tr("One of the operations is not ready to perform yet!")));
return;
} else {
if (!op->canBeConcurrent()) {
......@@ -108,13 +107,13 @@ void RunnerRunnable::processNextPhase()
}
}
// Ok, now let's run the hell out of the ops.
QList<Error*> errors;
Error::List errors;
if (canBeConcurrent) {
errors = runConcurrent(m_operations[m_currentPhase]);
} else {
errors = runSequential(m_operations[m_currentPhase]);
}
emit phaseFinished(m_currentPhase);
if (errors.isEmpty()) {
......@@ -139,9 +138,8 @@ void RunnerRunnable::processNextPhase()
break;
default:
// Urgh.. what?
Error *error = new Error(Akabei::Error::AkabeiInternalError,
tr("An internal error occurred during running the transaction"));
manageErrors(QList<Error*>() << error);
manageErrors(Error::List() << Error(Error::AkabeiInternalError,
tr("An internal error occurred during running the transaction")));
return;
break;
}
......@@ -153,7 +151,7 @@ void RunnerRunnable::processNextPhase()
}
}
QList< Error* > RunnerRunnable::runConcurrent(const QList< Operation* >& ops)
Error::List RunnerRunnable::runConcurrent(const QList< Operation* >& ops)
{
foreach (Operation * op, ops)
emit operationStarted(op);
......@@ -163,13 +161,13 @@ QList< Error* > RunnerRunnable::runConcurrent(const QList< Operation* >& ops)
QFuture< void > future = QtConcurrent::map(ops, RunnerRunnable::runSingle);
s_runFutureWatcher.data()->setFuture(future);
e.exec();
foreach (Operation * op, ops)
emit operationFinished(op);
if (s_runFutureWatcher.data()->isCanceled()) {
// Manage errors...
QList< Error* > errors;
Error::List errors;
foreach (Operation *op, ops) {
errors << op->errors();
}
......@@ -179,10 +177,10 @@ QList< Error* > RunnerRunnable::runConcurrent(const QList< Operation* >& ops)
s_runFutureWatcher.data()->deleteLater();
// All good
return QList< Error* >();
return Error::List();
}
QList< Error* > RunnerRunnable::runSequential(const QList< Operation* >& ops)
Error::List RunnerRunnable::runSequential(const QList< Operation* >& ops)
{
foreach (Operation *op, ops) {
emit operationStarted(op);
......@@ -190,14 +188,14 @@ QList< Error* > RunnerRunnable::runSequential(const QList< Operation* >& ops)
emit operationFinished(op);
if (!success) {
if (op->errors().isEmpty())
return QList<Error*>() << new Error(Error::UnknownError, tr("An error occurred, but no further information was given."), op);
return Error::List() << Error(Error::UnknownError, tr("An error occurred, but no further information was given."), op);
return op->errors();
}
}
return QList< Error* >();
return Error::List();
}
void RunnerRunnable::manageErrors(const QList< Error* >& errors)
void RunnerRunnable::manageErrors(Error::List const& errors)
{
emit errorsOccurred(errors);
emit runFinished(false);
......
......@@ -16,6 +16,7 @@
#include <QtCore/QWeakPointer>
#include <QtCore/QRunnable>
#include "akabeierror.h"
#include "akabeioperation.h"
#include "akabeioperationrunner_p.h"
......@@ -36,19 +37,19 @@ class RunnerRunnable : public QObject, public QRunnable
virtual void run();
Q_SIGNALS:
void errorsOccurred(const ErrorList &errors);
void errorsOccurred(Error::List const& errors);
void runFinished(bool success);
void phaseStarted(Akabei::Operation::Phase phase);
void phaseFinished(Akabei::Operation::Phase phase);
void operationStarted(Akabei::Operation *operation);
void operationFinished(Akabei::Operation *operation);
private:
void processNextPhase();
QList<Error*> runConcurrent(const QList< Operation* > &ops);
QList<Error*> runSequential(const QList< Operation* > &ops);
Error::List runConcurrent(const QList< Operation* > &ops);
Error::List runSequential(const QList< Operation* > &ops);
static bool runSingle(Operation *op);
void manageErrors(const QList<Error*> &errors);
void manageErrors(Error::List const& errors);
private:
QHash<Operation::Phase, QList< Operation* > > m_operations;
......
......@@ -29,7 +29,7 @@
#define ERRORS_CHECKPOINT() if (!errors.isEmpty()) { \
manageErrors(errors); \
return; }
static QWeakPointer<QFutureWatcher< void > > s_validateFutureWatcher;
static Akabei::ProcessingOptions s_options;//FIXME: I think we can put all processingoptions into operations only!
......@@ -68,7 +68,7 @@ void concurrentValidate(Operation* op)
{
ValidatorRunnable::operationPrivateProxy(op)->setProcessingOptions(s_options);
ValidatorRunnable::operationPrivateProxy(op)->concurrentValidate();
// How did it go?
if (op->status() == Operation::StatusReady) {
// It's ok!
......@@ -149,9 +149,8 @@ void ValidatorRunnable::processNextPhase()
break;
default:
// Urgh.. what?
Error *error = new Error(Akabei::Error::AkabeiInternalError,
tr("An internal error occurred during validation"));
manageErrors(QList<Error*>() << error);
manageErrors(Error::List() << Error(Error::AkabeiInternalError,
tr("An internal error occurred during validation")));
return;
break;
}
......@@ -167,18 +166,18 @@ void ValidatorRunnable::processNextPhase()
QFuture< void > future = QtConcurrent::map(processOps, concurrentValidate);
s_validateFutureWatcher.data()->setFuture(future);
e.exec();
QList<Error*> errors;
Error::List errors;
if (s_validateFutureWatcher.data()->isCanceled()) {
// Manage errors...
foreach (Operation *op, processOps) {
errors << op->errors();
}
}
s_validateFutureWatcher.data()->deleteLater();
// Good. Any errors?
ERRORS_CHECKPOINT()
......@@ -192,10 +191,11 @@ void ValidatorRunnable::processNextPhase()
processTargetNames[target] = op;
} else {
// Problem. There are two operations trying to add the same target.
Error *error = new Error(Akabei::Error::DuplicateTargetError,
tr("The target %1 is being added by %2 and %3")
.arg(target).arg(targetNames[target]->targetName()).arg(op->targetName()));
errors << error;
errors << Error(Error::DuplicateTargetError,
tr("The target %1 is being added by %2 and %3")
.arg(target)
.arg(targetNames[target]->targetName())
.arg(op->targetName()));
}
}
}
......@@ -294,14 +294,13 @@ void ValidatorRunnable::processNextPhase()
foreach (const QString &uD, unresolvableDeps) {
// failure.
Error *error = new Error(Akabei::Error::UnresolvableDependenciesError,
tr("A dependency is not resolvable: %1").arg(uD));
errors << error;
errors << Error(Error::UnresolvableDependenciesError,
tr("A dependency is not resolvable: %1").arg(uD));
}
// Good. Any errors?
ERRORS_CHECKPOINT()
if (!missingDeps.isEmpty()) {
// Do a early recurse
// TODO: Add missing targets here.
......@@ -326,10 +325,11 @@ void ValidatorRunnable::processNextPhase()
// It's fine
continue;
}
// Problem, FS conflict.
Error *error = new Error(Akabei::Error::FilesystemConflictError,
tr("%1 already exists in the filesystem").arg(rootDir.absoluteFilePath(target)));
errors << error;
errors << Error(Error::FilesystemConflictError,
tr("%1 already exists in the filesystem")
.arg(rootDir.absoluteFilePath(target)));
}
}
foreach (const QString &target, op->conflictingTargets()) {
......@@ -339,21 +339,20 @@ void ValidatorRunnable::processNextPhase()
// Ok, then it's fine
} else {
// Problem, attempting to install a package conflicting with something in the transaction.
Error *error = new Error(Akabei::Error::PackageConflictError,
tr("%1 is about to be installed, but conflicts with %2, which is being "
"installed as well.").arg(target).arg(op->targetName()));
errors << error;
errors << Error(Error::PackageConflictError,
tr("%1 is about to be installed, but conflicts with %2, which is being installed as well.")
.arg(target)
.arg(op->targetName()));
}
}
// Now check the local database
foreach (Package *p, Backend::instance()->localDatabase()->queryPackages(queryFromName(target))) {
if (p->name() == target) {
// Problem, trying to install a package conflicting with an installed package
Error *error = new Error(Akabei::Error::PackageConflictError,
tr("%1 is about to be installed, but conflicts with %2, which is installed")
.arg(op->targetName())
.arg(Backend::instance()->localDatabase()->queryPackages(queryFromName(target)).first()->name()));
errors << error;
errors << Error(Error::PackageConflictError,
tr("%1 is about to be installed, but conflicts with %2, which is installed")
.arg(op->targetName())
.arg(Backend::instance()->localDatabase()->queryPackages(queryFromName(target)).first()->name()));
}
}
}
......@@ -379,9 +378,8 @@ void ValidatorRunnable::processNextPhase()
seenAndValidated.insert(s);
} else {
// Real conflict here
Error *error = new Error(Akabei::Error::FilesystemConflictError,
tr("%1 is contained in more than one package").arg(s));
errors << error;
errors << Error(Error::FilesystemConflictError,
tr("%1 is contained in more than one package").arg(s));
}
continue;
}
......@@ -409,10 +407,10 @@ void ValidatorRunnable::processNextPhase()
// Check also that the package itself is not being removed and a target is not being added
if (!targetRemovals.contains(p->name())) {
// Problem, attempting to remove a package which some installed packages depend on.
Error *error = new Error(Akabei::Error::UnresolvableDependenciesError,
tr("%1 depends on %2, which is being removed")
.arg(p->name()).arg(target));
errors << error;
errors << Error(Error::UnresolvableDependenciesError,
tr("%1 depends on %2, which is being removed")
.arg(p->name())
.arg(target));;
}
}
}
......@@ -425,11 +423,11 @@ void ValidatorRunnable::processNextPhase()
processNextPhase();
}
void ValidatorRunnable::manageErrors(const QList< Error* >& errors)
void ValidatorRunnable::manageErrors(Error::List const& errors)
{
emit errorsOccurred(errors);
emit validationFinished(false, QHash<Operation::Phase, QList< Operation* > >());
}
}
......
......@@ -11,6 +11,7 @@
#ifndef AKABEI_AKABEIVALIDATORRUNNABLE_P_H
#define AKABEI_AKABEIVALIDATORRUNNABLE_P_H
#include "akabeierror.h"
#include "akabeioperation.h"
#include "akabeioperationrunner_p.h"
......@@ -18,7 +19,6 @@
#include <QtCore/QHash>
namespace Akabei {
class Error;
class OperationPrivate;
/*
......@@ -43,7 +43,7 @@ class ValidatorRunnable : public QObject, public QRunnable
virtual void run();
Q_SIGNALS:
void errorsOccurred(const ErrorList &errors);
void errorsOccurred(Error::List const& errors);
void validationFinished(bool success, const OpsHash &newops);
private Q_SLOTS:
......@@ -52,7 +52,7 @@ class ValidatorRunnable : public QObject, public QRunnable
private:
void processNextPhase();
QList< Operation* > joinOperations(Operation *op, bool shouldBeReady);
void manageErrors(const QList<Error*> &errors);
void manageErrors(Error::List const& errors);
void increasePriority(Operation *parent, Operation *toIncrease);
private:
......
......@@ -24,12 +24,12 @@ class PlainHookOperation::Private
public:
Private(PlainHookOperation * op) : q(op) {}
~Private() {}
void process();
void slotErrors(QList<Akabei::Error*> errors);
void slotErrors(Error::List errors);
void slotFinished(bool fin);
void slotMessage(const QString &mes);
PlainHookOperation *q;
QSet<Hook*> hooks;
QSet<Hook*>::iterator it;
......@@ -101,16 +101,16 @@ void PlainHookOperation::Private::process()
return;
}
QString root = Config::instance()->root();
ChrootedProcess * process = new ChrootedProcess(q, root);
q->connect(process, SIGNAL(errorsOccured(QList<Akabei::Error*>)), SLOT(slotErrors(QList<Akabei::Error*>)), Qt::DirectConnection);
q->connect(process, SIGNAL(errorsOccured(Error::List)), SLOT(slotErrors(Error::List)), Qt::DirectConnection);
q->connect(process, SIGNAL(scriptFinished(bool)), SLOT(slotFinished(bool)), Qt::DirectConnection);
q->connect(process, SIGNAL(addMessage(QString)), SLOT(slotMessage(QString)), Qt::DirectConnection);
qDebug() << "Run" << QString("sh %1").arg((*it)->path());
process->run(QString("sh %1").arg((*it)->path()));
}
void PlainHookOperation::Private::slotErrors(QList< Error* > errors)
void PlainHookOperation::Private::slotErrors(Error::List errors)
{
q->setErrors(errors);
}
......
......@@ -21,9 +21,9 @@ class AKABEICORESHARED_EXPORT PlainHookOperation : public QObject, public Operat
Q_OBJECT
public:
virtual ~PlainHookOperation();
static PlainHookOperation * instance();
void add(Hook* hook);
void add(const QList<Hook*> &hooks);
......@@ -37,8 +37,8 @@ class AKABEICORESHARED_EXPORT PlainHookOperation : public QObject, public Operat
Private * const d;
friend class ChrootedProcess;
Q_PRIVATE_SLOT(d, void slotErrors(QList<Akabei::Error*>));
Q_PRIVATE_SLOT(d, void slotErrors(Error::List));
Q_PRIVATE_SLOT(d, void slotFinished(bool));
Q_PRIVATE_SLOT(d, void slotMessage(QString));
};
......
......@@ -64,13 +64,13 @@ PlainInstallOperation::~PlainInstallOperation()
void PlainInstallOperation::run()
{
OperationUtils util;
if (!(processingOptions() & Akabei::DatabaseOnly)) {
if (!util.validatePackage(d->package)) {
setErrors(QList<Akabei::Error *>() << new Akabei::Error(Akabei::Error::UnknownError, util.errorMessage(), this));
setErrors(Error::List() << Error(Error::UnknownError, util.errorMessage(), this));
setFinished(false);
}
// Run it.
QDir currentDir = QDir::current();
ArchiveHandler handle(d->package->pathToArchive());
......@@ -78,18 +78,18 @@ void PlainInstallOperation::run()
// libarchive requires this for extracting hard links.
chdir(Config::instance()->root().toUtf8().data());
QMap<QString, QString> backup = d->package->backupFiles();
qint64 totalsize = handle.allEntriesSize();
qint64 partialsize = 0;
foreach (QString entry, handle.entries()) {
QDir entryDir(entry);
QString newPath = util.getExtractionPath(entry);
foreach (QString message, util.messages()) {
addMessage(message);
}
if (backup.contains(entry) && QFile::exists(entry)) {
QString file = Config::instance()->rootDir().absoluteFilePath(entry);
bool done = QFile::rename(file, file + ".akabeisave");
......@@ -103,24 +103,24 @@ void PlainInstallOperation::run()
"There was probably an existing old configuration file in that location already.").arg(file + ".akabeisave"));
}
}
partialsize += handle.entrySize(entry);
int percent;
if (d->package->size() != 0) {
percent = (int)((partialsize * 100) / totalsize);
percent = (int)((partialsize * 100) / totalsize);
}
setProgress(percent);
handle.extract(entry, newPath, processingOptions().testFlag(Akabei::Force));
}
// Restore the old cwd is we have it.
if (currentDir.exists()) {
chdir(currentDir.absolutePath().toUtf8().data());
}
} catch (ArchiveException& e) {
setErrors(QList<Akabei::Error*>() << new Akabei::Error(Akabei::Error::UnknownError, QObject::tr("Could not open package file."), this));
setErrors(Error::List() << Error(Error::UnknownError, QObject::tr("Could not open package file."), this));
setFinished(false);
return;
}
......@@ -143,7 +143,7 @@ void PlainInstallOperation::run()
int ret = Helpers::QueryPerformer::beginTransaction(Backend::instance()->localDatabase());
if (ret != SQLITE_OK) {
// Problems...
setErrors(QList<Akabei::Error*>() << new Akabei::Error(Akabei::Error::DatabaseError, QObject::tr("Could not begin database transaction!"), this));
setErrors(Error::List() << Error(Error::DatabaseError, QObject::tr("Could not begin database transaction!"), this));
setFinished(false);
return;
}
......@@ -154,7 +154,7 @@ void PlainInstallOperation::run()
if (ret != SQLITE_OK) {
// Problems...
Helpers::QueryPerformer::rollbackTransaction(Backend::instance()->localDatabase());
setErrors(QList<Akabei::Error*>() << new Akabei::Error(Akabei::Error::DatabaseError, QObject::tr("Could not add package to database!"), this));
setErrors(Error::List() << Error(Error::DatabaseError, QObject::tr("Could not add package to database!"), this));
setFinished(false);
return;
}
......@@ -164,7 +164,7 @@ void PlainInstallOperation::run()
if (ret != SQLITE_OK) {
// Problems...
Helpers::QueryPerformer::rollbackTransaction(Backend::instance()->localDatabase());
setErrors(QList<Akabei::Error*>() << new Akabei::Error(Akabei::Error::DatabaseError, QObject::tr("Could not add files to database!"), this));
setErrors(Error::List() << Error(Error::DatabaseError, QObject::tr("Could not add files to database!"), this));
setFinished(false);
return;
}
......@@ -175,7 +175,7 @@ void PlainInstallOperation::run()
if (ret != SQLITE_OK) {
// Problems...
Helpers::QueryPerformer::rollbackTransaction(Backend::instance()->localDatabase());
setErrors(QList<Akabei::Error*>() << new Akabei::Error(Akabei::Error::DatabaseError, QObject::tr("Could not add scriptlet to database!"), this));
setErrors(Error::List() << Error(Error::DatabaseError, QObject::tr("Could not add scriptlet to database!"), this));
setFinished(false);
return;
}
......@@ -186,7 +186,7 @@ void PlainInstallOperation::run()
if (ret != SQLITE_OK) {
// Problems...
Helpers::QueryPerformer::rollbackTransaction(Backend::instance()->localDatabase());
setErrors(QList<Akabei::Error*>() << new Akabei::Error(Akabei::Error::DatabaseError, QObject::tr("Could not commit the transaction!"), this));
setErrors(Error::List() << Error(Error::DatabaseError, QObject::tr("Could not commit the transaction!"), this));
setFinished(false);
return;
}
......@@ -212,14 +212,14 @@ void PlainInstallOperation::validate()
{
// Add conflicts.
setConflictingTargets(d->package->conflictsWith());
if (!(processingOptions().testFlag(Akabei::SkipDependencies))) {
// Add additional targets.
QStringList targets = QStringList() << d->package->name() << Helpers::unversionedTargets(d->package->provides());
targets.removeDuplicates();
setTargetAdditions(targets);
}
if (!(processingOptions().testFlag(Akabei::DatabaseOnly))) {
// Now let’s set the conflicting targets & stuff.
// Since this is an installation, we’re adding stuff to the filesystem.
......