BSolver/pkgman: Support for searching in provides

* BSolver/LibsolvSolver:
  * Add B_FIND_IN_NAME and make searching in the names explicit.
  * Add B_FIND_IN_PROVIDES to search the packages' provides list.
* pkgman: Also search in provides.
This commit is contained in:
Ingo Weinhold
2013-04-11 23:36:12 +02:00
parent eb13a353e3
commit 663e351cb4
3 changed files with 24 additions and 9 deletions
+4 -2
View File
@@ -25,8 +25,10 @@ public:
// FindPackages() flags
enum {
B_FIND_CASE_INSENSITIVE = 0x01,
B_FIND_IN_SUMMARY = 0x02,
B_FIND_IN_DESCRIPTION = 0x04
B_FIND_IN_NAME = 0x02,
B_FIND_IN_SUMMARY = 0x04,
B_FIND_IN_DESCRIPTION = 0x08,
B_FIND_IN_PROVIDES = 0x10
};
public:
+4 -2
View File
@@ -172,8 +172,10 @@ command_search(int argc, const char* const* argv)
// search
BObjectList<BSolverPackage> packages;
error = solver->FindPackages(searchString,
BSolver::B_FIND_CASE_INSENSITIVE | BSolver::B_FIND_IN_SUMMARY
| BSolver::B_FIND_IN_DESCRIPTION, packages);
BSolver::B_FIND_CASE_INSENSITIVE | BSolver::B_FIND_IN_NAME
| BSolver::B_FIND_IN_SUMMARY | BSolver::B_FIND_IN_DESCRIPTION
| BSolver::B_FIND_IN_PROVIDES,
packages);
if (error != B_OK)
DIE(error, "searching packages failed");
+16 -5
View File
@@ -226,14 +226,16 @@ LibsolvSolver::FindPackages(const char* searchString, uint32 flags,
iteratorFlags |= SEARCH_NOCASE;
SolvDataIterator iterator(fPool, 0, 0, 0, searchString, iteratorFlags);
SolvQueue selection;
// search package names
dataiterator_set_keyname(&iterator, SOLVABLE_NAME);
dataiterator_set_search(&iterator, 0, 0);
if ((flags & B_FIND_IN_NAME) != 0) {
dataiterator_set_keyname(&iterator, SOLVABLE_NAME);
dataiterator_set_search(&iterator, 0, 0);
SolvQueue selection;
while (dataiterator_step(&iterator))
queue_push2(&selection, SOLVER_SOLVABLE, iterator.solvid);
while (dataiterator_step(&iterator))
queue_push2(&selection, SOLVER_SOLVABLE, iterator.solvid);
}
// search package summaries
if ((flags & B_FIND_IN_SUMMARY) != 0) {
@@ -253,6 +255,15 @@ LibsolvSolver::FindPackages(const char* searchString, uint32 flags,
queue_push2(&selection, SOLVER_SOLVABLE, iterator.solvid);
}
// search package provides
if ((flags & B_FIND_IN_PROVIDES) != 0) {
dataiterator_set_keyname(&iterator, SOLVABLE_PROVIDES);
dataiterator_set_search(&iterator, 0, 0);
while (dataiterator_step(&iterator))
queue_push2(&selection, SOLVER_SOLVABLE, iterator.solvid);
}
// get solvables
SolvQueue solvables;
selection_solvables(fPool, &selection, &solvables);