FAQ Search Today's Posts Mark Forums Read
» Video Reviews

» Linux Archive

Linux-archive is a website aiming to archive linux email lists and to make them easily accessible for linux users/developers.


» Sponsor

» Partners

» Sponsor

Go Back   Linux Archive > Gentoo > Gentoo Development

 
 
LinkBack Thread Tools
 
Old 12-01-2010, 05:53 PM
Sebastian Pipping
 
Default Stable Python stage repair thread

Hello!


I have done a bit more testing now. To do so I have isolated the
eselect-python-update behavior into testing ebuilds (package
"virtual/debug-eselect-python") reduced to just that problem (no
compilation and the like, see attachment, also in sping overlay).

The test scenario is made of two halves: one half is an ebuild running
eselect python update on pkg_postrm (the 2.7 one, to emulate what users
may have still installed), the other is an ebuild with the
work-in-progress patch I plan to apply to dev-lang/python instrumented
with debugging output (the 2.7.1 one).


To recall, the goal is:

1) Having valid symlinks for /usr/bin/python

2) Keeping active Python versions untouched, i.e. reverting a change
by an ebuild calling eselect-python-update during pkg_postrm.


The test scenario is these three commands on a root shell:

# EMERGE_DEFAULT_OPTS= emerge -1av =virtual/debug-eselect-python-2.7
# eselect python set python2.6
# EMERGE_DEFAULT_OPTS= emerge -1av =virtual/debug-eselect-python-2.7.1

The output of the third call is the interesting part, see attachment.
Besides my earlier mixup of

eselect python set --pythonX pythonX.Y # good

with

eselect python set pythonX.Y --pythonX # bad

the patch proposed earlier seems to be a promising approach.

Next I will apply this appraoch to dev-lang/python int the main tree.
I expect that to take no longer than two hours, hopefully less.

If you spot any practical problems with this please mail me ASAP.

Wish me luck so I don't break anything for worse.

Best,



Sebastian
# Copyright 1999-2010 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: $

EAPI="2"

SLOT="2.7"
KEYWORDS="amd64"

DEBUG_DUMP_ACTIVE() {
echo "DEBUG $1 $2 (slot ${SLOT}, version ${PV})"
echo "DEBUG ${active_python_2} = '${active_python_2}'"
echo "DEBUG ${active_python_3} = '${active_python_3}'"
echo "DEBUG ${active_python_main} = '${active_python_main}'"
echo "DEBUG $(eselect python show --python2) = '$(eselect python show --python2)'"
echo "DEBUG $(eselect python show --python3) = '$(eselect python show --python3)'"
echo "DEBUG $(eselect python show) = '$(eselect python show)'"
}

save_active_python_version() {
active_python_2=$(eselect python show --python2)
active_python_3=$(eselect python show --python3)
active_python_main=$(eselect python show)
}

pkg_preinst() {
DEBUG_DUMP_ACTIVE Before ${FUNCNAME}

save_active_python_version

DEBUG_DUMP_ACTIVE After ${FUNCNAME}
}

ensure_python_symlink() {
if [[ -z "$(eselect python show --python${PV%%.*})" ]]; then
eselect python update --python${PV%%.*}
fi
}

restore_active_python_version() {
if [[ -n "${active_python_2}" &&
"${active_python_2}" != $(eselect python show --python2) ]] ; then
einfo "Restoring active Python 2.x interpreter: ${active_python_2}"
eselect python set --python2 "${active_python_2}"
fi
if [[ -n "${active_python_3}" &&
"${active_python_3}" != $(eselect python show --python3) ]] ; then
einfo "Restoring active Python 3.x interpreter: ${active_python_3}"
eselect python set --python3 "${active_python_3}"
fi

if [[ -n "${active_python_main}" &&
"${active_python_main}" != $(eselect python show) ]] ; then
einfo "Restoring main active Python interpreter: ${active_python_main}"
eselect python set "${active_python_main}"
fi
}

pkg_postinst() {
DEBUG_DUMP_ACTIVE Before ${FUNCNAME}

restore_active_python_version
ensure_python_symlink

DEBUG_DUMP_ACTIVE After ${FUNCNAME}
}

pkg_postrm() {
DEBUG_DUMP_ACTIVE Before ${FUNCNAME}

ensure_python_symlink

DEBUG_DUMP_ACTIVE After ${FUNCNAME}
}
# Copyright 1999-2010 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: $

EAPI="2"

SLOT="2.7"
KEYWORDS="amd64"

DEBUG_DUMP_ACTIVE() {
echo "DEBUG $1 $2 (slot ${SLOT}, version ${PV})"
echo "DEBUG $(eselect python show --python2) = '$(eselect python show --python2)'"
echo "DEBUG $(eselect python show --python3) = '$(eselect python show --python3)'"
echo "DEBUG $(eselect python show) = '$(eselect python show)'"
}

eselect_python_update() {
# Exaggerated to worst case: update of all active python versions
eselect python update --python2
eselect python update --python3
eselect python update
}

pkg_postinst() {
DEBUG_DUMP_ACTIVE Before ${FUNCNAME}

eselect_python_update

DEBUG_DUMP_ACTIVE After ${FUNCNAME}
}

pkg_postrm() {
DEBUG_DUMP_ACTIVE Before ${FUNCNAME}

eselect_python_update

DEBUG_DUMP_ACTIVE After ${FUNCNAME}
}
>>> Installing (1 of 1) virtual/debug-eselect-python-2.7.1
* checking 0 files for package collisions
DEBUG Before pkg_preinst (slot 2.7, version 2.7.1)
DEBUG ${active_python_2} = '
DEBUG ${active_python_3} = '
DEBUG ${active_python_main} = '
DEBUG $(eselect python show --python2) = 'python2.6'
DEBUG $(eselect python show --python3) = 'python3.1'
DEBUG $(eselect python show) = 'python2.6'
DEBUG After pkg_preinst (slot 2.7, version 2.7.1)
DEBUG ${active_python_2} = 'python2.6'
DEBUG ${active_python_3} = 'python3.1'
DEBUG ${active_python_main} = 'python2.6'
DEBUG $(eselect python show --python2) = 'python2.6'
DEBUG $(eselect python show --python3) = 'python3.1'
DEBUG $(eselect python show) = 'python2.6'
>>> Safely unmerging already-installed instance...
No package files given... Grabbing a set.
DEBUG Before pkg_postrm (slot 2.7, version 2.7)
DEBUG $(eselect python show --python2) = 'python2.6'
DEBUG $(eselect python show --python3) = 'python3.1'
DEBUG $(eselect python show) = 'python2.6'
Switching to python2.7 <---
Switching to python3.1 <---
Switching to python3.1 <---
DEBUG After pkg_postrm (slot 2.7, version 2.7)
DEBUG $(eselect python show --python2) = 'python2.7' <---
DEBUG $(eselect python show --python3) = 'python3.1'
DEBUG $(eselect python show) = 'python3.1' <---
>>> Original instance of package unmerged safely.
DEBUG Before pkg_postinst (slot 2.7, version 2.7.1)
DEBUG ${active_python_2} = 'python2.6'
DEBUG ${active_python_3} = 'python3.1'
DEBUG ${active_python_main} = 'python2.6'
DEBUG $(eselect python show --python2) = 'python2.7'
DEBUG $(eselect python show --python3) = 'python3.1'
DEBUG $(eselect python show) = 'python3.1'
* Restoring active Python 2.x interpreter: python2.6 <---
* Restoring main active Python interpreter: python2.6 <---
DEBUG After pkg_postinst (slot 2.7, version 2.7.1)
DEBUG ${active_python_2} = 'python2.6'
DEBUG ${active_python_3} = 'python3.1'
DEBUG ${active_python_main} = 'python2.6'
DEBUG $(eselect python show --python2) = 'python2.6' <---
DEBUG $(eselect python show --python3) = 'python3.1'
DEBUG $(eselect python show) = 'python2.6' <---
>>> Auto-cleaning packages...
 

Thread Tools




All times are GMT. The time now is 06:37 PM.

VBulletin, Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO ©2007, Crawlability, Inc.
Copyright 2007 - 2008, www.linux-archive.org