summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlastair Tse <liquidx@gentoo.org>2006-09-20 19:33:18 +0000
committerAlastair Tse <liquidx@gentoo.org>2006-09-20 19:33:18 +0000
commit4c282a6d5e330886acd1c8a2344260e7263088ea (patch)
tree467dc8114ef0d8d49919d7a139acd78e6e025f9a /dev-lang/python/files/python-updater-r1
parentmoving patches to my home dir because distfiles cleanup will remove them if n... (diff)
downloadliquidx-4c282a6d5e330886acd1c8a2344260e7263088ea.tar.gz
liquidx-4c282a6d5e330886acd1c8a2344260e7263088ea.tar.bz2
liquidx-4c282a6d5e330886acd1c8a2344260e7263088ea.zip
experimenting with trac 0.10b1
svn path=/; revision=76
Diffstat (limited to 'dev-lang/python/files/python-updater-r1')
-rw-r--r--dev-lang/python/files/python-updater-r1322
1 files changed, 0 insertions, 322 deletions
diff --git a/dev-lang/python/files/python-updater-r1 b/dev-lang/python/files/python-updater-r1
deleted file mode 100644
index b72a91a..0000000
--- a/dev-lang/python/files/python-updater-r1
+++ /dev/null
@@ -1,322 +0,0 @@
-#!/bin/sh
-#
-# A bit of hackery to update everything that is humanly possible
-# that maybe related to an older version of python. This script can
-# be run as many times as you like. It will log the results in
-# /tmp/python-updater.log
-#
-# OLD_PY_VER = old python version we are upgrading from
-# NEW_PY_VER = new python version we are upgrading to
-# PKGS_EXCEPTIONS = packages that should NOT be re-emerged for any reason
-# PKGS_MANUAL = packages that should be re-emerged even if they don't
-# fit the criteria (eg. ones that have python compiled
-# statically) - FIXME
-#
-# Runtime Variables:
-#
-# PKGS_TO_REMERGE = list of packages we deem to need re-emerging
-# PKGS_OK = list of packages that should be merged without any problems
-# PKGS_MISSING = list of packages that are installed, but cannot be merged
-# because they have been pruned from portage
-# PKGS_MASKED = list of packages that are installed, but masked.
-#
-
-NEW_PY_VER=$(python -V 2>&1 | sed 's:Python \([0-9]*\.[0-9]*\).*$:\1:')
-
-PKGS_EXCEPTIONS="dev-lang/python sys-apps/portage"
-PKGS_MANUAL="app-office/gnumeric app-office/dia x11-libs/vte"
-LOGFILE="/var/log/python-updater.log"
-
-# portage variables
-PKG_DBDIR=/var/db/pkg
-PORTDIR=`portageq portdir`
-PORTDIR_OVERLAYS=`portageq portdir_overlay`
-
-PRETEND=0
-PKGS_TO_REMERGE=""
-PKGS_COUNT_REMERGE=0
-PORTAGE_PYTHON="/usr/bin/python"
-
-# load the gentoo-style info macros, but hack to get around
-# it thinking this is an rc script
-EBUILD="1"
-source /sbin/functions.sh
-
-
-
-for old in 2.5 2.4 2.3 2.2 2.1; do
- if [ "${old}" != "${NEW_PY_VER}" ]; then
- if [ -e /usr/bin/python${old} ] ; then
- OLD_PY_VER=${old}
- break;
- fi
- fi
-done
-
-
-if [ -z "${OLD_PY_VER}" ] ; then
- eerror "Can't determine any previous Python version(s)."
- exit 1
-fi
-
-
-# misc helper functions
-eloginfo() {
- einfo $*
- DATESTRING=`date +"%Y/%m/%d %H:%M:%S"`
- echo "${DATESTRING} - ${*}" >> ${LOGFILE}
-}
-
-elogecho() {
- echo -n " "
- echo $*
- DATESTRING=`date +"%Y/%m/%d %H:%M:%S"`
- echo "${DATESTRING} - ${*}" >> ${LOGFILE}
-}
-
-elogerr() {
- eerror $*
- DATESTRING=`date +"%Y/%m/%d %H:%M:%S"`
- echo "${DATESTRING} ! ${*}" >> ${LOGFILE}
-}
-
-elog() {
- DATESTRING=`date +"%Y/%m/%d %H:%M:%S"`
- echo "${DATESTRING} - ${*}" >> ${LOGFILE}
-}
-
-
-usage() {
- echo "usage: python-updater [-h|-p|-o X.X|-n X.X]"
- echo " -h help"
- echo " -p pretend (don't do anything)"
- echo " -o X.X set old python version to upgrade from [default: ${OLD_PY_VER}]"
- echo " -n X.X set new python version to upgrade to [default: ${NEW_PY_VER}]"
-}
-
-#
-# Sanity check
-#
-
-if [ -z "${PORTDIR}" ]; then
- eerror "Unable to proceed. Can not find PORTDIR. Make sure the command:"
- eerror " "
- eerror " portageq portdir"
- eerror " "
- eerror "returns a value. If it doesn't, make sure you have updated to"
- eerror "latest portage version."
- eerror " "
- eerror "Report bugs to http://bugs.gentoo.org/"
- exit 1
-fi
-
-if [ ! -f ${LOGFILE} ]; then
- if ! touch ${LOGFILE} 2>&1 > /dev/null; then
- ewarn "Logging disabled due to permissions"
- LOGFILE=/dev/null
- fi
-elif [ ! -w ${LOGFILE} -o ! -L ${LOGFILE} ]; then
- ewarn "Logging disabled due to permissions"
- LOGFILE=/dev/null
-fi
-
-#
-#
-# Command Line Parsing
-#
-#
-while [ -n "$1" ]; do
- case "$1" in
- -h)
- usage
- exit 0
- ;;
- -p)
- PRETEND=1
- ;;
- -o)
- shift
- OLD_PY_VER="$1"
- ;;
- -n)
- shift
- NEW_PY_VER="$1"
- ;;
- *)
- usage
- echo "unrecognised option: $1"
- ;;
- esac
- shift
-done
-
-#
-# Test where portage is, in python2.2 or somewhere else?
-#
-for py in /usr/bin/python /usr/bin/python${OLD_PY_VER} /usr/bin/python${NEW_PY_VER}; do
- if ${py} -c "import portage"; then
- PORTAGE_PYTHON=${py}
- break;
- fi
-done
-
-#
-#
-# Find all packages that have installed something in
-# /usr/lib/python${OLD_PY_VER}
-#
-#
-OLD_MODULES_DIRS="/usr/lib/python${OLD_PY_VER} /usr/lib32/python${OLD_PY_VER} /usr/lib64/python${OLD_PY_VER}"
-OLD_INCLUDE_DIR=/usr/include/python${OLD_PY_VER}
-
-eloginfo "Starting Python Updater from ${OLD_PY_VER} to ${NEW_PY_VER} :"
-eloginfo "Searching for packages with files in ${OLD_MODULES_DIRS} .."
-
-# iterate thru all the installed package's contents
-for content in `find ${PKG_DBDIR} -name CONTENTS`; do
- # extract the category, package name and package version
- CATPKGVER=$(echo ${content} | sed "s:${PKG_DBDIR}/\(.*\)/CONTENTS:\1:")
-
- # exclude packages that are an exception, like portage and python itself.
- exception=0
- for exp in ${PKGS_EXCEPTIONS}; do
- if [ -n "$(echo ${CATPKGVER} | grep ${exp})" ]; then
- exception=1
- break;
- fi
- done
-
- if [ ${exception} = 1 ]; then
- continue;
- fi
-
- for OLD_MODULES_DIR in ${OLD_MODULES_DIRS}; do
- if fgrep "${OLD_MODULES_DIR}" ${content} > /dev/null; then
- PKGS_TO_REMERGE="${PKGS_TO_REMERGE} ${CATPKGVER}"
- elogecho "Adding to list: ${CATPKGVER}"
- elif fgrep "${OLD_INCLUDE_DIR}" ${content} > /dev/null; then
- PKGS_TO_REMERGE="${PKGS_TO_REMERGE} ${CATPKGVER}"
- fi
- done
-done
-
-# now we have to do each emerge seperately because if an installed version
-# does not have the corresponding ebuild in portage, then it will bail.
-
-eloginfo "Calculating Upgrade Package List .."
-
-PKGS_OK=""
-PKGS_MASKED=""
-PKGS_MISSING=""
-
-MASKED_STRING="been masked"
-MISSING_STRING="there are no masked or unmasked ebuilds to satisfy"
-
-for pkg in ${PKGS_TO_REMERGE}; do
- emerge_output="$(emerge -p \=$pkg 2>&1)"
- if $(echo "${emerge_output}" | grep "${MASKED_STRING}" > /dev/null); then
- PKGS_MASKED="${PKGS_MASKED} $pkg"
- elogecho "$pkg is masked"
- elif $(echo "${emerge_output}" | grep "${MISSING_STRING}" > /dev/null); then
- PKGS_MISSING="${PKGS_MISSING} $pkg"
- elogecho "$pkg is missing from portage"
- else
- PKGS_OK="${PKGS_OK} $pkg"
- PKGS_COUNT_REMERGE=$((PKGS_COUNT_REMERGE + 1))
- fi
-done
-
-#
-# Use my super dumb package reordering algorithm that works most of the time
-#
-
-eloginfo "Re-ordering packages to merge .."
-
-PKGS_OK_SORTED="$(${PORTAGE_PYTHON} ${PORTDIR}/dev-lang/python/files/depreorder-topsort.py ${PKGS_OK} | xargs)"
-
-eloginfo "Preparing to merge these packages in this order:"
-for pkg in $PKGS_OK_SORTED; do
- elogecho "$pkg"
-done
-
-# we emerge each package seperately to ensure we know exactly which ones might
-# cause an error, and then report it at the end
-
-COUNT=1
-PKGS_FAILED=""
-if [ "${PRETEND}" != "1" ]; then
- for pkg in ${PKGS_OK_SORTED}; do
- eloginfo "Starting to merge ($COUNT/$PKGS_COUNT_REMERGE) $pkg .."
- if ! emerge --oneshot --nodeps =$pkg; then
- PKGS_FAILED="${PKGS_FAILED} $pkg"
- elogerr "Failed merging $pkg ($COUNT/$PKGS_COUNT_REMERGE)!"
- fi
- COUNT=$((COUNT+1))
- done
-fi
-
-# final output stuff
-OUTPUT_PKGS_MASKED=""
-for pkg in ${PKGS_MASKED}; do OUTPUT_PKGS_MASKED="${OUTPUT_PKGS_MASKED} \=$pkg"; done
-OUTPUT_PKGS_MISSING=""
-for pkg in ${PKGS_MISSING}; do OUTPUT_PKGS_MISSING="${OUTPUT_PKGS_MISSING} $pkg"; done
-OUTPUT_PKGS_FAILED=""
-for pkg in ${PKGS_FAILED}; do OUTPUT_PKGS_FAILED="${OUTPUT_PKGS_FAILED} \=$pkg"; done
-
-if [ -n "${PKGS_FAILED}" -o -n "${PKGS_MISSING}" -o -n "${PKGS_MASKED}" ]; then
- echo
- ewarn "************************************************************"
- ewarn "* Packages that still need to be manually emerged : *"
- ewarn "************************************************************"
- if [ -n "${OUTPUT_PKGS_MASKED}" ]; then
- echo
- ewarn " Masked Packages:"
- ewarn " ----------------"
- ewarn " Unmask the following packages (at your own risk) and "
- ewarn " emerge them using this command after removing the '-p'"
- ewarn " parameter."
- echo
- ewarn " emerge -p ${OUTPUT_PKGS_MASKED}"
- echo
- fi
- if [ -n "${OUTPUT_PKGS_MISSING}" ]; then
- echo
- ewarn " Missing Packages:"
- ewarn " -----------------"
- ewarn " These packages need to be updated because their versions do"
- ewarn " not exist in portage anymore."
- echo
- for x in ${OUTPUT_PKGS_MISSING}; do
- echo " ${x}"
- done
- fi
- if [ -n "${OUTPUT_PKGS_FAILED}" ]; then
- echo
- ewarn " Failed Packaged:"
- ewarn " ----------------"
- ewarn " These packages have failed and need to be re-emerged again."
- ewarn " Alternatively, try re-running this script again to see if it"
- ewarn " can be fixed."
- echo
- ewarn " emerge -p ${OUTPUT_PKGS_FAILED}"
- echo
- fi
-
- elog "Python update completed with errors."
- elog "Masked Packages:"
- for x in ${PKGS_MASKED}; do
- elog $x
- done
- elog "Missing Packages:"
- for x in ${PKGS_MISSING}; do
- elog $x
- done
- elog "Failed Packages:"
- for x in ${PKGS_FAILED}; do
- elog $x
- done
- elog "Update script completed."
-else
- eloginfo "Python update completed successfully."
-fi
-