libxbps: use same order strategy when checking for deps queued in transaction.
This commit is contained in:
parent
123fca1721
commit
f40759aabe
@ -56,7 +56,7 @@
|
|||||||
*/
|
*/
|
||||||
#define XBPS_PKGINDEX_VERSION "1.4"
|
#define XBPS_PKGINDEX_VERSION "1.4"
|
||||||
|
|
||||||
#define XBPS_API_VERSION "20120530-1"
|
#define XBPS_API_VERSION "20120530-2"
|
||||||
#define XBPS_VERSION "0.16"
|
#define XBPS_VERSION "0.16"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -38,8 +38,7 @@ store_dependency(prop_dictionary_t transd,
|
|||||||
{
|
{
|
||||||
const struct xbps_handle *xhp = xbps_handle_get();
|
const struct xbps_handle *xhp = xbps_handle_get();
|
||||||
prop_array_t array;
|
prop_array_t array;
|
||||||
prop_dictionary_t curpkgd;
|
const char *pkgname, *pkgver, *repoloc;
|
||||||
const char *pkgname, *pkgver, *repoloc, *curpkgver;
|
|
||||||
size_t x;
|
size_t x;
|
||||||
int rv = 0;
|
int rv = 0;
|
||||||
|
|
||||||
@ -51,21 +50,6 @@ store_dependency(prop_dictionary_t transd,
|
|||||||
prop_dictionary_get_cstring_nocopy(repo_pkgd, "pkgname", &pkgname);
|
prop_dictionary_get_cstring_nocopy(repo_pkgd, "pkgname", &pkgname);
|
||||||
prop_dictionary_get_cstring_nocopy(repo_pkgd, "pkgver", &pkgver);
|
prop_dictionary_get_cstring_nocopy(repo_pkgd, "pkgver", &pkgver);
|
||||||
prop_dictionary_get_cstring_nocopy(repo_pkgd, "repository", &repoloc);
|
prop_dictionary_get_cstring_nocopy(repo_pkgd, "repository", &repoloc);
|
||||||
/*
|
|
||||||
* Check if same pkg is already in transaction, and if current pkg version
|
|
||||||
* is greater add it, otherwise drop it.
|
|
||||||
*/
|
|
||||||
curpkgd = xbps_find_pkg_in_dict_by_name(transd, "unsorted_deps", pkgname);
|
|
||||||
if (curpkgd != NULL) {
|
|
||||||
prop_dictionary_get_cstring_nocopy(curpkgd, "pkgver", &curpkgver);
|
|
||||||
rv = xbps_cmpver(pkgver, curpkgver);
|
|
||||||
if (rv == 1) {
|
|
||||||
xbps_remove_pkg_from_dict_by_name(transd,
|
|
||||||
"unsorted_deps", pkgname);
|
|
||||||
xbps_dbg_printf("%s: found pkg `%s' in transaction, replaced by `%s'.\n",
|
|
||||||
__func__, curpkgver, pkgver);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/*
|
/*
|
||||||
* Overwrite package state in dictionary with same state than the
|
* Overwrite package state in dictionary with same state than the
|
||||||
* package currently uses, otherwise not-installed.
|
* package currently uses, otherwise not-installed.
|
||||||
@ -196,7 +180,7 @@ find_repo_deps(prop_dictionary_t transd, /* transaction dictionary */
|
|||||||
{
|
{
|
||||||
struct xbps_handle *xhp = xbps_handle_get();
|
struct xbps_handle *xhp = xbps_handle_get();
|
||||||
prop_dictionary_t curpkgd, tmpd;
|
prop_dictionary_t curpkgd, tmpd;
|
||||||
prop_array_t curpkgrdeps;
|
prop_array_t curpkgrdeps, unsorted;
|
||||||
prop_object_t obj;
|
prop_object_t obj;
|
||||||
prop_object_iterator_t iter;
|
prop_object_iterator_t iter;
|
||||||
pkg_state_t state;
|
pkg_state_t state;
|
||||||
@ -349,37 +333,22 @@ find_repo_deps(prop_dictionary_t transd, /* transaction dictionary */
|
|||||||
* Pass 2:
|
* Pass 2:
|
||||||
* check if required dependency was already added
|
* check if required dependency was already added
|
||||||
* in the transaction.
|
* in the transaction.
|
||||||
*
|
|
||||||
* 1/3: match any virtual pkg in configuration file.
|
|
||||||
*/
|
*/
|
||||||
curpkgd = xbps_find_virtualpkg_conf_in_dict_by_pattern(
|
unsorted = prop_dictionary_get(transd, "unsorted_deps");
|
||||||
transd, "unsorted_deps", reqpkg);
|
if (((curpkgd = xbps_find_virtualpkg_conf_in_array_by_pattern(unsorted, reqpkg)) == NULL) &&
|
||||||
if (curpkgd == NULL) {
|
((curpkgd = xbps_find_pkg_in_array_by_pattern(unsorted, reqpkg)) == NULL) &&
|
||||||
/*
|
((curpkgd = xbps_find_virtualpkg_in_array_by_pattern(unsorted, reqpkg)) == NULL)) {
|
||||||
* 2/3: match any virtual pkg in transaction.
|
|
||||||
*/
|
|
||||||
curpkgd = xbps_find_virtualpkg_in_dict_by_pattern(
|
|
||||||
transd, "unsorted_deps", reqpkg);
|
|
||||||
if (curpkgd == NULL) {
|
|
||||||
/*
|
|
||||||
* 3/3: match a real pkg in transaction.
|
|
||||||
*/
|
|
||||||
curpkgd = xbps_find_pkg_in_dict_by_pattern(
|
|
||||||
transd, "unsorted_deps", reqpkg);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (curpkgd != NULL) {
|
|
||||||
prop_dictionary_get_cstring_nocopy(curpkgd,
|
|
||||||
"pkgver", &pkgver_q);
|
|
||||||
xbps_dbg_printf_append(" (%s queued "
|
|
||||||
"in transaction).\n", pkgver_q);
|
|
||||||
continue;
|
|
||||||
} else {
|
|
||||||
/* error matching required pkgdep */
|
/* error matching required pkgdep */
|
||||||
if (errno && errno != ENOENT) {
|
if (errno && errno != ENOENT) {
|
||||||
rv = errno;
|
rv = errno;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
prop_dictionary_get_cstring_nocopy(curpkgd,
|
||||||
|
"pkgver", &pkgver_q);
|
||||||
|
xbps_dbg_printf_append(" (%s queued "
|
||||||
|
"in transaction).\n", pkgver_q);
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
* Pass 3: find required dependency in repository pool.
|
* Pass 3: find required dependency in repository pool.
|
||||||
|
Loading…
Reference in New Issue
Block a user