[prev in list] [next in list] [prev in thread] [next in thread] 

List:       gentoo-dev
Subject:    Re: [gentoo-dev] RFC: new feature to disable merging into stray locations
From:       Ulrich Mueller <ulm () gentoo ! org>
Date:       2012-04-30 13:36:17
Message-ID: 20382.38225.587502.685943 () a1i15 ! kph ! uni-mainz ! de
[Download RAW message or body]

>>>>> On Mon, 30 Apr 2012, Thomas Sachau wrote:

> Krzysztof Pawlik schrieb:
>> On 30/04/12 10:39, Ulrich Mueller wrote:
>>>>> If the eclass doesn't work with FEATURES="collision-protect"
>>>>> then it needs to be fixed.
>>> 
>>>> Long story short: older eclass compiled Python byte code in live
>>>> file system, new one does it in src_install so .pyo/.pyc gets
>>>> properly recorded, so the package *has to overwrite* files that
>>>> are not owned by anyone  (no package owns them).
>>> 
>>> The usual approach to this problem was to have some cleanup code
>>> in pkg_setup or pkg_preinst that would remove the old files.
>> 
>> Interesting idea - I see two problems:
>> - how I would get the list of files for already installed version
>> (the file list can (and will) differ between versions)

> Simple workaround in pkg_preinst (just example code, nothing to
> copy/paste):

> if has_version < first_good_version ; then
> 	for i in $(find ${D} -name *.{pyc,pyo}) ; do
> 		[[ -e ${i/${D}/${ROOT}/} ]] && rm ${i/${D}/${ROOT}/}
> 	done
> fi

This wouldn't work, because collision protection runs _before_
pkg_preinst.

However, one could imagine a (somewhat dirty) workaround:
- At the end of src_install, rename all *.pyc and *.pyo in ${D} to
  names that don't collide with the ones in ${ROOT}, so that collision
  protection won't be triggered.
- At the beginning of pkg_preinst, rename them back to their original
  names.
- Run above code.

> Alternatively, you could take all .py files of the installed
> versions and blindly remove the pyo/pyc files for them in
> pkg_preinst (this should also prevent leaving dead files around).

s/preinst/setup/ otherwise the same argument as above would apply.

Ulrich

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic