summaryrefslogtreecommitdiff
path: root/bin/check_la
diff options
context:
space:
mode:
Diffstat (limited to 'bin/check_la')
-rwxr-xr-xbin/check_la66
1 files changed, 66 insertions, 0 deletions
diff --git a/bin/check_la b/bin/check_la
new file mode 100755
index 0000000..0ab6db7
--- /dev/null
+++ b/bin/check_la
@@ -0,0 +1,66 @@
+#!/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", "kogaionlinux.ro")
+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)