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 <connor.behan@gmail.com> ---
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