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
|
// FindPackages() flags
|
||||||
enum {
|
enum {
|
||||||
B_FIND_CASE_INSENSITIVE = 0x01,
|
B_FIND_CASE_INSENSITIVE = 0x01,
|
||||||
B_FIND_IN_SUMMARY = 0x02,
|
B_FIND_IN_NAME = 0x02,
|
||||||
B_FIND_IN_DESCRIPTION = 0x04
|
B_FIND_IN_SUMMARY = 0x04,
|
||||||
|
B_FIND_IN_DESCRIPTION = 0x08,
|
||||||
|
B_FIND_IN_PROVIDES = 0x10
|
||||||
};
|
};
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|||||||
@@ -172,8 +172,10 @@ command_search(int argc, const char* const* argv)
|
|||||||
// search
|
// search
|
||||||
BObjectList<BSolverPackage> packages;
|
BObjectList<BSolverPackage> packages;
|
||||||
error = solver->FindPackages(searchString,
|
error = solver->FindPackages(searchString,
|
||||||
BSolver::B_FIND_CASE_INSENSITIVE | BSolver::B_FIND_IN_SUMMARY
|
BSolver::B_FIND_CASE_INSENSITIVE | BSolver::B_FIND_IN_NAME
|
||||||
| BSolver::B_FIND_IN_DESCRIPTION, packages);
|
| BSolver::B_FIND_IN_SUMMARY | BSolver::B_FIND_IN_DESCRIPTION
|
||||||
|
| BSolver::B_FIND_IN_PROVIDES,
|
||||||
|
packages);
|
||||||
if (error != B_OK)
|
if (error != B_OK)
|
||||||
DIE(error, "searching packages failed");
|
DIE(error, "searching packages failed");
|
||||||
|
|
||||||
|
|||||||
@@ -226,14 +226,16 @@ LibsolvSolver::FindPackages(const char* searchString, uint32 flags,
|
|||||||
iteratorFlags |= SEARCH_NOCASE;
|
iteratorFlags |= SEARCH_NOCASE;
|
||||||
|
|
||||||
SolvDataIterator iterator(fPool, 0, 0, 0, searchString, iteratorFlags);
|
SolvDataIterator iterator(fPool, 0, 0, 0, searchString, iteratorFlags);
|
||||||
|
SolvQueue selection;
|
||||||
|
|
||||||
// search package names
|
// search package names
|
||||||
dataiterator_set_keyname(&iterator, SOLVABLE_NAME);
|
if ((flags & B_FIND_IN_NAME) != 0) {
|
||||||
dataiterator_set_search(&iterator, 0, 0);
|
dataiterator_set_keyname(&iterator, SOLVABLE_NAME);
|
||||||
|
dataiterator_set_search(&iterator, 0, 0);
|
||||||
|
|
||||||
SolvQueue selection;
|
while (dataiterator_step(&iterator))
|
||||||
while (dataiterator_step(&iterator))
|
queue_push2(&selection, SOLVER_SOLVABLE, iterator.solvid);
|
||||||
queue_push2(&selection, SOLVER_SOLVABLE, iterator.solvid);
|
}
|
||||||
|
|
||||||
// search package summaries
|
// search package summaries
|
||||||
if ((flags & B_FIND_IN_SUMMARY) != 0) {
|
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);
|
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
|
// get solvables
|
||||||
SolvQueue solvables;
|
SolvQueue solvables;
|
||||||
selection_solvables(fPool, &selection, &solvables);
|
selection_solvables(fPool, &selection, &solvables);
|
||||||
|
|||||||
Reference in New Issue
Block a user