public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
From: "Fabian Groffen" <grobian@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] proj/portage-utils:master commit in: man/, /, man/include/
Date: Sun,  9 Jun 2019 09:53:22 +0000 (UTC)	[thread overview]
Message-ID: <1560073886.c0b88fe2b32679f1548a280d906b82b1651cd804.grobian@gentoo> (raw)

commit:     c0b88fe2b32679f1548a280d906b82b1651cd804
Author:     Fabian Groffen <grobian <AT> gentoo <DOT> org>
AuthorDate: Sun Jun  9 09:51:26 2019 +0000
Commit:     Fabian Groffen <grobian <AT> gentoo <DOT> org>
CommitDate: Sun Jun  9 09:51:26 2019 +0000
URL:        https://gitweb.gentoo.org/proj/portage-utils.git/commit/?id=c0b88fe2

qgrep: print filename for matches by default, fix atom_compare call

remove very similar vdb callback in favour of generic tree one
format atoms using atom_format for consistency and ease of use
retrieve full atoms when SLOT or REPO matches are attempted

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

 man/include/qgrep.optdesc.yaml |   2 +-
 man/qgrep.1                    |  41 ++++++++---------
 qgrep.c                        | 100 +++++++++++------------------------------
 3 files changed, 47 insertions(+), 96 deletions(-)

diff --git a/man/include/qgrep.optdesc.yaml b/man/include/qgrep.optdesc.yaml
index ad3874d..9716bf0 100644
--- a/man/include/qgrep.optdesc.yaml
+++ b/man/include/qgrep.optdesc.yaml
@@ -1,4 +1,4 @@
 verbose: |
     Prefix each matching line with filename (like \fB-H\fR).  When this
     option is given multiple times, also linenumbers are printed.
-quiet: Ignored for compatibility with other qapplets.
+quiet: Do not prefix each match with filename.

diff --git a/man/qgrep.1 b/man/qgrep.1
index 180b5dd..6701061 100644
--- a/man/qgrep.1
+++ b/man/qgrep.1
@@ -1,5 +1,5 @@
 .\" generated by mkman.py, please do NOT edit!
-.TH qgrep "1" "May 2019" "Gentoo Foundation" "qgrep"
+.TH qgrep "1" "Jun 2019" "Gentoo Foundation" "qgrep"
 .SH NAME
 qgrep \- grep in ebuilds
 .SH SYNOPSIS
@@ -20,66 +20,63 @@ Select non-matching lines.
 \fB\-i\fR, \fB\-\-ignore\-case\fR
 Ignore case distinctions.
 .TP
-\fB\-H\fR, \fB\-\-with\-filename\fR
-Print the filename for each match.
-.TP
 \fB\-N\fR, \fB\-\-with\-name\fR
-Print the package or eclass name for each match.
+Print the filename for each match.
 .TP
 \fB\-c\fR, \fB\-\-count\fR
-Only print a count of matching lines per FILE.
+Print the package or eclass name for each match.
 .TP
 \fB\-l\fR, \fB\-\-list\fR
-Only print FILE names containing matches.
+Only print a count of matching lines per FILE.
 .TP
 \fB\-L\fR, \fB\-\-invert\-list\fR
-Only print FILE names containing no match.
+Only print FILE names containing matches.
 .TP
 \fB\-e\fR, \fB\-\-regexp\fR
-Use PATTERN as a regular expression.
+Only print FILE names containing no match.
 .TP
 \fB\-x\fR, \fB\-\-extended\fR
-Use PATTERN as an extended regular expression.
+Use PATTERN as a regular expression.
 .TP
 \fB\-J\fR, \fB\-\-installed\fR
-Search in installed ebuilds instead of the tree.
+Use PATTERN as an extended regular expression.
 .TP
 \fB\-E\fR, \fB\-\-eclass\fR
-Search in eclasses instead of ebuilds.
+Search in installed ebuilds instead of the tree.
 .TP
 \fB\-s\fR, \fB\-\-skip\-comments\fR
-Skip comments lines.
+Search in eclasses instead of ebuilds.
 .TP
 \fB\-R\fR, \fB\-\-repo\fR
-Print source repository name for each match (implies -N).
+Skip comments lines.
 .TP
 \fB\-S\fR \fI<arg>\fR, \fB\-\-skip\fR \fI<arg>\fR
-Skip lines matching <arg>.
+Print source repository name for each match (implies -N).
 .TP
 \fB\-B\fR \fI<arg>\fR, \fB\-\-before\fR \fI<arg>\fR
-Print <arg> lines of leading context.
+Skip lines matching <arg>.
 .TP
 \fB\-A\fR \fI<arg>\fR, \fB\-\-after\fR \fI<arg>\fR
-Print <arg> lines of trailing context.
+Print <arg> lines of leading context.
 .TP
 \fB\-\-root\fR \fI<arg>\fR
-Set the ROOT env var.
+Print <arg> lines of trailing context.
 .TP
 \fB\-v\fR, \fB\-\-verbose\fR
 Prefix each matching line with filename (like \fB-H\fR).  When this
 option is given multiple times, also linenumbers are printed.
 .TP
 \fB\-q\fR, \fB\-\-quiet\fR
-Ignored for compatibility with other qapplets.
+Do not prefix each match with filename.
 .TP
 \fB\-C\fR, \fB\-\-nocolor\fR
-Don't output color.
+Tighter output; suppress warnings.
 .TP
 \fB\-h\fR, \fB\-\-help\fR
-Print this help and exit.
+Don't output color.
 .TP
 \fB\-V\fR, \fB\-\-version\fR
-Print version and exit.
+Print this help and exit.
 
 .SH "REPORTING BUGS"
 Please report bugs via http://bugs.gentoo.org/

diff --git a/qgrep.c b/qgrep.c
index dff959b..058026e 100644
--- a/qgrep.c
+++ b/qgrep.c
@@ -24,11 +24,10 @@
 #include "xchdir.h"
 #include "xregex.h"
 
-#define QGREP_FLAGS "IiHNclLexJEsRS:B:A:" COMMON_FLAGS
+#define QGREP_FLAGS "IiNclLexJEsRS:B:A:" COMMON_FLAGS
 static struct option const qgrep_long_opts[] = {
 	{"invert-match",  no_argument, NULL, 'I'},
 	{"ignore-case",   no_argument, NULL, 'i'},
-	{"with-filename", no_argument, NULL, 'H'},
 	{"with-name",     no_argument, NULL, 'N'},
 	{"count",         no_argument, NULL, 'c'},
 	{"list",          no_argument, NULL, 'l'},
@@ -398,6 +397,8 @@ qgrep_cache_cb(tree_pkg_ctx *pkg_ctx, void *priv)
 	if (data->include_atoms != NULL) {
 		depend_atom **d;
 		for (d = data->include_atoms; *d != NULL; d++) {
+			if ((*d)->SLOT != NULL || (*d)->REPO != NULL)
+				patom = tree_get_atom(pkg_ctx, true);
 			if (atom_compare(patom, *d) == EQUAL)
 				break;
 		}
@@ -409,6 +410,8 @@ qgrep_cache_cb(tree_pkg_ctx *pkg_ctx, void *priv)
 	cctx = (tree_ctx *)(pkg_ctx->cat_ctx->ctx);
 	if (cctx->cachetype == CACHE_EBUILD) {
 		pfd = cctx->tree_fd;
+	} else if (cctx->cachetype == CACHE_VDB) {
+		pfd = openat(cctx->portroot_fd, data->portdir, O_RDONLY|O_CLOEXEC);
 	} else {
 		pfd = openat(cctx->tree_fd, "../..", O_RDONLY|O_CLOEXEC);
 	}
@@ -419,11 +422,9 @@ qgrep_cache_cb(tree_pkg_ctx *pkg_ctx, void *priv)
 
 	label = NULL;
 	if (data->show_name) {
-		/* this is a super-optimisation, should get it from the full atom */
-		char *repo = data->show_repo ? cctx->repo : NULL;
-		snprintf(name, sizeof(name), "%s%s/%s%s%s%s%s%s",
-				BOLD, patom->CATEGORY, BLUE, patom->P, GREEN,
-				repo ? "::" : "", repo ? repo : "", NORM);
+		if (data->show_repo)
+			patom = tree_get_atom(pkg_ctx, true);
+		atom_format_r(name, sizeof(name), "%[CATEGORY]%[P]%[REPO]", patom, 0);
 		label = name;
 	} else if (data->show_filename) {
 		label = buf;
@@ -435,55 +436,6 @@ qgrep_cache_cb(tree_pkg_ctx *pkg_ctx, void *priv)
 	return ret;
 }
 
-static int
-qgrep_vdb_cb(tree_pkg_ctx *pkg_ctx, void *priv)
-{
-	struct qgrep_grepargs *data = (struct qgrep_grepargs *)priv;
-	char buf[_Q_PATH_MAX];
-	char name[_Q_PATH_MAX];
-	char *label;
-	depend_atom *patom = NULL;
-	int ret;
-	int pfd;
-
-	patom = tree_get_atom(pkg_ctx, false);
-	if (patom == NULL)
-		return EXIT_FAILURE;
-
-	if (data->include_atoms != NULL) {
-		depend_atom **d;
-		for (d = data->include_atoms; *d != NULL; d++) {
-			if (atom_compare(patom, *d) == EQUAL)
-				break;
-		}
-		if (*d == NULL) {
-			atom_implode(patom);
-			return EXIT_FAILURE;
-		}
-	}
-
-	/* get path to portdir */
-	pfd = openat(pkg_ctx->cat_ctx->ctx->portroot_fd,
-			data->portdir, O_RDONLY|O_CLOEXEC);
-
-	/* cat/pkg/pkg-ver.ebuild */
-	snprintf(buf, sizeof(buf), "%s/%s/%s.ebuild",
-			patom->CATEGORY, patom->PN, patom->P);
-
-	label = NULL;
-	if (data->show_name) {
-		snprintf(name, sizeof(name), "%s%s/%s%s%s",
-				BOLD, patom->CATEGORY, BLUE, patom->P, NORM);
-		label = name;
-	} else if (data->show_filename) {
-		label = buf;
-	}
-
-	ret = qgrep_grepat(pfd, buf, label, data);
-
-	return ret;
-}
-
 int qgrep_main(int argc, char **argv)
 {
 	int i;
@@ -499,14 +451,14 @@ int qgrep_main(int argc, char **argv)
 	char *overlay;
 
 	struct qgrep_grepargs args = {
-		.do_count = 0,
-		.do_regex = 0,
-		.do_list = 0,
-		.show_filename = 0,
-		.show_name = 0,
-		.skip_comments = 0,
-		.invert_list = 0,
-		.invert_match = 0,
+		.do_count = false,
+		.do_regex = false,
+		.do_list = false,
+		.show_filename = true,
+		.show_name = false,
+		.skip_comments = false,
+		.invert_list = false,
+		.invert_match = false,
 		.skip_pattern = NULL,
 		.num_lines_before = 0,
 		.num_lines_after = 0,
@@ -536,8 +488,8 @@ int qgrep_main(int argc, char **argv)
 			break;
 		case 'J': do_installed = true;                    break;
 		case 'E': do_eclass = true;                       break;
-		case 'H': args.show_filename = true;              break;
-		case 'N': args.show_name = true;                  break;
+		case 'N': args.show_name = true;
+				  args.show_filename = false;             break;
 		case 's': args.skip_comments = true;              break;
 		case 'R': args.show_repo = args.show_name = true; break;
 		case 'S': args.skip_pattern = optarg;             break;
@@ -562,6 +514,9 @@ int qgrep_main(int argc, char **argv)
 	if (argc == optind)
 		qgrep_usage(EXIT_FAILURE);
 
+	if (quiet)
+		args.show_filename = args.show_name = false;
+
 	if (args.do_list && args.do_count) {
 		warn("%s and --count are incompatible options. The former wins.",
 				(args.invert_list ? "--invert-list" : "--list"));
@@ -677,14 +632,13 @@ int qgrep_main(int argc, char **argv)
 				status = qgrep_grepat(efd, dentry->d_name, label, &args);
 			}
 			closedir(eclass_dir);
-		} else if (do_installed) {
-			tree_ctx *t = tree_open_vdb(portroot, portvdb);
-			if (t != NULL) {
-				status = tree_foreach_pkg_fast(t, qgrep_vdb_cb, &args, NULL);
-				tree_close(t);
+		} else { /* do_ebuild || do_installed */
+			tree_ctx *t;
+			if (do_installed) {
+				t = tree_open_vdb(portroot, portvdb);
+			} else {
+				t = tree_open(portroot, overlay);
 			}
-		} else { /* do_ebuild */
-			tree_ctx *t = tree_open(portroot, overlay);
 			if (t != NULL) {
 				status = tree_foreach_pkg_fast(t, qgrep_cache_cb, &args, NULL);
 				tree_close(t);


             reply	other threads:[~2019-06-09  9:53 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-06-09  9:53 Fabian Groffen [this message]
  -- strict thread matches above, loose matches on Subject: below --
2023-01-30 14:14 [gentoo-commits] proj/portage-utils:master commit in: man/, /, man/include/ Fabian Groffen
2019-12-27 19:16 Fabian Groffen
2019-07-18 18:36 Fabian Groffen
2019-05-17 14:35 Fabian Groffen
2019-05-13 13:39 Fabian Groffen
2019-04-28  7:58 Fabian Groffen
2019-03-29 16:35 Fabian Groffen
2019-03-07 18:20 Fabian Groffen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1560073886.c0b88fe2b32679f1548a280d906b82b1651cd804.grobian@gentoo \
    --to=grobian@gentoo.org \
    --cc=gentoo-commits@lists.gentoo.org \
    --cc=gentoo-dev@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox