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 - [email protected]
+
+- add selfconflicts.diff: fix self-conflicts and self-obsoletes
+  handling for verify operations [bnc#838133]
+
+-------------------------------------------------------------------
+Tue Sep 24 10:36:15 UTC 2013 - [email protected]
+
+- 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 - [email protected]
+
+- 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 <[email protected]>
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: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to