On Mon, Oct 15, 2012 at 02:29:08PM -0400, Andrew Gregory wrote:
Also removes the less helpful provides-specific branch tip.
Old: New: |--pkg |--pkg +--dep1 provides dep5 |--dep1 provides dep5 | |--dep2 | \--dep2 |--dep3 \--dep3 |--dep4 \--dep4
Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com> ---
Hrmmm, I like this -- it's very similar to what util-linux does, with the exception that they use a backquote instead a backslash on the tail, e.g. New: |--pkg |--dep1 provides dep5 | `--dep2 `--dep3 `--dep4 And I think this looks a bit cleaner. I'd like to introduce the option of utf8 line drawing characters along with this -- I can pull this patch (and the previous) if you're cool with this change.
src/util/pactree.c | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-)
diff --git a/src/util/pactree.c b/src/util/pactree.c index ab5d90a..77be629 100644 --- a/src/util/pactree.c +++ b/src/util/pactree.c @@ -36,8 +36,8 @@ typedef struct tdepth { /* output */ struct graph_style { const char *provides; - const char *tip1; - const char *tip2; + const char *tip; + const char *last; const char *limb; int indent; }; @@ -45,7 +45,7 @@ struct graph_style { static struct graph_style graph_default = { " provides", "|--", - "+--", + "\\--", "|", 3 }; @@ -301,8 +301,10 @@ static void cleanup(void) }
/* pkg provides provision */ -static void print_text(const char *pkg, const char *provision, tdepth *depth) +static void print_text(const char *pkg, const char *provision, + tdepth *depth, int last) { + const char* tip = last ? style->last : style->tip; if(!pkg && !provision) { /* not much we can do */ return; @@ -323,14 +325,14 @@ static void print_text(const char *pkg, const char *provision, tdepth *depth)
/* print tip */ if(!pkg && provision) { - printf("%s%s%s%s [unresolvable]%s\n", style->tip1, color->leaf1, + printf("%s%s%s%s [unresolvable]%s\n", tip, color->leaf1, provision, color->branch1, color->off); } else if(provision && strcmp(pkg, provision) != 0) { - printf("%s%s%s%s%s %s%s%s\n", style->tip2, color->leaf1, pkg, + printf("%s%s%s%s%s %s%s%s\n", tip, color->leaf1, pkg, color->leaf2, style->provides, color->leaf1, provision, color->off); } else { - printf("%s%s%s%s\n", style->tip1, color->leaf1, pkg, color->off); + printf("%s%s%s%s\n", tip, color->leaf1, pkg, color->off); } }
@@ -348,12 +350,13 @@ static void print_graph(const char *parentname, const char *pkgname, const char }
/* parent depends on dep which is satisfied by pkg */ -static void print(const char *parentname, const char *pkgname, const char *depname, tdepth *depth) +static void print(const char *parentname, const char *pkgname, + const char *depname, tdepth *depth, int last) { if(graphviz) { print_graph(parentname, pkgname, depname); } else { - print_text(pkgname, depname, depth); + print_text(pkgname, depname, depth, last); } }
@@ -369,7 +372,7 @@ static void print_start(const char *pkgname, const char *provname) NULL, 0 }; - print_text(pkgname, provname, &d); + print_text(pkgname, provname, &d, 0); } }
@@ -412,6 +415,7 @@ static void walk_deps(alpm_list_t *dblist, alpm_pkg_t *pkg, tdepth *depth, int r
for(i = deps; i; i = alpm_list_next(i)) { const char *pkgname = i->data; + int last = alpm_list_next(i) ? 0 : 1;
alpm_pkg_t *dep_pkg = alpm_find_dbs_satisfier(handle, dblist, pkgname);
@@ -419,10 +423,10 @@ static void walk_deps(alpm_list_t *dblist, alpm_pkg_t *pkg, tdepth *depth, int r /* if we've already seen this package, don't print in "unique" output * and don't recurse */ if(!unique) { - print(alpm_pkg_get_name(pkg), alpm_pkg_get_name(dep_pkg), pkgname, depth); + print(alpm_pkg_get_name(pkg), alpm_pkg_get_name(dep_pkg), pkgname, depth, last); } } else { - print(alpm_pkg_get_name(pkg), alpm_pkg_get_name(dep_pkg), pkgname, depth); + print(alpm_pkg_get_name(pkg), alpm_pkg_get_name(dep_pkg), pkgname, depth, last); if(dep_pkg) { tdepth d = { depth, @@ -431,7 +435,7 @@ static void walk_deps(alpm_list_t *dblist, alpm_pkg_t *pkg, tdepth *depth, int r }; depth->next = &d; /* last dep, cut off the limb here */ - if(!alpm_list_next(i)){ + if(last){ if(depth->prev){ depth->prev->next = &d; d.prev = depth->prev; -- 1.7.12.2