scripts

Assortment of various scripts and helpers.
git clone git://bsandro.tech/scripts
Log | Files | Refs

commit 98dd3c4a61900ac7e48ae29ce1a0bd67827e1102
Author: bsandro <brian.drosan@gmail.com>
Date:   Sun,  1 Aug 2021 21:00:57 +0300

Simple scripts to display the dependency tree for the given package.

First version of the script was written in pure posix shell, it is
terribly slow because the query runs for every dependency without any
cache whatsoever. Making an associative array in sh is possible but slow
and doesn't look interesting, so I resorted to the default OpenBSD
scripting language installed by default - perl.
The second version that made with perl is noticeably faster but still
worse than any solution built with sqlports(5).
The logic was to build that tree without installing any additional
packages nor ports snapshot.

Diffstat:
Apkg_tree.pl | 30++++++++++++++++++++++++++++++
Apkg_tree.sh | 31+++++++++++++++++++++++++++++++
2 files changed, 61 insertions(+), 0 deletions(-)

diff --git a/pkg_tree.pl b/pkg_tree.pl @@ -0,0 +1,30 @@ +#!/usr/bin/env perl +use strict; +use warnings; + +# time pkg_tree.pl surf +# 2m48.79s real 0m40.46s user 0m24.75s system + +my %deps_cache; + +sub print_deps { + my $packagename = shift; + my $level = shift; + $level++; + print(" " x $level); + print("`- $packagename\n"); + my $ret_str; + my @ret; + if ($deps_cache{$packagename}) { + @ret = @{$deps_cache{$packagename}}; + } else { + $ret_str = `pkg_info -f $packagename | grep '^\@depend' | cut -d ':' -f 3`; + @ret = split('\n', $ret_str); + @{$deps_cache{$packagename}} = @ret; + } + foreach my $r (@ret) { + print_deps($r, $level); + } +} + +print_deps($ARGV[0], 0); diff --git a/pkg_tree.sh b/pkg_tree.sh @@ -0,0 +1,31 @@ +#!/bin/sh + +# time pkg_tree.sh surf +# 19m57.90s real 9m01.71s user 5m19.42s system + +PACKAGE=$1 + +print_deps() { + _deps=`pkg_info -f ${1} | grep '^@depend' | cut -d ':' -f 3` + if [ "${_deps}" != "" ]; then + for _dep in $_deps; do + if [ $2 -gt 0 ]; then + i=0 + while [ $i -lt $2 ]; do + echo -n " " + i=$(expr $i + 1) + done + echo -n "\`-" + fi + echo $_dep + print_deps $_dep $(expr $2 + 1) + done + fi +} + +if [ "${PACKAGE}" = "" ]; then + echo "usage: ${0} package_name" + exit +fi + +print_deps $PACKAGE 0