Hello community, here is the log from the commit of package rpm for openSUSE:13.1 checked in at 2013-09-27 19:48:38 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:13.1/rpm (Old) and /work/SRC/openSUSE:13.1/.rpm.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Package is "rpm" Changes: -------- rpm-python.changes: same change --- /work/SRC/openSUSE:13.1/rpm/rpm.changes 2013-09-23 11:08:03.000000000 +0200 +++ /work/SRC/openSUSE:13.1/.rpm.new/rpm.changes 2013-09-27 19:48:41.000000000 +0200 @@ -1,0 +2,19 @@ +Fri Sep 27 15:13:45 CEST 2013 - mls@suse.de + +- add selfconflicts.diff: fix self-conflicts and self-obsoletes + handling for verify operations [bnc#838133] + +------------------------------------------------------------------- +Tue Sep 24 10:36:15 UTC 2013 - mail@bernhard-voelker.de + +- replace obsoleted "find -perm +NNN" syntax [bnc#842004] + to "-perm /NNN" in debugsource-package.diff and + finddebuginfo.diff. + +------------------------------------------------------------------- +Wed Sep 11 18:28:39 CEST 2013 - mls@suse.de + +- fix two bugs in the rpmstrPoolRehash() function: + adding strpoolrehash.diff and ignore_poolstr_dummy_entries.diff + +------------------------------------------------------------------- New: ---- ignore_poolstr_dummy_entries.diff selfconflicts.diff strpoolrehash.diff ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ rpm-python.spec: same change ++++++ rpm.spec ++++++ --- /var/tmp/diff_new_pack.oEYm9R/_old 2013-09-27 19:48:42.000000000 +0200 +++ /var/tmp/diff_new_pack.oEYm9R/_new 2013-09-27 19:48:42.000000000 +0200 @@ -137,6 +137,9 @@ Patch83: debug_gdb_scripts.diff Patch84: beedigest.diff Patch85: brp-compress-no-img.patch +Patch86: strpoolrehash.diff +Patch87: ignore_poolstr_dummy_entries.diff +Patch88: selfconflicts.diff Patch6464: auto-config-update-aarch64.diff BuildRoot: %{_tmppath}/%{name}-%{version}-build # @@ -223,7 +226,7 @@ %patch -P 50 -P 51 -P 52 -P 53 -P 54 -P 55 -P 56 -P 57 -P 58 -P 59 %patch -P 60 -P 61 -P 62 -P 63 -P 64 -P 65 -P 66 -P 67 -P 68 -P 69 %patch -P 70 -P 71 -P 72 -P 73 -P 74 -P 75 -P 76 -P 77 -P 78 -P 79 -%patch -P 80 -P 81 -P 82 -P 83 -P 84 -P 85 +%patch -P 80 -P 81 -P 82 -P 83 -P 84 -P 85 -P 86 -P 87 -P 88 %ifarch aarch64 %patch6464 %endif ++++++ debugsource-package.diff ++++++ --- /var/tmp/diff_new_pack.oEYm9R/_old 2013-09-27 19:48:42.000000000 +0200 +++ /var/tmp/diff_new_pack.oEYm9R/_new 2013-09-27 19:48:42.000000000 +0200 @@ -31,9 +31,9 @@ $strict || strict_error=WARNING -# Strip ELF binaries --find $RPM_BUILD_ROOT ! -path "${debugdir}/*.debug" -type f \( -perm +111 -or -name "*.so*" -or -name "*.ko" \) -print 0 | sort -z | +-find $RPM_BUILD_ROOT ! -path "${debugdir}/*.debug" -type f \( -perm /111 -or -name "*.so*" -or -name "*.ko" \) -print 0 | sort -z | +# Strip ELF binaries (and no static libraries) -+find $RPM_BUILD_ROOT ! -path "${debugdir}/*.debug" -type f \( -perm +111 -or -name "*.so*" -or -name "*.ko" \) ! -name "*.a" -print0 | sort -z | ++find $RPM_BUILD_ROOT ! -path "${debugdir}/*.debug" -type f \( -perm /111 -or -name "*.so*" -or -name "*.ko" \) ! -name "*.a" -print0 | sort -z | xargs --no-run-if-empty -0 stat -c '%h %D_%i %n' | while read nlinks inum f; do case $(objdump -h $f 2>/dev/null | egrep -o '(debug[\.a-z_]*|gnu.version)') in ++++++ finddebuginfo.diff ++++++ --- /var/tmp/diff_new_pack.oEYm9R/_old 2013-09-27 19:48:42.000000000 +0200 +++ /var/tmp/diff_new_pack.oEYm9R/_new 2013-09-27 19:48:42.000000000 +0200 @@ -39,7 +39,7 @@ - -print | -file -N -f - | sed -n -e 's/^\(.*\):[ ]*.*ELF.*, not stripped/\1/p' | -xargs --no-run-if-empty stat -c '%h %D_%i %n' | -+find $RPM_BUILD_ROOT ! -path "${debugdir}/*.debug" -type f \( -perm +111 -or -name "*.so*" -or -name "*.ko" \) -print 0 | sort -z | ++find $RPM_BUILD_ROOT ! -path "${debugdir}/*.debug" -type f \( -perm /111 -or -name "*.so*" -or -name "*.ko" \) -print 0 | sort -z | +xargs --no-run-if-empty -0 stat -c '%h %D_%i %n' | while read nlinks inum f; do + case $(objdump -h $f 2>/dev/null | egrep -o '(debug[\.a-z_]*|gnu.version)') in ++++++ ignore_poolstr_dummy_entries.diff ++++++ --- build/rpmfc.c.orig 2013-09-11 17:13:39.165560997 +0000 +++ build/rpmfc.c 2013-09-11 17:13:52.171560974 +0000 @@ -848,6 +848,8 @@ rpmRC rpmfcApply(rpmfc fc) previx = -1; for (rpmsid id = 1; id <= nddict; id++) { s = rpmstrPoolStr(fc->ddict, id); + if (!s || !*s) + continue; /* Parse out (file#,deptype,N,EVR,Flags) */ ix = strtol(s, &se, 10); ++++++ selfconflicts.diff ++++++
From fae0eef24582dd9e071be8e884ff0851d4b57437 Mon Sep 17 00:00:00 2001 From: Michael Schroeder
Date: Fri, 27 Sep 2013 15:09:20 +0200 Subject: [PATCH] Ignore self-obsoletes and self-conflicts in dependency check code
We already ignored them when checking against the added package list, but not when checking against installed packages. Thus, rpm -V reported them as errors. --- lib/depends.c | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git lib/depends.c lib/depends.c index 3d70e68..3ef27bc 100644 --- lib/depends.c +++ lib/depends.c @@ -504,6 +504,12 @@ static int rpmdbProvides(rpmts ts, depCache dcache, rpmds dep) if (deptag != RPMTAG_OBSOLETENAME && Name[0] == '/') { mi = rpmtsPrunedIterator(ts, RPMDBI_INSTFILENAMES, Name, prune); while ((h = rpmdbNextIterator(mi)) != NULL) { + /* Ignore self-conflicts */ + if (deptag == RPMTAG_CONFLICTNAME) { + unsigned int instance = headerGetInstance(h); + if (instance && instance == rpmdsInstance(dep)) + continue; + } rpmdsNotify(dep, "(db files)", rc); break; } @@ -527,6 +533,12 @@ static int rpmdbProvides(rpmts ts, depCache dcache, rpmds dep) int prix = (selfevr) ? -1 : rpmdbGetIteratorFileNum(mi); int match = rpmdsMatches(tspool, h, prix, dep, selfevr, _rpmds_nopromote); + /* Ignore self-obsoletes and self-conflicts */ + if (match && (deptag == RPMTAG_OBSOLETENAME || deptag == RPMTAG_CONFLICTNAME)) { + unsigned int instance = headerGetInstance(h); + if (instance && instance == rpmdsInstance(dep)) + match = 0; + } if (match) { rpmdsNotify(dep, "(db provides)", rc); break; @@ -672,8 +684,18 @@ static void checkInstDeps(rpmts ts, depCache dcache, rpmte te, rpmstrPool pool = rpmtsPool(ts); while ((h = rpmdbNextIterator(mi)) != NULL) { - char * pkgNEVRA = headerGetAsString(h, RPMTAG_NEVRA); - rpmds ds = rpmdsNewPool(pool, h, depTag, 0); + char * pkgNEVRA; + rpmds ds; + + /* Ignore self-obsoletes and self-conflicts */ + if (depTag == RPMTAG_OBSOLETENAME || depTag == RPMTAG_CONFLICTNAME) { + unsigned int instance = headerGetInstance(h); + if (instance && instance == rpmteDBInstance(te)) + continue; + } + + pkgNEVRA = headerGetAsString(h, RPMTAG_NEVRA); + ds = rpmdsNewPool(pool, h, depTag, 0); checkDS(ts, dcache, te, pkgNEVRA, ds, dep, 0); -- 1.8.1.4 ++++++ strpoolrehash.diff ++++++ --- rpmio/rpmstrpool.c.orig 2013-09-11 15:33:48.371571600 +0000 +++ rpmio/rpmstrpool.c 2013-09-11 16:20:56.106566595 +0000 @@ -219,8 +219,17 @@ static void rpmstrPoolRehash(rpmstrPool pool->hash = poolHashFree(pool->hash); pool->hash = poolHashCreate(sizehint); - for (int i = 1; i < pool->offs_size; i++) - poolHashAddEntry(pool, rpmstrPoolStr(pool, i), i); + for (int i = 1; i <= pool->offs_size; i++) { + /* this is a little bit tricky because we have to skip the dummy + * entries that are at the end of each chunk */ + const char * str = rpmstrPoolStr(pool, i); + if (str[0] == 0 && i < pool->offs_size) { + /* looks like a dummy entry, check if next str is in a different chunk */ + if (rpmstrPoolStr(pool, i + 1) != str + 1) + continue; + } + poolHashAddEntry(pool, str, i); + } } rpmstrPool rpmstrPoolCreate(void) @@ -308,7 +317,8 @@ static rpmsid rpmstrPoolPut(rpmstrPool p } chunk_used = pool->offs[pool->offs_size] - pool->chunks[pool->chunks_size]; - if (ssize + 1 > pool->chunk_allocated - chunk_used) { + /* +2: extra trailing zero + extra byte */ + if (ssize + 2 > pool->chunk_allocated - chunk_used) { /* check size of ->chunks */ pool->chunks_size += 1; if (pool->chunks_size >= pool->chunks_allocated) { @@ -318,11 +328,12 @@ static rpmsid rpmstrPoolPut(rpmstrPool p } /* Check if string is bigger than chunks */ - if (ssize > pool->chunk_allocated) { - pool->chunk_allocated = 2 * ssize; + if (ssize + 2 > pool->chunk_allocated) { + pool->chunk_allocated = 2 * ssize + 2; } /* Dummy entry for end of last string*/ + pool->offs[pool->offs_size][0] = 0; pool->offs_size += 1; pool->offs[pool->offs_size] = xcalloc(1, pool->chunk_allocated); -- To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-commit+help@opensuse.org
participants (1)
-
root@hilbert.suse.de