On 11/18/2013 10:27 AM, Florian Weimer wrote:
On 11/18/2013 12:44 AM, Mattias Ellert wrote:
> sön 2013-11-17 klockan 22:12 +0100 skrev Sandro Mani:
>> Upgrading from xflr5-6.09.05-4.fc21.x86_64 to
>> xflr5-6.09.05-5.fc21.x86_64 however fails with
>> Transaction check error:
>> file /usr/share/applications/xflr5.desktop from install of
>> xflr5-6.09.05-5.fc21.x86_64 conflicts with file from
>> package xflr5-6.09.05-4.fc21.x86_64
>
> You are replacing a directory with an ordinary file. The requires a
> %pretrans script. %pretrans scripts must be written in lua:
>
> %pretrans -p <lua>
> st = posix.stat("%{_datadir}/applications/%{name}.desktop")
> if st and st.type == "directory" then
> os.execute("rm -rf %{_datadir}/applications/%{name}.desktop")
> end
Wow. Shouldn't RPM support this out of the box?
Should? Sure, it seems like an obvious thing on the surface, but
replacing directories within a transaction is very complicated due to
removals happening after installs (and rpm's file fingerprinting semantics).
The new thing here is that rpm >= 4.11 detects and reports the
(unsupported) attempt to replace a directory with something else as a
conflict, previously it just barfed up with "cpio: rename failed - Is a
directory" error in middle of transaction.
An easier-than-pretrans-hack workaround is to just use a different
filename for the file replacing the directory.
- Panu -