aboutsummaryrefslogtreecommitdiffstats
path: root/Tools
diff options
context:
space:
mode:
authormandree <mandree@FreeBSD.org>2014-08-21 23:56:14 +0800
committermandree <mandree@FreeBSD.org>2014-08-21 23:56:14 +0800
commit87a092ddef330dbf9ddf0b9f8d0c6a35f93bd028 (patch)
treef6d9a3dace3b6a2e7e73151a372d8296e87da542 /Tools
parent7a91ebeaa1fbc8bb71b7c31d93ee3a5391ef703f (diff)
downloadfreebsd-ports-gnome-87a092ddef330dbf9ddf0b9f8d0c6a35f93bd028.tar.gz
freebsd-ports-gnome-87a092ddef330dbf9ddf0b9f8d0c6a35f93bd028.tar.zst
freebsd-ports-gnome-87a092ddef330dbf9ddf0b9f8d0c6a35f93bd028.zip
Add a BerkeleyDB upgrade helper script in preparation of 4...4.7 removal.
Diffstat (limited to 'Tools')
-rwxr-xr-xTools/scripts/BDB-upgrade-helper.sh77
1 files changed, 77 insertions, 0 deletions
diff --git a/Tools/scripts/BDB-upgrade-helper.sh b/Tools/scripts/BDB-upgrade-helper.sh
new file mode 100755
index 000000000000..0e44d2632138
--- /dev/null
+++ b/Tools/scripts/BDB-upgrade-helper.sh
@@ -0,0 +1,77 @@
+#!/bin/sh
+# $Id$
+# ports/Tools/scripts/BDB-upgrade-helper.sh
+#
+# A helper script to upgrade applications that used to depend on
+# BerkeleyDB ports 4.0...4.7 to use a newer version of BerkeleyDB.
+#
+# Written by Matthias Andree in 2014, and placed under the same
+# license as FreeBSD itself, see /COPYRIGHT or /usr/src/COPYRIGHT.
+
+set -eu
+: ${PREFIX:=/usr/local}
+: ${LOCALBASE:=${PREFIX}}
+
+# check requisites
+tool=
+if [ -x ${LOCALBASE}/sbin/portmaster ] ; then tool=portmaster ;
+elif [ -x ${LOCALBASE}/sbin/portupgrade ]; then tool=portupgrade;
+else
+ echo >&2 "Neither portmaster nor portupgrade installed. Cannot continue."
+ echo >&2 "Please install ports-mgmt/portmaster before proceeding."
+ exit 1
+fi
+
+# check BerkeleyDB 4.0...4.7 versions
+rx='db4[1-7]?(-nocrypto)?-4'
+if pkg -N 2>/dev/null ; then pkg=yes ; else pkg= ; fi
+if [ -n "$pkg" ] ; then
+ # pkg
+ dbnames=$(pkg info -x "$rx")
+else
+ # old pkg_*
+ dbnames=$(pkg_info -E -X "$rx")
+fi
+
+# due to set -e, the script will not reach this point
+# unless there have been matched packages - without packages,
+# pkg_info or pkg will exit with failure.
+
+# check if we need to pass in origins or package names
+if [ "$tool" = portupgrade ] ; then
+ if [ -n "$pkg" ] ; then
+ dbnames=$(printf '%s\n' "$dbnames" | xargs -n1 pkg info -q -o)
+ else
+ dbnames=$(printf '%s\n' "$dbnames" | xargs -n1 pkg_info -q -o)
+ fi
+fi
+
+# generate the upgrade command
+case "$tool" in
+portmaster)
+ cmd="portmaster -R"
+ for i in $dbnames ; do cmd="$cmd -r $i" ; done
+ ;;
+portupgrade)
+ cmd="portupgrade -f -r"
+ for i in $dbnames ; do cmd="$cmd -x $i" ; done
+ for i in $dbnames ; do cmd="$cmd $i" ; done
+ ;;
+*)
+ echo >&2 "Internal error in $0." ; exit 1
+ ;;
+esac
+
+echo "+ $cmd"
+$cmd
+
+# due to set -e, the script will not reach this point
+# if there was an error or failure with the upgrade tool
+
+if [ -n "$pkg" ] ; then
+ pkg delete $dbnames
+else
+ pkg_delete $dbnames
+fi
+
+echo "Success."