Refactor reusable pkgman code into libpackage

* Move RepositoryBuilder class to libpackage and add B* prefix to name.
* Pull BPackageManager class out of PackageManager and move to
  libpackage. The base class is customizable via three handler objects
  responsible for transaction handling, request execution, respectively
  user interaction.
* Reorganize _ApplyPackageChanges(): Now we first prepare the
  transactions for all affected installation locations (downloading
  files etc.) and then commit them.
This commit is contained in:
Ingo Weinhold
2013-08-31 21:19:07 +02:00
parent a0cb235c0e
commit 83462cc28d
25 changed files with 1646 additions and 998 deletions
@@ -8,10 +8,6 @@ USES_BE_API on <build>get_package_dependencies = true ;
BuildPlatformMain <build>get_package_dependencies :
get_package_dependencies.cpp
# pkgman sources
PackageInfoErrorListener.cpp
RepositoryBuilder.cpp
:
libpackage-add-on-libsolv_build.so
libsolvext_build.so libsolv_build.so
@@ -14,6 +14,7 @@
#include <map>
#include <package/RepositoryCache.h>
#include <package/manager/RepositoryBuilder.h>
#include <package/solver/Solver.h>
#include <package/solver/SolverPackageSpecifier.h>
#include <package/solver/SolverPackageSpecifierList.h>
@@ -22,13 +23,22 @@
#include <package/solver/SolverRepository.h>
#include <package/solver/SolverResult.h>
#include "pkgman.h"
#include "RepositoryBuilder.h"
using namespace BPackageKit;
using namespace BPackageKit::BManager::BPrivate;
static const char* sProgramName = "get_package_dependencies";
#define DIE(result, msg...) \
do { \
fprintf(stderr, "*** " msg); \
fprintf(stderr, " : %s\n", strerror(result)); \
exit(5); \
} while(0)
void
print_usage_and_exit(bool error)
{
@@ -74,7 +84,7 @@ main(int argc, const char* const* argv)
// add the "installed" repository with the given packages
BSolverRepository installedRepository;
{
RepositoryBuilder installedRepositoryBuilder(installedRepository,
BRepositoryBuilder installedRepositoryBuilder(installedRepository,
"installed");
for (int i = 0; i < packageCount; i++)
installedRepositoryBuilder.AddPackage(packages[i]);
@@ -89,7 +99,7 @@ main(int argc, const char* const* argv)
error = cache.SetTo(repositories[i]);
if (error != B_OK)
DIE(error, "failed to read repository file '%s'", repositories[i]);
RepositoryBuilder(*repository, cache)
BRepositoryBuilder(*repository, cache)
.AddToSolver(solver, false);
repositoryInfos[repository] = cache.Info();
}