Fix 29765271e
correctly.
xbps_find_virtualpkg_in_conf() needs to look at the vpkgs set up in configuration files, not from those set by pkgdb. As a result of this the two test cases that were failing yesterday are now fixed.
This commit is contained in:
parent
fa635399f0
commit
35ad10ccbd
@ -524,6 +524,7 @@ struct xbps_handle {
|
||||
*/
|
||||
xbps_dictionary_t pkgdb_revdeps;
|
||||
xbps_dictionary_t vpkgd;
|
||||
xbps_dictionary_t vpkgd_conf;
|
||||
/**
|
||||
* @var pkgdb
|
||||
*
|
||||
|
@ -149,7 +149,7 @@ void HIDDEN xbps_transaction_conflicts(struct xbps_handle *, xbps_array_t);
|
||||
char HIDDEN *xbps_archive_get_file(struct archive *, struct archive_entry *);
|
||||
xbps_dictionary_t HIDDEN xbps_archive_get_dictionary(struct archive *,
|
||||
struct archive_entry *);
|
||||
const char HIDDEN *vpkg_user_conf(struct xbps_handle *, const char *);
|
||||
const char HIDDEN *vpkg_user_conf(struct xbps_handle *, const char *, bool);
|
||||
xbps_array_t HIDDEN xbps_get_pkg_fulldeptree(struct xbps_handle *,
|
||||
const char *, bool);
|
||||
struct xbps_repo HIDDEN *xbps_regget_repo(struct xbps_handle *,
|
||||
|
@ -68,6 +68,9 @@ store_vars(struct xbps_handle *xhp, xbps_dictionary_t *d,
|
||||
|
||||
if (*d == NULL)
|
||||
*d = xbps_dictionary_create();
|
||||
if (xhp->vpkgd_conf)
|
||||
xhp->vpkgd_conf = xbps_dictionary_create();
|
||||
|
||||
/*
|
||||
* Parse strings delimited by ':' i.e
|
||||
* <left>:<right>
|
||||
@ -85,6 +88,7 @@ store_vars(struct xbps_handle *xhp, xbps_dictionary_t *d,
|
||||
|
||||
rp++;
|
||||
xbps_dictionary_set_cstring(*d, lp, rp);
|
||||
xbps_dictionary_set_cstring(xhp->vpkgd_conf, lp, rp);
|
||||
xbps_dbg_printf(xhp, "%s: added %s %s for %s\n", path, key, lp, rp);
|
||||
}
|
||||
|
||||
|
@ -361,7 +361,7 @@ generate_full_revdeps_tree(struct xbps_handle *xhp)
|
||||
if (curpkgname == NULL)
|
||||
curpkgname = xbps_pkg_name(pkgdep);
|
||||
assert(curpkgname);
|
||||
vpkgname = vpkg_user_conf(xhp, curpkgname);
|
||||
vpkgname = vpkg_user_conf(xhp, curpkgname, false);
|
||||
if (vpkgname == NULL)
|
||||
vpkgname = curpkgname;
|
||||
|
||||
|
@ -126,7 +126,7 @@ xbps_find_virtualpkg_in_array(struct xbps_handle *x,
|
||||
assert(xbps_object_type(a) == XBPS_TYPE_ARRAY);
|
||||
assert(s);
|
||||
|
||||
if ((vpkg = vpkg_user_conf(x, s))) {
|
||||
if ((vpkg = vpkg_user_conf(x, s, false))) {
|
||||
if ((pkgd = get_pkg_in_array(a, vpkg, trans, true)))
|
||||
return pkgd;
|
||||
}
|
||||
@ -189,20 +189,26 @@ match_pkg_by_pattern(xbps_dictionary_t repod, const char *p)
|
||||
}
|
||||
|
||||
const char HIDDEN *
|
||||
vpkg_user_conf(struct xbps_handle *xhp, const char *vpkg)
|
||||
vpkg_user_conf(struct xbps_handle *xhp, const char *vpkg, bool only_conf)
|
||||
{
|
||||
xbps_dictionary_t d;
|
||||
xbps_object_t obj;
|
||||
xbps_object_iterator_t iter;
|
||||
const char *pkg = NULL;
|
||||
bool found = false;
|
||||
|
||||
/* init pkgdb just in case to detect vpkgs */
|
||||
(void)xbps_pkgdb_init(xhp);
|
||||
if (only_conf) {
|
||||
d = xhp->vpkgd_conf;
|
||||
} else {
|
||||
d = xhp->vpkgd;
|
||||
/* init pkgdb just in case to detect vpkgs */
|
||||
(void)xbps_pkgdb_init(xhp);
|
||||
}
|
||||
|
||||
if (xhp->vpkgd == NULL)
|
||||
if (d == NULL)
|
||||
return NULL;
|
||||
|
||||
iter = xbps_dictionary_iterator(xhp->vpkgd);
|
||||
iter = xbps_dictionary_iterator(d);
|
||||
assert(iter);
|
||||
|
||||
while ((obj = xbps_object_iterator_next(iter))) {
|
||||
@ -272,7 +278,7 @@ xbps_find_virtualpkg_in_conf(struct xbps_handle *xhp,
|
||||
const char *vpkg;
|
||||
|
||||
/* Try matching vpkg from configuration files */
|
||||
vpkg = vpkg_user_conf(xhp, pkg);
|
||||
vpkg = vpkg_user_conf(xhp, pkg, true);
|
||||
if (vpkg != NULL) {
|
||||
if (xbps_pkgpattern_version(vpkg))
|
||||
pkgd = match_pkg_by_pattern(d, vpkg);
|
||||
@ -296,11 +302,21 @@ xbps_find_virtualpkg_in_dict(struct xbps_handle *xhp,
|
||||
xbps_object_t obj;
|
||||
xbps_object_iterator_t iter;
|
||||
xbps_dictionary_t pkgd = NULL;
|
||||
const char *vpkg;
|
||||
|
||||
/* Try matching vpkg from configuration files */
|
||||
if ((pkgd = xbps_find_virtualpkg_in_conf(xhp, d, pkg)))
|
||||
return pkgd;
|
||||
vpkg = vpkg_user_conf(xhp, pkg, false);
|
||||
if (vpkg != NULL) {
|
||||
if (xbps_pkgpattern_version(vpkg))
|
||||
pkgd = match_pkg_by_pattern(d, vpkg);
|
||||
else if (xbps_pkg_version(vpkg))
|
||||
pkgd = match_pkg_by_pkgver(d, vpkg);
|
||||
else
|
||||
pkgd = xbps_dictionary_get(d, vpkg);
|
||||
|
||||
if (pkgd)
|
||||
return pkgd;
|
||||
}
|
||||
/* ... otherwise match the first one in dictionary */
|
||||
iter = xbps_dictionary_iterator(d);
|
||||
assert(iter);
|
||||
|
Loading…
Reference in New Issue
Block a user