[OE-core] [morty][PATCH] rpm: fix failure to report file conflicts

Martin Vuille jpmv27 at yahoo.com
Tue Mar 13 20:48:49 UTC 2018


Problem: Conflicts between two packages trying to install different versions
         of the same file are not detected. Both copies of the file are
         installed and the build is not deterministic because a different
         outcome results depending on which package is installed last.

Cause:   All conflicts are treated as color conflicts, even when the files
         are not ELF files. And one of the ways that these conflicts are
         handled is to install both conflicting files and letting the one
         installed last win.

Fix:     Backport from upstream (see function handleColorConflict in
         lib/transaction.c). Only treat as a color conflict when both of the
         conflicting files have a color and they do not both have the same
         color. Do not handle color conflicts by installing both conflicting
         files.

Signed-off-by: Martin Vuille <jpmv27 at yahoo.com>
---
 .../rpm-fix-failure-to-report-file-conflicts.patch | 24 ++++++++++++++++++++++
 meta/recipes-devtools/rpm/rpm_5.4.16.bb            |  1 +
 2 files changed, 25 insertions(+)
 create mode 100644 meta/recipes-devtools/rpm/rpm/rpm-fix-failure-to-report-file-conflicts.patch

diff --git a/meta/recipes-devtools/rpm/rpm/rpm-fix-failure-to-report-file-conflicts.patch b/meta/recipes-devtools/rpm/rpm/rpm-fix-failure-to-report-file-conflicts.patch
new file mode 100644
index 0000000000..3f556ba97a
--- /dev/null
+++ b/meta/recipes-devtools/rpm/rpm/rpm-fix-failure-to-report-file-conflicts.patch
@@ -0,0 +1,24 @@
+--- a/lib/transaction.c
++++ b/lib/transaction.c
+@@ -411,7 +411,7 @@ assert(otherFi != NULL);
+ 
+ 		rConflicts = reportConflicts;
+ 		/* Resolve file conflicts to prefer Elf64 (if not forced) ... */
+-		if (tscolor != 0) {
++		if (tscolor != 0 && FColor != 0 && oFColor != 0 && FColor != oFColor) {
+ 		    if (FColor & prefcolor) {
+ 			/* ... last file of preferred colour is installed ... */
+ 			if (!iosmFileActionSkipped((iosmFileAction) fi->actions[i])) {
+@@ -431,12 +431,6 @@ assert(otherFi != NULL);
+ 			    otherFi->actions[otherFileNum] = FA_CREATE;
+ 			fi->actions[i] = FA_SKIPCOLOR;
+ 			rConflicts = 0;
+-		    } else
+-		    {
+-			/* ... otherwise, do both, last in wins. */
+-			otherFi->actions[otherFileNum] = FA_CREATE;
+-			fi->actions[i] = FA_CREATE;
+-			rConflicts = 0;
+ 		    }
+ 		    done = 1;
+ 		}
diff --git a/meta/recipes-devtools/rpm/rpm_5.4.16.bb b/meta/recipes-devtools/rpm/rpm_5.4.16.bb
index 497af8e055..296f6b8a97 100644
--- a/meta/recipes-devtools/rpm/rpm_5.4.16.bb
+++ b/meta/recipes-devtools/rpm/rpm_5.4.16.bb
@@ -120,6 +120,7 @@ SRC_URI += " \
 	   file://0001-system.h-query.c-support-nosignature.patch \
 	   file://rpm-ensure-rpm2cpio-call-rpm-relocation-code.patch \
 	   file://0001-macros-add-_gpg_sign_cmd_extra_args.patch \
+	   file://rpm-fix-failure-to-report-file-conflicts.patch \
 "
 
 # OE specific changes
-- 
2.13.6




More information about the Openembedded-core mailing list