Make it possible to overwrite the "automatic-install" pkg object via xbps_init().

Two new booleans were added to struct xbps_handle: install_reason_{auto,manual}.
The backend is able to force auto or manual installation for a package (and
dependencies that were installed/updated) by setting to true any of those
booleans. Bump XBPS_RELVER.
This commit is contained in:
Juan RP 2011-02-26 11:11:45 +01:00
parent 2c644c6587
commit 8191a1511c
2 changed files with 27 additions and 10 deletions

View File

@ -53,7 +53,7 @@
* @def XBPS_RELVER * @def XBPS_RELVER
* Current library release date. * Current library release date.
*/ */
#define XBPS_RELVER "20110224" #define XBPS_RELVER "20110225"
/** /**
* @def XBPS_META_PATH * @def XBPS_META_PATH
@ -193,6 +193,23 @@ struct xbps_handle {
* Set to true to enable debugging messages to stderr. * Set to true to enable debugging messages to stderr.
*/ */
bool with_debug; bool with_debug;
/**
* @var install_reason_auto
*
* Set to true to make installed or updated target package
* (and its dependencies) marked with automatic installation,
* thus it will be found as orphan if no packages are depending
* on it.
*/
bool install_reason_auto;
/**
* @var install_reason_manual
*
* Set to true to make installed or updated target package
* (and its dependencies) marked with manual installation, thus
* it will never will be found as orphan.
*/
bool install_reason_manual;
}; };
/** /**

View File

@ -49,7 +49,6 @@ xbps_register_pkg(prop_dictionary_t pkgrd, bool automatic)
const char *pkgname, *version, *desc, *pkgver; const char *pkgname, *version, *desc, *pkgver;
char *plist; char *plist;
int rv = 0; int rv = 0;
bool autoinst = false;
xhp = xbps_handle_get(); xhp = xbps_handle_get();
plist = xbps_xasprintf("%s/%s/%s", xhp->rootdir, plist = xbps_xasprintf("%s/%s/%s", xhp->rootdir,
@ -93,14 +92,15 @@ xbps_register_pkg(prop_dictionary_t pkgrd, bool automatic)
rv = EINVAL; rv = EINVAL;
goto out; goto out;
} }
if (!prop_dictionary_get_bool(pkgd, if (xhp->install_reason_auto)
"automatic-install", &autoinst)) { automatic = true;
if (!prop_dictionary_set_bool(pkgd, else if (xhp->install_reason_manual)
"automatic-install", automatic)) { automatic = false;
prop_object_release(pkgd); if (!prop_dictionary_set_bool(pkgd, "automatic-install",
rv = EINVAL; automatic)) {
goto out; prop_object_release(pkgd);
} rv = EINVAL;
goto out;
} }
if (provides) { if (provides) {
if (!prop_dictionary_set(pkgd, "provides", provides)) { if (!prop_dictionary_set(pkgd, "provides", provides)) {