Adds the %a format specifier to allow printing of a target's arch
when using --print-format.

Signed-off-by: Jonathan Sköld <[email protected]>
---

Fixed my commit message now that I know how it works, thanks for
the heads up. Modified the man page. I opted to use the phrase 'arch'
to match the field used in PKGBUILDs. I hope this is not too ambiguous
for users. I also changed the comment in util.c to match this.

---
 doc/pacman.8.asciidoc |  5 +++--
 src/pacman/util.c     | 10 ++++++++++
 2 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/doc/pacman.8.asciidoc b/doc/pacman.8.asciidoc
index bb205627..785844ce 100644
--- a/doc/pacman.8.asciidoc
+++ b/doc/pacman.8.asciidoc
@@ -235,8 +235,9 @@ 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: "%n" for pkgname, "%v" for 
pkgver,
-       "%l" for location, "%r" for repository, and "%s" for size. Implies 
'\--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.
+       Implies '\--print'.
 
 
 Upgrade Options (apply to '-S' and '-U')[[UO]]
diff --git a/src/pacman/util.c b/src/pacman/util.c
index 5486e7a5..2b2b27ca 100644
--- a/src/pacman/util.c
+++ b/src/pacman/util.c
@@ -1146,6 +1146,16 @@ void print_packages(const alpm_list_t *packages)
                alpm_pkg_t *pkg = i->data;
                char *string = strdup(config->print_format);
                char *temp = string;
+               /* %a : arch */
+               if(strstr(temp, "%a")) {
+                       const char *arch = alpm_pkg_get_arch(pkg);
+                       if(arch == NULL) {
+                               arch = "";
+                       }
+                       string = strreplace(temp, "%a", arch);
+                       free(temp);
+                       temp = string;
+               }
                /* %n : pkgname */
                if(strstr(temp, "%n")) {
                        string = strreplace(temp, "%n", alpm_pkg_get_name(pkg));
-- 
2.33.0

Reply via email to