If enabled, displays package lists for upgrade, sync and remove
operations formatted as a table. Falls back to default list display if
insufficient terminal columns are available.
diff --git a/doc/pacman.conf.5.txt b/doc/pacman.conf.5.txt
index cb4c589..063d305 100644
--- a/doc/pacman.conf.5.txt
+++ b/doc/pacman.conf.5.txt
@@ -168,6 +168,11 @@ Options
Performs an approximate check for adequate available disk space before
installing packages.
+*VerbosePkgLists*::
+ Displays name, version and size of target packages formatted
+ as a table.
+
+
Repository Sections
-------------------
Each repository section defines a section name and at least one location where
diff --git a/etc/pacman.conf.in b/etc/pacman.conf.in
index 1105db9..bf5925f 100644
--- a/etc/pacman.conf.in
+++ b/etc/pacman.conf.in
@@ -34,6 +34,7 @@ Architecture = auto
#UseDelta
#TotalDownload
#CheckSpace
+#VerbosePkgLists
#
# REPOSITORIES
diff --git a/src/pacman/conf.h b/src/pacman/conf.h
index 92c379f..f440090 100644
--- a/src/pacman/conf.h
+++ b/src/pacman/conf.h
@@ -70,6 +70,7 @@ typedef struct __config_t {
/* conf file options */
unsigned short chomp; /* I Love Candy! */
unsigned short showsize; /* show individual package sizes */
+ unsigned short verbosepkglists; /* format target pkg lists as table */
/* When downloading, display the amount downloaded, rate, ETA, and percent
* downloaded of the total download list */
unsigned short totaldownload;
diff --git a/src/pacman/pacman.c b/src/pacman/pacman.c
index 984bd1b..4cf14bb 100644
--- a/src/pacman/pacman.c
+++ b/src/pacman/pacman.c
@@ -967,6 +967,9 @@ static int _parse_options(char *key, char *value)
} else if(strcmp(key, "ShowSize") == 0) {
config->showsize = 1;
pm_printf(PM_LOG_DEBUG, "config: showsize
");
+ } else if(strcmp(key, "VerbosePkgLists") == 0) {
+ config->verbosepkglists = 1;
+ pm_printf(PM_LOG_DEBUG, "config: verbosepkglists
");
} else if(strcmp(key, "UseDelta") == 0) {
alpm_option_set_usedelta(1);
pm_printf(PM_LOG_DEBUG, "config: usedelta
");
diff --git a/src/pacman/util.c b/src/pacman/util.c
index ad9a336..4209ff7 100644
--- a/src/pacman/util.c
+++ b/src/pacman/util.c
@@ -607,6 +607,62 @@ void list_display_linebreak(const char *title, const alpm_list_t *list)
}
}
+/* creates a header row for use with table_display */
+static alpm_list_t *create_verbose_header(int install)
+{
+ alpm_list_t *res = NULL;
+ char *str;
+
+ pm_asprintf(&str, "%s", _("Pkg Name"));
+ res = alpm_list_add(res, str);
+ if(install) {
+ pm_asprintf(&str, "%s", _("New Version"));
+ res = alpm_list_add(res, str);
+ }
+ pm_asprintf(&str, "%s", _("Old Version"));
+ res = alpm_list_add(res, str);
+ pm_asprintf(&str, "%s", _("Size"));
+ res = alpm_list_add(res, str);
+
+ return res;
+}
+
+/** Generates a table row with package info *
+ *
+ * @param pkg the package
+ * @param install if value is zero format for remove operation,
+ * otherwise for installation
+ *
+ * @return a list of strings representing the current row
+ */
+static alpm_list_t *create_verbose_row(pmpkg_t *pkg, int install)
+{
+ char *str;
+ alpm_list_t *ret = NULL;
+ pmdb_t *ldb = alpm_option_get_localdb();
+
+ /* a row consists of the package name, */
+ pm_asprintf(&str,"%s", alpm_pkg_get_name(pkg));
+ ret = alpm_list_add(ret, str);
+
+ /* (new version,) old version */
+ pm_asprintf(&str,"%s", alpm_pkg_get_version(pkg));
+ ret = alpm_list_add(ret, str);
+
+ if(install) {
+ pmpkg_t *oldpkg = alpm_db_get_pkg(ldb, alpm_pkg_get_name(pkg));
+ pm_asprintf(&str, "%s",
+ oldpkg != NULL ? alpm_pkg_get_version(oldpkg) : "");
+ ret = alpm_list_add(ret, str);
+ }
+
+ /* and size */
+ str = size_to_human_string_mb(alpm_pkg_get_size(pkg));
+ ret = alpm_list_add(ret, str);
+
+ return ret;
+}
+
/* returns package info as a string */
static char *create_list_element(pmpkg_t *pkg)
{
@@ -628,7 +684,7 @@ void display_targets(const alpm_list_t *pkgs, int install)
const char *title;
const alpm_list_t *i;
off_t isize = 0, dlsize = 0;
- alpm_list_t *targets = NULL;
+ alpm_list_t *j, *lp, *targets = NULL;
If enabled, displays package lists for upgrade, sync and remove
operations formatted as a table. Falls back to default list display if
insufficient terminal columns are available.
diff --git a/doc/pacman.conf.5.txt b/doc/pacman.conf.5.txt
index cb4c589..063d305 100644
--- a/doc/pacman.conf.5.txt
+++ b/doc/pacman.conf.5.txt
@@ -168,6 +168,11 @@ Options
Performs an approximate check for adequate available disk space before
installing packages.
+*VerbosePkgLists*::
+ Displays name, version and size of target packages formatted
+ as a table.
+
+
Repository Sections
-------------------
Each repository section defines a section name and at least one location where
diff --git a/etc/pacman.conf.in b/etc/pacman.conf.in
index 1105db9..bf5925f 100644
--- a/etc/pacman.conf.in
+++ b/etc/pacman.conf.in
@@ -34,6 +34,7 @@ Architecture = auto
#UseDelta
#TotalDownload
#CheckSpace
+#VerbosePkgLists
#
# REPOSITORIES
diff --git a/src/pacman/conf.h b/src/pacman/conf.h
index 92c379f..f440090 100644
--- a/src/pacman/conf.h
+++ b/src/pacman/conf.h
@@ -70,6 +70,7 @@ typedef struct __config_t {
/* conf file options */
unsigned short chomp; /* I Love Candy! */
unsigned short showsize; /* show individual package sizes */
+ unsigned short verbosepkglists; /* format target pkg lists as table */
/* When downloading, display the amount downloaded, rate, ETA, and percent
* downloaded of the total download list */
unsigned short totaldownload;
diff --git a/src/pacman/pacman.c b/src/pacman/pacman.c
index 984bd1b..4cf14bb 100644
--- a/src/pacman/pacman.c
+++ b/src/pacman/pacman.c
@@ -967,6 +967,9 @@ static int _parse_options(char *key, char *value)
} else if(strcmp(key, "ShowSize") == 0) {
config->showsize = 1;
pm_printf(PM_LOG_DEBUG, "config: showsize
");
+ } else if(strcmp(key, "VerbosePkgLists") == 0) {
+ config->verbosepkglists = 1;
+ pm_printf(PM_LOG_DEBUG, "config: verbosepkglists
");
} else if(strcmp(key, "UseDelta") == 0) {
alpm_option_set_usedelta(1);
pm_printf(PM_LOG_DEBUG, "config: usedelta
");
diff --git a/src/pacman/util.c b/src/pacman/util.c
index 8f7b5e5..71100dd 100644
--- a/src/pacman/util.c
+++ b/src/pacman/util.c
@@ -607,6 +607,62 @@ void list_display_linebreak(const char *title, const alpm_list_t *list)
}
}
+/* creates a header row for use with table_display */
+static alpm_list_t *create_verbose_header(int install)
+{
+ alpm_list_t *res = NULL;
+ char *str;
+
+ pm_asprintf(&str, "%s", _("Pkg Name"));
+ res = alpm_list_add(res, str);
+ if(install) {
+ pm_asprintf(&str, "%s", _("New Version"));
+ res = alpm_list_add(res, str);
+ }
+ pm_asprintf(&str, "%s", _("Old Version"));
+ res = alpm_list_add(res, str);
+ pm_asprintf(&str, "%s", _("Size"));
+ res = alpm_list_add(res, str);
+
+ return res;
+}
+
+/** Generates a table row with package info *
+ *
+ * @param pkg the package
+ * @param install if value is zero format for remove operation,
+ * otherwise for installation
+ *
+ * @return a list of strings representing the current row
+ */
+static alpm_list_t *create_verbose_row(pmpkg_t *pkg, int install)
+{
+ char *str;
+ alpm_list_t *ret = NULL;
+ pmdb_t *ldb = alpm_option_get_localdb();
+
+ /* a row consists of the package name, */
+ pm_asprintf(&str,"%s", alpm_pkg_get_name(pkg));
+ ret = alpm_list_add(ret, str);
+
+ /* (new version,) old version */
+ pm_asprintf(&str,"%s", alpm_pkg_get_version(pkg));
+ ret = alpm_list_add(ret, str);
+
+ if(install) {
+ pmpkg_t *oldpkg = alpm_db_get_pkg(ldb, alpm_pkg_get_name(pkg));
+ pm_asprintf(&str, "%s",
+ oldpkg != NULL ? alpm_pkg_get_version(oldpkg) : "");
+ ret = alpm_list_add(ret, str);
+ }
+
+ /* and size */
+ str = size_to_human_string_mb(alpm_pkg_get_size(pkg));
+ ret = alpm_list_add(ret, str);
+
+ return ret;
+}
+
/* returns package info as a string */
static char *create_list_element(pmpkg_t *pkg)
{
@@ -628,7 +684,7 @@ void display_targets(const alpm_list_t *pkgs, int install)
const char *title;
const alpm_list_t *i;
off_t isize = 0, dlsize = 0;
- alpm_list_t *targets = NULL;
+ alpm_list_t *j, *lp, *targets = NULL;
Probably just omitted but I assume "Total Removed Size" is there somewhere?
> Signed-off-by: Jakob Gruber <jakob.gruber@gmail.com>
> ---
> *doc/pacman.conf.5.txt | * *5 +++
> *etc/pacman.conf.in * *| * *1 +
> *src/pacman/conf.h * * | * *1 +
> *src/pacman/pacman.c * | * *3 ++
> *src/pacman/util.c * * | * 95 ++++++++++++++++++++++++++++++++++++++++++++++--
> *5 files changed, 101 insertions(+), 4 deletions(-)
>
> diff --git a/doc/pacman.conf.5.txt b/doc/pacman.conf.5.txt
> index cb4c589..063d305 100644
> --- a/doc/pacman.conf.5.txt
> +++ b/doc/pacman.conf.5.txt
> @@ -168,6 +168,11 @@ Options
> * * * *Performs an approximate check for adequate available disk space before
> * * * *installing packages.
>
> +*VerbosePkgLists*::
> + * * * Displays name, version and size of target packages formatted
> + * * * as a table.
during which operations? You explained it in the commit message just not here.
> +
> +
> *Repository Sections
> *-------------------
> *Each repository section defines a section name and at least one location where
> diff --git a/etc/pacman.conf.in b/etc/pacman.conf.in
> index 1105db9..bf5925f 100644
> --- a/etc/pacman.conf.in
> +++ b/etc/pacman.conf.in
> @@ -34,6 +34,7 @@ Architecture = auto
> *#UseDelta
> *#TotalDownload
> *#CheckSpace
> +#VerbosePkgLists
>
> *#
> *# REPOSITORIES
> diff --git a/src/pacman/conf.h b/src/pacman/conf.h
> index 92c379f..f440090 100644
> --- a/src/pacman/conf.h
> +++ b/src/pacman/conf.h
> @@ -70,6 +70,7 @@ typedef struct __config_t {
> * * * */* conf file options */
> * * * *unsigned short chomp; /* I Love Candy! */
> * * * *unsigned short showsize; /* show individual package sizes */
> + * * * unsigned short verbosepkglists; /* format target pkg lists as table */
Part of me is tempted to say we should kill showsize now. I know it
shows up in -Qs and -Ss, but is that even useful? Opinions?
> * * * */* When downloading, display the amount downloaded, rate, ETA, and percent
> * * * * * downloaded of the total download list */
> * * * *unsigned short totaldownload;
> diff --git a/src/pacman/pacman.c b/src/pacman/pacman.c
> index 984bd1b..4cf14bb 100644
> --- a/src/pacman/pacman.c
> +++ b/src/pacman/pacman.c
> @@ -967,6 +967,9 @@ static int _parse_options(char *key, char *value)
> * * * * * * * *} else if(strcmp(key, "ShowSize") == 0) {
> * * * * * * * * * * * *config->showsize = 1;
> * * * * * * * * * * * *pm_printf(PM_LOG_DEBUG, "config: showsize
");
> + * * * * * * * } else if(strcmp(key, "VerbosePkgLists") == 0) {
> + * * * * * * * * * * * config->verbosepkglists = 1;
> + * * * * * * * * * * * pm_printf(PM_LOG_DEBUG, "config: verbosepkglists
");
> * * * * * * * *} else if(strcmp(key, "UseDelta") == 0) {
> * * * * * * * * * * * *alpm_option_set_usedelta(1);
> * * * * * * * * * * * *pm_printf(PM_LOG_DEBUG, "config: usedelta
");
> diff --git a/src/pacman/util.c b/src/pacman/util.c
> index 8f7b5e5..71100dd 100644
> --- a/src/pacman/util.c
> +++ b/src/pacman/util.c
> @@ -607,6 +607,62 @@ void list_display_linebreak(const char *title, const alpm_list_t *list)
> * * * *}
> *}
>
> +/* creates a header row for use with table_display */
> +static alpm_list_t *create_verbose_header(int install)
> +{
> + * * * alpm_list_t *res = NULL;
> + * * * char *str;
> +
> + * * * pm_asprintf(&str, "%s", _("Pkg Name"));
Are we that constrained for size here? "Package Name" would be good;
remember also that these are translated strings and other locales
could very well have longer strings.
> + * * * res = alpm_list_add(res, str);
> + * * * if(install) {
> + * * * * * * * pm_asprintf(&str, "%s", _("New Version"));
> + * * * * * * * res = alpm_list_add(res, str);
> + * * * }
> + * * * pm_asprintf(&str, "%s", _("Old Version"));
> + * * * res = alpm_list_add(res, str);
> + * * * pm_asprintf(&str, "%s", _("Size"));
> + * * * res = alpm_list_add(res, str);
> +
> + * * * return res;
> +}
So your magic NULL, NULL first row is now slightly making sense from
the other patch, but I think you are still not accounting for header
size > max row sizes?
On Fri, Feb 25, 2011 at 4:30 PM, Dan McGee <dpmcgee@gmail.com> wrote:
> On Mon, Feb 21, 2011 at 1:02 PM, Jakob Gruber <jakob.gruber@gmail.com> wrote:
>> diff --git a/src/pacman/conf.h b/src/pacman/conf.h
>> index 92c379f..f440090 100644
>> --- a/src/pacman/conf.h
>> +++ b/src/pacman/conf.h
>> @@ -70,6 +70,7 @@ typedef struct __config_t {
>> * * * */* conf file options */
>> * * * *unsigned short chomp; /* I Love Candy! */
>> * * * *unsigned short showsize; /* show individual package sizes */
>> + * * * unsigned short verbosepkglists; /* format target pkg lists as table */
> Part of me is tempted to say we should kill showsize now. I know it
> shows up in -Qs and -Ss, but is that even useful? Opinions?
>
This reminds me there is no proper way (for scripting) to dump
specific fields of the db.
Maybe if --print-format was supported for -Ss / -Si / -Qs / -Qi, we
would have that, besides making showsize completely obsolete.
02-26-2011, 10:46 AM
Xavier Chantry
New VerbosePkgLists option
On Mon, Feb 21, 2011 at 8:02 PM, Jakob Gruber <jakob.gruber@gmail.com> wrote:
> If enabled, displays package lists for upgrade, sync and remove
> operations formatted as a table. Falls back to default list display if
> insufficient terminal columns are available.
>
> Example output (-Su):
>
> Targets (25):
>
> Pkg Name * * * * *New Version * * * * * Old Version * * * * *Size
>
> asciidoc * * * * *8.6.4-1 * * * * * * * 8.6.3-1 * * * * * 0.15 MB
> chromium * * * * *9.0.597.94-2 * * * * *9.0.597.94-1 * * 17.80 MB
> ...
> wine * * * * * * *1.3.14-1 * * * * * * *1.3.13-2 * * * * 24.67 MB
>
What about switching New and Old ? I've been using that new display
for my last upgrades, and that order always confuses me, it would look
more natural the other way around.
02-26-2011, 10:57 AM
Ivan c00kiemon5ter Kanak
New VerbosePkgLists option
On 26 February 2011 13:46, Xavier Chantry <chantry.xavier@gmail.com> wrote:
> On Mon, Feb 21, 2011 at 8:02 PM, Jakob Gruber <jakob.gruber@gmail.com>
> wrote:
> > If enabled, displays package lists for upgrade, sync and remove
> > operations formatted as a table. Falls back to default list display if
> > insufficient terminal columns are available.
> >
> > Example output (-Su):
> >
> > Targets (25):
> >
> > Pkg Name New Version Old Version Size
> >
> > asciidoc 8.6.4-1 8.6.3-1 0.15 MB
> > chromium 9.0.597.94-2 9.0.597.94-1 17.80 MB
> > ...
> > wine 1.3.14-1 1.3.13-2 24.67 MB
> >
>
> What about switching New and Old ? I've been using that new display
> for my last upgrades, and that order always confuses me, it would look
> more natural the other way around.
>
>
I thought the very same thing when I first saw that new look.
02-28-2011, 03:34 PM
Jakob Gruber
New VerbosePkgLists option
On 02/25/2011 04:30 PM, Dan McGee wrote:
On Mon, Feb 21, 2011 at 1:02 PM, Jakob Gruber<jakob.gruber@gmail.com> wrote:
If enabled, displays package lists for upgrade, sync and remove
operations formatted as a table. Falls back to default list display if
insufficient terminal columns are available.
diff --git a/doc/pacman.conf.5.txt b/doc/pacman.conf.5.txt
index cb4c589..063d305 100644
--- a/doc/pacman.conf.5.txt
+++ b/doc/pacman.conf.5.txt
@@ -168,6 +168,11 @@ Options
Performs an approximate check for adequate available disk space before
installing packages.
+*VerbosePkgLists*::
+ Displays name, version and size of target packages formatted
+ as a table.
during which operations? You explained it in the commit message just not here.
Added.
+
+
Repository Sections
-------------------
Each repository section defines a section name and at least one location where
diff --git a/etc/pacman.conf.in b/etc/pacman.conf.in
index 1105db9..bf5925f 100644
--- a/etc/pacman.conf.in
+++ b/etc/pacman.conf.in
@@ -34,6 +34,7 @@ Architecture = auto
#UseDelta
#TotalDownload
#CheckSpace
+#VerbosePkgLists
#
# REPOSITORIES
diff --git a/src/pacman/conf.h b/src/pacman/conf.h
index 92c379f..f440090 100644
--- a/src/pacman/conf.h
+++ b/src/pacman/conf.h
@@ -70,6 +70,7 @@ typedef struct __config_t {
/* conf file options */
unsigned short chomp; /* I Love Candy! */
unsigned short showsize; /* show individual package sizes */
+ unsigned short verbosepkglists; /* format target pkg lists as table */
Part of me is tempted to say we should kill showsize now. I know it
shows up in -Qs and -Ss, but is that even useful? Opinions?
/* When downloading, display the amount downloaded, rate, ETA, and percent
* downloaded of the total download list */
unsigned short totaldownload;
diff --git a/src/pacman/pacman.c b/src/pacman/pacman.c
index 984bd1b..4cf14bb 100644
--- a/src/pacman/pacman.c
+++ b/src/pacman/pacman.c
@@ -967,6 +967,9 @@ static int _parse_options(char *key, char *value)
} else if(strcmp(key, "ShowSize") == 0) {
config->showsize = 1;
pm_printf(PM_LOG_DEBUG, "config: showsize
");
+ } else if(strcmp(key, "VerbosePkgLists") == 0) {
+ config->verbosepkglists = 1;
+ pm_printf(PM_LOG_DEBUG, "config: verbosepkglists
");
} else if(strcmp(key, "UseDelta") == 0) {
alpm_option_set_usedelta(1);
pm_printf(PM_LOG_DEBUG, "config: usedelta
");
diff --git a/src/pacman/util.c b/src/pacman/util.c
index 8f7b5e5..71100dd 100644
--- a/src/pacman/util.c
+++ b/src/pacman/util.c
@@ -607,6 +607,62 @@ void list_display_linebreak(const char *title, const alpm_list_t *list)
}
}
+/* creates a header row for use with table_display */
+static alpm_list_t *create_verbose_header(int install)
+{
+ alpm_list_t *res = NULL;
+ char *str;
+
+ pm_asprintf(&str, "%s", _("Pkg Name"));
Are we that constrained for size here? "Package Name" would be good;
remember also that these are translated strings and other locales
could very well have longer strings.
Changed the header for the first column to just "Name".
So your magic NULL, NULL first row is now slightly making sense from
the other patch, but I think you are still not accounting for header
size> max row sizes?
Simplified the previous patch.
+
+/** Generates a table row with package info *
+ *
+ * @param pkg the package
+ * @param install if value is zero format for remove operation,
+ * otherwise for installation
+ *
+ * @return a list of strings representing the current row
+ */
+static alpm_list_t *create_verbose_row(pmpkg_t *pkg, int install)
+{
+ char *str;
+ alpm_list_t *ret = NULL;
+ pmdb_t *ldb = alpm_option_get_localdb();
+
+ /* a row consists of the package name, */
+ pm_asprintf(&str,"%s", alpm_pkg_get_name(pkg));
+ ret = alpm_list_add(ret, str);
+
+ /* (new version,) old version */
+ pm_asprintf(&str,"%s", alpm_pkg_get_version(pkg));
+ ret = alpm_list_add(ret, str);
+
+ if(install) {
+ pmpkg_t *oldpkg = alpm_db_get_pkg(ldb, alpm_pkg_get_name(pkg));
+ pm_asprintf(&str, "%s",
+ oldpkg != NULL ? alpm_pkg_get_version(oldpkg) : "");
+ ret = alpm_list_add(ret, str);
+ }
+
+ /* and size */
+ str = size_to_human_string_mb(alpm_pkg_get_size(pkg));
+ ret = alpm_list_add(ret, str);
+
+ return ret;
+}
+
/* returns package info as a string */
static char *create_list_element(pmpkg_t *pkg)
{
@@ -628,7 +684,7 @@ void display_targets(const alpm_list_t *pkgs, int install)
const char *title;
const alpm_list_t *i;
off_t isize = 0, dlsize = 0;
- alpm_list_t *targets = NULL;
+ alpm_list_t *j, *lp, *targets = NULL;
If enabled, displays package lists for upgrade, sync and remove
operations formatted as a table. Falls back to default list display if
insufficient terminal columns are available.
Example output:
:: Starting full system upgrade...
:: Replace libjpeg with testing/libjpeg-turbo? [Y/n]
resolving dependencies...
looking for inter-conflicts...
diff --git a/doc/pacman.conf.5.txt b/doc/pacman.conf.5.txt
index cb4c589..b9639b9 100644
--- a/doc/pacman.conf.5.txt
+++ b/doc/pacman.conf.5.txt
@@ -168,6 +168,10 @@ Options
Performs an approximate check for adequate available disk space before
installing packages.
+*VerbosePkgLists*::
+ Displays name, version and size of target packages formatted
+ as a table for upgrade, sync and remove operations.
+
Repository Sections
-------------------
Each repository section defines a section name and at least one location where
diff --git a/etc/pacman.conf.in b/etc/pacman.conf.in
index 1105db9..bf5925f 100644
--- a/etc/pacman.conf.in
+++ b/etc/pacman.conf.in
@@ -34,6 +34,7 @@ Architecture = auto
#UseDelta
#TotalDownload
#CheckSpace
+#VerbosePkgLists
#
# REPOSITORIES
diff --git a/src/pacman/conf.h b/src/pacman/conf.h
index 92c379f..f440090 100644
--- a/src/pacman/conf.h
+++ b/src/pacman/conf.h
@@ -70,6 +70,7 @@ typedef struct __config_t {
/* conf file options */
unsigned short chomp; /* I Love Candy! */
unsigned short showsize; /* show individual package sizes */
+ unsigned short verbosepkglists; /* format target pkg lists as table */
/* When downloading, display the amount downloaded, rate, ETA, and percent
* downloaded of the total download list */
unsigned short totaldownload;
diff --git a/src/pacman/pacman.c b/src/pacman/pacman.c
index 984bd1b..4cf14bb 100644
--- a/src/pacman/pacman.c
+++ b/src/pacman/pacman.c
@@ -967,6 +967,9 @@ static int _parse_options(char *key, char *value)
} else if(strcmp(key, "ShowSize") == 0) {
config->showsize = 1;
pm_printf(PM_LOG_DEBUG, "config: showsize
");
+ } else if(strcmp(key, "VerbosePkgLists") == 0) {
+ config->verbosepkglists = 1;
+ pm_printf(PM_LOG_DEBUG, "config: verbosepkglists
");
} else if(strcmp(key, "UseDelta") == 0) {
alpm_option_set_usedelta(1);
pm_printf(PM_LOG_DEBUG, "config: usedelta
");
diff --git a/src/pacman/util.c b/src/pacman/util.c
index 65656ff..3cc610f 100644
--- a/src/pacman/util.c
+++ b/src/pacman/util.c
@@ -609,6 +609,58 @@ void list_display_linebreak(const char *title, const alpm_list_t *list)
}
}
+/* creates a header row for use with table_display */
+static alpm_list_t *create_verbose_header(int install)
+{
+ alpm_list_t *res = NULL;
+ char *str;
+
+ pm_asprintf(&str, "%s", _("Name"));
+ res = alpm_list_add(res, str);
+ pm_asprintf(&str, "%s", _("Old Version"));
+ res = alpm_list_add(res, str);
+ if(install) {
+ pm_asprintf(&str, "%s", _("New Version"));
+ res = alpm_list_add(res, str);
+ }
+ pm_asprintf(&str, "%s", _("Size"));
+ res = alpm_list_add(res, str);
+
+ return(res);
+}
+
+/* returns package info as list of strings */
+static alpm_list_t *create_verbose_row(pmpkg_t *pkg, int install)
+{
+ char *str;
+ double size;
+ const char *label;
+ alpm_list_t *ret = NULL;
+ pmdb_t *ldb = alpm_option_get_localdb();
+
+ /* a row consists of the package name, */
+ pm_asprintf(&str, "%s", alpm_pkg_get_name(pkg));
+ ret = alpm_list_add(ret, str);
+
+ /* old and new versions */
+ if(install) {
+ pmpkg_t *oldpkg = alpm_db_get_pkg(ldb, alpm_pkg_get_name(pkg));
+ pm_asprintf(&str, "%s",
+ oldpkg != NULL ? alpm_pkg_get_version(oldpkg) : "");
+ ret = alpm_list_add(ret, str);
+ }
+
+ pm_asprintf(&str, "%s", alpm_pkg_get_version(pkg));
+ ret = alpm_list_add(ret, str);
+
+ /* and size */
+ size = humanize_size(alpm_pkg_get_size(pkg), 'M', 1, &label);
+ pm_asprintf(&str, "%.2f %s", size, label);
+ ret = alpm_list_add(ret, str);
+
+ return(ret);
+}
+
/* returns package info as a string */
static char *create_list_element(pmpkg_t *pkg)
{
@@ -632,12 +684,13 @@ void display_targets(const alpm_list_t *pkgs, int install)
double size;
const alpm_list_t *i;
off_t isize = 0, dlsize = 0;
- alpm_list_t *targets = NULL;
+ alpm_list_t *j, *lp, *header, *targets = NULL;