[v3] Print the target arch when using the %a format specifier

Message ID 20210928210902.1966177-1-arch@skold.dev
State Under Review
Delegated to: Andrew Gregory
Headers show
Series [v3] Print the target arch when using the %a format specifier | expand

Commit Message

Jonathan Sköld Sept. 28, 2021, 9:09 p.m. UTC
Adds the %a format specifier to allow printing of a target's arch
when using --print-format.

Signed-off-by: Jonathan Sköld <arch@skold.dev>
---

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(-)

Patch

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));