diff options
author | Fabian Groffen <grobian@gentoo.org> | 2019-04-07 22:06:20 +0200 |
---|---|---|
committer | Fabian Groffen <grobian@gentoo.org> | 2019-04-07 22:14:35 +0200 |
commit | 199e4f62b4ede5f2319ef6795a15737ac0882d09 (patch) | |
tree | 5a6998481b693ed8e03b82a1662174c1a59293a2 /qatom.c | |
parent | qlop: support standard date output format in parse_date (diff) | |
download | portage-utils-199e4f62b4ede5f2319ef6795a15737ac0882d09.tar.gz portage-utils-199e4f62b4ede5f2319ef6795a15737ac0882d09.tar.bz2 portage-utils-199e4f62b4ede5f2319ef6795a15737ac0882d09.zip |
atoms: add proper support for blockers and USE dependencies
- ignore SLOT in atom_compare when not set on both sides
- parse USE-dependencies, properly removing it from PV
- parse blockers (! and !!) separate from version ranges, such that the
original meaning can be restored and differentiated from
Signed-off-by: Fabian Groffen <grobian@gentoo.org>
Diffstat (limited to 'qatom.c')
-rw-r--r-- | qatom.c | 40 |
1 files changed, 32 insertions, 8 deletions
@@ -16,15 +16,17 @@ #define QATOM_FORMAT "%{CATEGORY} %{PN} %{PV} %[PR] %[SLOT] %[pfx] %[sfx]" -#define QATOM_FLAGS "F:c" COMMON_FLAGS +#define QATOM_FLAGS "F:cp" COMMON_FLAGS static struct option const qatom_long_opts[] = { {"format", a_argument, NULL, 'F'}, {"compare", no_argument, NULL, 'c'}, + {"print", no_argument, NULL, 'p'}, COMMON_LONG_OPTS }; static const char * const qatom_opts_help[] = { "Custom output format (default: " QATOM_FORMAT ")", "Compare two atoms", + "Print reconstructed atom", COMMON_OPTS_HELP }; #define qatom_usage(ret) usage(ret, QATOM_FLAGS, qatom_long_opts, qatom_opts_help, NULL, lookup_applet_idx("qatom")) @@ -92,7 +94,9 @@ qatom_printf(const char *format, const depend_atom *atom, int pverbose) printf("r%i", atom->PR_int); } else if (!strncmp("SLOT", fmt, len)) { if (showit || atom->SLOT) - printf(":%s", atom->SLOT ? atom->SLOT : "-"); + printf(":%s%s", + atom->SLOT ? atom->SLOT : "-", + atom_slotdep_str[atom->slotdep]); } else if (!strncmp("REPO", fmt, len)) { if (showit || atom->REPO) printf("::%s", HN(atom->REPO)); @@ -117,15 +121,17 @@ qatom_printf(const char *format, const depend_atom *atom, int pverbose) int qatom_main(int argc, char **argv) { - enum qatom_atom { _EXPLODE=0, _COMPARE } action = _EXPLODE; + enum qatom_atom { _EXPLODE=0, _COMPARE, _PRINT } action = _EXPLODE; const char *format = QATOM_FORMAT; depend_atom *atom; + depend_atom *atomc; int i; while ((i = GETOPT_LONG(QATOM, qatom, "")) != -1) { switch (i) { case 'F': format = optarg; break; case 'c': action = _COMPARE; break; + case 'p': action = _PRINT; break; COMMON_GETOPTS_CASES(qatom) } } @@ -137,19 +143,37 @@ int qatom_main(int argc, char **argv) err("compare needs even number of arguments"); for (i = optind; i < argc; ++i) { + atom = atom_explode(argv[i]); + if (atom == NULL) { + warnf("invalid atom: %s\n", argv[i]); + continue; + } + switch (action) { case _COMPARE: - printf("%s %s %s\n", argv[i], - booga[atom_compare_str(argv[i], argv[i+1])], argv[i+1]); - ++i; + i++; + atomc = atom_explode(argv[i]); + if (atomc == NULL) { + warnf("invalid atom: %s\n", argv[i]); + break; + } + printf("%s %s ", + atom_to_string(atom), + booga[atom_compare(atom, atomc)]); + printf("%s\n", + atom_to_string(atomc)); + atom_implode(atomc); break; case _EXPLODE: - atom = atom_explode(argv[i]); qatom_printf(format, atom, verbose); putchar('\n'); - atom_implode(atom); + break; + case _PRINT: + printf("%s\n", atom_to_string(atom)); break; } + + atom_implode(atom); } return EXIT_SUCCESS; |