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:
@@ -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:
|
||||
|
||||
@@ -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");
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user