[pacman-dev] [PATCH] pacman: improve backup printing

morganamilo morganamilo at archlinux.org
Mon Aug 16 09:26:17 UTC 2021


The current backup printing does not fit in with the rest of the info at
all. Change to be more consistant.

Old:

Backup Files    :
MODIFIED	/etc/pacman.conf
UNMODIFIED	/etc/makepkg.conf

New:

Backup Files    : /etc/pacman.conf [modified]
                  /etc/makepkg.conf [unmodified]

Signed-off-by: morganamilo <morganamilo at archlinux.org>
---
 src/pacman/package.c | 52 ++++++++++++++++++++++++--------------------
 src/pacman/package.h |  2 +-
 2 files changed, 30 insertions(+), 24 deletions(-)

diff --git a/src/pacman/package.c b/src/pacman/package.c
index eaee3bb0..d4733405 100644
--- a/src/pacman/package.c
+++ b/src/pacman/package.c
@@ -348,7 +348,7 @@ void dump_pkg_full(alpm_pkg_t *pkg, int extra)
 
 	/* Print additional package info if info flag passed more than once */
 	if(from == ALPM_PKG_FROM_LOCALDB && extra) {
-		dump_pkg_backups(pkg);
+		dump_pkg_backups(pkg, cols);
 	}
 
 	/* final newline to separate packages */
@@ -379,21 +379,21 @@ static const char *get_backup_file_status(const char *root,
 
 		/* if checksums don't match, file has been modified */
 		if(strcmp(md5sum, backup->hash) != 0) {
-			ret = "MODIFIED";
+			ret = "[modified]";
 		} else {
-			ret = "UNMODIFIED";
+			ret = "[unmodified]";
 		}
 		free(md5sum);
 	} else {
 		switch(errno) {
 			case EACCES:
-				ret = "UNREADABLE";
+				ret = "[unreadable]";
 				break;
 			case ENOENT:
-				ret = "MISSING";
+				ret = "[missing]";
 				break;
 			default:
-				ret = "UNKNOWN";
+				ret = "[unknown]";
 		}
 	}
 	return ret;
@@ -401,27 +401,33 @@ static const char *get_backup_file_status(const char *root,
 
 /* Display list of backup files and their modification states
  */
-void dump_pkg_backups(alpm_pkg_t *pkg)
+void dump_pkg_backups(alpm_pkg_t *pkg, unsigned short cols)
 {
-	alpm_list_t *i;
+	alpm_list_t *i, *text = NULL;
 	const char *root = alpm_option_get_root(config->handle);
-	printf("%s%s\n%s", config->colstr.title, titles[T_BACKUP_FILES],
-				 config->colstr.nocolor);
-	if(alpm_pkg_get_backup(pkg)) {
-		/* package has backup files, so print them */
-		for(i = alpm_pkg_get_backup(pkg); i; i = alpm_list_next(i)) {
-			const alpm_backup_t *backup = i->data;
-			const char *value;
-			if(!backup->hash) {
-				continue;
-			}
-			value = get_backup_file_status(root, backup);
-			printf("%s\t%s%s\n", value, root, backup->name);
+	/* package has backup files, so print them */
+	for(i = alpm_pkg_get_backup(pkg); i; i = alpm_list_next(i)) {
+		const alpm_backup_t *backup = i->data;
+		const char *value;
+		char *line;
+		size_t needed;
+		if(!backup->hash) {
+			continue;
 		}
-	} else {
-		/* package had no backup files */
-		printf(_("(none)\n"));
+		value = get_backup_file_status(root, backup);
+		needed = strlen(root) + strlen(backup->name) + 1 + strlen(value) + 1;
+		line = malloc(needed);
+		if(!line) {
+			goto cleanup;
+		}
+		sprintf(line, "%s%s %s", root, backup->name, value);
+		text = alpm_list_add(text, line);
 	}
+
+	list_display_linebreak(titles[T_BACKUP_FILES], text, cols);
+
+cleanup:
+	FREELIST(text);
 }
 
 /* List all files contained in a package
diff --git a/src/pacman/package.h b/src/pacman/package.h
index c1f3d5b3..809be776 100644
--- a/src/pacman/package.h
+++ b/src/pacman/package.h
@@ -24,7 +24,7 @@
 
 void dump_pkg_full(alpm_pkg_t *pkg, int extra);
 
-void dump_pkg_backups(alpm_pkg_t *pkg);
+void dump_pkg_backups(alpm_pkg_t *pkg, unsigned short cols);
 void dump_pkg_files(alpm_pkg_t *pkg, int quiet);
 void dump_pkg_changelog(alpm_pkg_t *pkg);
 
-- 
2.32.0



More information about the pacman-dev mailing list