On 03/12/13 at 06:51pm, Connor Behan wrote:
> Calling pacman -Sp is guaranteed not to install a package. So the user's
> IgnorePkg pref is still respected regardless of whether or not we print the
> mirror location. Therefore we might as well do so to give as much information
> as possible. Also fixes an edge case with devtools.
>
> Signed-off-by: Connor Behan <[email protected]>
> ---
This is really a frontend issue. If pacman doesn't want alpm to
ignore packages it should just set ignorepkgs to an empty list.
> lib/libalpm/alpm.h | 1 +
> lib/libalpm/handle.c | 7 +++++++
> lib/libalpm/handle.h | 1 +
> lib/libalpm/package.c | 8 +++++++-
> src/pacman/conf.c | 1 +
> 5 files changed, 17 insertions(+), 1 deletion(-)
>
> diff --git a/lib/libalpm/alpm.h b/lib/libalpm/alpm.h
> index ccbdd1c..ec5716a 100644
> --- a/lib/libalpm/alpm.h
> +++ b/lib/libalpm/alpm.h
> @@ -587,6 +587,7 @@ int alpm_option_set_arch(alpm_handle_t *handle, const
> char *arch);
>
> double alpm_option_get_deltaratio(alpm_handle_t *handle);
> int alpm_option_set_deltaratio(alpm_handle_t *handle, double ratio);
> +int alpm_option_set_print(alpm_handle_t *handle, int print);
>
> int alpm_option_get_checkspace(alpm_handle_t *handle);
> int alpm_option_set_checkspace(alpm_handle_t *handle, int checkspace);
> diff --git a/lib/libalpm/handle.c b/lib/libalpm/handle.c
> index 53c86c5..2d914ca 100644
> --- a/lib/libalpm/handle.c
> +++ b/lib/libalpm/handle.c
> @@ -594,6 +594,13 @@ int SYMEXPORT alpm_option_set_deltaratio(alpm_handle_t
> *handle, double ratio)
> return 0;
> }
>
> +int SYMEXPORT alpm_option_set_print(alpm_handle_t *handle, int print)
> +{
> + CHECK_HANDLE(handle, return -1);
> + handle->print = print;
> + return 0;
> +}
> +
> alpm_db_t SYMEXPORT *alpm_get_localdb(alpm_handle_t *handle)
> {
> CHECK_HANDLE(handle, return NULL);
> diff --git a/lib/libalpm/handle.h b/lib/libalpm/handle.h
> index 5e84d58..413e19a 100644
> --- a/lib/libalpm/handle.h
> +++ b/lib/libalpm/handle.h
> @@ -89,6 +89,7 @@ struct __alpm_handle_t {
> /* options */
> char *arch; /* Architecture of packages we should allow */
> double deltaratio; /* Download deltas if possible; a ratio value
> */
> + int print; /* Treat pkgs as if they will not be installed
> anyway */
> int usesyslog; /* Use syslog instead of logfile? */ /* TODO
> move to frontend */
> int checkspace; /* Check disk space before installing */
> alpm_siglevel_t siglevel; /* Default signature verification level */
> diff --git a/lib/libalpm/package.c b/lib/libalpm/package.c
> index 098c867..ea82148 100644
> --- a/lib/libalpm/package.c
> +++ b/lib/libalpm/package.c
> @@ -762,7 +762,8 @@ alpm_pkg_t SYMEXPORT *alpm_pkg_find(alpm_list_t
> *haystack, const char *needle)
> /** Test if a package should be ignored.
> *
> * Checks if the package is ignored via IgnorePkg, or if the package is
> - * in a group ignored via IgnoreGroup.
> + * in a group ignored via IgnoreGroup. Packages only being printed are
> + * immune from this.
> *
> * @param handle the context handle
> * @param pkg the package to test
> @@ -772,6 +773,11 @@ alpm_pkg_t SYMEXPORT *alpm_pkg_find(alpm_list_t
> *haystack, const char *needle)
> int _alpm_pkg_should_ignore(alpm_handle_t *handle, alpm_pkg_t *pkg)
> {
> alpm_list_t *groups = NULL;
> +
> + /* #FS#34066 - Querying URLs for packages (even ignored ones) should
> succeed */
> + if (handle->print) {
> + return 0;
> + }
>
> /* first see if the package is ignored */
> if(alpm_list_find(handle->ignorepkg, pkg->name, _alpm_fnmatch)) {
> diff --git a/src/pacman/conf.c b/src/pacman/conf.c
> index 815df95..07255cb 100644
> --- a/src/pacman/conf.c
> +++ b/src/pacman/conf.c
> @@ -721,6 +721,7 @@ static int setup_libalpm(void)
> alpm_option_set_checkspace(handle, config->checkspace);
> alpm_option_set_usesyslog(handle, config->usesyslog);
> alpm_option_set_deltaratio(handle, config->deltaratio);
> + alpm_option_set_print(handle, config->print);
>
> alpm_option_set_ignorepkgs(handle, config->ignorepkg);
> alpm_option_set_ignoregroups(handle, config->ignoregrp);
> --
> 1.8.1.5