Patrick Williams | d8c66bc | 2016-06-20 12:57:21 -0500 | [diff] [blame] | 1 | From 67ec7531e6297200eaa97ef917d49b0a75876cb4 Mon Sep 17 00:00:00 2001 |
| 2 | From: Robert Yang <liezhi.yang@windriver.com> |
| 3 | Date: Wed, 2 Dec 2015 00:56:07 -0800 |
| 4 | Subject: [PATCH] lib/transaction.c: fix file conflicts for MIPS64 N32 |
| 5 | |
| 6 | The following error can occur: |
| 7 | smart install libc6-2.22-r0.1@lib32_mips32r2octeon3 libc6-dbg-2.22-r0.1@lib32_mips32r2octeon3 |
| 8 | error: file /sbin/ldconfig conflicts between attempted installs of libc6-2.22-r0.1.lib32_mips32r2octeon3 and libc6-2.22-r0.1.octeon3_n32 |
| 9 | error: file /sbin/.debug/ldconfig conflicts between attempted installs of libc6-dbg-2.22-r0.1.lib32_mips32r2octeon3 and libc6-dbg-2.22-r0.1.octeon3_n32 |
| 10 | |
| 11 | This was because: |
| 12 | transactions_color = 001 (ELF32) & 010 (ELF64) & 100 (ELF32 N32 MIPS64) |
| 13 | FColor = Current file color (001) & transaction_color (111) |
| 14 | oFcolor = Previous file color (100) & transaction_color (111) |
| 15 | |
| 16 | There are two places where the conflict comparisons occur. In both places |
| 17 | the 'else' clause was too restrictive (opposite of the 'positive' clause). |
| 18 | This caused the system to only permit a binary comparison - "new preferred" or |
| 19 | "old preferred". It did not permissing "neither preferred". By removing the |
| 20 | else comparison the system will now perform a 'last-in-wins' resolution when |
| 21 | "neither is preferred". |
| 22 | |
| 23 | Upstream-Status: Submitted [RPM5 maintainer] |
| 24 | |
| 25 | Signed-off-by: Robert Yang <liezhi.yang@windriver.com> |
| 26 | Signed-off-by: Mark Hatle <mark.hatle@windriver.com> |
| 27 | --- |
| 28 | lib/transaction.c | 3 ++- |
| 29 | 1 file changed, 2 insertions(+), 1 deletion(-) |
| 30 | |
| 31 | Index: rpm-5.4.14/lib/transaction.c |
| 32 | =================================================================== |
| 33 | --- rpm-5.4.14.orig/lib/transaction.c |
| 34 | +++ rpm-5.4.14/lib/transaction.c |
| 35 | @@ -154,7 +154,7 @@ static int handleInstInstalledFile(const |
| 36 | fi->actions[fx] = FA_SKIPCOLOR; |
| 37 | #endif |
| 38 | rConflicts = 0; |
| 39 | - } else if (FColor & prefcolor) { |
| 40 | + } else { |
| 41 | #ifdef REFERENCE |
| 42 | rpmfsSetAction(fs, fx, FA_CREATE); |
| 43 | #else |
| 44 | @@ -420,7 +420,7 @@ assert(otherFi != NULL); |
| 45 | fi->actions[i] = FA_SKIPCOLOR; |
| 46 | rConflicts = 0; |
| 47 | } else |
| 48 | - if (FColor == 0 && oFColor == 0) { |
| 49 | + { |
| 50 | /* ... otherwise, do both, last in wins. */ |
| 51 | otherFi->actions[otherFileNum] = FA_CREATE; |
| 52 | fi->actions[i] = FA_CREATE; |