From 3bf20a6116ae3e1a5a3a6907bee7e881b17efb2f Mon Sep 17 00:00:00 2001
From: Peter Kjellerstedt <pkj@axis.com>
Date: Mon, 15 May 2017 11:23:26 +0200
Subject: [PATCH 13/13] Add a new option --alldeps to rpmdeps

This will send the output from rpmfcPrint() to stdout. This is an
alternative to using the --rpmfcdebug option, which will send the same
output to stderr. The two options have totally different use cases
though. While --alldeps is used when the output from rpmfcPrint() is
what is wanted, --rpmfcdebug can be used together with the other
output options, e.g., --requires, without affecting their output.

Upstream-Status: Submitted [https://github.com/rpm-software-management/rpm/pull/220]
Signed-off-by: Peter Kjellerstedt <peter.kjellerstedt@axis.com>
---
 build/rpmfc.c   | 27 ++++++++++++++-------------
 build/rpmfc.h   |  1 -
 tools/rpmdeps.c | 44 +++++++++++++++++++++++++-------------------
 3 files changed, 39 insertions(+), 33 deletions(-)

diff --git a/build/rpmfc.c b/build/rpmfc.c
index c8e2f876a..44f1cdc9a 100644
--- a/build/rpmfc.c
+++ b/build/rpmfc.c
@@ -732,7 +732,6 @@ static rpm_color_t rpmfcColor(const char * fmstr)
 
 void rpmfcPrint(const char * msg, rpmfc fc, FILE * fp)
 {
-    rpm_color_t fcolor;
     int ndx;
     int dx;
     int fx;
@@ -744,21 +743,23 @@ void rpmfcPrint(const char * msg, rpmfc fc, FILE * fp)
 
     if (fc)
     for (fx = 0; fx < fc->nfiles; fx++) {
-	rpmsid cx = fc->fcdictx[fx] + 1; /* id's are one off */
-	fcolor = fc->fcolor[fx];
-	ARGV_t fattrs = fc->fattrs[fx];
-
 	fprintf(fp, "%3d %s", fx, fc->fn[fx]);
-	if (fcolor != RPMFC_BLACK)
+	if (_rpmfc_debug) {
+	    rpmsid cx = fc->fcdictx[fx] + 1; /* id's are one off */
+	    rpm_color_t fcolor = fc->fcolor[fx];
+	    ARGV_t fattrs = fc->fattrs[fx];
+
+	    if (fcolor != RPMFC_BLACK)
 		fprintf(fp, "\t0x%x", fc->fcolor[fx]);
-	else
+	    else
 		fprintf(fp, "\t%s", rpmstrPoolStr(fc->cdict, cx));
-	if (fattrs) {
-	    char *attrs = argvJoin(fattrs, ",");
-	    fprintf(fp, " [%s]", attrs);
-	    free(attrs);
-	} else {
-	    fprintf(fp, " [none]");
+	    if (fattrs) {
+		char *attrs = argvJoin(fattrs, ",");
+		fprintf(fp, " [%s]", attrs);
+		free(attrs);
+	    } else {
+		fprintf(fp, " [none]");
+	    }
 	}
 	fprintf(fp, "\n");
 
diff --git a/build/rpmfc.h b/build/rpmfc.h
index dae8ea5b1..3d87b31cf 100644
--- a/build/rpmfc.h
+++ b/build/rpmfc.h
@@ -45,7 +45,6 @@ typedef const struct rpmfcTokens_s * rpmfcToken;
 
 /** \ingroup rpmfc
  * Print results of file classification.
- * @todo Remove debugging routine.
  * @param msg		message prefix (NULL for none)
  * @param fc		file classifier
  * @param fp		output file handle (NULL for stderr)
diff --git a/tools/rpmdeps.c b/tools/rpmdeps.c
index a414b6343..f260a38c4 100644
--- a/tools/rpmdeps.c
+++ b/tools/rpmdeps.c
@@ -23,6 +23,8 @@ static int print_conflicts;
 
 static int print_obsoletes;
 
+static int print_alldeps;
+
 static void rpmdsPrint(const char * msg, rpmds ds, FILE * fp)
 {
     if (fp == NULL) fp = stderr;
@@ -57,6 +59,8 @@ static struct poptOption optionsTable[] = {
         NULL, NULL },
  { "obsoletes", '\0', POPT_ARG_VAL, &print_obsoletes, -1,
         NULL, NULL },
+ { "alldeps", '\0', POPT_ARG_VAL, &print_alldeps, -1,
+        NULL, NULL },
 
    POPT_AUTOALIAS
    POPT_AUTOHELP
@@ -100,25 +104,27 @@ main(int argc, char *argv[])
     if (rpmfcClassify(fc, av, NULL) || rpmfcApply(fc))
 	goto exit;
 
-    if (_rpmfc_debug)
-	rpmfcPrint(buf, fc, NULL);
-
-    if (print_provides)
-	rpmdsPrint(NULL, rpmfcProvides(fc), stdout);
-    if (print_requires)
-	rpmdsPrint(NULL, rpmfcRequires(fc), stdout);
-    if (print_recommends)
-	rpmdsPrint(NULL, rpmfcRecommends(fc), stdout);
-    if (print_suggests)
-	rpmdsPrint(NULL, rpmfcSuggests(fc), stdout);
-    if (print_supplements)
-	rpmdsPrint(NULL, rpmfcSupplements(fc), stdout);
-    if (print_enhances)
-	rpmdsPrint(NULL, rpmfcEnhances(fc), stdout);
-    if (print_conflicts)
-	rpmdsPrint(NULL, rpmfcConflicts(fc), stdout);
-    if (print_obsoletes)
-	rpmdsPrint(NULL, rpmfcObsoletes(fc), stdout);
+    if (print_alldeps || _rpmfc_debug)
+	rpmfcPrint(NULL, fc, print_alldeps ? stdout : NULL);
+
+    if (!print_alldeps) {
+	if (print_provides)
+	    rpmdsPrint(NULL, rpmfcProvides(fc), stdout);
+	if (print_requires)
+	    rpmdsPrint(NULL, rpmfcRequires(fc), stdout);
+	if (print_recommends)
+	    rpmdsPrint(NULL, rpmfcRecommends(fc), stdout);
+	if (print_suggests)
+	    rpmdsPrint(NULL, rpmfcSuggests(fc), stdout);
+	if (print_supplements)
+	    rpmdsPrint(NULL, rpmfcSupplements(fc), stdout);
+	if (print_enhances)
+	    rpmdsPrint(NULL, rpmfcEnhances(fc), stdout);
+	if (print_conflicts)
+	    rpmdsPrint(NULL, rpmfcConflicts(fc), stdout);
+	if (print_obsoletes)
+	    rpmdsPrint(NULL, rpmfcObsoletes(fc), stdout);
+    }
 
     ec = 0;
 
-- 
2.12.0