xbps-query: implemented -X, --revdeps in repository mode.
This commit is contained in:
parent
37e5d7ebe0
commit
79a31bb6bc
4
NEWS
4
NEWS
@ -1,5 +1,9 @@
|
||||
xbps-0.18 (???):
|
||||
|
||||
* xbps-query(8): implemented support to know reverse dependencies
|
||||
in repository mode; that means you can now exactly what packages
|
||||
require the target package from all registered repositories.
|
||||
|
||||
* The virtual package configuration files are now read dynamically
|
||||
by libxbps at initialization time from default configuration directory:
|
||||
<rootdir>/etc/xbps/virtualpkg.d. Only files that end in ".conf" will
|
||||
|
2
TODO
2
TODO
@ -9,8 +9,6 @@ xbps-create:
|
||||
|
||||
All:
|
||||
- Add support to sign with PGP or RSA the repository index files.
|
||||
- Add requiredby support to pkg's dictionaries in repository's index,
|
||||
to know reverse deps from remote repos.
|
||||
|
||||
Issues listed at http://code.google.com/p/xbps/issues/list
|
||||
|
||||
|
@ -28,10 +28,15 @@
|
||||
|
||||
#include <xbps_api.h>
|
||||
|
||||
#ifndef __UNCONST
|
||||
#define __UNCONST(a) ((void *)(unsigned long)(const void *)(a))
|
||||
#endif
|
||||
|
||||
/* from show-deps.c */
|
||||
int show_pkg_deps(struct xbps_handle *, const char *);
|
||||
int show_pkg_revdeps(struct xbps_handle *, const char *);
|
||||
int repo_show_pkg_deps(struct xbps_handle *, const char *);
|
||||
int repo_show_pkg_revdeps(struct xbps_handle *, const char *);
|
||||
|
||||
/* from show-info-files.c */
|
||||
void show_pkg_info(prop_dictionary_t);
|
||||
|
@ -251,8 +251,13 @@ main(int argc, char **argv)
|
||||
|
||||
} else if (show_rdeps) {
|
||||
/* show-rdeps mode */
|
||||
rv = show_pkg_revdeps(&xh, argv[optind]);
|
||||
|
||||
if (repo_mode)
|
||||
rv = repo_show_pkg_revdeps(&xh, argv[optind]);
|
||||
else {
|
||||
rv = show_pkg_revdeps(&xh, argv[optind]);
|
||||
if (rv == ENOENT)
|
||||
rv = repo_show_pkg_revdeps(&xh, argv[optind]);
|
||||
}
|
||||
}
|
||||
|
||||
xbps_end(&xh);
|
||||
|
@ -90,3 +90,49 @@ repo_show_pkg_deps(struct xbps_handle *xhp, const char *pattern)
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
repo_revdeps_cb(struct xbps_handle *xhp,
|
||||
struct xbps_rpool_index *rpi,
|
||||
void *arg,
|
||||
bool *done)
|
||||
{
|
||||
prop_dictionary_t pkgd;
|
||||
prop_array_t pkgdeps;
|
||||
const char *pkgver, *arch, *pattern = arg;
|
||||
size_t i;
|
||||
|
||||
(void)done;
|
||||
|
||||
for (i = 0; i < prop_array_count(rpi->repo); i++) {
|
||||
pkgd = prop_array_get(rpi->repo, i);
|
||||
pkgdeps = prop_dictionary_get(pkgd, "run_depends");
|
||||
if (pkgdeps == NULL || prop_array_count(pkgdeps) == 0)
|
||||
continue;
|
||||
|
||||
if (xbps_match_pkgdep_in_array(pkgdeps, pattern)) {
|
||||
prop_dictionary_get_cstring_nocopy(pkgd,
|
||||
"architecture", &arch);
|
||||
if (xbps_pkg_arch_match(xhp, arch, NULL)) {
|
||||
prop_dictionary_get_cstring_nocopy(pkgd,
|
||||
"pkgver", &pkgver);
|
||||
printf("%s\n", pkgver);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
repo_show_pkg_revdeps(struct xbps_handle *xhp, const char *pkg)
|
||||
{
|
||||
char *pattern;
|
||||
|
||||
if (xbps_pkg_version(pkg))
|
||||
pattern = strdup(pkg);
|
||||
else
|
||||
pattern = xbps_xasprintf("%s-9999999", pkg);
|
||||
|
||||
return xbps_rpool_foreach(xhp, repo_revdeps_cb, pattern);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user