2015-08-19 02:13:28 +02:00
|
|
|
#ifndef PACKAGEMANAGEMENT_RESOLVEBUILDORDER_H
|
|
|
|
#define PACKAGEMANAGEMENT_RESOLVEBUILDORDER_H
|
|
|
|
|
|
|
|
#include <c++utilities/application/argumentparser.h>
|
|
|
|
|
2015-12-25 01:58:19 +01:00
|
|
|
#include <QObject>
|
2015-08-19 02:13:28 +02:00
|
|
|
#include <QString>
|
|
|
|
#include <QList>
|
|
|
|
|
2015-12-25 01:58:19 +01:00
|
|
|
#include <memory>
|
|
|
|
|
2015-09-05 17:25:05 +02:00
|
|
|
namespace RepoIndex {
|
2015-08-19 02:13:28 +02:00
|
|
|
|
|
|
|
class Manager;
|
|
|
|
class TaskInfo;
|
2015-09-05 17:25:05 +02:00
|
|
|
class Dependency;
|
2015-12-25 01:58:19 +01:00
|
|
|
class Package;
|
|
|
|
class PackageFinder;
|
2015-08-19 02:13:28 +02:00
|
|
|
|
2015-12-25 01:58:19 +01:00
|
|
|
class BuildOrderResolver : public QObject
|
2015-08-19 02:13:28 +02:00
|
|
|
{
|
2015-12-25 01:58:19 +01:00
|
|
|
Q_OBJECT
|
2015-08-19 02:13:28 +02:00
|
|
|
public:
|
2015-12-25 01:58:19 +01:00
|
|
|
~BuildOrderResolver();
|
|
|
|
|
|
|
|
QStringList resultNames();
|
2016-01-03 00:22:48 +01:00
|
|
|
bool hasFinished() const;
|
|
|
|
const QString &errorMessage() const;
|
2015-08-19 02:13:28 +02:00
|
|
|
|
2020-03-08 14:12:22 +01:00
|
|
|
public Q_SLOTS:
|
2016-01-03 00:22:48 +01:00
|
|
|
void findDependencies();
|
2015-12-25 01:58:19 +01:00
|
|
|
void printRelevantPackages();
|
|
|
|
void printResults();
|
|
|
|
void resolve();
|
|
|
|
|
2020-03-09 18:45:47 +01:00
|
|
|
Q_SIGNALS:
|
2015-12-25 01:58:19 +01:00
|
|
|
void ready();
|
|
|
|
void resolvingFinished();
|
|
|
|
void resolvingFailed(const QString &message);
|
|
|
|
|
2016-01-03 00:22:48 +01:00
|
|
|
protected:
|
2016-02-20 03:00:34 +01:00
|
|
|
BuildOrderResolver(Manager &manager, bool addSourceOnlyDeps = false, bool requireSources = true);
|
2016-01-03 00:22:48 +01:00
|
|
|
Manager &manager();
|
|
|
|
QList<TaskInfo *> &tasks();
|
2015-08-19 02:13:28 +02:00
|
|
|
|
|
|
|
private:
|
2016-01-03 00:22:48 +01:00
|
|
|
void addError(const QString &errorMessage);
|
2016-02-10 21:09:20 +01:00
|
|
|
Package *findPackageForDependency(const Dependency &dependency, bool sourceRequired);
|
2015-12-25 01:58:19 +01:00
|
|
|
bool addDependenciesToTask(TaskInfo *task);
|
2016-01-03 00:22:48 +01:00
|
|
|
bool addDependenciesToTask(TaskInfo *task, const QList<const QList<Dependency> *> &dependencies);
|
2015-12-25 01:58:19 +01:00
|
|
|
void requestDependenciesToBeRequested();
|
|
|
|
|
|
|
|
Manager &m_manager;
|
2015-12-08 00:24:45 +01:00
|
|
|
QList<TaskInfo *> m_tasks;
|
|
|
|
QList<Dependency> m_dependenciesToBeRequested;
|
2015-12-25 01:58:19 +01:00
|
|
|
std::unique_ptr<PackageFinder> m_finder;
|
|
|
|
QList<TaskInfo *> m_results;
|
|
|
|
bool m_addSourceOnlyDeps;
|
2016-02-20 03:00:34 +01:00
|
|
|
bool m_requireSources;
|
2016-01-03 00:22:48 +01:00
|
|
|
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:
|
2016-05-26 02:29:56 +02:00
|
|
|
BuildOrderResolverCli(Manager &manager, const std::vector<const char *> &packages, bool addSourceOnlyDeps = false, bool requireSources = true);
|
2016-01-03 00:22:48 +01:00
|
|
|
int exec();
|
2015-08-19 02:13:28 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
} // namespace PackageManagement
|
|
|
|
|
|
|
|
#endif // PACKAGEMANAGEMENT_RESOLVEBUILDORDER_H
|