Beginnings of the PackageKit dependency solver

Not functional (or tested) yet. The libsolv setup for a somewhat
simplified installation case should be more or less complete, though.
The solution conversion to to-be-created Haiku data structures and the
handling of problems is still missing, though.
This commit is contained in:
Ingo Weinhold
2013-04-01 00:25:37 +00:00
parent 10efbe6c5e
commit 479ca8169c
10 changed files with 1025 additions and 0 deletions
+43
View File
@@ -0,0 +1,43 @@
/*
* Copyright 2013, Haiku, Inc. All Rights Reserved.
* Distributed under the terms of the MIT License.
*/
#ifndef _PACKAGE__SOLVER_H_
#define _PACKAGE__SOLVER_H_
#include <SupportDefs.h>
namespace BPackageKit {
class BSolverPackageSpecifierList;
class BSolverRepository;
class BSolver {
public:
BSolver();
~BSolver();
status_t Init();
status_t AddRepository(BSolverRepository* repository);
status_t Install(
const BSolverPackageSpecifierList&
packages);
private:
class Implementation;
private:
Implementation* fImplementation;
};
} // namespace BPackageKit
#endif // _PACKAGE__SOLVER_H_
@@ -0,0 +1,47 @@
/*
* Copyright 2013, Haiku, Inc. All Rights Reserved.
* Distributed under the terms of the MIT License.
*/
#ifndef _PACKAGE__SOLVER_PACKAGE_SPECIFIER_H_
#define _PACKAGE__SOLVER_PACKAGE_SPECIFIER_H_
#include <package/PackageResolvableExpression.h>
namespace BPackageKit {
class BSolverRepository;
class BSolverPackageSpecifier {
public:
BSolverPackageSpecifier();
BSolverPackageSpecifier(
const BPackageResolvableExpression&
expression);
BSolverPackageSpecifier(
BSolverRepository* repository,
const BPackageResolvableExpression&
expression);
BSolverPackageSpecifier(
const BSolverPackageSpecifier& other);
~BSolverPackageSpecifier();
BSolverRepository* Repository() const;
const BPackageResolvableExpression& Expression() const;
BSolverPackageSpecifier& operator=(
const BSolverPackageSpecifier& other);
private:
BSolverRepository* fRepository;
BPackageResolvableExpression fExpression;
};
} // namespace BPackageKit
#endif // _PACKAGE__SOLVER_PACKAGE_SPECIFIER_H_
@@ -0,0 +1,46 @@
/*
* Copyright 2013, Haiku, Inc. All Rights Reserved.
* Distributed under the terms of the MIT License.
*/
#ifndef _PACKAGE__SOLVER_PACKAGE_SPECIFIER_LIST_H_
#define _PACKAGE__SOLVER_PACKAGE_SPECIFIER_LIST_H_
#include <SupportDefs.h>
namespace BPackageKit {
class BSolverPackageSpecifier;
class BSolverPackageSpecifierList {
public:
BSolverPackageSpecifierList();
BSolverPackageSpecifierList(
const BSolverPackageSpecifierList& other);
~BSolverPackageSpecifierList();
bool IsEmpty() const;
int32 CountSpecifiers() const;
const BSolverPackageSpecifier* SpecifierAt(int32 index) const;
bool AppendSpecifier(
const BSolverPackageSpecifier& specifier);
BSolverPackageSpecifierList& operator=(
const BSolverPackageSpecifierList& other);
private:
class Vector;
private:
Vector* fSpecifiers;
};
} // namespace BPackageKit
#endif // _PACKAGE__SOLVER_PACKAGE_SPECIFIER_LIST_H_
@@ -0,0 +1,69 @@
/*
* Copyright 2013, Haiku, Inc. All Rights Reserved.
* Distributed under the terms of the MIT License.
*/
#ifndef _PACKAGE__SOLVER_REPOSITORY_H_
#define _PACKAGE__SOLVER_REPOSITORY_H_
#include <package/PackageDefs.h>
#include <package/PackageInfoSet.h>
#include <String.h>
namespace BPackageKit {
class BPackageInfo;
class BRepositoryConfig;
class BSolverRepository {
public:
enum BAllInstallationLocations {
B_ALL_INSTALLATION_LOCATIONS
};
typedef BPackageInfoSet::Iterator Iterator;
public:
BSolverRepository();
BSolverRepository(const BString& name);
BSolverRepository(
BPackageInstallationLocation location);
BSolverRepository(BAllInstallationLocations);
BSolverRepository(
const BRepositoryConfig& config);
~BSolverRepository();
status_t SetTo(const BString& name);
status_t SetTo(BPackageInstallationLocation location);
status_t SetTo(BAllInstallationLocations);
status_t SetTo(const BRepositoryConfig& config);
void Unset();
status_t InitCheck();
bool IsInstalled() const;
BString Name() const;
uint8 Priority() const;
status_t AddPackage(const BPackageInfo& info);
status_t AddPackages(
BPackageInstallationLocation location);
Iterator GetIterator() const;
private:
BString fName;
uint8 fPriority;
bool fIsInstalled;
BPackageInfoSet fPackages;
};
} // namespace BPackageKit
#endif // _PACKAGE__SOLVER_REPOSITORY_H_