Linux Archive

Linux Archive (http://www.linux-archive.org/)
-   ArchLinux Pacman Development (http://www.linux-archive.org/archlinux-pacman-development/)
-   -   pactree: style last branch node differently (http://www.linux-archive.org/archlinux-pacman-development/712547-pactree-style-last-branch-node-differently.html)

Dave Reisner 10-15-2012 06:53 PM

pactree: style last branch node differently
 
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
", style->tip1, color->leaf1,
> + printf("%s%s%s%s [unresolvable]%s
", tip, color->leaf1,
> provision, color->branch1, color->off);
> } else if(provision && strcmp(pkg, provision) != 0) {
> - printf("%s%s%s%s%s %s%s%s
", style->tip2, color->leaf1, pkg,
> + printf("%s%s%s%s%s %s%s%s
", tip, color->leaf1, pkg,
> color->leaf2, style->provides, color->leaf1, provision,
> color->off);
> } else {
> - printf("%s%s%s%s
", style->tip1, color->leaf1, pkg, color->off);
> + printf("%s%s%s%s
", 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
>
>


All times are GMT. The time now is 01:25 PM.

VBulletin, Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO ©2007, Crawlability, Inc.