]> git.sev.monster Git - dotfiles.git/blobdiff - bin/apkv
zshenv: path performance micro optimization
[dotfiles.git] / bin / apkv
index 5e586a286f5595e48d51f9d67153d00c0d78b47f..2a4d342e72b320a71fa917d8b7adc9f10a5ae88f 100755 (executable)
--- a/bin/apkv
+++ b/bin/apkv
@@ -1,5 +1,5 @@
 #!/bin/sh
-# TODO: add duplicate checker to seeif a pkg is in multiple virtual pkgs
+# TODO: add duplicate checker to see if a pkg is in multiple virtual pkgs
 
 prog=$(basename $0)
 usage() {
@@ -13,8 +13,9 @@ Usage:
 
     $prog del <packages> <virtual>
         Remove <packages> from virtual package <virtual>. Empty virtual
-        packages are removed from world. The shorthand '$prog del * <virtual>' can
-        be used to empty <virtual>.
+        packages are removed from world. The shorthand '$prog del * <virtual>'
+        can be used to empty <virtual>, which is equivalent to
+        'apk del <virtual>', though with special handling of leading dots.
 
     $prog list [-o | packages]
         List virtual packages and their contents.
@@ -84,9 +85,7 @@ if [ "$method" = list ]; then
         # ignore getopt's --, we don't care if an arg begins with - anyway
         [ "$1" = '--' ] && switch >/dev/null
 
-        # OPTIMIZE: getting deps of virtual packages is slow, it would be
-        #           great to use apk info -R from show_reqs in orphan loop
-        all=$(apk info)
+        all=$(apk info | sort)
         # show packages if no args
         if [ $# -eq 0 ]; then
             for x in $(echo "$all" | grep '^\.'); do
@@ -94,22 +93,26 @@ if [ "$method" = list ]; then
             done
         fi
         # set all child packages of virtual packages as owned
+        # OPTIMIZE: getting deps of virtual packages is slow, it would be
+        #           great to use apk info -R from show_reqs in orphan loop
+        # NOTE: since we don't have arrays in sh, set individual vars instead
         for v in $(echo "$all" | grep '^\.'); do
             for c in $(apk info -R $v | tail +2 | grep -v '^\.'); do
                 # NOTE: use tr because shell may not have ksh-derived ${c//}
-                # XXX: package name may have illegal chars for variable name
-                #      past those already replaced, and replacing chars may
-                #      result in variable collision—but official apk repos do
-                #      not have any packages that would cause issues
-                eval "__$(echo $c | tr -s '.:-' _)=1"
+                # XXX: have not verified if package name may have more illegal
+                #      chars for variable name past those already replaced, and
+                #      replacing chars may result in variable collision—but
+                #      official apk repos do not have any package names that
+                #      would cause issues
+                eval "__$(echo $c | tr -s '.:+-' _ | tr -s '<=~>@' "\n" | head -1)=1"
             done
         done
         # check world against owned packages
-        # TODO: notify user if package is in world and also a virtual package
+        # TODO: notify user if package is both in world and virtual package
         orphans=$(
             for x in $(cat /etc/apk/world | grep -v '^\.'); do
                 eval "[ \${__$(
-                         echo $x | tr -s '.:-' _ | tr -s '<>=' "\n" | head -1
+                         echo $x | tr -s '.:+-' _ | tr -s '<=~>@' "\n" | head -1
                      )-0} -eq 0 ]" && echo $x
             done
         )
@@ -186,7 +189,8 @@ else
         # remove packages from world if they are being moved to a virtual one
         del=
         for x in $pkgs; do
-            if apk info -e "$x" >/dev/null 2>&1; then
+            #apk_adb.c: [!]name[<,<=,<~,=,~,>~,>=,>,><]ver, @ for pinning
+            if grep -qE "^$x($|[<=~>@])" /etc/apk/world; then
                 del="$del $x"
             fi
         done
This page took 0.040916 seconds and 4 git commands to generate.