#ifndef PACKAGEMANAGEMENT_RESOLVEBUILDORDER_H #define PACKAGEMANAGEMENT_RESOLVEBUILDORDER_H #include #include #include #include #include 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 Q_SLOTS: void findDependencies(); void printRelevantPackages(); void printResults(); void resolve(); Q_SIGNALS: void ready(); void resolvingFinished(); void resolvingFailed(const QString &message); protected: BuildOrderResolver(Manager &manager, bool addSourceOnlyDeps = false, bool requireSources = true); Manager &manager(); QList &tasks(); private: void addError(const QString &errorMessage); Package *findPackageForDependency(const Dependency &dependency, bool sourceRequired); bool addDependenciesToTask(TaskInfo *task); bool addDependenciesToTask(TaskInfo *task, const QList *> &dependencies); void requestDependenciesToBeRequested(); Manager &m_manager; QList m_tasks; QList m_dependenciesToBeRequested; std::unique_ptr m_finder; QList 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 &BuildOrderResolver::tasks() { return m_tasks; } class BuildOrderResolverCli : public BuildOrderResolver { Q_OBJECT public: BuildOrderResolverCli(Manager &manager, const std::vector &packages, bool addSourceOnlyDeps = false, bool requireSources = true); int exec(); }; } // namespace PackageManagement #endif // PACKAGEMANAGEMENT_RESOLVEBUILDORDER_H