mirror of
https://github.com/lilydjwg/archrepo2.git
synced 2025-03-10 12:02:43 +00:00
module to read package info
This commit is contained in:
parent
ee21aec66a
commit
c8784cc886
2 changed files with 55 additions and 0 deletions
44
pkgreader.py
Normal file
44
pkgreader.py
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
import tarfile
|
||||||
|
import logging
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
multikeys = {'depend', 'makepkgopt', 'optdepend', 'replaces', 'conflict',
|
||||||
|
'provides', 'license', 'backup', 'group'}
|
||||||
|
|
||||||
|
def _add_to_dict(d, key, value):
|
||||||
|
if key in multikeys:
|
||||||
|
if key in d:
|
||||||
|
d[key].append(value)
|
||||||
|
else:
|
||||||
|
d[key] = [value]
|
||||||
|
else:
|
||||||
|
assert key not in d, 'unexpected multi-value key "%s"' % key
|
||||||
|
d[key] = value
|
||||||
|
|
||||||
|
def readpkg(file):
|
||||||
|
tar = tarfile.open(file)
|
||||||
|
info = tar.next()
|
||||||
|
if not info or info.name != '.PKGINFO':
|
||||||
|
logger.warn('%s is not a nice package!', file)
|
||||||
|
info = '.PKGINFO' # have to look further
|
||||||
|
f = tar.extractfile(info)
|
||||||
|
data = f.read().decode()
|
||||||
|
tar.close()
|
||||||
|
|
||||||
|
d = {}
|
||||||
|
key = None
|
||||||
|
for l in data.split('\n'):
|
||||||
|
if l.startswith('#'):
|
||||||
|
continue
|
||||||
|
if not l:
|
||||||
|
continue
|
||||||
|
if '=' not in l:
|
||||||
|
value += l
|
||||||
|
else:
|
||||||
|
if key is not None:
|
||||||
|
_add_to_dict(d, key, value)
|
||||||
|
key, value = l.split(' = ', 1)
|
||||||
|
_add_to_dict(d, key, value)
|
||||||
|
|
||||||
|
return d
|
11
test_readpkg.py
Executable file
11
test_readpkg.py
Executable file
|
@ -0,0 +1,11 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
# vim:fileencoding=utf-8
|
||||||
|
|
||||||
|
from subprocess import getoutput
|
||||||
|
allpkgs = getoutput(r"locate -be --regex '\.pkg\.tar\.xz$'").split('\n')
|
||||||
|
|
||||||
|
from pkgreader import readpkg
|
||||||
|
for p in allpkgs:
|
||||||
|
print('reading package:', p)
|
||||||
|
d = readpkg(p)
|
||||||
|
print('desc:', d.get('pkgdesc', '(nothing)'))
|
Loading…
Add table
Reference in a new issue