summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbill-auger <mr.j.spam.me@gmail.com>2022-09-19 15:29:06 -0400
committerbill-auger <mr.j.spam.me@gmail.com>2022-09-19 15:40:15 -0400
commitc99e1a220c165a341a89dddbfe38b52d4efd23d5 (patch)
tree3015832c16787b16df407c639fd141bd83d9666e
parentfc47d1313bfa79caa892fd53f0078a402a65881e (diff)
sq - print repo names in `--chain` modeparabola
-rw-r--r--src/pactree.c129
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();