[v2] pactree: Hide dependency satisfiers in more cases

Message ID 20200902174108.73478-1-jakseb.dev@gmail.com
State Accepted, archived
Headers show
Series [v2] pactree: Hide dependency satisfiers in more cases | expand

Commit Message

Sebastian Jakubiak Sept. 2, 2020, 5:41 p.m. UTC
Pactree takes care not to print both a dependency and the package to
which it resolves if they are equal. Extend (fix?) this to cover
versioned dependencies and optional dependencies containing
descriptions, so that e.g. `gnupg provides gnupg>=2` and `clang provides
clang: for qdoc` will be made more compact.

Implementation suggested by Eli Schwartz.

Signed-off-by: Sebastian Jakubiak <jakseb.dev@gmail.com>
---

Note that, in addition to the completely changed commit message and
implementation, this version produces compact output for more cases than
v1. To get v1's behavior, the condition should be changed to:

    result = dep->mod != ALPM_DEP_MOD_ANY || strcmp...

 src/pactree.c | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)

Comments

Daniel M. Capella Sept. 2, 2020, 7:40 p.m. UTC | #1
On Wed Sep 2, 2020 at 1:41 PM EDT, Sebastian Jakubiak wrote:
> Pactree takes care not to print both a dependency and the package to
> which it resolves if they are equal. Extend (fix?) this to cover
> versioned dependencies and optional dependencies containing
> descriptions, so that e.g. `gnupg provides gnupg>=2` and `clang provides
> clang: for qdoc` will be made more compact.
>
> Implementation suggested by Eli Schwartz.
>
> Signed-off-by: Sebastian Jakubiak <jakseb.dev@gmail.com>
> ---
>
> Note that, in addition to the completely changed commit message and
> implementation, this version produces compact output for more cases than
> v1. To get v1's behavior, the condition should be changed to:
>
> result = dep->mod != ALPM_DEP_MOD_ANY || strcmp...
>
> src/pactree.c | 14 ++++++++++++--
> 1 file changed, 12 insertions(+), 2 deletions(-)
>
> diff --git a/src/pactree.c b/src/pactree.c
> index e34ecc84..ad3dd737 100644
> --- a/src/pactree.c
> +++ b/src/pactree.c
> @@ -383,6 +383,16 @@ static int parse_options(int argc, char *argv[])
> return 0;
> }
>  
> +static int should_show_satisfier(const char *pkg, const char
> *depstring)
> +{
> + int result;
> + alpm_depend_t *dep = alpm_dep_from_string(depstring);
> + if(!dep) return 1;
> + result = strcmp(pkg, dep->name) != 0;
> + free(dep);
> + return result;
> +}
> +
> /* pkg provides provision */
> static void print_text(const char *pkg, const char *provision,
> tdepth *depth, int last, int opt_dep)
> @@ -419,12 +429,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' &&
> should_show_satisfier(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);
> }
> }
>  
> --
> 2.28.0

Merged, thanks!

--
Best,
Daniel <https://danielcapella.com>

Patch

diff --git a/src/pactree.c b/src/pactree.c
index e34ecc84..ad3dd737 100644
--- a/src/pactree.c
+++ b/src/pactree.c
@@ -383,6 +383,16 @@  static int parse_options(int argc, char *argv[])
 	return 0;
 }
 
+static int should_show_satisfier(const char *pkg, const char *depstring)
+{
+	int result;
+	alpm_depend_t *dep = alpm_dep_from_string(depstring);
+	if(!dep) return 1;
+	result = strcmp(pkg, dep->name) != 0;
+	free(dep);
+	return result;
+}
+
 /* pkg provides provision */
 static void print_text(const char *pkg, const char *provision,
 		tdepth *depth, int last, int opt_dep)
@@ -419,12 +429,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' && should_show_satisfier(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);
 	}
 }