[v2,1/2] pactree: Add --debug

Message ID 20200107011643.19462-1-develinthedetail@gmail.com
State Accepted, archived
Delegated to: Johannes Löthberg
Headers show
Series [v2,1/2] pactree: Add --debug | expand

Commit Message

Edward E Jan. 7, 2020, 1:16 a.m. UTC
Signed-off-by: Edward E <develinthedetail@gmail.com>
---

Regarding colors, now cb_log() simply follows pacman's lead. Also changed
from v1: re-ordered longopts in usage(), as well as OP_* getopt switch cases.
I don't know how important alphabetized options are, hope it makes sense
to do this now while I'm at it?

 doc/pactree.8.txt |  3 +++
 src/pactree.c     | 49 ++++++++++++++++++++++++++++++++++++++++++-----
 2 files changed, 47 insertions(+), 5 deletions(-)

Comments

Johannes Löthberg Feb. 2, 2020, 3:09 p.m. UTC | #1
Excerpts from Edward E's message of January 7, 2020 2:16:
> Signed-off-by: Edward E <develinthedetail@gmail.com>
> ---
> 
> Regarding colors, now cb_log() simply follows pacman's lead. Also changed
> from v1: re-ordered longopts in usage(), as well as OP_* getopt switch cases.
> I don't know how important alphabetized options are, hope it makes sense
> to do this now while I'm at it?
> 
>  doc/pactree.8.txt |  3 +++
>  src/pactree.c     | 49 ++++++++++++++++++++++++++++++++++++++++++-----
>  2 files changed, 47 insertions(+), 5 deletions(-)
> 

Hey,

Sorry for the delay, looks good, thanks!

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..feac956 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 *warning;
 	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;33m", /* bold yellow */
 	"\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,32 @@  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)
+{
+	switch(level) {
+		case ALPM_LOG_ERROR:
+			fprintf(stderr, "%s%s%s", color->error, "error: ",
+					color->off);
+			break;
+		case ALPM_LOG_WARNING:
+			fprintf(stderr, "%s%s%s", color->warning, "warning: ",
+					color->off);
+			break;
+		case ALPM_LOG_DEBUG:
+			fprintf(stderr, "debug: ");
+			break;
+		case ALPM_LOG_FUNCTION:
+			fprintf(stderr, "function: ");
+			break;
+		}
+
+	vfprintf(stderr, fmt, args);
+}
+
 /* Trim whitespace and newlines from a string
  */
 static size_t strtrim(char *str)
@@ -222,7 +252,8 @@  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"
-			"      --config <path>  set an alternate configuration file\n");
+			"      --config <path>  set an alternate configuration file\n"
+			"      --debug          display debug messages\n");
 }
 
 static void version(void)
@@ -249,6 +280,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}
 	};
 
@@ -263,12 +295,15 @@  static int parse_options(int argc, char *argv[])
 		}
 
 		switch(opt) {
-			case 'a':
-				style = &graph_default;
-				break;
 			case OP_CONFIG:
 				configfile = optarg;
 				break;
+			case OP_DEBUG:
+				debug = 1;
+				break;
+			case 'a':
+				style = &graph_default;
+				break;
 			case 'b':
 				dbpath = optarg;
 				break;
@@ -500,6 +535,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);