--- Pkg.py +++ Pkg.py @@ -176,6 +176,10 @@ class Pkg: self._missing_ok_files=None self._files=None self._requires=None + self._suggests=None + self._supplements=None + self._enhances=None + self._recommends=None self._req_names=-1 if header: @@ -414,6 +418,22 @@ class Pkg: self._gatherDepInfo() return self._requires + def recommends(self): + self._gatherDepInfo() + return self._recommends + + def suggests(self): + self._gatherDepInfo() + return self._suggests + + def supplements(self): + self._gatherDepInfo() + return self._supplements + + def enhances(self): + self._gatherDepInfo() + return self._enhances + def prereq(self): self._gatherDepInfo() return self._prereq @@ -453,7 +473,8 @@ class Pkg: return self._provides # internal function to gather dependency info used by the above ones - def _gather_aux(self, header, list, nametag, versiontag, flagstag, prereq=None): + def _gather_aux(self, header, list, nametag, versiontag, flagstag, + prereq=None,strong_only=False,weak_only=False): names = header[nametag] versions = header[versiontag] flags = header[flagstag] @@ -462,10 +483,15 @@ class Pkg: # workaroung buggy rpm python module that doesn't return a list if type(flags) != types.ListType: flags=[flags] + for loop in range(len(versions)): if prereq != None and flags[loop] & PREREQ_FLAG: prereq.append((names[loop], versions[loop], flags[loop] & (~PREREQ_FLAG))) - else: + elif strong_only and flags[loop] & rpm.RPMSENSE_STRONG: + list.append((names[loop], versions[loop], flags[loop] & (~rpm.RPMSENSE_STRONG))) + elif weak_only and not (flags[loop] & rpm.RPMSENSE_STRONG): + list.append((names[loop], versions[loop], flags[loop])) + elif not (weak_only or strong_only): list.append((names[loop], versions[loop], flags[loop])) def _gatherDepInfo(self): @@ -475,6 +501,10 @@ class Pkg: self._provides = [] self._conflicts = [] self._obsoletes = [] + self._suggests = [] + self._supplements = [] + self._enhances = [] + self._recommends = [] self._gather_aux(self.header, self._requires, rpm.RPMTAG_REQUIRENAME, @@ -493,6 +523,27 @@ class Pkg: rpm.RPMTAG_OBSOLETENAME, rpm.RPMTAG_OBSOLETEVERSION, rpm.RPMTAG_OBSOLETEFLAGS) + try: + self._gather_aux(self.header, self._recommends, + rpm.RPMTAG_SUGGESTSNAME, + rpm.RPMTAG_SUGGESTSVERSION, + rpm.RPMTAG_SUGGESTSFLAGS, strong_only=True) + self._gather_aux(self.header, self._suggests, + rpm.RPMTAG_SUGGESTSNAME, + rpm.RPMTAG_SUGGESTSVERSION, + rpm.RPMTAG_SUGGESTSFLAGS, weak_only=True) + self._gather_aux(self.header, self._enhances, + rpm.RPMTAG_ENHANCESNAME, + rpm.RPMTAG_ENHANCESVERSION, + rpm.RPMTAG_ENHANCESFLAGS, weak_only=True) + self._gather_aux(self.header, self._supplements, + rpm.RPMTAG_ENHANCESNAME, + rpm.RPMTAG_ENHANCESVERSION, + rpm.RPMTAG_ENHANCESFLAGS, strong_only=True) + + except: + pass + def getInstalledPkgs(name): """Get list of installed package objects by name."""