Differences between version 3 and previous revision of KnowledgeBase/FreeBSD/CheckPorts.sh.

Other diffs: Previous Major Revision, Previous Author

Newer page: version 3 Last edited on Sunday, 10 January 2010 13:17:57 by CyberLeo Revert
Older page: version 2 Last edited on Wednesday, 9 April 2008 6:15:33 by CyberLeo Revert
@@ -1,5 +1,5 @@
-<verbatim
+<code brush=bash
 #!/usr/bin/env bash 
  
 while [ -n "${1}" ] 
 do 
@@ -91,5 +91,5 @@
 [ -n "${disp_ports}" ] && print_deps | sort --key=2 --reverse | uniq -f 1 | sort | cut -f2 | while read name 
 do 
  pkgdb -qo "${name}" 
 done 
-</verbatim
+</code

version 3

#!/usr/bin/env bash

while [ -n "${1}" ]
do
 case "${1}" in
 -d) disp_deptree=TRUE ;;
 -a) disp_pkg=TRUE ;;
 -p) disp_ports=TRUE ;;
 -h)
  cat <<EOF

This tool will walk all your installed packages for out-of-date ports.
You must update your ports tree before this will be accurate.

 -d Display deptree
 -a Display list of out-of-date packages
 -p Display list of port directory names corresponding to out-of-date packages

EOF
  exit 8
  ;;
 *)  echo "Unknown option: ${1}"; echo "${0} -h for help"; exit 8 ;;
 esac
 shift
done

str_repeat() {
 repeat="${1}"
 while [ "${repeat}" -gt 0 ]
 do
  echo -n "${2}"
  repeat=$(( ${repeat} - 1))
 done
}
clear_deps() {
 depth=0
 storevar="list_${depth}"
 eval list=\${${storevar}}
 while [ -n "${list}" ]
 do
  echo "Clearing $storevar"
  unset $storevar
  depth=$(( ${depth} + 1 ))
  storevar="list_${depth}"
  eval list=\${${storevar}}
 done
}
resolve_deps(){
 depth="${1}"
 storevar="list_${depth}"
 shift
 while [ -n "${1}" ]
 do
  [ -n "${disp_deptree}" ] && str_repeat ${depth} -
  [ -n "${disp_deptree}" ] && echo "${1}"
  eval ${storevar}="\"\${${storevar}} ${1}\""
  deps=$(pkg_info -Rq "${1}" | sed -e '/^$/d')
  if [ -n "${deps}" ]
  then
   resolve_deps $(( ${depth} + 1 )) ${deps}
   depth=$(( ${depth} - 1 ))
   storevar="list_${depth}"
  fi
  shift
 done
}
print_deps() {
 depth=0
 storevar="$(printf "list_%u" "${depth}")"
 eval list=\${${storevar}}
 while [ -n "${list}" ]
 do
  for item in ${list}
  do
   printf "%u\t%s\n" "${depth}" "${item}"
  done
  depth=$(( ${depth} + 1 ))
  storevar="list_${depth}"
  eval list=\${${storevar}}
 done
}
clear_deps
[ -n "${disp_deptree}" ] && echo ""
resolve_deps 0 $(pkg_version -vl '<' | cut -d' ' -f1)

[ -n "${disp_pkg}" ] && echo ""
[ -n "${disp_pkg}" ] && print_deps | sort --key=2 --reverse | uniq -f 1 | sort | cut -f 2

[ -n "${disp_ports}" ] && echo ""
[ -n "${disp_ports}" ] && print_deps | sort --key=2 --reverse | uniq -f 1 | sort | cut -f2 | while read name
do
 pkgdb -qo "${name}"
done