67 lines
1.8 KiB
Python
Executable File
67 lines
1.8 KiB
Python
Executable File
#!/usr/bin/python2
|
|
import sys
|
|
|
|
la_patterns = sys.argv[1:]
|
|
if not la_patterns:
|
|
print sys.argv[0], "<.la files patterns>"
|
|
raise SystemExit(1)
|
|
|
|
import os
|
|
import re
|
|
import tempfile
|
|
import shutil
|
|
from entropy.server.interfaces import Server
|
|
import entropy.tools
|
|
|
|
la_compiled_patterns = dict((x, re.compile(x)) for x in la_patterns)
|
|
print la_compiled_patterns
|
|
|
|
repo_id = os.getenv("ETP_REPO", "sabayonlinux.org")
|
|
srv = Server()
|
|
dbconn = srv.open_repository(repo_id)
|
|
pkg_ids = dbconn.listAllIdpackages(order_by="atom")
|
|
for pkg_id in pkg_ids:
|
|
# get pkg path
|
|
pkg_path = srv._get_package_path(repo_id, dbconn, pkg_id)
|
|
if not os.path.isfile(pkg_path):
|
|
print "WTF, not a package file =>", pkg_path
|
|
continue
|
|
# now extract
|
|
tmp_dir = tempfile.mkdtemp()
|
|
rc = entropy.tools.uncompress_tarball(pkg_path, extract_path = tmp_dir,
|
|
catch_empty = True)
|
|
if rc != 0:
|
|
print "WTF, cannot extract file", pkg_path, "at dir", tmp_dir
|
|
continue
|
|
|
|
|
|
la_paths = []
|
|
for cur_dir, subdirs, files in os.walk(tmp_dir):
|
|
for file in files:
|
|
path = os.path.join(cur_dir, file)
|
|
if path.endswith(".la") and os.path.isfile(path) and os.access(path, os.R_OK):
|
|
la_paths.append(path)
|
|
|
|
if not la_paths:
|
|
continue
|
|
|
|
# print "pkg:", dbconn.retrieveAtom(pkg_id), "la:", la_paths
|
|
found = False
|
|
for la_path in la_paths:
|
|
# apply regexps
|
|
la_f = open(la_path, "r")
|
|
la_content = la_f.read()
|
|
la_f.close()
|
|
for la_pattern, cm_pattern in la_compiled_patterns.items():
|
|
if cm_pattern.search(la_content):
|
|
found = True
|
|
break
|
|
if found:
|
|
print dbconn.retrieveKeySlotAggregated(pkg_id)
|
|
break
|
|
|
|
shutil.rmtree(tmp_dir, True)
|
|
|
|
srv.shutdown()
|
|
raise SystemExit(0)
|