108 lines
2.5 KiB
C++
108 lines
2.5 KiB
C++
#ifndef PACKAGEMANAGEMENT_RESOLVEBUILDORDER_H
|
|
#define PACKAGEMANAGEMENT_RESOLVEBUILDORDER_H
|
|
|
|
#include <c++utilities/application/argumentparser.h>
|
|
|
|
#include <QObject>
|
|
#include <QString>
|
|
#include <QList>
|
|
|
|
#include <memory>
|
|
|
|
namespace RepoIndex {
|
|
|
|
class Manager;
|
|
class TaskInfo;
|
|
class Dependency;
|
|
class Package;
|
|
class PackageFinder;
|
|
|
|
class BuildOrderResolver : public QObject
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
~BuildOrderResolver();
|
|
|
|
QStringList resultNames();
|
|
bool hasFinished() const;
|
|
const QString &errorMessage() const;
|
|
|
|
public slots:
|
|
void findDependencies();
|
|
void printRelevantPackages();
|
|
void printResults();
|
|
void resolve();
|
|
|
|
signals:
|
|
void ready();
|
|
void resolvingFinished();
|
|
void resolvingFailed(const QString &message);
|
|
|
|
protected:
|
|
BuildOrderResolver(Manager &manager, bool addSourceOnlyDeps = false, bool requireSources = true);
|
|
Manager &manager();
|
|
QList<TaskInfo *> &tasks();
|
|
|
|
private:
|
|
void addError(const QString &errorMessage);
|
|
Package *findPackageForDependency(const Dependency &dependency, bool sourceRequired);
|
|
bool addDependenciesToTask(TaskInfo *task);
|
|
bool addDependenciesToTask(TaskInfo *task, const QList<const QList<Dependency> *> &dependencies);
|
|
void requestDependenciesToBeRequested();
|
|
|
|
Manager &m_manager;
|
|
QList<TaskInfo *> m_tasks;
|
|
QList<Dependency> m_dependenciesToBeRequested;
|
|
std::unique_ptr<PackageFinder> m_finder;
|
|
QList<TaskInfo *> m_results;
|
|
bool m_addSourceOnlyDeps;
|
|
bool m_requireSources;
|
|
bool m_hasFinished;
|
|
QString m_errorMessage;
|
|
};
|
|
|
|
/*!
|
|
* \brief Returns whether adding dependencies/resolving the build order has been finished.
|
|
* \remarks Also true when an error occured. In this case errorMessage() is not empty.
|
|
*/
|
|
inline bool BuildOrderResolver::hasFinished() const
|
|
{
|
|
return m_hasFinished;
|
|
}
|
|
|
|
/*!
|
|
* \brief Returns the error message if an error occured.
|
|
*/
|
|
inline const QString &BuildOrderResolver::errorMessage() const
|
|
{
|
|
return m_errorMessage;
|
|
}
|
|
|
|
/*!
|
|
* \brief Returns the manager used to find packages.
|
|
*/
|
|
inline Manager &BuildOrderResolver::manager()
|
|
{
|
|
return m_manager;
|
|
}
|
|
|
|
/*!
|
|
* \brief Returns the tasks.
|
|
*/
|
|
inline QList<TaskInfo *> &BuildOrderResolver::tasks()
|
|
{
|
|
return m_tasks;
|
|
}
|
|
|
|
class BuildOrderResolverCli : public BuildOrderResolver
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
BuildOrderResolverCli(Manager &manager, const ApplicationUtilities::StringVector &packages, bool addSourceOnlyDeps = false, bool requireSources = true);
|
|
int exec();
|
|
};
|
|
|
|
} // namespace PackageManagement
|
|
|
|
#endif // PACKAGEMANAGEMENT_RESOLVEBUILDORDER_H
|