aboutsummaryrefslogtreecommitdiff
path: root/Tools
diff options
context:
space:
mode:
authorMatthias Andree <mandree@FreeBSD.org>2014-08-21 15:56:14 +0000
committerMatthias Andree <mandree@FreeBSD.org>2014-08-21 15:56:14 +0000
commitb58318d59ca9019cdf9211e372fa953540ccc8cc (patch)
treef6d9a3dace3b6a2e7e73151a372d8296e87da542 /Tools
parent206ee0dc38e1834edf013988c42a0e3c6ef6a5d8 (diff)
downloadports-b58318d59ca9019cdf9211e372fa953540ccc8cc.tar.gz
ports-b58318d59ca9019cdf9211e372fa953540ccc8cc.zip
Notes
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."