commit c8b1dae3750bdaf87bf6d7d11f8c4e0c1407f1a4
parent 5b26d81b729ad5835d1f026812b182e289adb077
Author: Jacob R. Edwards <n/a>
Date: Tue, 16 Nov 2021 23:25:37 -0800
Update OpenBSD package functions and add package scripts
- Remove pkg_depend, which was created because pkg_tree previously
only worked on installed packages
- Use awk for most everything in pkg_list
- Add pkg_tree and pkg_root scripts
- Update pt and pr rc functions to use the new scripts
- Disable progress meter with the pa and pt functions
- Remove various superfluous package functions
- Keep all package function names at two characters by renaming plc to pf
Diffstat:
5 files changed, 80 insertions(+), 17 deletions(-)
diff --git a/local/bin/bin/pkg_depend b/local/bin/bin/pkg_depend
@@ -1,8 +0,0 @@
-#!/bin/sh
-# Copyright 2021 Jacob R. Edwards
-# License: GPLv3
-#
-# pkg_depend -- view OpenBSD package dependancies
-
-awk -vpkg="$(pkg_info -Iq "$1")" 'index($1, pkg) == 1' /usr/local/share/ports-INDEX |
- cut -d'|' -f8 | tr ' ' '\n' | cut -d/ -f2
diff --git a/local/bin/bin/pkg_list b/local/bin/bin/pkg_list
@@ -4,6 +4,6 @@
#
# List OpenBSD ports for your arch (requires 'portslist' package)
-awk -F '|' -v OFS='\t' -v arch="$(uname -p)" 'match($11, arch) || $11 = "any" {
+awk -F '|' -v re="${1:-.*}" -v arch="$(uname -p)" 'match($1, re) > 0 && match($11, "^(" arch "|any)$") > 0 {
print($1, $4);
-}' /usr/local/share/ports-INDEX | egrep "${1:-.}"
+}' < /usr/local/share/ports-INDEX
diff --git a/local/bin/bin/pkg_root b/local/bin/bin/pkg_root
@@ -0,0 +1,21 @@
+#!/bin/sh
+# Copyright 2021 Jacob R. Edwards
+# License: GPLv3
+#
+# pkg_root -- List manually installed OpenBSD packages with the given dependancy
+
+pkg_info -Iq "$@" | awk 'function walk(pkg, file)
+{
+ file = "/var/db/pkg/" pkg "/+REQUIRED_BY";
+ while ((r = getline < file) > 0)
+ walk($0);
+ close(file);
+
+ if (r == -1 && !pkgs[pkg])
+ print pkg;
+ pkgs[pkg] = 1;
+}
+
+{
+ walk($0);
+}'
diff --git a/local/bin/bin/pkg_tree b/local/bin/bin/pkg_tree
@@ -0,0 +1,52 @@
+#!/usr/bin/awk -f
+# Copyright 2021 Jacob R. Edwards
+# List OpenBSD package dependancy tree
+#
+# Package paths are used instead of indexes since the ports-INDEX
+# uses them too.
+
+function resolve(pattern)
+{
+ for (pkg in pkgs)
+ if (match(pkg, "(^|/)" pattern "(/|$)") > 0)
+ return pkg;
+}
+
+function walk(pkg, prefix, deps)
+{
+ printf "%s%s\n", prefix, pkg;
+
+ split(pkgs[pkg], deps, " ");
+ for (dep in deps)
+ walk(deps[dep], prefix " ");
+}
+
+BEGIN {
+ FS = "|";
+ lib = 10;
+ #build = 9;
+ run = 8;
+
+ for (i = 1; i < ARGC; ++i) {
+ argv[i] = ARGV[i];
+ delete ARGV[i];
+ }
+
+ ARGV[1] = "/usr/local/share/ports-INDEX";
+ ARGC = 2;
+}
+
+{
+ pkgs[$2] = $lib " " $run;
+}
+
+END {
+ for (arg in argv) {
+ pkg = resolve(argv[arg]);
+ if (pkg)
+ walk(pkg, "");
+ else
+ printf("%s: Unable to resolve package path\n", argv[arg]);
+ }
+}
+
diff --git a/local/rc/lib/profile b/local/rc/lib/profile
@@ -45,15 +45,13 @@ fn cdp { cd ''^`{ fgrep -vx `{ pwd } < $dirlog | tail -1 } }
# OpenBSD Package Management
if (~ `{ uname } OpenBSD) {
- fn pa { doas pkg_add $* }
- fn pd { doas pkg_delete $* }
- fn pdd { doas rc -c 'pd $* && pd -a' $* }
- fn pdp { pkg_depend $* }
+ fn pa { doas pkg_add -x $* }
+ fn pd { doas pkg_delete -x $* }
+ fn pf { pkg_locate $* } # package find/files
fn pi { pkg_info -q $* }
fn pl { pkg_list $* }
- fn plc { pkg_locate $* }
- fn pr { pkgroot $* }
- fn pt { pkgtree $* }
+ fn pr { pkg_root $* }
+ fn pt { pkg_tree $* }
}
# List Functions