On 27/3/22 01:54, Jelle van der Waa wrote:
From: Jelle van der Waa <[email protected]>

Extend --print-format with all expac format strings which can be easily
added without conversions and through a simple C macro.


OK.

Signed-off-by: Jelle van der Waa <[email protected]>
---
  doc/pacman.8.asciidoc |  7 +++++--
  src/pacman/util.c     | 33 +++++++++++++++++++++++----------
  2 files changed, 28 insertions(+), 12 deletions(-)

diff --git a/doc/pacman.8.asciidoc b/doc/pacman.8.asciidoc
index 785844ce..49e392cb 100644
--- a/doc/pacman.8.asciidoc
+++ b/doc/pacman.8.asciidoc
@@ -235,8 +235,11 @@ Transaction Options (apply to '-S', '-R' and '-U')
*\--print-format* <format>::
        Specify a printf-like format to control the output of the '\--print'
-       operation. The possible attributes are: "%a" for arch, "%n" for pkgname,
-       "%v" for pkgver, "%l" for location, "%r" for repository, and "%s" for 
size.
+       operation. The possible attributes are: "%a" for arch, "%d" for
+       description, "%e" for pkgbase, "%f" for filename, "%g" for base64
+       encoded PGP signature, "%h" for sha256sum, "%n" for pkgname, "%p" for
+       packager, "%v" for pkgver, "%l" for location, "%r" for repository, and
+       "%s" for size.
        Implies '\--print'.
diff --git a/src/pacman/util.c b/src/pacman/util.c
index 53833d6f..3b92e678 100644
--- a/src/pacman/util.c
+++ b/src/pacman/util.c
@@ -61,6 +61,13 @@ enum {
        CELL_FREE = (1 << 3)
  };
+#define VAL_FROM_FORMAT_STR(temp, format, func) \
+       if(strstr(temp, format)) { \
+               string = strreplace(temp, format, func(pkg)); \
+               free(temp); \
+               temp = string; \
+       } \
+
  int trans_init(int flags, int check_valid)
  {
        int ret;
@@ -1156,18 +1163,22 @@ void print_packages(const alpm_list_t *packages)
                        free(temp);
                        temp = string;
                }
+               /* %d : description */
+               VAL_FROM_FORMAT_STR(temp, "%d", alpm_pkg_get_desc)
+               /* %e : pkgbase */
+               VAL_FROM_FORMAT_STR(temp, "%e", alpm_pkg_get_base)
+               /* %f : filename */
+               VAL_FROM_FORMAT_STR(temp, "%f", alpm_pkg_get_filename)
+               /* %g : base64 encoded PGP signature */
+               VAL_FROM_FORMAT_STR(temp, "%g", alpm_pkg_get_base64_sig)
+               /* %h : sha25sum */
+               VAL_FROM_FORMAT_STR(temp, "%h", alpm_pkg_get_sha256sum)
                /* %n : pkgname */
-               if(strstr(temp, "%n")) {
-                       string = strreplace(temp, "%n", alpm_pkg_get_name(pkg));
-                       free(temp);
-                       temp = string;
-               }
+               VAL_FROM_FORMAT_STR(temp, "%n", alpm_pkg_get_name)
+               /* %p : packager */
+               VAL_FROM_FORMAT_STR(temp, "%p", alpm_pkg_get_packager)
                /* %v : pkgver */
-               if(strstr(temp, "%v")) {
-                       string = strreplace(temp, "%v", 
alpm_pkg_get_version(pkg));
-                       free(temp);
-                       temp = string;
-               }
+               VAL_FROM_FORMAT_STR(temp, "%v", alpm_pkg_get_version)
                /* %l : location */
                if(strstr(temp, "%l")) {
                        char *pkgloc = pkg_get_location(pkg);
@@ -1195,6 +1206,8 @@ void print_packages(const alpm_list_t *packages)
                        free(size);
                        free(temp);
                }
+               /* %u : url */
+               VAL_FROM_FORMAT_STR(temp, "%u", alpm_pkg_get_url)
                printf("%s\n", string);
                free(string);
        }

Reply via email to