diff options
author | Elan Ruusamäe | 2015-11-03 21:48:27 (GMT) |
---|---|---|
committer | Elan Ruusamäe | 2015-11-03 21:49:21 (GMT) |
commit | 28c1c9e596748c147b0720de148647fc2f85c280 (patch) | |
tree | 9a30d510b9a16021b502b4961601fcf61d5b6518 | |
parent | 1ad5b935b2447ace56e79dd7ccafbe6ab16d8648 (diff) | |
download | pldnotify-28c1c9e596748c147b0720de148647fc2f85c280.zip pldnotify-28c1c9e596748c147b0720de148647fc2f85c280.tar.gz |
add specparser to parse out macros
-rwxr-xr-x | pldnotify.py | 44 |
1 files changed, 38 insertions, 6 deletions
diff --git a/pldnotify.py b/pldnotify.py index daecd33..3dbbd8a 100755 --- a/pldnotify.py +++ b/pldnotify.py @@ -1,15 +1,47 @@ #!/usr/bin/python import argparse -import collections -import os import rpm -import shlex -import subprocess import sys +""" +RPM Spec parser +""" +class RPMSpec: + def __init__(self, specfile): + self._specfile = specfile + self._spec = None + self._macros = None + + def getSpec(self): + if not self._spec: + ts = rpm.TransactionSet() + self._spec = ts.parseSpec(self._specfile) + + return self._spec + + def macros(self): + if not self._macros: + s = self.getSpec() + macros = {} + for key, macro in s.macros().items(): + # skip functions + if 'opts' in macro: + continue + # skip unused macros + if macro['used'] <= 0: + continue + macros[key] = macro['body'] + self._macros = macros + + return self._macros + def check_package(package): - print package + s = RPMSpec(package) + macros = s.macros() + name = macros['name'] + version = macros['version'] + print "%s: %s" % (name, version) def main(): parser = argparse.ArgumentParser(description='PLD-Notify: project to monitor upstream releases.') @@ -19,7 +51,7 @@ def main(): parser.add_argument('package', type=str, help='Package to check') - + args = parser.parse_args() check_package(args.package) |