On Wed, Nov 23, 2011 at 9:51 AM, Benedikt Morbach <benedikt.morbach@googlemail.com> wrote:
Signed-off-by: Benedikt Morbach <benedikt.morbach@googlemail.com> --- Can you provide some example output from this?
Overall, I'm not liking what I think this is, as it seems like an extremely narrow implementation of https://bugs.archlinux.org/task/25236 ...
src/pacman/query.c | 11 ++++++++++- src/pacman/util.c | 27 ++++++++++++++++++++------- src/pacman/util.h | 1 + test/pacman/tests/query022.py | 14 ++++++++++++++ 4 files changed, 45 insertions(+), 8 deletions(-) create mode 100644 test/pacman/tests/query022.py
diff --git a/src/pacman/query.c b/src/pacman/query.c index fbff341..0017918 100644 --- a/src/pacman/query.c +++ b/src/pacman/query.c @@ -488,7 +488,16 @@ static int display(alpm_pkg_t *pkg) if(!config->op_q_info && !config->op_q_list && !config->op_q_changelog && !config->op_q_check) { if(!config->quiet) { - printf("%s %s\n", alpm_pkg_get_name(pkg), alpm_pkg_get_version(pkg)); + printf("%s %s", alpm_pkg_get_name(pkg), alpm_pkg_get_version(pkg)); + + alpm_list_t *optrequires; + if(config->op_q_unrequired && config->op_q_optdeps && + (optrequires = alpm_pkg_compute_requiredby(pkg, 1)) != NULL) { + list_display_extra(_(" (optdepend for:"), optrequires, ", ", ")"); + FREELIST(optrequires); + } else { + printf("\n"); + } } else { printf("%s\n", alpm_pkg_get_name(pkg)); } diff --git a/src/pacman/util.c b/src/pacman/util.c index 1f89663..c54975e 100644 --- a/src/pacman/util.c +++ b/src/pacman/util.c @@ -657,16 +657,24 @@ int table_display(const char *title, const alpm_list_t *header,
void list_display(const char *title, const alpm_list_t *list) { + list_display_extra(title, list, NULL, NULL); +} + +void list_display_extra(const char *title, const alpm_list_t *list, + const char *delim, const char *after) +{ const alpm_list_t *i; size_t len = 0;
+ delim = delim ? delim : " "; + if(title) { len = string_length(title) + 1; printf("%s ", title); }
if(!list) { - printf("%s\n", _("None")); + printf("%s", _("None")); } else { const unsigned short maxcols = getcols(); size_t cols = len; @@ -680,20 +688,25 @@ void list_display(const char *title, const alpm_list_t *list) if(maxcols > len && cols + s + 2 >= maxcols) { size_t j; cols = len; - printf("\n"); + putchar('\n'); for (j = 1; j <= len; j++) { - printf(" "); + putchar(' '); } } else if(cols != len) { - /* 2 spaces are added if this is not the first element on a line. */ - printf(" "); - cols += 2; + /* delimiter is added if this is not the first element on a line. */ + fputs(delim, stdout); + cols += strlen(delim); } fputs(str, stdout); cols += s; } - putchar('\n'); } + + if(after) { + fputs(after, stdout); + } + + putchar('\n'); }
void list_display_linebreak(const char *title, const alpm_list_t *list) diff --git a/src/pacman/util.h b/src/pacman/util.h index ca33752..ffff4b5 100644 --- a/src/pacman/util.h +++ b/src/pacman/util.h @@ -63,6 +63,7 @@ void string_display(const char *title, const char *string); double humanize_size(off_t bytes, const char target_unit, const char **label); int table_display(const char *title, const alpm_list_t *header, const alpm_list_t *rows); void list_display(const char *title, const alpm_list_t *list); +void list_display_extra(const char *title, const alpm_list_t *list, const char *delim, const char *after); void list_display_linebreak(const char *title, const alpm_list_t *list); void signature_display(const char *title, alpm_siglist_t *siglist); void display_targets(void); diff --git a/test/pacman/tests/query022.py b/test/pacman/tests/query022.py new file mode 100644 index 0000000..f5e3458 --- /dev/null +++ b/test/pacman/tests/query022.py @@ -0,0 +1,14 @@ +self.description = "Query unneeded deps (installed optdeps not required)" + +pkg = pmpkg("dummy") +pkg.optdepends = ["dep: for foobar"] +self.addpkg2db("local", pkg) + +dep = pmpkg("dep") +self.addpkg2db("local", dep) +dep.reason = 1 + +self.args = "-Qtdn" + +self.addrule("PACMAN_RETCODE=0") +self.addrule("PACMAN_OUTPUT=^dep.*dummy") -- 1.7.7.3