mirror of
https://gitlab.archlinux.org/archlinux/aurweb.git
synced 2025-02-03 10:43:03 +01:00
RPC: Allow to search packages by "*depends" fields
It is now possible to search for packages that depend on a given package, for instance: /rpc/?v=5&type=search&by=depends&arg=ocaml It is similarly possible to match on "makedepends", "checkdepends" and "optdepends". Signed-off-by: Baptiste Jonglez <git@bitsofnetworks.org> Signed-off-by: Lukas Fleischer <lfleischer@archlinux.org>
This commit is contained in:
parent
f15c700ad2
commit
1ff409874e
2 changed files with 26 additions and 3 deletions
|
@ -11,6 +11,10 @@ search argument and _field_ is one of the following values:
|
|||
* `name` (search by package name only)
|
||||
* `name-desc` (search by package name and description)
|
||||
* `maintainer` (search by package maintainer)
|
||||
* `depends` (search for packages that depend on _keywords_)
|
||||
* `makedepends` (search for packages that makedepend on _keywords_)
|
||||
* `optdepends` (search for packages that optdepend on _keywords_)
|
||||
* `checkdepends` (search for packages that checkdepend on _keywords_)
|
||||
|
||||
The _by_ parameter can be skipped and defaults to `name-desc`.
|
||||
|
||||
|
@ -30,7 +34,9 @@ Examples
|
|||
`search`::
|
||||
`/rpc/?v=5&type=search&arg=foobar`
|
||||
`search` by maintainer::
|
||||
`/rpc/?v=5&type=search&search_by=maintainer&arg=john`
|
||||
`/rpc/?v=5&type=search&by=maintainer&arg=john`
|
||||
`search` packages that have _boost_ as `makedepends`::
|
||||
`/rpc/?v=5&type=search&by=makedepends&arg=boost`
|
||||
`search` with callback::
|
||||
`/rpc/?v=5&type=search&arg=foobar&callback=jsonp1192244621103`
|
||||
`info`::
|
||||
|
|
|
@ -17,7 +17,11 @@ class AurJSON {
|
|||
'suggest-pkgbase', 'get-comment-form'
|
||||
);
|
||||
private static $exposed_fields = array(
|
||||
'name', 'name-desc', 'maintainer'
|
||||
'name', 'name-desc', 'maintainer',
|
||||
'depends', 'makedepends', 'checkdepends', 'optdepends'
|
||||
);
|
||||
private static $exposed_depfields = array(
|
||||
'depends', 'makedepends', 'checkdepends', 'optdepends'
|
||||
);
|
||||
private static $fields_v1 = array(
|
||||
'Packages.ID', 'Packages.Name',
|
||||
|
@ -329,7 +333,7 @@ class AurJSON {
|
|||
|
||||
/*
|
||||
* Retrieve package information (used in info, multiinfo, search and
|
||||
* msearch requests).
|
||||
* depends requests).
|
||||
*
|
||||
* @param $type The request type.
|
||||
* @param $where_condition An SQL WHERE-condition to filter packages.
|
||||
|
@ -493,6 +497,19 @@ class AurJSON {
|
|||
$keyword_string = $this->dbh->quote($keyword_string);
|
||||
$where_condition = "Users.Username = $keyword_string ";
|
||||
}
|
||||
} else if (in_array($search_by, self::$exposed_depfields)) {
|
||||
if (empty($keyword_string)) {
|
||||
return $this->json_error('Query arg is empty.');
|
||||
} else {
|
||||
$keyword_string = $this->dbh->quote($keyword_string);
|
||||
$search_by = $this->dbh->quote($search_by);
|
||||
$subquery = "SELECT PackageDepends.DepName FROM PackageDepends ";
|
||||
$subquery .= "LEFT JOIN DependencyTypes ";
|
||||
$subquery .= "ON PackageDepends.DepTypeID = DependencyTypes.ID ";
|
||||
$subquery .= "WHERE PackageDepends.PackageID = Packages.ID ";
|
||||
$subquery .= "AND DependencyTypes.Name = $search_by";
|
||||
$where_condition = "$keyword_string IN ($subquery)";
|
||||
}
|
||||
}
|
||||
|
||||
return $this->process_query('search', $where_condition);
|
||||
|
|
Loading…
Add table
Reference in a new issue