Message ID | 20200731160029.34268-1-jakseb.dev@gmail.com |
---|---|
State | Deferred |
Headers | show |
Series | pactree: Compress self-provided optional dependencies | expand |
On 7/31/20 12:00 PM, Sebastian Jakubiak wrote: > Remove `provides X` from `X provides X: ...` lines describing optional > dependencies to make the output more compact. > > Signed-off-by: Sebastian Jakubiak <jakseb.dev@gmail.com> > --- > I noticed that most optional dependencies in the output of `pactree > --optional` have this unneeded repetition. With this patch the > following: > > vim-runtime > ├─bash provides sh: support for some tools and macros (optional) > ├─python provides python: demoserver example tool (optional) > └─gawk provides gawk: mve tools upport (optional) > > will change to: > > vim-runtime > ├─bash provides sh: support for some tools and macros (optional) > ├─python: demoserver example tool (optional) > └─gawk: mve tools upport (optional) Just for the record: these don't "provide themselves" at all. However, pactree might not distinguish between matching on the package name vs. matching on the package provides, since either one is a route to a valid *satisfier*. Looking at pactree.c the "provision" variable in print_text starts life as: dep_pkg = alpm_dbs_find_satisfier() -> depname = alpm_pkg_get_name(dep_pkg) ... The "pkg_provides_itself" function name sounds weird, and furthermore seems to be a *fix* for strcmp(pkg, provision) != 0 not performing its intended purpose since provision can be a freeform string containing e.g. descriptions. (The comment message should specify this, rather than implying it adds a new functionality.) I think you should instead use alpm_dep_from_string to turn the provision string into something you can get a properly formatted name from. Essentially reversing the work from get_pkg_deps.
diff --git a/src/pactree.c b/src/pactree.c index e34ecc8..4bd4601 100644 --- a/src/pactree.c +++ b/src/pactree.c @@ -383,6 +383,14 @@ static int parse_options(int argc, char *argv[]) return 0; } +int pkg_provides_itself(const char *pkg, const char *depstring) +{ + size_t pkglen = strlen(pkg); + return (strncmp(pkg, depstring, pkglen) == 0 && + (depstring[pkglen] == '\0' || + strncmp(": ", depstring + pkglen, 2) == 0)); +} + /* pkg provides provision */ static void print_text(const char *pkg, const char *provision, tdepth *depth, int last, int opt_dep) @@ -419,12 +427,12 @@ static void print_text(const char *pkg, const char *provision, if(!pkg && provision) { printf("%s%s%s%s [unresolvable]%s%s\n", tip, color->leaf1, provision, color->branch1, opt_str, color->off); - } else if(provision && strcmp(pkg, provision) != 0 && *(style->provides) != '\0') { + } else if(provision && *(style->provides) != '\0' && !pkg_provides_itself(pkg, provision)) { printf("%s%s%s%s%s %s%s%s%s\n", tip, color->leaf1, pkg, color->leaf2, style->provides, color->leaf1, provision, opt_str, color->off); } else { - printf("%s%s%s%s%s\n", tip, color->leaf1, pkg, opt_str, color->off); + printf("%s%s%s%s%s\n", tip, color->leaf1, (provision ? provision : pkg), opt_str, color->off); } }
Remove `provides X` from `X provides X: ...` lines describing optional dependencies to make the output more compact. Signed-off-by: Sebastian Jakubiak <jakseb.dev@gmail.com> --- I noticed that most optional dependencies in the output of `pactree --optional` have this unneeded repetition. With this patch the following: vim-runtime ├─bash provides sh: support for some tools and macros (optional) ├─python provides python: demoserver example tool (optional) └─gawk provides gawk: mve tools upport (optional) will change to: vim-runtime ├─bash provides sh: support for some tools and macros (optional) ├─python: demoserver example tool (optional) └─gawk: mve tools upport (optional) src/pactree.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-)