public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-commits] proj/portage-utils:master commit in: tests/qatom/, /, libq/
@ 2019-06-13 18:15 Fabian Groffen
  0 siblings, 0 replies; only message in thread
From: Fabian Groffen @ 2019-06-13 18:15 UTC (permalink / raw
  To: gentoo-commits

commit:     b2418b1406551ce5b540aaf8d332ec53ddd52e01
Author:     Fabian Groffen <grobian <AT> gentoo <DOT> org>
AuthorDate: Thu Jun 13 18:13:57 2019 +0000
Commit:     Fabian Groffen <grobian <AT> gentoo <DOT> org>
CommitDate: Thu Jun 13 18:13:57 2019 +0000
URL:        https://gitweb.gentoo.org/proj/portage-utils.git/commit/?id=b2418b14

libq/atom: make atom_format smarter to unbreak Puppet

The default portage provider in Puppet uses qatom in a rather clumpsy
way.  The newer formatting broke it because they don't use explicit
formatting.  Make atom_format somewhat smarter to unbreak Puppet's
usage.

Signed-off-by: Fabian Groffen <grobian <AT> gentoo.org>

 libq/atom.c        | 38 ++++++++++++++++++++++----------------
 libq/atom.h        |  4 ++--
 qatom.c            |  2 +-
 qcheck.c           |  6 +++---
 qdepends.c         |  6 +++---
 qfile.c            |  4 ++--
 qgrep.c            |  2 +-
 qlist.c            |  4 ++--
 qlop.c             | 24 ++++++++++++------------
 qmerge.c           |  2 +-
 qsearch.c          |  2 +-
 qsize.c            |  2 +-
 quse.c             |  6 +++---
 tests/qatom/dotest | 12 +++++++++---
 14 files changed, 63 insertions(+), 51 deletions(-)

diff --git a/libq/atom.c b/libq/atom.c
index 12a393a..8ce7f18 100644
--- a/libq/atom.c
+++ b/libq/atom.c
@@ -683,7 +683,7 @@ atom_to_string_r(char *buf, size_t buflen, depend_atom *a)
 /**
  * Run printf on an atom.  The format field takes the form:
  *  %{keyword}: Always display the field that matches "keyword" or <unset>
- *  %[keyword]: Only display the field when it's set (or pverbose)
+ *  %[keyword]: Only display the field when it's set
  * The possible "keywords" are:
  *  CATEGORY  P  PN  PV  PVR  PF  PR  SLOT  SUBSLOT  REPO  USE
  *    - these are all the standard portage variables (so see ebuild(5))
@@ -695,14 +695,14 @@ atom_format_r(
 		char *buf,
 		size_t buflen,
 		const char *format,
-		const depend_atom *atom,
-		int pverbose)
+		const depend_atom *atom)
 {
 	char bracket;
 	const char *fmt;
 	const char *p;
 	size_t len;
 	bool showit;
+	bool connected;
 	char *ret;
 
 	if (!atom) {
@@ -725,21 +725,25 @@ atom_format_r(
 			return ret;
 		} else if (fmt != p) {
 			append_buf(buf, buflen, "%.*s", (int)(fmt - p), p);
+			connected = false;
+		} else {
+			connected = true;
 		}
 
 		bracket = fmt[1];
 		if (bracket == '{' || bracket == '[') {
+			connected &= bracket == '[';
 			fmt += 2;
-			p = strchr(fmt, bracket == '{' ? '}' : ']');
-			if (p) {
+			if ((p = strchr(fmt, bracket == '{' ? '}' : ']')) != NULL) {
 				len = p - fmt;
-				showit = (bracket == '{') || pverbose;
+				showit = bracket == '{';
 #define HN(X) (X ? X : "<unset>")
 				if (!strncmp("CATEGORY", fmt, len)) {
+					connected = (p[1] == '%') & (bracket == '[');
 					if (showit || atom->CATEGORY)
 						append_buf(buf, buflen, "%s%s%s%s",
 								BOLD, HN(atom->CATEGORY),
-								bracket == '[' ? "/" : "", NORM);
+								connected ? "/" : "", NORM);
 				} else if (!strncmp("P", fmt, len)) {
 					if (showit || atom->P)
 						append_buf(buf, buflen, "%s%s%s",
@@ -772,21 +776,21 @@ atom_format_r(
 					if (showit || atom->SLOT)
 						append_buf(buf, buflen, "%s%s%s%s",
 								YELLOW,
-								bracket == '[' ? ":" : "",
+								connected ? ":" : "",
 								atom->SLOT ? atom->SLOT : "<unset>",
 								NORM);
 				} else if (!strncmp("SUBSLOT", fmt, len)) {
 					if (showit || atom->SUBSLOT)
 						append_buf(buf, buflen, "%s%s%s%s%s",
 								YELLOW,
-								bracket == '[' ? "/" : "",
+								connected ? "/" : "",
 								atom->SUBSLOT ? atom->SUBSLOT : "",
 								atom_slotdep_str[atom->slotdep],
 								NORM);
 				} else if (!strncmp("REPO", fmt, len)) {
 					if (showit || atom->REPO)
 						append_buf(buf, buflen, "%s%s%s%s",
-								GREEN, bracket == '[' ? "::" : "",
+								GREEN, connected ? "::" : "",
 								HN(atom->REPO), NORM);
 				} else if (!strncmp("pfx", fmt, len)) {
 					if (showit || atom->pfx_op != ATOM_OP_NONE)
@@ -810,12 +814,14 @@ atom_format_r(
 					}
 				} else
 					append_buf(buf, buflen, "<BAD:%.*s>", (int)len, fmt);
-				++p;
+				p++;
 #undef HN
-			} else
+			} else {
 				p = fmt + 1;
-		} else
-			++p;
+			}
+		} else {
+			p++;
+		}
 	}
 #undef append_buf
 
@@ -832,7 +838,7 @@ atom_to_string(depend_atom *a)
 }
 
 char *
-atom_format(const char *format, const depend_atom *atom, int pverbose)
+atom_format(const char *format, const depend_atom *atom)
 {
-	return atom_format_r(_atom_buf, sizeof(_atom_buf), format, atom, pverbose);
+	return atom_format_r(_atom_buf, sizeof(_atom_buf), format, atom);
 }

diff --git a/libq/atom.h b/libq/atom.h
index b24783d..72266d5 100644
--- a/libq/atom.h
+++ b/libq/atom.h
@@ -95,8 +95,8 @@ int atom_compare(const depend_atom *a1, const depend_atom *a2);
 int atom_compare_str(const char * const s1, const char * const s2);
 char *atom_to_string_r(char *buf, size_t buflen, depend_atom *a);
 char *atom_format_r(char *buf, size_t buflen,
-		const char *format, const depend_atom *atom, int pverbose);
+		const char *format, const depend_atom *atom);
 char *atom_to_string(depend_atom *a);
-char *atom_format(const char *format, const depend_atom *atom, int pverbose);
+char *atom_format(const char *format, const depend_atom *atom);
 
 #endif

diff --git a/qatom.c b/qatom.c
index 6228cbc..4ad6116 100644
--- a/qatom.c
+++ b/qatom.c
@@ -96,7 +96,7 @@ int qatom_main(int argc, char **argv)
 			break;
 		}
 		case _EXPLODE:
-			printf("%s\n", atom_format(format, atom, verbose));
+			printf("%s\n", atom_format(format, atom));
 			break;
 		case _PRINT:
 			printf("%s\n", atom_to_string(atom));

diff --git a/qcheck.c b/qcheck.c
index efbb191..8eb1f08 100644
--- a/qcheck.c
+++ b/qcheck.c
@@ -98,7 +98,7 @@ qcheck_process_contents(tree_pkg_ctx *pkg_ctx, struct qcheck_opt_state *state)
 	num_files = num_files_ok = num_files_unknown = num_files_ignored = 0;
 	qcprintf("%sing %s ...\n",
 		(state->qc_update ? "Updat" : "Check"),
-		atom_format("%[CATEGORY]%[PF]", atom, 0));
+		atom_format("%[CATEGORY]%[PF]", atom));
 	if (state->qc_update) {
 		fp_contents_update = tree_pkg_vdb_fopenat_rw(pkg_ctx, "CONTENTS~");
 		if (fp_contents_update == NULL) {
@@ -331,9 +331,9 @@ qcheck_process_contents(tree_pkg_ctx *pkg_ctx, struct qcheck_opt_state *state)
 	}
 	if (state->bad_only && num_files_ok != num_files) {
 		if (verbose)
-			printf("%s\n", atom_format("%[CATEGORY]%[PF]", atom, 0));
+			printf("%s\n", atom_format("%[CATEGORY]%[PF]", atom));
 		else {
-			printf("%s\n", atom_format("%[CATEGORY]%[PN]", atom, 0));
+			printf("%s\n", atom_format("%[CATEGORY]%[PN]", atom));
 		}
 	}
 	qcprintf("  %2$s*%1$s %3$s%4$zu%1$s out of %3$s%5$zu%1$s file%6$s are good",

diff --git a/qdepends.c b/qdepends.c
index f560c31..f5aa5a5 100644
--- a/qdepends.c
+++ b/qdepends.c
@@ -149,7 +149,7 @@ qdepends_results_cb(tree_pkg_ctx *pkg_ctx, void *priv)
 		ret = 1;
 
 		datom = tree_get_atom(pkg_ctx, true);
-		printf("%s:", atom_format(state->format, datom, 0));
+		printf("%s:", atom_format(state->format, datom));
 	}
 
 	xarrayfree_int(state->deps);
@@ -222,7 +222,7 @@ qdepends_results_cb(tree_pkg_ctx *pkg_ctx, void *priv)
 
 					if (!firstmatch) {
 						datom = tree_get_atom(pkg_ctx, true);
-						printf("%s:", atom_format(state->format, datom, 0));
+						printf("%s:", atom_format(state->format, datom));
 					}
 					firstmatch = true;
 
@@ -251,7 +251,7 @@ qdepends_results_cb(tree_pkg_ctx *pkg_ctx, void *priv)
 
 						if (!firstmatch) {
 							datom = tree_get_atom(pkg_ctx, true);
-							printf("%s:", atom_format(state->format, datom, 0));
+							printf("%s:", atom_format(state->format, datom));
 						}
 						firstmatch = true;
 

diff --git a/qfile.c b/qfile.c
index 1480789..1a6b470 100644
--- a/qfile.c
+++ b/qfile.c
@@ -175,7 +175,7 @@ static int qfile_cb(tree_pkg_ctx *pkg_ctx, void *priv)
 						atom = tree_get_atom(pkg_ctx, false);
 						warnp("Could not read real path of \"%s\" (from %s)",
 								fullpath,
-								atom_format("%[CATEGORY]%[PF]", atom, false));
+								atom_format("%[CATEGORY]%[PF]", atom));
 						warn("We'll never know whether \"%s\" was a result "
 								"for your query...", e->name);
 					}
@@ -232,7 +232,7 @@ static int qfile_cb(tree_pkg_ctx *pkg_ctx, void *priv)
 						fmt = "%[CATEGORY]%[PN]";
 					}
 				}
-				printf("%s", atom_format(fmt, atom, false));
+				printf("%s", atom_format(fmt, atom));
 				if (quiet)
 					puts("");
 				else

diff --git a/qgrep.c b/qgrep.c
index 058026e..003ead2 100644
--- a/qgrep.c
+++ b/qgrep.c
@@ -424,7 +424,7 @@ qgrep_cache_cb(tree_pkg_ctx *pkg_ctx, void *priv)
 	if (data->show_name) {
 		if (data->show_repo)
 			patom = tree_get_atom(pkg_ctx, true);
-		atom_format_r(name, sizeof(name), "%[CATEGORY]%[P]%[REPO]", patom, 0);
+		atom_format_r(name, sizeof(name), "%[CATEGORY]%[P]%[REPO]", patom);
 		label = name;
 	} else if (data->show_filename) {
 		label = buf;

diff --git a/qlist.c b/qlist.c
index 0299d54..ab3fb4f 100644
--- a/qlist.c
+++ b/qlist.c
@@ -364,7 +364,7 @@ qlist_cb(tree_pkg_ctx *pkg_ctx, void *priv)
 						state->show_repo ? "%[REPO]" : "");
 			}
 			printf("%s%s\n",
-					atom_format(qfmt, atom, 0),
+					atom_format(qfmt, atom),
 					umapstr(state->show_umap, pkg_ctx));
 		}
 
@@ -374,7 +374,7 @@ qlist_cb(tree_pkg_ctx *pkg_ctx, void *priv)
 
 	if (verbose)
 		printf("%s %sCONTENTS%s:\n",
-				atom_format("%[CATEGORY]%[PF]", atom, 0), DKBLUE, NORM);
+				atom_format("%[CATEGORY]%[PF]", atom), DKBLUE, NORM);
 
 	fp = tree_pkg_vdb_fopenat_ro(pkg_ctx, "CONTENTS");
 	if (fp == NULL)

diff --git a/qlop.c b/qlop.c
index 2aa14a5..bd16018 100644
--- a/qlop.c
+++ b/qlop.c
@@ -621,19 +621,19 @@ static int do_emerge_log(
 					}
 					if (quiet && !flags->do_average) {
 						printf("%s%s%s\n",
-								atom_format(afmt, pkgw->atom, 0),
+								atom_format(afmt, pkgw->atom),
 								flags->do_time ? ": " : "",
 								flags->do_time ?
 									fmt_elapsedtime(flags, elapsed) : "");
 					} else if (flags->do_time) {
 						printf("%s >>> %s: %s\n",
 								fmt_date(flags, pkgw->tbegin, tstart),
-								atom_format(afmt, pkgw->atom, 0),
+								atom_format(afmt, pkgw->atom),
 								fmt_elapsedtime(flags, elapsed));
 					} else if (!flags->do_average) {
 						printf("%s >>> %s\n",
 								fmt_date(flags, pkgw->tbegin, tstart),
-								atom_format(afmt, pkgw->atom, 0));
+								atom_format(afmt, pkgw->atom));
 					}
 					atom_implode(pkgw->atom);
 					xarraydelete(merge_matches, i);
@@ -726,19 +726,19 @@ static int do_emerge_log(
 					}
 					if (quiet && !flags->do_average) {
 						printf("%s%s%s\n",
-								atom_format(afmt, pkgw->atom, 0),
+								atom_format(afmt, pkgw->atom),
 								flags->do_time ? ": " : "",
 								flags->do_time ?
 									fmt_elapsedtime(flags, elapsed) : "");
 					} else if (flags->do_time) {
 						printf("%s <<< %s: %s\n",
 								fmt_date(flags, pkgw->tbegin, tstart),
-								atom_format(afmt, pkgw->atom, 0),
+								atom_format(afmt, pkgw->atom),
 								fmt_elapsedtime(flags, elapsed));
 					} else if (!flags->do_average) {
 						printf("%s <<< %s\n",
 								fmt_date(flags, pkgw->tbegin, tstart),
-								atom_format(afmt, pkgw->atom, 0));
+								atom_format(afmt, pkgw->atom));
 					}
 					atom_implode(pkgw->atom);
 					xarraydelete(unmerge_matches, i);
@@ -800,7 +800,7 @@ static int do_emerge_log(
 			if (flags->do_time) {
 				printf("%s >>> %s: %s...%s ETA: %s\n",
 						fmt_date(flags, pkgw->tbegin, 0),
-						atom_format(afmt, pkgw->atom, 0),
+						atom_format(afmt, pkgw->atom),
 						fmt_elapsedtime(flags, elapsed),
 						p == NULL ? "" : p,
 						maxtime == 0 ? "unknown" :
@@ -808,7 +808,7 @@ static int do_emerge_log(
 			} else {
 				printf("%s >>> %s...%s ETA: %s\n",
 						fmt_date(flags, pkgw->tbegin, 0),
-						atom_format(afmt, pkgw->atom, 0),
+						atom_format(afmt, pkgw->atom),
 						p == NULL ? "" : p,
 						maxtime == 0 ? "unknown" :
 							fmt_elapsedtime(flags, maxtime - elapsed));
@@ -833,14 +833,14 @@ static int do_emerge_log(
 			if (flags->do_time) {
 				printf("%s <<< %s: %s... ETA: %s\n",
 						fmt_date(flags, pkgw->tbegin, 0),
-						atom_format(afmt, pkgw->atom, 0),
+						atom_format(afmt, pkgw->atom),
 						fmt_elapsedtime(flags, elapsed),
 						maxtime == 0 ? "unknown" :
 							fmt_elapsedtime(flags, maxtime - elapsed));
 			} else {
 				printf("%s <<< %s... ETA: %s\n",
 						fmt_date(flags, pkgw->tbegin, 0),
-						atom_format(afmt, pkgw->atom, 0),
+						atom_format(afmt, pkgw->atom),
 						maxtime == 0 ? "unknown" :
 							fmt_elapsedtime(flags, maxtime - elapsed));
 			}
@@ -852,7 +852,7 @@ static int do_emerge_log(
 
 		array_for_each(merge_averages, i, pkg) {
 			printf("%s: %s average for %s%zd%s merge%s\n",
-					atom_format(afmt, pkg->atom, 0),
+					atom_format(afmt, pkg->atom),
 					fmt_elapsedtime(flags, pkg->time / pkg->cnt),
 					GREEN, pkg->cnt, NORM, pkg->cnt == 1 ? "" : "s");
 			total_merges += pkg->cnt;
@@ -860,7 +860,7 @@ static int do_emerge_log(
 		}
 		array_for_each(unmerge_averages, i, pkg) {
 			printf("%s: %s average for %s%zd%s unmerge%s\n",
-					atom_format(afmt, pkg->atom, 0),
+					atom_format(afmt, pkg->atom),
 					fmt_elapsedtime(flags, pkg->time / pkg->cnt),
 					GREEN, pkg->cnt, NORM, pkg->cnt == 1 ? "" : "s");
 			total_unmerges += pkg->cnt;

diff --git a/qmerge.c b/qmerge.c
index c48ecd2..47a6e9b 100644
--- a/qmerge.c
+++ b/qmerge.c
@@ -1465,7 +1465,7 @@ pkg_unmerge(tree_pkg_ctx *pkg_ctx, set *keep,
 	T = "${PWD}/temp";
 
 	printf("%s<<<%s %s\n", YELLOW, NORM,
-			atom_format("%[CATEGORY]%[PF]", tree_get_atom(pkg_ctx, false), 0));
+			atom_format("%[CATEGORY]%[PF]", tree_get_atom(pkg_ctx, false)));
 
 	if (pretend == 100)
 		return 0;

diff --git a/qsearch.c b/qsearch.c
index 1b953ac..db220c7 100644
--- a/qsearch.c
+++ b/qsearch.c
@@ -107,7 +107,7 @@ qsearch_cb(tree_pkg_ctx *pkg_ctx, void *priv)
 			qfmt = "%[CATEGORY]%[PN]";
 		}
 		printf("%s%s%s\n",
-				atom_format(qfmt, atom, 0),
+				atom_format(qfmt, atom),
 				(state->show_name ? "" : " "),
 				(state->show_name ? "" : desc ? desc : ""));
 	}

diff --git a/qsize.c b/qsize.c
index 5e9daaa..ce4acc1 100644
--- a/qsize.c
+++ b/qsize.c
@@ -162,7 +162,7 @@ qsize_cb(tree_pkg_ctx *pkg_ctx, void *priv)
 	if (!state->summary_only) {
 		atom = tree_get_atom(pkg_ctx, 0);
 		printf("%s: %'zu files, %'zu non-files, ",
-				atom_format("%[CATEGORY]%[PF]", atom, 0),
+				atom_format("%[CATEGORY]%[PF]", atom),
 				num_files, num_nonfiles);
 		if (num_ignored)
 			printf("%'zu names-ignored, ", num_ignored);

diff --git a/quse.c b/quse.c
index 8a9f78a..bc99c3b 100644
--- a/quse.c
+++ b/quse.c
@@ -556,7 +556,7 @@ quse_results_cb(tree_pkg_ctx *pkg_ctx, void *priv)
 		}
 
 		if (quiet) {
-			printf("%s\n", atom_format(qfmt, atom, 0));
+			printf("%s\n", atom_format(qfmt, atom));
 		} else if (verbose && !state->do_licence) {
 			/* multi-line result, printing USE-flags with their descs */
 			size_t desclen;
@@ -571,7 +571,7 @@ quse_results_cb(tree_pkg_ctx *pkg_ctx, void *priv)
 				.overlay = NULL,
 			};
 
-			printf("%s\n", atom_format(qfmt, atom, 0));
+			printf("%s\n", atom_format(qfmt, atom));
 
 			q = p = meta->IUSE;
 			buf[0] = '\0';
@@ -654,7 +654,7 @@ quse_results_cb(tree_pkg_ctx *pkg_ctx, void *priv)
 			free(us.retv);
 			free(us.argv);
 		} else {
-			printf("%s: %s\n", atom_format(qfmt, atom, 0), v);
+			printf("%s: %s\n", atom_format(qfmt, atom), v);
 		}
 	}
 

diff --git a/tests/qatom/dotest b/tests/qatom/dotest
index d6b4943..0d04f40 100755
--- a/tests/qatom/dotest
+++ b/tests/qatom/dotest
@@ -23,14 +23,14 @@ test l01 "<unset> pkg <unset>" "pkg"
 test l02 "cat pkg <unset>" "cat/pkg"
 test l03 "cat pkg 123" "cat/pkg-123"
 test l04 "cat pkg 123 r4" "cat/pkg-123-r4"
-test l05 "cat pkg 123 r4 :5" "cat/pkg-123-r4:5"
-test l06 "cat pkg 123 :5" "cat/pkg-123:5"
+test l05 "cat pkg 123 r4 5" "cat/pkg-123-r4:5"
+test l06 "cat pkg 123 5" "cat/pkg-123:5"
 test l07 "cat pkg 123 >=" ">=cat/pkg-123"
 test l07 "cat pkg 123 = *" "=cat/pkg-123*"
 
 # Explicit format.
 test f01 "cat"        -F '%{CATEGORY}' "cat/pkg"
-test f19 "cat/"       -F '%[CATEGORY]' "cat/pkg"
+test f19 "cat"        -F '%[CATEGORY]' "cat/pkg"
 test f02 "<unset>"    -F '%{CATEGORY}' "pkg"
 test f03 ""           -F '%[CATEGORY]' "pkg"
 test f04 "cat"        -F '%{CATEGORY}' "cat/pkg-123-r4:5"
@@ -58,6 +58,12 @@ test f17 "games-rpg eschalon-book-1-demo 106 r1" \
                                        "games-rpg/eschalon-book-1-demo-106-r1"
 test f18 "bla"        -F 'bla'         "cat/pkg-c"  # bug #687416
 test f19 ":pkg-c-1.4" -F ':%{PN}-1.4'  "cat/pkg-c"  # bug #687416
+# Joining format.
+test f20 "cat/pkg"    -F '%[CATEGORY]%[PF]' \
+                                       "cat/pkg"
+test f21 "pkg-123-r4:5::repo" \
+                      -F '%[PF]%[SLOT]%[REPO]' \
+                                       "cat/pkg-123-r4:5::repo"
 
 # Comparison tests
 test c01 "cat/pkg-123-r3 == pkg" \


^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2019-06-13 18:15 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-06-13 18:15 [gentoo-commits] proj/portage-utils:master commit in: tests/qatom/, /, libq/ Fabian Groffen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox