python-smartpm: add support for recommends

Implement support within Smart for handling RRECOMMENDS relationships
between RPM packages as used by OE. This includes support within the
base system for caching and resolving these relationships as well as
specific support in the RPM backend for reading the information from
packages, and reading the "missingok" flag added to createrepo for
rpm-md feeds.

(From OE-Core rev: 35e3bc90ec3bae824804bd176b3128efdb5b4e2b)

Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
Signed-off-by: Saul Wold <sgw@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Paul Eggleton
2012-11-14 18:46:56 +00:00
committed by Richard Purdie
parent 5443525de8
commit 69b9c6bd0c
3 changed files with 1363 additions and 44 deletions

View File

@@ -1,43 +0,0 @@
backends/rpm: Identify recommended packages
We identify and store recommended packages (and later throw that data away.)
This is indended to be the starting work to add support for recommended
packages to smart.
Upstream-status: Inappropriate [ Code isn't finished! ]
Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
Index: smart-1.4.1/smart/backends/rpm/header.py
===================================================================
--- smart-1.4.1.orig/smart/backends/rpm/header.py
+++ smart-1.4.1/smart/backends/rpm/header.py
@@ -292,6 +292,7 @@ class RPMHeaderLoader(Loader):
f = [0]
elif type(f) != list:
f = [f]
+ recdict = {}
reqdict = {}
for i in range(len(n)):
ni = n[i]
@@ -308,10 +309,17 @@ class RPMHeaderLoader(Loader):
# RPMSENSE_SCRIPT_PREUN |
# RPMSENSE_SCRIPT_POST |
# RPMSENSE_SCRIPT_POSTUN == 7744
- reqdict[(f[i]&7744 and PreReq or Req,
- intern(ni), r, vi)] = True
+ if (f[i]&rpm.RPMSENSE_MISSINGOK):
+ print "Ignoring Recommend Dependency: %s" % (ni)
+ recdict[(f[i]&7744 and PreReq or Req,
+ intern(ni), r, vi)] = True
+ else:
+ reqdict[(f[i]&7744 and PreReq or Req,
+ intern(ni), r, vi)] = True
+ recargs = collapse_libc_requires(recdict.keys())
reqargs = collapse_libc_requires(reqdict.keys())
else:
+ recargs = None
reqargs = None
n = h[1054] # RPMTAG_CONFLICTNAME

File diff suppressed because it is too large Load Diff