[Rpm-maint] PATCH: Accessing file and policy lists from python (and C)
leamas.alec at gmail.com
Fri Sep 21 17:13:51 UTC 2012
On 09/21/2012 01:42 PM, Panu Matilainen wrote:
> On 09/21/2012 01:59 PM, Alec Leamas wrote:
>> On 09/21/2012 07:02 AM, Panu Matilainen wrote:
>>> On 09/15/2012 05:47 PM, Alec Leamas wrote:
>>>> When rpm-build parses the specfile, it also parses the file list and
>>>> (nowadays?) also the policy. These are stored in specPackage objects
>>>> attached to the spec. However, these items are not visible on the
>>>> rpm.specPkg interface, neither from C nor from python.
>>>> Is there a particular reason these items aren't visible?
>>> It's simply because access to the flat, unpopulated file list doesn't
>>> seem useful at all to me, and not exposing something means not having
>>> to commit to an interface for it.
>>>> I have som pronlems with this related to the fedora-review tool ,
>>>> which basically forces us to use some hand-crafted specfile parsing ,
>>>> since the file lists are needed. I would certainly prefer using
>>>> own parsing for that. However, then external access to the fields
>>>> fileList, fileFile and policyList is needed. The enclosed patch
>>> I'm curious: what exactly are you doing / planning to do with the file
>> [cut, lot's of]
>> It's fedora-review... we are reviewing the packages, comparing the
>> raw, unexpanded list with various guidelines sections.
> I guessed that much, but what kinds of things exactly? I'm mostly just
> curious, but also wanting to see if there's something that rpm could
> help with.
Just an example, a snippet from current tests below. There are more of
these, but I doubt it makes sense to paste it here.
Yes, this is released code. But the I would very much prefer to use
rpm's parsing instead of the hand-crafted parser used today.
self.url = 'http://fedoraproject.org/wiki/' \
self.text = '%config files are marked noreplace or the reason' \
' is justified.'
self.automatic = True
self.type = 'MUST'
rc = self.NA
extra = ''
for pkg in self.spec.packages():
for line in self.spec.get_files(pkg):
if not line.startswith('%config(noreplace)'):
extra += line
rc = self.PASS
self.set_passed(self.FAIL if extra else rc, extra)
More information about the Rpm-maint