[1/2] pactree: Add --debug

Message ID 20200103215701.2814-1-develinthedetail@gmail.com
State Superseded, archived
Headers show
Series [1/2] pactree: Add --debug | expand

Commit Message

Edward E Jan. 3, 2020, 9:56 p.m. UTC
Signed-off-by: Edward E <develinthedetail@gmail.com>
---
 doc/pactree.8.txt |  3 +++
 src/pactree.c     | 47 ++++++++++++++++++++++++++++++++++++++++++++++-
 2 files changed, 49 insertions(+), 1 deletion(-)

Patch

diff --git a/doc/pactree.8.txt b/doc/pactree.8.txt
index b177788..57a91cb 100644
--- a/doc/pactree.8.txt
+++ b/doc/pactree.8.txt
@@ -61,6 +61,9 @@  Options
 *\--config <file>*::
 	Specify an alternate pacman configuration file.
 
+*\--debug*::
+	Print log messages produced by libalpm.
+
 
 See Also
 --------
diff --git a/src/pactree.c b/src/pactree.c
index a862f9e..8b77f05 100644
--- a/src/pactree.c
+++ b/src/pactree.c
@@ -78,6 +78,8 @@  struct color_choices {
 	const char *branch2;
 	const char *leaf1;
 	const char *leaf2;
+	const char *error;
+	const char *info;
 	const char *off;
 };
 
@@ -86,6 +88,8 @@  static struct color_choices use_color = {
 	"\033[0;37m", /* white */
 	"\033[1;32m", /* bold green */
 	"\033[0;32m", /* green */
+	"\033[1;31m", /* bold red */
+	"\033[1;36m", /* bold cyan */
 	"\033[0m"
 };
 
@@ -94,12 +98,15 @@  static struct color_choices no_color = {
 	"",
 	"",
 	"",
+	"",
+	"",
 	""
 };
 
 /* long operations */
 enum {
-	OP_CONFIG = 1000
+	OP_CONFIG = 1000,
+	OP_DEBUG
 };
 
 /* globals */
@@ -115,9 +122,38 @@  static int max_depth = -1;
 static int reverse = 0;
 static int unique = 0;
 static int searchsyncs = 0;
+static int debug = 0;
 static const char *dbpath = DBPATH;
 static const char *configfile = CONFFILE;
 
+void cb_log(alpm_loglevel_t level, const char *fmt, va_list args)
+{
+	const char *log_color = "";
+	const char *log_title = "";
+
+	switch(level) {
+		case ALPM_LOG_ERROR:
+			log_color = color->error;
+			log_title = "error: ";
+			break;
+		case ALPM_LOG_WARNING:
+			log_color = color->error;
+			log_title = "warning: ";
+			break;
+		case ALPM_LOG_DEBUG:
+			log_color = color->info;
+			log_title = "debug: ";
+			break;
+		case ALPM_LOG_FUNCTION:
+			log_color = color->info;
+			log_title = "function: ";
+			break;
+		}
+
+	fprintf(stderr, "%s%s%s", log_color, log_title, color->off);
+	vfprintf(stderr, fmt, args);
+}
+
 /* Trim whitespace and newlines from a string
  */
 static size_t strtrim(char *str)
@@ -222,6 +258,7 @@  static void usage(void)
 			"  -s, --sync           search sync databases instead of local\n"
 			"  -u, --unique         show dependencies with no duplicates (implies -l)\n"
 			"  -v, --version        display the version\n"
+			"      --debug          display debug messages\n"
 			"      --config <path>  set an alternate configuration file\n");
 }
 
@@ -249,6 +286,7 @@  static int parse_options(int argc, char *argv[])
 		{"version", no_argument,          0, 'v'},
 
 		{"config",  required_argument,    0, OP_CONFIG},
+		{"debug",   no_argument,          0, OP_DEBUG},
 		{0, 0, 0, 0}
 	};
 
@@ -269,6 +307,9 @@  static int parse_options(int argc, char *argv[])
 			case OP_CONFIG:
 				configfile = optarg;
 				break;
+			case OP_DEBUG:
+				debug = 1;
+				break;
 			case 'b':
 				dbpath = optarg;
 				break;
@@ -500,6 +541,10 @@  int main(int argc, char *argv[])
 		cleanup(1);
 	}
 
+	if(debug) {
+		alpm_option_set_logcb(handle, cb_log);
+	}
+
 	if(searchsyncs) {
 		if(register_syncs() != 0) {
 			cleanup(1);