6ef57ae2a9
* BSolver/LibsolvSolver: Add FullSync() method. It uses libsolv's SOLVER_DISTUPGRADE mode. * BPackageManager: Add FullSync() using the new solver mode. * pkgman: Add full-sync command. The new command is similar to the update command without arguments, just more aggressive, allowing downgrading or even removal of packages, to match the state of the repositories. Just like "update" it doesn't work properly yet.
103 lines
2.5 KiB
C++
103 lines
2.5 KiB
C++
/*
|
|
* Copyright 2013, Haiku, Inc. All Rights Reserved.
|
|
* Distributed under the terms of the MIT License.
|
|
*/
|
|
#ifndef _PACKAGE__SOLVER_H_
|
|
#define _PACKAGE__SOLVER_H_
|
|
|
|
|
|
#include <ObjectList.h>
|
|
#include <SupportDefs.h>
|
|
|
|
|
|
namespace BPackageKit {
|
|
|
|
|
|
class BSolverPackage;
|
|
class BSolverPackageSpecifier;
|
|
class BSolverPackageSpecifierList;
|
|
class BSolverProblem;
|
|
class BSolverProblemSolution;
|
|
class BSolverRepository;
|
|
class BSolverResult;
|
|
|
|
|
|
class BSolver {
|
|
public:
|
|
// FindPackages() flags
|
|
enum {
|
|
B_FIND_CASE_INSENSITIVE = 0x01,
|
|
B_FIND_IN_NAME = 0x02,
|
|
B_FIND_IN_SUMMARY = 0x04,
|
|
B_FIND_IN_DESCRIPTION = 0x08,
|
|
B_FIND_IN_PROVIDES = 0x10,
|
|
B_FIND_INSTALLED_ONLY = 0x20,
|
|
};
|
|
|
|
// VerifyInstallation() flags
|
|
enum {
|
|
B_VERIFY_ALLOW_UNINSTALL = 0x01,
|
|
};
|
|
|
|
public:
|
|
virtual ~BSolver();
|
|
|
|
static status_t Create(BSolver*& _solver);
|
|
|
|
virtual status_t Init() = 0;
|
|
|
|
virtual status_t AddRepository(
|
|
BSolverRepository* repository) = 0;
|
|
|
|
virtual status_t FindPackages(const char* searchString,
|
|
uint32 flags,
|
|
BObjectList<BSolverPackage>& _packages) = 0;
|
|
virtual status_t FindPackages(
|
|
const BSolverPackageSpecifierList& packages,
|
|
uint32 flags,
|
|
BObjectList<BSolverPackage>& _packages,
|
|
const BSolverPackageSpecifier** _unmatched
|
|
= NULL) = 0;
|
|
|
|
virtual status_t Install(
|
|
const BSolverPackageSpecifierList& packages,
|
|
const BSolverPackageSpecifier** _unmatched
|
|
= NULL) = 0;
|
|
virtual status_t Uninstall(
|
|
const BSolverPackageSpecifierList& packages,
|
|
const BSolverPackageSpecifier** _unmatched
|
|
= NULL) = 0;
|
|
virtual status_t Update(
|
|
const BSolverPackageSpecifierList& packages,
|
|
bool installNotYetInstalled,
|
|
const BSolverPackageSpecifier** _unmatched
|
|
= NULL) = 0;
|
|
virtual status_t FullSync() = 0;
|
|
virtual status_t VerifyInstallation(uint32 flags = 0) = 0;
|
|
|
|
bool HasProblems() const
|
|
{ return CountProblems() > 0; }
|
|
virtual int32 CountProblems() const = 0;
|
|
virtual BSolverProblem* ProblemAt(int32 index) const = 0;
|
|
|
|
virtual status_t SelectProblemSolution(
|
|
BSolverProblem* problem,
|
|
const BSolverProblemSolution* solution) = 0;
|
|
virtual status_t SolveAgain() = 0;
|
|
|
|
virtual status_t GetResult(BSolverResult& _result) = 0;
|
|
|
|
protected:
|
|
BSolver();
|
|
};
|
|
|
|
|
|
// function exported by the libsolv based add-on
|
|
extern "C" BSolver* create_solver();
|
|
|
|
|
|
} // namespace BPackageKit
|
|
|
|
|
|
#endif // _PACKAGE__SOLVER_H_
|