]> git.sev.monster Git - dotfiles.git/blobdiff - bin/apkv
apkv: update doc, refine parsing, fix world check
[dotfiles.git] / bin / apkv
index 5e586a286f5595e48d51f9d67153d00c0d78b47f..012d8e2b74de4d6153c167a144eae1865eb126bd 100755 (executable)
--- a/bin/apkv
+++ b/bin/apkv
@@ -84,8 +84,6 @@ if [ "$method" = list ]; then
         # ignore getopt's --, we don't care if an arg begins with - anyway
         [ "$1" = '--' ] && switch >/dev/null
 
         # 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)
         # show packages if no args
         if [ $# -eq 0 ]; then
         all=$(apk info)
         # show packages if no args
         if [ $# -eq 0 ]; then
@@ -94,22 +92,26 @@ if [ "$method" = list ]; then
             done
         fi
         # set all child packages of virtual packages as owned
             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//}
         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
+                # 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 '.:-' _)=1"
             done
         done
         # check world against owned packages
                 eval "__$(echo $c | tr -s '.:-' _)=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 "[ \${__$(
         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
         )
                      )-0} -eq 0 ]" && echo $x
             done
         )
@@ -186,7 +188,8 @@ else
         # remove packages from world if they are being moved to a virtual one
         del=
         for x in $pkgs; do
         # 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
                 del="$del $x"
             fi
         done
This page took 0.031392 seconds and 4 git commands to generate.