Note: You are viewing an old version of this page. View the current version.

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

Other diffs: Previous Major Revision, Previous Author

Newer page: version 3 Last edited on Wednesday, 9 April 2008 5:17:05 by CyberLeo Revert
Older page: version 2 Last edited on Wednesday, 9 April 2008 4:38:51 by CyberLeo Revert
@@ -95,6 +95,6 @@
  done 
 
 clear_deps 
 resolve_deps 0 $(pkg_version -vl '<' | cut -d' ' -f1) 
-print_deps | sort --key=2 --reverse | uniq -f 1 | sort | cut -f2 
+print_deps | sort --key=2 --reverse | uniq -f 1 | sort | cut -f2 | while read name; do pkgdb -qo "${name}"; done  
 </verbatim> 

version 3

Sync ports tree

csup ports-supfile

Update INDEX

portsdb -Uu

Get a list of out-of-date ports

pkg_version -vl '<' | cut -d' ' -f1

Pull dependency information for each out-of-date port (Children must be rebuilt/reinstalled as well)

pkg_info -Rq

Do this recursively, keeping track of the depth. Once you hit bottom on all the ports and their descendants, squash the depgraph, placing deeper dependencies later. I.e.:

A
-B
-C
--D
E
-B
-D
=becomes=
A
E
B
C
D
==

BASH script:

#!/usr/bin/env bash
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
  str_repeat ${depth} -
  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
resolve_deps 0 $(pkg_version -vl '<' | cut -d' ' -f1)
print_deps | sort --key=2 --reverse | uniq -f 1 | sort | cut -f2 | while read name; do pkgdb -qo "${name}"; done