mirror of
https://github.com/moparisthebest/pacman
synced 2024-11-12 04:15:06 -05:00
Notify of removed package required as optdepend
When a package is being removed, provide a notification (via a callback) if any local package requires it as an optdepend. Signed-off-by: Allan McRae <allan@archlinux.org>
This commit is contained in:
parent
0c2edbdd49
commit
eb9e74ecc7
@ -348,7 +348,10 @@ typedef enum _alpm_event_t {
|
|||||||
/** Disk space usage will be computed for a package */
|
/** Disk space usage will be computed for a package */
|
||||||
ALPM_EVENT_DISKSPACE_START,
|
ALPM_EVENT_DISKSPACE_START,
|
||||||
/** Disk space usage was computed for a package */
|
/** Disk space usage was computed for a package */
|
||||||
ALPM_EVENT_DISKSPACE_DONE
|
ALPM_EVENT_DISKSPACE_DONE,
|
||||||
|
/** An optdepend for another package is being removed
|
||||||
|
* The requiring package and its dependency are passed to the callback */
|
||||||
|
ALPM_EVENT_OPTDEP_REQUIRED
|
||||||
} alpm_event_t;
|
} alpm_event_t;
|
||||||
|
|
||||||
/** Event callback */
|
/** Event callback */
|
||||||
|
@ -157,6 +157,32 @@ static void remove_prepare_keep_needed(alpm_handle_t *handle, alpm_list_t *lp)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Send a callback for any optdepend being removed.
|
||||||
|
*
|
||||||
|
* @param handle the context handle
|
||||||
|
* @param lp list of packages to be removed
|
||||||
|
*/
|
||||||
|
static void remove_notify_needed_optdepends(alpm_handle_t *handle, alpm_list_t *lp)
|
||||||
|
{
|
||||||
|
alpm_list_t *i;
|
||||||
|
|
||||||
|
for(i = _alpm_db_get_pkgcache(handle->db_local); i; i = alpm_list_next(i)) {
|
||||||
|
alpm_pkg_t *pkg = i->data;
|
||||||
|
alpm_list_t *optdeps = alpm_pkg_get_optdepends(pkg);
|
||||||
|
|
||||||
|
if(optdeps && !_alpm_pkg_find(lp, pkg->name)) {
|
||||||
|
alpm_list_t *j;
|
||||||
|
for(j = optdeps; j; j = alpm_list_next(j)) {
|
||||||
|
alpm_depend_t *optdep = j->data;
|
||||||
|
if(_alpm_pkg_find(lp, optdep->name)) {
|
||||||
|
EVENT(handle, ALPM_EVENT_OPTDEP_REQUIRED, pkg, optdep);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Transaction preparation for remove actions.
|
* @brief Transaction preparation for remove actions.
|
||||||
*
|
*
|
||||||
@ -228,6 +254,9 @@ int _alpm_remove_prepare(alpm_handle_t *handle, alpm_list_t **data)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Note packages being removed that are optdepends for installed packages */
|
||||||
|
remove_notify_needed_optdepends(handle, trans->remove);
|
||||||
|
|
||||||
if(!(trans->flags & ALPM_TRANS_FLAG_NODEPS)) {
|
if(!(trans->flags & ALPM_TRANS_FLAG_NODEPS)) {
|
||||||
EVENT(handle, ALPM_EVENT_CHECKDEPS_DONE, NULL, NULL);
|
EVENT(handle, ALPM_EVENT_CHECKDEPS_DONE, NULL, NULL);
|
||||||
}
|
}
|
||||||
|
@ -239,6 +239,10 @@ void cb_event(alpm_event_t event, void *data1, void *data2)
|
|||||||
printf(_("checking available disk space...\n"));
|
printf(_("checking available disk space...\n"));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case ALPM_EVENT_OPTDEP_REQUIRED:
|
||||||
|
printf(_(":: %s optionally requires %s\n"), alpm_pkg_get_name(data1),
|
||||||
|
alpm_dep_compute_string(data2));
|
||||||
|
break;
|
||||||
/* all the simple done events, with fallthrough for each */
|
/* all the simple done events, with fallthrough for each */
|
||||||
case ALPM_EVENT_FILECONFLICTS_DONE:
|
case ALPM_EVENT_FILECONFLICTS_DONE:
|
||||||
case ALPM_EVENT_CHECKDEPS_DONE:
|
case ALPM_EVENT_CHECKDEPS_DONE:
|
||||||
|
Loading…
Reference in New Issue
Block a user