summaryrefslogtreecommitdiff
path: root/clean_repo.py
diff options
context:
space:
mode:
Diffstat (limited to 'clean_repo.py')
-rwxr-xr-xclean_repo.py99
1 files changed, 99 insertions, 0 deletions
diff --git a/clean_repo.py b/clean_repo.py
new file mode 100755
index 0000000..cc8e811
--- /dev/null
+++ b/clean_repo.py
@@ -0,0 +1,99 @@
+#! /usr/bin/python
+#-*- encoding: utf-8 -*-
+from repm.filter import *
+import argparse
+
+def mkpending(packages_iterable, pending_file, blacklisted_names,
+ whitelisted_names):
+ """ Determine wich packages are pending for license auditing."""
+ search = tuple(blacklisted_names +
+ whitelisted_names)
+
+ try:
+ fsock=open(pending_file, "r")
+ pkgs=[pkg for pkg in packages_iterable
+ if pkg["name"] not in listado(pending_file)]
+ for line in fsock.readlines():
+ if line:
+ pkg=Package()
+ pkg["name"]=line.split(":")[0]
+ pkg["license"]=":".join(line.split(":")[1:])
+ pkgs.append(pkg)
+ pkgs=[pkg for pkg in pkgs if pkg["name"] not in search
+ and "custom" in pkg["license"]]
+ fsock=open(pending_file, "w")
+ fsock.write("\n".join([pkg["name"] + ":" + pkg["location"] +
+ ":" + pkg["license"]
+ for pkg in pkgs]) + "\n")
+ fsock.close()
+ except(IOError):
+ printf("Can't read or write %s" % pending_file)
+ return pkgs
+
+def remove_from_blacklist(path_to_db, blacklisted_names):
+ """ Check the blacklist and remove packages on the db"""
+ if "~" in path_to_db:
+ path_to_db=(os.path.expanduser(path_to_db))
+
+ pkgs=[pkg for pkg in pkginfo_from_db(path_to_db) if
+ pkg["name"] in blacklisted_names]
+ if pkgs:
+ lista=" ".join(pkgs)
+ cmd = "repo-remove " + path_to_db + " " + lista
+ printf(cmd)
+ a = check_output(cmd)
+ return pkgs
+
+def cleanup_nonfree_in_dir(directory, blacklisted_names):
+ if "~" in directory:
+ directory=(os.path.expanduser(directory))
+ pkglist=list()
+ pkgs=pkginfo_from_files_in_dir(directory)
+ for package in pkgs:
+ if package["name"] in blacklisted_names:
+ os.remove(package["location"])
+ pkglist.append(package)
+ return pkglist
+
+if __name__ == "__main__":
+ parser = argparse.ArgumentParser(
+ prog="clean_repo",
+ description="Clean a repo db and packages",)
+
+ parser.add_argument("-k", "--blacklist-file", type=str,
+ help="File containing blacklisted names",
+ required=True,)
+
+ group_dir=parser.add_argument_group("Clean non-free packages in dir")
+ group_dir.add_argument("-d", "--directory", type=str,
+ help="directory to clean")
+
+ group_db=parser.add_argument_group("Clean non-free packages in db",
+ "All these arguments need to be specified for db cleaning:")
+ group_db.add_argument("-b", "--database", type=str,
+ help="dabatase to clean")
+ group_db.add_argument("-p", "--pending-file", type=str,
+ help="File in which to write pending list")
+ group_db.add_argument("-w", "--whitelist-file", type=str,
+ help="File containing whitelisted names")
+
+ args=parser.parse_args()
+
+ if args.database and not (args.pending_file and args.whitelist_file):
+ parser.print_help()
+ exit(1)
+
+ blacklisted=listado(args.blacklist_file)
+
+ if args.database:
+ whitelisted=listado(args.whitelist_file)
+ pkgs=pkginfo_from_db(args.database)
+ pending_names=[pkg["name"] for pkg in
+ mkpending(pkgs, args.pending_file,
+ blacklisted, whitelisted)]
+
+ if args.directory and args.database:
+ cleanup_nonfree_in_dir(args.directory, (blacklisted + pending_names))
+ elif args.directory:
+ cleanup_nonfree_in_dir(args.directory, blacklisted)
+