[PATCH] pactree: Implement handling of multiple packages
Sebastian Jakubiak
jakseb.dev at gmail.com
Fri Mar 6 02:10:38 UTC 2020
Make it possible to invoke pactree for multiple packages at once.
Signed-off-by: Sebastian Jakubiak <jakseb.dev at gmail.com>
---
This patch is designed to be applied on top of the one from the parent
message.
src/pactree.c | 51 ++++++++++++++++++++++++++++++++-------------------
1 file changed, 32 insertions(+), 19 deletions(-)
diff --git a/src/pactree.c b/src/pactree.c
index 9f074fe..1775587 100644
--- a/src/pactree.c
+++ b/src/pactree.c
@@ -354,7 +354,7 @@ static int parse_options(int argc, char *argv[])
}
}
- if(!argv[optind] || argv[optind + 1]) {
+ if(!argv[optind]) {
usage();
return 1;
}
@@ -430,12 +430,18 @@ static void print(const char *parentname, const char *pkgname,
}
}
-static void print_start(const char *pkgname, const char *provname)
+static void print_start(void)
{
if(graphviz) {
printf("digraph G { START [color=red, style=filled];\n"
- "node [style=filled, color=green];\n"
- " \"START\" -> \"%s\";\n", pkgname);
+ "node [style=filled, color=green];\n");
+ }
+}
+
+static void print_target(const char *pkgname, const char *provname)
+{
+ if(graphviz) {
+ printf(" \"START\" -> \"%s\";\n", pkgname);
} else {
tdepth d = {
NULL,
@@ -526,7 +532,7 @@ static void walk_deps(alpm_list_t *dblist, alpm_pkg_t *pkg, tdepth *depth, int r
int main(int argc, char *argv[])
{
- int freelist = 0, ret;
+ int freelist = 0, ret, target_ind;
alpm_errno_t err;
const char *target_name;
alpm_pkg_t *pkg;
@@ -560,23 +566,30 @@ int main(int argc, char *argv[])
freelist = 1;
}
- /* we only care about the first non option arg for walking */
- target_name = argv[optind];
-
- pkg = alpm_find_dbs_satisfier(handle, dblist, target_name);
- if(!pkg) {
- fprintf(stderr, "error: package '%s' not found\n", target_name);
- cleanup(1);
- }
+ for(target_ind = optind; argv[target_ind]; ++target_ind) {
+ target_name = argv[target_ind];
+ pkg = alpm_find_dbs_satisfier(handle, dblist, target_name);
+ if(!pkg) {
+ fprintf(stderr, "error: package '%s' not found\n", target_name);
+ cleanup(1);
+ }
+ }
+ print_start();
+
- print_start(alpm_pkg_get_name(pkg), target_name);
-
- tdepth d = {
- NULL,
- NULL,
- 1
- };
- walk_deps(dblist, pkg, &d, reverse);
+ for(target_ind = optind; argv[target_ind]; ++target_ind) {
+ target_name = argv[target_ind];
+ pkg = alpm_find_dbs_satisfier(handle, dblist, target_name);
+
+ print_target(alpm_pkg_get_name(pkg), target_name);
+
+ tdepth d = {
+ NULL,
+ NULL,
+ 1
+ };
+ walk_deps(dblist, pkg, &d, reverse);
+ }
print_end();
--
2.25.0
More information about the pacman-contrib
mailing list