diff options
author | bill-auger <mr.j.spam.me@gmail.com> | 2022-09-19 15:29:06 -0400 |
---|---|---|
committer | bill-auger <mr.j.spam.me@gmail.com> | 2022-09-19 15:40:15 -0400 |
commit | c99e1a220c165a341a89dddbfe38b52d4efd23d5 (patch) | |
tree | 3015832c16787b16df407c639fd141bd83d9666e | |
parent | fc47d1313bfa79caa892fd53f0078a402a65881e (diff) |
sq - print repo names in `--chain` modeparabola
-rw-r--r-- | src/pactree.c | 129 |
1 files changed, 57 insertions, 72 deletions
diff --git a/src/pactree.c b/src/pactree.c index c4ab68b..b67e4be 100644 --- a/src/pactree.c +++ b/src/pactree.c @@ -36,7 +36,6 @@ typedef struct tdepth { int level; const char *pkgname; const char *provname; - const char *reponame; } tdepth; /* output */ @@ -259,26 +258,6 @@ static void cleanup(int ret) exit(ret); } -static void set_tdepth_reponame(alpm_pkg_t *pkg, tdepth *depth) -{ - const char* pkg_name; - alpm_db_t* repo_db; - const char* repo_name; - - pkg_name = alpm_pkg_get_name(pkg); - repo_db = alpm_pkg_get_db(pkg); - if(!repo_db) { - fprintf(stderr, "error: repo database for '%s' not found\n", pkg_name); - cleanup(1); - } - repo_name = alpm_db_get_name(repo_db); - if(!pkg) { - fprintf(stderr, "error: repo database name for '%s' not found\n", pkg_name); - cleanup(1); - } - depth->reponame = repo_name; -} - static void usage(void) { fprintf(stdout, "pactree v" PACKAGE_VERSION "\n\n" @@ -436,6 +415,46 @@ static int should_show_satisfier(const char *pkg, const char *depstring) return result; } +static void print_chain(const char *repo_name, const char *pkg_name, + const char *provision, tdepth *depth) +{ + if(!!pkg_name || !!provision) + while(depth->prev) + depth = depth->prev; + else + return; + + printf("[%s]", depth->pkgname); + while(depth->next) + { + depth = depth->next; + if(!!provision && strcmp(depth->pkgname, depth->provname) != 0) + if(reverse) + printf("%s(%s)<~%s", style->limb, depth->provname, depth->pkgname); + else + printf("%s~>(%s)%s", depth->pkgname, depth->provname, style->limb); + else + if(reverse) + printf("%s%s", style->limb, depth->pkgname); + else + printf("%s%s", depth->pkgname, style->limb); + } + + if(!pkg_name && !!provision) { + printf("%s [unresolvable]\n", provision); + } else if(!!provision && strcmp(pkg_name, provision) != 0) { + if(reverse) + printf("%s(%s)<~%s/%s\n", style->limb, provision, repo_name, pkg_name); + else + printf("%s/%s~>(%s)%s\n", repo_name, pkg_name, provision, style->limb); + } else { + if(reverse) + printf("%s%s/%s\n", style->limb, repo_name, pkg_name); + else + printf("%s/%s%s\n", repo_name, pkg_name, style->limb); + } +} + /* pkg provides provision */ static void print_text(const char *pkg, const char *provision, tdepth *depth, int last, int opt_dep) @@ -456,32 +475,13 @@ static void print_text(const char *pkg, const char *provision, depth = depth->prev; } printf("%s", color->branch1); - if(style == &graph_chain) - { - printf("[%s]", depth->pkgname); - while(depth->next) - { - depth = depth->next; - if(!!provision && strcmp(depth->pkgname, depth->provname) != 0) - if(reverse) - printf("%s(%s)<~%s", style->limb, depth->provname, depth->pkgname); - else - printf("%s~>(%s)%s", depth->pkgname, depth->provname, style->limb); - else - if(reverse) - printf("%s%s", style->limb, depth->pkgname); - else - printf("%s%s", depth->pkgname, style->limb); - } - } else { - while(depth->next) { - printf("%*s%-*s", style->indent * (depth->level - level), "", - style->indent, style->limb); - level = depth->level + 1; - depth = depth->next; - } - printf("%*s", style->indent * (depth->level - level), ""); + while(depth->next) { + printf("%*s%-*s", style->indent * (depth->level - level), "", + style->indent, style->limb); + level = depth->level + 1; + depth = depth->next; } + printf("%*s", style->indent * (depth->level - level), ""); } /* print tip */ @@ -495,18 +495,6 @@ static void print_text(const char *pkg, const char *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 if(style == &graph_chain) { - if(!!provision && strcmp(pkg, provision) != 0) { - if(reverse) - printf("%s(%s)<~%s/%s\n", style->limb, provision, depth->reponame, pkg); - else - printf("%s/%s~>(%s)%s\n", depth->reponame, pkg, provision, style->limb); - } else { - if(reverse) - printf("%s%s/%s\n", style->limb, depth->reponame, pkg); - else - printf("%s/%s%s\n", depth->reponame, pkg, style->limb); - } } else { printf("%s%s%s%s%s\n", tip, color->leaf1, provision ? provision : pkg, opt_str, color->off); } @@ -549,13 +537,9 @@ static void print_start(const char *pkgname, const char *provname) NULL, 0, "", - "", "" }; - if(style == &graph_chain) - return; - print_text(pkgname, provname, &d, 0, 0); } } @@ -600,6 +584,7 @@ static void print_dep_list(alpm_list_t *deps, alpm_list_t *dblist, alpm_pkg_t *p { alpm_list_t *i; int new_optional; + alpm_db_t* repo_db; if(optional > 0) { /* decrease the depth by 1 */ @@ -622,18 +607,20 @@ static void print_dep_list(alpm_list_t *deps, alpm_list_t *dblist, alpm_pkg_t *p print(alpm_pkg_get_name(pkg), alpm_pkg_get_name(dep_pkg), pkgname, depth, last, opt_dep); } } else { - print(alpm_pkg_get_name(pkg), alpm_pkg_get_name(dep_pkg), pkgname, depth, last, opt_dep); + if(style == &graph_chain) { + repo_db = alpm_pkg_get_db(dep_pkg); + print_chain(alpm_db_get_name(repo_db), alpm_pkg_get_name(dep_pkg), pkgname, depth); + } else { + print(alpm_pkg_get_name(pkg), alpm_pkg_get_name(dep_pkg), pkgname, depth, last, opt_dep); + } if(dep_pkg) { tdepth d = { depth, NULL, depth->level + 1, alpm_pkg_get_name(dep_pkg), - pkgname, - "" + pkgname }; - if(style == &graph_chain) - set_tdepth_reponame(dep_pkg, &d); depth->next = &d; /* last dep, cut off the limb here */ if(last && style != &graph_chain) { @@ -733,18 +720,16 @@ int main(int argc, char *argv[]) } const char *pkgname = alpm_pkg_get_name(pkg); - print_start(pkgname, target_name); + if(style != &graph_chain) + print_start(pkgname, target_name); tdepth d = { NULL, NULL, 1, pkgname, - target_name, - "" + target_name }; - if(style == &graph_chain) - set_tdepth_reponame(pkg, &d); walk_deps(dblist, pkg, &d, reverse, opt_level); print_end(); |