32 #include "xbps_api_impl.h"
39 static prop_dictionary_t
40 match_pkg_by_pkgver(prop_dictionary_t repod,
const char *p)
42 prop_dictionary_t d = NULL;
50 d = prop_dictionary_get(repod, pkgname);
52 prop_dictionary_get_cstring_nocopy(d,
"pkgver", &pkgver);
53 if (strcmp(pkgver, p))
61 static prop_dictionary_t
62 match_pkg_by_pattern(prop_dictionary_t repod,
const char *p)
64 prop_dictionary_t d = NULL;
71 return match_pkg_by_pkgver(repod, p);
76 d = prop_dictionary_get(repod, pkgname);
78 prop_dictionary_get_cstring_nocopy(d,
"pkgver", &pkgver);
93 const char *vpkgver, *pkg = NULL;
94 char *vpkgname = NULL, *tmp;
100 if ((cnt = cfg_size(xhp->cfg,
"virtual-package")) == 0) {
105 for (i = 0; i < cnt; i++) {
106 cfg_t *sec = cfg_getnsec(xhp->cfg,
"virtual-package", i);
107 for (j = 0; j < cfg_size(sec,
"targets"); j++) {
109 vpkgver = cfg_getnstr(sec,
"targets", j);
110 if (strchr(vpkgver,
'_') == NULL) {
117 if (vpkgname == NULL)
125 if (strcmp(vpkg, vpkgname)) {
131 pkg = cfg_title(sec);
133 "matched vpkg in conf `%s' for %s\n",
146 prop_object_iterator_t iter;
147 prop_dictionary_t pkgd = NULL;
149 bool found =
false, bypattern =
false;
155 vpkg = vpkg_user_conf(rpi->
xhp, pkg, bypattern);
158 pkgd = match_pkg_by_pattern(rpi->
repod, vpkg);
160 pkgd = match_pkg_by_pkgver(rpi->
repod, vpkg);
162 pkgd = prop_dictionary_get(rpi->
repod, vpkg);
171 iter = prop_dictionary_iterator(rpi->
repod);
174 while ((obj = prop_object_iterator_next(iter))) {
175 pkgd = prop_dictionary_get_keysym(rpi->
repod, obj);
181 prop_object_iterator_release(iter);
185 prop_dictionary_set_cstring_nocopy(pkgd,
186 "repository", rpi->
uri);
195 prop_dictionary_t pkgd = NULL;
198 pkgd = match_pkg_by_pattern(rpi->
repod, pkg);
200 pkgd = match_pkg_by_pkgver(rpi->
repod, pkg);
202 pkgd = prop_dictionary_get(rpi->
repod, pkg);
205 prop_dictionary_set_cstring_nocopy(pkgd,
206 "repository", rpi->
uri);